Index: extensions/renderer/guest_view/extensions_guest_view_container.cc |
diff --git a/extensions/renderer/guest_view/extensions_guest_view_container.cc b/extensions/renderer/guest_view/extensions_guest_view_container.cc |
index e5cdc572b543d5fbec69e65da3a0788e3c0a78ba..3b48217e9739825b2394dfdb60e06158c4a630ed 100644 |
--- a/extensions/renderer/guest_view/extensions_guest_view_container.cc |
+++ b/extensions/renderer/guest_view/extensions_guest_view_container.cc |
@@ -4,8 +4,11 @@ |
#include "extensions/renderer/guest_view/extensions_guest_view_container.h" |
+#include "base/command_line.h" |
+#include "content/public/common/content_switches.h" |
#include "content/public/renderer/render_frame.h" |
#include "content/public/renderer/render_view.h" |
+#include "extensions/common/guest_view/extensions_guest_view_messages.h" |
#include "extensions/common/guest_view/guest_view_constants.h" |
#include "extensions/common/guest_view/guest_view_messages.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
@@ -59,6 +62,60 @@ void ExtensionsGuestViewContainer::Request::ExecuteCallbackIfAvailable( |
callback->Call(context->Global(), argc, argv.get()); |
} |
+ExtensionsGuestViewContainer::AttachIframeRequest::AttachIframeRequest( |
+ GuestViewContainer* container, |
+ int guest_instance_id, |
+ v8::Handle<v8::Function> callback, |
+ v8::Isolate* isolate) |
+ : Request(container, callback, isolate), |
+ guest_instance_id_(guest_instance_id) { |
+} |
+ |
+ExtensionsGuestViewContainer::AttachIframeRequest::~AttachIframeRequest() { |
+} |
+ |
+void ExtensionsGuestViewContainer::AttachIframeRequest::PerformRequest() { |
+ LOG(WARNING) << "AttachIframeRequest::PerformRequest, guest_instance_id: " |
+ << guest_instance_id_; |
+ // Only store callback. |
+ DCHECK(container()->render_frame()); |
+} |
+ |
+void ExtensionsGuestViewContainer::AttachIframeRequest::HandleResponse( |
+ const IPC::Message& message) { |
+ ExtensionsGuestViewMsg_ContentWindowReady::Param param; |
+ bool message_read_status = |
+ ExtensionsGuestViewMsg_ContentWindowReady::Read(&message, ¶m); |
+ DCHECK(message_read_status); |
+ |
+ // If we don't have a callback then there's nothing more to do. |
+ if (!HasCallback()) { |
+ LOG(WARNING) << "AttachIframeRequest, no callback, bail out"; |
+ return; |
+ } |
+ |
+ int render_view_proxy_routing_id = get<1>(param); |
+ content::RenderView* guest_proxy_render_view = |
+ content::RenderView::FromRoutingID(render_view_proxy_routing_id); |
+ |
+ // TODO(fsamuel): Should we be reporting an error to JavaScript or DCHECKing? |
+ if (!guest_proxy_render_view) { |
+ LOG(ERROR) << "Guest proxy render view not found, routing ID was" << |
+ render_view_proxy_routing_id; |
+ return; |
+ } |
+ |
+ v8::HandleScope handle_scope(isolate()); |
+ blink::WebFrame* frame = guest_proxy_render_view->GetWebView()->mainFrame(); |
+ v8::Local<v8::Value> window = frame->mainWorldScriptContext()->Global(); |
+ |
+ const int argc = 1; |
+ scoped_ptr<v8::Handle<v8::Value>[]> argv(new v8::Handle<v8::Value>[argc]); |
+ argv[0] = window; |
+ |
+ ExecuteCallbackIfAvailable(argc, argv.Pass()); |
+} |
+ |
ExtensionsGuestViewContainer::AttachRequest::AttachRequest( |
GuestViewContainer* container, |
int guest_instance_id, |
@@ -139,6 +196,11 @@ ExtensionsGuestViewContainer::ExtensionsGuestViewContainer( |
destruction_isolate_(nullptr), |
element_resize_isolate_(nullptr), |
weak_ptr_factory_(this) { |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kSitePerProcess)) { |
+ // There is not BrowserPluginDelegate to wait for. |
+ ready_ = true; |
+ } |
} |
ExtensionsGuestViewContainer::~ExtensionsGuestViewContainer() { |