Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1840)

Unified Diff: chrome/browser/guest_view/chrome_guest_view_message_filter.cc

Issue 1531533002: wjm day 2 work (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/guest_view/chrome_guest_view_message_filter.h ('k') | components/framelet/browser/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/guest_view/chrome_guest_view_message_filter.cc
diff --git a/chrome/browser/guest_view/chrome_guest_view_message_filter.cc b/chrome/browser/guest_view/chrome_guest_view_message_filter.cc
index 378beea4347da7adade867d0fbbc4f3059e92e03..9d33f088b4b1a823f9453ba876d6b758bdda4973 100644
--- a/chrome/browser/guest_view/chrome_guest_view_message_filter.cc
+++ b/chrome/browser/guest_view/chrome_guest_view_message_filter.cc
@@ -5,8 +5,16 @@
#include "chrome/browser/guest_view/chrome_guest_view_message_filter.h"
#include "chrome/browser/guest_view/chrome_guest_view_manager_delegate.h"
+#include "components/framelet/browser/framelet_guest.h"
+#include "components/framelet/common/framelet_constants.h"
+#include "components/framelet/common/framelet_messages.h"
#include "components/guest_view/browser/guest_view_manager.h"
+#include "components/guest_view/common/guest_view_constants.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_message_start.h"
+#include "ui/gfx/geometry/size.h"
namespace chrome {
@@ -43,8 +51,79 @@ void ChromeGuestViewMessageFilter::OverrideThreadForMessage(
bool ChromeGuestViewMessageFilter::OnMessageReceived(
const IPC::Message& message) {
- // TODO(fsamuel): Receive Chrome specific IPCs here.
- return GuestViewMessageFilterBase::OnMessageReceived(message);
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(ChromeGuestViewMessageFilter, message);
+ IPC_MESSAGE_HANDLER(FrameletGuestViewHostMsg_CreateFrameletGuest,
+ OnCreateFrameletGuest);
+ IPC_MESSAGE_UNHANDLED(
+ handled = GuestViewMessageFilterBase::OnMessageReceived(message));
+ IPC_END_MESSAGE_MAP();
+ return handled;
+}
+
+void ChromeGuestViewMessageFilter::OnCreateFrameletGuest(
+ int render_frame_id,
+ const std::string& view_id,
+ int element_instance_id,
+ const gfx::Size& element_size) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ auto manager = GetOrCreateGuestViewManager();
+
+ auto rfh =
+ content::RenderFrameHost::FromID(render_process_id_, render_frame_id);
+ auto embedder_web_contents = content::WebContents::FromRenderFrameHost(rfh);
+ if (!embedder_web_contents)
+ return;
+
+ guest_view::GuestViewManager::WebContentsCreatedCallback callback =
+ base::Bind(
+ &ChromeGuestViewMessageFilter::
+ FrameletGuestCreatedCallback,
+ this,
+ element_instance_id,
+ render_process_id_,
+ render_frame_id,
+ element_size);
+
+ base::DictionaryValue create_params;
+ create_params.SetString(framelet::kViewId, view_id);
+ create_params.SetInteger(guest_view::kElementWidth, element_size.width());
+ create_params.SetInteger(guest_view::kElementHeight, element_size.height());
+ manager->CreateGuest(guest_view::FrameletGuest::Type,
+ embedder_web_contents,
+ create_params,
+ callback);
+}
+
+void ChromeGuestViewMessageFilter::FrameletGuestCreatedCallback(
+ int element_instance_id,
+ int embedder_render_process_id,
+ int embedder_render_frame_id,
+ const gfx::Size& element_size,
+ content::WebContents* web_contents) {
+ auto guest_view = guest_view::FrameletGuest::FromWebContents(web_contents);
+ if (!guest_view)
+ return;
+
+ int guest_instance_id = guest_view->guest_instance_id();
+ auto rfh = content::RenderFrameHost::FromID(embedder_render_process_id,
+ embedder_render_frame_id);
+ if (!rfh)
+ return;
+
+ base::DictionaryValue attach_params;
+ attach_params.SetInteger(guest_view::kElementWidth, element_size.width());
+ attach_params.SetInteger(guest_view::kElementHeight, element_size.height());
+ auto manager =
+ guest_view::GuestViewManager::FromBrowserContext(browser_context_);
+ CHECK(manager);
+ manager->AttachGuest(embedder_render_process_id,
+ element_instance_id,
+ guest_instance_id,
+ attach_params);
+
+ rfh->Send(
+ new FrameletGuestViewMsg_CreateFrameletGuestACK(element_instance_id));
}
guest_view::GuestViewManager*
« no previous file with comments | « chrome/browser/guest_view/chrome_guest_view_message_filter.h ('k') | components/framelet/browser/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698