1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "extensions/renderer/document_custom_bindings.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <string> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/bind.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "extensions/renderer/script_context.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDocument.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFrame.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "v8/include/v8.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDocumentCustomBindings::DocumentCustomBindings(ScriptContext* context) 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : ObjectBackedNativeHandler(context) { 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RouteFunction("RegisterElement", 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::Bind(&DocumentCustomBindings::RegisterElement, 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Unretained(this))); 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Attach an event name to an object. 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DocumentCustomBindings::RegisterElement( 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const v8::FunctionCallbackInfo<v8::Value>& args) { 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) { 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NOTREACHED(); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string element_name(*v8::String::Utf8Value(args[0])); 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch v8::Local<v8::Object> options = args[1]->ToObject(); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu blink::WebExceptionCode ec = 0; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch blink::WebDocument document = context()->web_frame()->document(); 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch v8::Handle<v8::Value> constructor = document.registerEmbedderCustomElement( 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch blink::WebString::fromUTF8(element_name), options, ec); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch args.GetReturnValue().Set(constructor); 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace extensions 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch