Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1457)

Unified Diff: extensions/browser/extension_message_filter.cc

Issue 376033002: Adding MimeHandlerView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pending-zork-patch2
Patch Set: Address comment from kenrb@ Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/extension_message_filter.h ('k') | extensions/browser/guest_view/guest_view_base.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « extensions/browser/extension_message_filter.h ('k') | extensions/browser/guest_view/guest_view_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698