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

Unified Diff: extensions/browser/guest_view/guest_view_manager.cc

Issue 376033002: Adding MimeHandlerView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pending-zork-patch2
Patch Set: With the new attach approach Created 6 years, 4 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
Index: extensions/browser/guest_view/guest_view_manager.cc
diff --git a/extensions/browser/guest_view/guest_view_manager.cc b/extensions/browser/guest_view/guest_view_manager.cc
index 11acf2e58063887df314caa5770caadd394fd952..709b21402df8d250c748720ae590d46b24952d2f 100644
--- a/extensions/browser/guest_view/guest_view_manager.cc
+++ b/extensions/browser/guest_view/guest_view_manager.cc
@@ -16,6 +16,7 @@
#include "extensions/browser/guest_view/guest_view_base.h"
#include "extensions/browser/guest_view/guest_view_constants.h"
#include "extensions/browser/guest_view/guest_view_manager_factory.h"
+#include "extensions/common/extension_messages.h"
#include "net/base/escape.h"
#include "url/gurl.h"
@@ -61,6 +62,36 @@ content::WebContents* GuestViewManager::GetGuestByInstanceIDSafely(
return GetGuestByInstanceID(guest_instance_id);
}
+void GuestViewManager::CreateMimeHandlerViewGuest(
+ int embedder_render_process_id,
+ int embedder_routing_id,
+ const std::string& url,
+ const std::string& mime_type,
+ int element_instance_id) {
+ content::RenderViewHost* rvh =
+ content::RenderViewHost::FromID(embedder_render_process_id,
+ embedder_routing_id);
+ content::WebContents* embedder_web_contents =
+ content::WebContents::FromRenderViewHost(rvh);
+ GuestViewManager::WebContentsCreatedCallback callback =
+ base::Bind(&GuestViewManager::OnMimeHandlerViewGuestCreated,
+ // TODO(lazyboy): Use weak ptr.
+ base::Unretained(this),
+ element_instance_id,
+ embedder_render_process_id,
+ embedder_routing_id,
+ url);
+ base::DictionaryValue create_params;
+ create_params.SetString(guestview::kMimeTypeParam, mime_type);
+ // TODO(lazyboy): use MimeHandlerViewGuest::Type, cannot do this as
+ // MimeHandlerViewGuest is under chrome/ not extensions/.
+ CreateGuest("mimehandler",
Fady Samuel 2014/08/29 18:52:32 Can this be done in ExtensionMessageFilter?
lazyboy 2014/08/29 22:08:26 Done.
+ "",
+ embedder_web_contents,
+ create_params,
+ callback);
+}
+
void GuestViewManager::AttachGuest(
int embedder_render_process_id,
int embedder_routing_id,
@@ -282,6 +313,34 @@ bool GuestViewManager::CanUseGuestInstanceID(int guest_instance_id) {
return !ContainsKey(removed_instance_ids_, guest_instance_id);
}
+void GuestViewManager::OnMimeHandlerViewGuestCreated(
Fady Samuel 2014/08/29 18:52:32 Move this to ExtensionMessageFilter?
lazyboy 2014/08/29 22:08:26 Done.
+ int element_id,
+ int embedder_render_process_id,
+ int embedder_routing_id,
+ const std::string& src,
+ content::WebContents* web_contents) {
+ GuestViewBase* guest_view = GuestViewBase::FromWebContents(web_contents);
+ if (guest_view) {
Fady Samuel 2014/08/29 18:52:32 DCHECK(guest_view);
lazyboy 2014/08/29 22:08:26 Done.
+ int guest_instance_id = guest_view->guest_instance_id();
+
+ base::DictionaryValue attach_params;
+ attach_params.SetString("src", src);
+ AttachGuest(
+ embedder_render_process_id,
+ embedder_routing_id,
+ element_id,
+ guest_instance_id,
+ attach_params);
+ // TODO(lazyboy): guest_instance_id not needed actually.
+ IPC::Message* msg = new ExtensionMsg_CreateMimeHandlerViewGuestACK(
+ element_id, guest_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);
+ }
+}
+
bool GuestViewManager::CanEmbedderAccessInstanceID(
int embedder_render_process_id,
int guest_instance_id) {

Powered by Google App Engine
This is Rietveld 408576698