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