Index: extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
diff --git a/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc b/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
index ff18e04b603620b913a01d0bf9871804bf3ebbea..a57f4541024f0a96c1b9a03a90d339d3e598013a 100644 |
--- a/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
+++ b/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc |
@@ -14,6 +14,8 @@ |
#include "extensions/common/guest_view/guest_view_constants.h" |
#include "extensions/renderer/guest_view/extensions_guest_view_container.h" |
#include "extensions/renderer/script_context.h" |
+#include "third_party/WebKit/public/web/WebFrame.h" |
+#include "third_party/WebKit/public/web/WebView.h" |
#include "v8/include/v8.h" |
using content::V8ValueConverter; |
@@ -29,6 +31,9 @@ GuestViewInternalCustomBindings::GuestViewInternalCustomBindings( |
RouteFunction("DetachGuest", |
base::Bind(&GuestViewInternalCustomBindings::DetachGuest, |
base::Unretained(this))); |
+ RouteFunction("GetContentWindow", |
+ base::Bind(&GuestViewInternalCustomBindings::GetContentWindow, |
+ base::Unretained(this))); |
RouteFunction( |
"RegisterDestructionCallback", |
base::Bind(&GuestViewInternalCustomBindings::RegisterDestructionCallback, |
@@ -122,6 +127,31 @@ void GuestViewInternalCustomBindings::DetachGuest( |
args.GetReturnValue().Set(v8::Boolean::New(context()->isolate(), true)); |
} |
+void GuestViewInternalCustomBindings::GetContentWindow( |
+ const v8::FunctionCallbackInfo<v8::Value>& args) { |
+ // Default to returning null. |
+ args.GetReturnValue().SetNull(); |
+ |
+ if (args.Length() != 1) |
+ return; |
+ |
+ // The routing ID for the RenderView. |
+ if (!args[0]->IsInt32()) |
+ return; |
+ |
+ int view_id = args[0]->Int32Value(); |
+ if (view_id == MSG_ROUTING_NONE) |
+ return; |
+ |
+ content::RenderView* view = content::RenderView::FromRoutingID(view_id); |
+ if (!view) |
+ return; |
+ |
+ blink::WebFrame* frame = view->GetWebView()->mainFrame(); |
+ v8::Local<v8::Value> window = frame->mainWorldScriptContext()->Global(); |
+ args.GetReturnValue().Set(window); |
+} |
+ |
void GuestViewInternalCustomBindings::RegisterDestructionCallback( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
// There are two parameters. |