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