Chromium Code Reviews| Index: chrome/renderer/extensions/guest_view_internal_custom_bindings.cc |
| diff --git a/chrome/renderer/extensions/guest_view_internal_custom_bindings.cc b/chrome/renderer/extensions/guest_view_internal_custom_bindings.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bbb432f3838f9034af408dfe63f52b36cc270bc4 |
| --- /dev/null |
| +++ b/chrome/renderer/extensions/guest_view_internal_custom_bindings.cc |
| @@ -0,0 +1,67 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/renderer/extensions/guest_view_internal_custom_bindings.h" |
| + |
| +#include <string> |
| + |
| +#include "base/bind.h" |
| +#include "chrome/common/extensions/chrome_extension_messages.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/renderer/script_context.h" |
| +#include "v8/include/v8.h" |
| + |
| +using content::V8ValueConverter; |
| + |
| +namespace extensions { |
| + |
| +GuestViewInternalCustomBindings::GuestViewInternalCustomBindings( |
| + ScriptContext* context) |
| + : ObjectBackedNativeHandler(context) { |
| + RouteFunction("AttachGuest", |
| + base::Bind(&GuestViewInternalCustomBindings::AttachGuest, |
| + base::Unretained(this))); |
| +} |
| + |
| +void GuestViewInternalCustomBindings::AttachGuest( |
| + const v8::FunctionCallbackInfo<v8::Value>& args) { |
| + content::RenderFrame* render_frame = context()->GetRenderFrame(); |
| + if (!render_frame) |
| + return; |
| + |
| + if (args.Length() < 3 || !args[0]->IsInt32() || !args[1]->IsInt32() || |
| + !args[2]->IsObject()) { |
| + return; |
| + } |
| + |
| + int element_instance_id = args[0]->Int32Value(); |
| + int guest_instance_id = args[1]->Int32Value(); |
| + scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create()); |
| + scoped_ptr<base::Value> params_value( |
| + converter->FromV8Value(args[2], context()->v8_context())); |
| + if (base::Value::TYPE_DICTIONARY != params_value->GetType()) { |
| + return; |
| + } |
| + |
| + |
|
Fady Samuel
2014/08/11 21:10:00
extra line
Fady Samuel
2014/08/13 22:24:39
Done.
|
| + // Step 1, send the attach params to chrome/. |
| + scoped_ptr<base::DictionaryValue> params_dictionary( |
| + static_cast<base::DictionaryValue*>(params_value.release())); |
| + render_frame->Send(new ChromeExtensionHostMsg_GuestViewSetAttachParams( |
| + render_frame->GetRenderView()->GetRoutingID(), |
| + element_instance_id, |
| + guest_instance_id, |
| + *params_dictionary)); |
| + |
| + // Step 2, attach plugin through content/. |
| + render_frame->AttachToBrowserPlugin(element_instance_id, guest_instance_id); |
| + |
| + v8::Isolate* isolate = args.GetIsolate(); |
| + args.GetReturnValue().Set(v8::Boolean::New(isolate, true)); |
| +} |
| + |
| +} // namespace extensions |