Chromium Code Reviews| 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..1206ae222cfe78fdce8da920368dd2ba7cd853bb 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, |
| @@ -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)); |
| + extensions::GuestViewManager* manager = |
| + extensions::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(mimehandlerview::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) { |
| + extensions::GuestViewManager* manager = |
| + extensions::GuestViewManager::FromBrowserContext(browser_context_); |
| + if (!manager) |
| + return; |
| + |
| + extensions::GuestViewBase* guest_view = |
| + extensions::GuestViewBase::FromWebContents(web_contents); |
|
Fady Samuel
2014/09/04 17:31:07
Be more specific: MimeHandlerViewGuest::FromWebCon
lazyboy
2014/09/04 18:59:33
Thanks.
Done.
|
| + 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(mimehandlerview::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 |