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..82fdb9bb36f0a053b2c436cfc9e28ea80df57b27 100644 |
--- a/extensions/browser/extension_message_filter.cc |
+++ b/extensions/browser/extension_message_filter.cc |
@@ -8,10 +8,12 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/resource_dispatcher_host.h" |
+#include "content/public/browser/render_view_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/info_map.h" |
#include "extensions/browser/process_manager.h" |
@@ -46,6 +48,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 +79,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, |
@@ -167,6 +172,43 @@ 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)); |
+ extensions::GuestViewManager* manager = |
+ extensions::GuestViewManager::FromBrowserContext(browser_context_); |
+ if (!manager) |
+ return; |
+ |
+ content::RenderViewHost* rvh = |
+ content::RenderViewHost::FromID(render_process_id_, render_frame_id); |
+ content::WebContents* embedder_web_contents = |
+ content::WebContents::FromRenderViewHost(rvh); |
+ 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; |
+ // TODO(lazyboy): "mimeType" in constant. |
+ create_params.SetString("mimeType", mime_type); |
+ // TODO(lazyboy): use MimeHandlerViewGuest::Type, cannot do this as |
+ // MimeHandlerViewGuest is under chrome/ not extensions/. |
+ manager->CreateGuest("mimehandler", |
+ "", |
+ 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,37 @@ void ExtensionMessageFilter::OnExtensionRequestForIOThread( |
params); |
} |
+void ExtensionMessageFilter::MimeHandlerViewGuestCreatedCallback( |
+ int element_instance_id, |
+ int embedder_render_process_id, |
+ int embedder_routing_id, |
+ const std::string& src, |
+ content::WebContents* web_contents) { |
+ extensions::GuestViewManager* manager = |
+ extensions::GuestViewManager::FromBrowserContext(browser_context_); |
+ if (!manager) |
+ return; |
+ |
+ extensions::GuestViewBase* guest_view = |
+ extensions::GuestViewBase::FromWebContents(web_contents); |
+ DCHECK(guest_view); |
+ int guest_instance_id = guest_view->guest_instance_id(); |
+ |
+ base::DictionaryValue attach_params; |
+ attach_params.SetString("src", src); |
+ manager->AttachGuest(embedder_render_process_id, |
+ embedder_routing_id, |
+ element_instance_id, |
+ guest_instance_id, |
+ attach_params); |
+ |
+ IPC::Message* msg = new ExtensionMsg_CreateMimeHandlerViewGuestACK( |
+ element_instance_id); |
+ msg->set_routing_id(embedder_routing_id); |
+ content::RenderViewHost* rvh = |
+ content::RenderViewHost::FromID(embedder_render_process_id, |
+ embedder_routing_id); |
+ rvh->Send(msg); |
+} |
+ |
} // namespace extensions |