1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "extensions/renderer/guest_view/guest_view_internal_custom_bindings.h"
10 #include "content/public/renderer/render_frame.h"
11 #include "content/public/renderer/render_view.h"
12 #include "content/public/renderer/v8_value_converter.h"
13 #include "extensions/common/extension.h"
14 #include "extensions/common/extension_messages.h"
15 #include "extensions/renderer/script_context.h"
16 #include "v8/include/v8.h"
18 using content::V8ValueConverter
;
20 namespace extensions
{
22 GuestViewInternalCustomBindings::GuestViewInternalCustomBindings(
23 ScriptContext
* context
)
24 : ObjectBackedNativeHandler(context
) {
25 RouteFunction("AttachGuest",
26 base::Bind(&GuestViewInternalCustomBindings::AttachGuest
,
27 base::Unretained(this)));
30 void GuestViewInternalCustomBindings::AttachGuest(
31 const v8::FunctionCallbackInfo
<v8::Value
>& args
) {
32 CHECK(args
.Length() == 3 && args
[0]->IsInt32() && args
[1]->IsInt32() &&
35 content::RenderFrame
* render_frame
= context()->GetRenderFrame();
39 int element_instance_id
= args
[0]->Int32Value();
40 int guest_instance_id
= args
[1]->Int32Value();
42 scoped_ptr
<base::DictionaryValue
> params
;
44 scoped_ptr
<V8ValueConverter
> converter(V8ValueConverter::create());
45 scoped_ptr
<base::Value
> params_as_value(
46 converter
->FromV8Value(args
[2], context()->v8_context()));
47 CHECK(params_as_value
->IsType(base::Value::TYPE_DICTIONARY
));
49 static_cast<base::DictionaryValue
*>(params_as_value
.release()));
52 // Step 1, send the attach params to chrome/.
53 render_frame
->Send(new ExtensionHostMsg_AttachGuest(
54 render_frame
->GetRenderView()->GetRoutingID(),
59 // Step 2, attach plugin through content/.
60 render_frame
->AttachGuest(element_instance_id
);
62 args
.GetReturnValue().Set(v8::Boolean::New(context()->isolate(), true));
65 } // namespace extensions