// 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 "extensions/renderer/document_custom_bindings.h" #include #include "base/bind.h" #include "extensions/renderer/script_context.h" #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" #include "v8/include/v8.h" namespace extensions { DocumentCustomBindings::DocumentCustomBindings(ScriptContext* context) : ObjectBackedNativeHandler(context) { RouteFunction("RegisterElement", base::Bind(&DocumentCustomBindings::RegisterElement, base::Unretained(this))); } // Attach an event name to an object. void DocumentCustomBindings::RegisterElement( const v8::FunctionCallbackInfo& args) { if (args.Length() != 2 || !args[0]->IsString() || !args[1]->IsObject()) { NOTREACHED(); return; } std::string element_name(*v8::String::Utf8Value(args[0])); v8::Local options = v8::Local::Cast(args[1]); blink::WebExceptionCode ec = 0; blink::WebDocument document = context()->web_frame()->document(); v8::Local constructor = document.registerEmbedderCustomElement( blink::WebString::fromUTF8(element_name), options, ec); args.GetReturnValue().Set(constructor); } } // namespace extensions