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