103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef CONTENT_SHELL_BINDING_HELPERS_H_ 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define CONTENT_SHELL_BINDING_HELPERS_H_ 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <string> 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <vector> 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "gin/handle.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "gin/wrappable.h" 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h" 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "third_party/WebKit/public/web/WebKit.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace content { 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)template<class WrappedClass> 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void InstallAsWindowProperties(WrappedClass* wrapped, 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) blink::WebFrame* frame, 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::vector<std::string>& names) { 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::Isolate* isolate = blink::mainThreadIsolate(); 2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::HandleScope handle_scope(isolate); 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::Handle<v8::Context> context = frame->mainWorldScriptContext(); 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (context.IsEmpty()) 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::Context::Scope context_scope(context); 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gin::Handle<WrappedClass> bindings = gin::CreateHandle(isolate, wrapped); 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (bindings.IsEmpty()) 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::Handle<v8::Object> global = context->Global(); 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) v8::Handle<v8::Value> v8_bindings = bindings.ToV8(); 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (size_t i = 0; i < names.size(); ++i) 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) global->Set(gin::StringToV8(isolate, names[i].c_str()), v8_bindings); 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace content 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif // CONTENT_SHELL_BINDING_HELPERS_DISPATCHER_H_ 43