Chromium Code Reviews| 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) { |