Index: extensions/browser/guest_view/guest_view_message_filter.cc |
diff --git a/extensions/browser/guest_view/guest_view_message_filter.cc b/extensions/browser/guest_view/guest_view_message_filter.cc |
index 0052674555dd2df23bf1e85500cca872f5315b85..e3be9763a0a04e0b8b7425c4d6a20d35775fb524 100644 |
--- a/extensions/browser/guest_view/guest_view_message_filter.cc |
+++ b/extensions/browser/guest_view/guest_view_message_filter.cc |
@@ -11,6 +11,7 @@ |
#include "extensions/browser/guest_view/guest_view_manager.h" |
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_constants.h" |
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" |
+#include "extensions/browser/guest_view/web_view/web_view_guest.h" |
#include "extensions/common/guest_view/guest_view_messages.h" |
#include "ipc/ipc_message_macros.h" |
@@ -40,6 +41,7 @@ void GuestViewMessageFilter::OverrideThreadForMessage( |
switch (message.type()) { |
case GuestViewHostMsg_AttachGuest::ID: |
case GuestViewHostMsg_CreateMimeHandlerViewGuest::ID: |
+ case GuestViewHostMsg_AttachLocalFrameToGuest::ID: |
*thread = BrowserThread::UI; |
break; |
default: |
@@ -59,6 +61,8 @@ bool GuestViewMessageFilter::OnMessageReceived(const IPC::Message& message) { |
IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachGuest, OnAttachGuest) |
IPC_MESSAGE_HANDLER(GuestViewHostMsg_CreateMimeHandlerViewGuest, |
OnCreateMimeHandlerViewGuest) |
+ IPC_MESSAGE_HANDLER(GuestViewHostMsg_AttachLocalFrameToGuest, |
+ OnAttachLocalFrameToGuest) |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
return handled; |
@@ -112,6 +116,31 @@ void GuestViewMessageFilter::OnCreateMimeHandlerViewGuest( |
callback); |
} |
+void GuestViewMessageFilter::OnAttachLocalFrameToGuest( |
+ int embedder_local_render_frame_id, |
+ int element_instance_id, |
+ int guest_instance_id) { |
+ auto guest_manager = GuestViewManager::FromBrowserContext(browser_context_); |
+ DCHECK(guest_manager); |
+ content::WebContents* guest_web_contents = |
+ guest_manager->GetGuestByInstanceIDHack(guest_instance_id); |
Fady Samuel
2015/03/04 20:44:47
Why are you exposing this? This is a security issu
lazyboy
2015/04/01 21:47:58
This is temporary and will be fixed.
|
+ DCHECK(guest_web_contents); |
+ auto guest = WebViewGuest::FromWebContents(guest_web_contents); |
+ DCHECK(guest); |
+ content::WebContents* owner_web_contents = guest->owner_web_contents(); |
+ DCHECK(owner_web_contents); |
+ int render_view_proxy_routing_id = |
+ guest_web_contents->AttachLocalFrameToGuest( |
+ owner_web_contents, |
+ embedder_local_render_frame_id, |
+ guest_instance_id); |
+ |
+ owner_web_contents->GetMainFrame()->Send( |
+ new GuestViewMsg_ContentWindowReady( |
+ element_instance_id, |
+ render_view_proxy_routing_id)); |
+} |
+ |
void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback( |
int element_instance_id, |
int embedder_render_process_id, |