| 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 98f337e1677e301eaf1ee2b445cd5776c4dffb5f..908929a99da17b31d3bdf90481c036ff49a4b837 100644
|
| --- a/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc
|
| +++ b/extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc
|
| @@ -7,11 +7,11 @@
|
| #include <string>
|
|
|
| #include "base/bind.h"
|
| -#include "content/public/renderer/render_frame.h"
|
| #include "content/public/renderer/render_view.h"
|
| #include "content/public/renderer/v8_value_converter.h"
|
| #include "extensions/common/extension.h"
|
| #include "extensions/common/extension_messages.h"
|
| +#include "extensions/renderer/guest_view/guest_view_container.h"
|
| #include "extensions/renderer/script_context.h"
|
| #include "v8/include/v8.h"
|
|
|
| @@ -29,14 +29,29 @@ GuestViewInternalCustomBindings::GuestViewInternalCustomBindings(
|
|
|
| void GuestViewInternalCustomBindings::AttachGuest(
|
| const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| - CHECK(args.Length() == 3 && args[0]->IsInt32() && args[1]->IsInt32() &&
|
| - args[2]->IsObject());
|
| + // Allow for an optional callback parameter.
|
| + CHECK(args.Length() >= 3 && args.Length() <= 4);
|
| + // Element Instance ID.
|
| + CHECK(args[0]->IsInt32());
|
| + // Guest Instance ID.
|
| + CHECK(args[1]->IsInt32());
|
| + // Attach Parameters.
|
| + CHECK(args[2]->IsObject());
|
| + // Optional Callback Function.
|
| + CHECK(args.Length() < 4 || args[3]->IsFunction());
|
|
|
| - content::RenderFrame* render_frame = context()->GetRenderFrame();
|
| - if (!render_frame)
|
| + int element_instance_id = args[0]->Int32Value();
|
| + // An element instance ID uniquely identifies a GuestViewContainer within
|
| + // a RenderView.
|
| + GuestViewContainer* guest_view_container =
|
| + GuestViewContainer::FromID(context()->GetRenderView()->GetRoutingID(),
|
| + element_instance_id);
|
| +
|
| + // TODO(fsamuel): Should we be reporting an error if the element instance ID
|
| + // is invalid?
|
| + if (!guest_view_container)
|
| return;
|
|
|
| - int element_instance_id = args[0]->Int32Value();
|
| int guest_instance_id = args[1]->Int32Value();
|
|
|
| scoped_ptr<base::DictionaryValue> params;
|
| @@ -49,15 +64,13 @@ void GuestViewInternalCustomBindings::AttachGuest(
|
| static_cast<base::DictionaryValue*>(params_as_value.release()));
|
| }
|
|
|
| - // Step 1, send the attach params to chrome/.
|
| - render_frame->Send(new ExtensionHostMsg_AttachGuest(
|
| - render_frame->GetRenderView()->GetRoutingID(),
|
| + guest_view_container->AttachGuest(
|
| element_instance_id,
|
| guest_instance_id,
|
| - *params));
|
| -
|
| - // Step 2, attach plugin through content/.
|
| - render_frame->AttachGuest(element_instance_id);
|
| + params.Pass(),
|
| + args.Length() == 4 ? args[3].As<v8::Function>() :
|
| + v8::Handle<v8::Function>(),
|
| + args.GetIsolate());
|
|
|
| args.GetReturnValue().Set(v8::Boolean::New(context()->isolate(), true));
|
| }
|
|
|