| 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*
|
|
|