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