Index: extensions/browser/extension_message_filter.cc |
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc |
index 7529fd02ae427d8c51390618bc958af7af1a5fe6..ab24809253b0160fbdd16a160878bafbf0dcccfb 100644 |
--- a/extensions/browser/extension_message_filter.cc |
+++ b/extensions/browser/extension_message_filter.cc |
@@ -6,13 +6,18 @@ |
#include "components/crx_file/id_util.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/resource_dispatcher_host.h" |
#include "extensions/browser/blob_holder.h" |
#include "extensions/browser/event_router.h" |
#include "extensions/browser/extension_function_dispatcher.h" |
#include "extensions/browser/extension_system.h" |
+#include "extensions/browser/guest_view/guest_view_base.h" |
#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/info_map.h" |
#include "extensions/browser/process_manager.h" |
#include "extensions/common/extension.h" |
@@ -46,6 +51,7 @@ void ExtensionMessageFilter::OverrideThreadForMessage( |
case ExtensionHostMsg_AttachGuest::ID: |
case ExtensionHostMsg_RemoveListener::ID: |
case ExtensionHostMsg_AddLazyListener::ID: |
+ case ExtensionHostMsg_CreateMimeHandlerViewGuest::ID: |
case ExtensionHostMsg_RemoveLazyListener::ID: |
case ExtensionHostMsg_AddFilteredListener::ID: |
case ExtensionHostMsg_RemoveFilteredListener::ID: |
@@ -76,6 +82,8 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { |
OnExtensionAddLazyListener) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AttachGuest, |
OnExtensionAttachGuest) |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_CreateMimeHandlerViewGuest, |
+ OnExtensionCreateMimeHandlerViewGuest) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener, |
OnExtensionRemoveLazyListener) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener, |
@@ -155,8 +163,8 @@ void ExtensionMessageFilter::OnExtensionAttachGuest( |
int guest_instance_id, |
const base::DictionaryValue& params) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- extensions::GuestViewManager* manager = |
- extensions::GuestViewManager::FromBrowserContext(browser_context_); |
+ GuestViewManager* manager = |
+ GuestViewManager::FromBrowserContext(browser_context_); |
if (!manager) |
return; |
@@ -167,6 +175,40 @@ void ExtensionMessageFilter::OnExtensionAttachGuest( |
params); |
} |
+void ExtensionMessageFilter::OnExtensionCreateMimeHandlerViewGuest( |
+ int render_frame_id, |
+ const std::string& src, |
+ const std::string& mime_type, |
+ int element_instance_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ GuestViewManager* manager = |
+ GuestViewManager::FromBrowserContext(browser_context_); |
+ if (!manager) |
+ return; |
+ |
+ content::RenderFrameHost* rfh = |
+ content::RenderFrameHost::FromID(render_process_id_, render_frame_id); |
+ content::WebContents* embedder_web_contents = |
+ content::WebContents::FromRenderFrameHost(rfh); |
+ if (!embedder_web_contents) |
+ return; |
+ |
+ GuestViewManager::WebContentsCreatedCallback callback = |
+ base::Bind(&ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback, |
+ this, |
+ element_instance_id, |
+ render_process_id_, |
+ render_frame_id, |
+ src); |
+ base::DictionaryValue create_params; |
+ create_params.SetString(mime_handler_view::kMimeType, mime_type); |
+ manager->CreateGuest(MimeHandlerViewGuest::Type, |
+ "", |
+ embedder_web_contents, |
+ create_params, |
+ callback); |
+} |
+ |
void ExtensionMessageFilter::OnExtensionRemoveLazyListener( |
const std::string& extension_id, const std::string& event_name) { |
EventRouter* router = EventRouter::Get(browser_context_); |
@@ -252,4 +294,40 @@ void ExtensionMessageFilter::OnExtensionRequestForIOThread( |
params); |
} |
+void ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback( |
+ int element_instance_id, |
+ int embedder_render_process_id, |
+ int embedder_render_frame_id, |
+ const std::string& src, |
+ content::WebContents* web_contents) { |
+ GuestViewManager* manager = |
+ GuestViewManager::FromBrowserContext(browser_context_); |
+ if (!manager) |
+ return; |
+ |
+ MimeHandlerViewGuest* guest_view = |
+ MimeHandlerViewGuest::FromWebContents(web_contents); |
+ if (!guest_view) |
+ return; |
+ int guest_instance_id = guest_view->guest_instance_id(); |
+ |
+ content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( |
+ embedder_render_process_id, embedder_render_frame_id); |
+ if (!rfh) |
+ return; |
+ |
+ base::DictionaryValue attach_params; |
+ attach_params.SetString(mime_handler_view::kSrc, src); |
+ manager->AttachGuest(embedder_render_process_id, |
+ rfh->GetRenderViewHost()->GetRoutingID(), |
+ element_instance_id, |
+ guest_instance_id, |
+ attach_params); |
+ |
+ IPC::Message* msg = |
+ new ExtensionMsg_CreateMimeHandlerViewGuestACK(element_instance_id); |
+ msg->set_routing_id(rfh->GetRoutingID()); |
+ rfh->Send(msg); |
+} |
+ |
} // namespace extensions |