Chromium Code Reviews| Index: third_party/WebKit/Source/bindings/templates/legacy_callback_interface.cpp.tmpl |
| diff --git a/third_party/WebKit/Source/bindings/templates/legacy_callback_interface.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/legacy_callback_interface.cpp.tmpl |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8a2d17cea8aff4439c7597c3ebec55e95b5a7c67 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/bindings/templates/legacy_callback_interface.cpp.tmpl |
| @@ -0,0 +1,78 @@ |
| +{% filter format_blink_cpp_source_code %} |
|
bashi
2017/04/28 06:39:05
Sorry forgot to mention that we need to add legacy
tkent
2017/04/28 09:22:01
Done.
|
| + |
| +{% include 'copyright_block.txt' %} |
| +#include "{{v8_class}}.h" |
| + |
| +{% for filename in cpp_includes %} |
| +#include "{{filename}}" |
| +{% endfor %} |
| + |
| +namespace blink { |
| + |
| +// Suppress warning: global constructors, because struct WrapperTypeInfo is |
| +// trivial and does not depend on another global objects. |
| +#if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) |
| +#pragma clang diagnostic push |
| +#pragma clang diagnostic ignored "-Wglobal-constructors" |
| +#endif |
| +const WrapperTypeInfo {{v8_class}}::wrapperTypeInfo = { |
| + gin::kEmbedderBlink, |
| + {{v8_class}}::DomTemplate, |
| + nullptr, |
| + nullptr, |
| + nullptr, |
| + "{{interface_name}}", |
| + nullptr, |
| + WrapperTypeInfo::kWrapperTypeNoPrototype, |
| + WrapperTypeInfo::kObjectClassId, |
| + WrapperTypeInfo::kNotInheritFromActiveScriptWrappable, |
| + WrapperTypeInfo::kDependent |
| +}; |
| +#if defined(COMPONENT_BUILD) && defined(WIN32) && COMPILER(CLANG) |
| +#pragma clang diagnostic pop |
| +#endif |
| + |
| +void {{v8_class}}::TypeErrorConstructorCallback( |
| + const v8::FunctionCallbackInfo<v8::Value>& info) { |
| + V8ThrowException::ThrowTypeError(info.GetIsolate(), |
| + "Illegal constructor: {{interface_name}}"); |
| +} |
| + |
| +{% from 'constants.cpp.tmpl' import install_constants with context %} |
| +static void Install{{v8_class}}Template( |
| + v8::Isolate* isolate, |
| + const DOMWrapperWorld& world, |
| + v8::Local<v8::FunctionTemplate> interfaceTemplate) { |
| + // Legacy callback interface must not have a prototype object. |
| + interfaceTemplate->RemovePrototype(); |
| + |
| + // Initialize the interface object's template. |
| + V8DOMConfiguration::InitializeDOMInterfaceTemplate(isolate, interfaceTemplate, |
| + {{v8_class}}::wrapperTypeInfo.interface_name, v8::Local<v8::FunctionTemplate>(), |
| + kV8DefaultWrapperInternalFieldCount); |
| + interfaceTemplate->SetCallHandler({{v8_class}}::TypeErrorConstructorCallback); |
| + interfaceTemplate->SetLength(0); |
| + |
| + v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate); |
| + ALLOW_UNUSED_LOCAL(signature); |
| + v8::Local<v8::ObjectTemplate> instanceTemplate = interfaceTemplate->InstanceTemplate(); |
| + ALLOW_UNUSED_LOCAL(instanceTemplate); |
| + v8::Local<v8::ObjectTemplate> prototypeTemplate = interfaceTemplate->PrototypeTemplate(); |
| + ALLOW_UNUSED_LOCAL(prototypeTemplate); |
| + |
| + // Register DOM constants. |
| + {{install_constants() | indent(2)}} |
| +} |
| + |
| +v8::Local<v8::FunctionTemplate> {{v8_class}}::DomTemplate(v8::Isolate* isolate, |
| + const DOMWrapperWorld& world) { |
| + return V8DOMConfiguration::DomClassTemplate( |
| + isolate, |
| + world, |
| + const_cast<WrapperTypeInfo*>(&wrapperTypeInfo), |
| + Install{{v8_class}}Template); |
| +} |
| + |
| +} // namespace blink |
| + |
| +{% endfilter %}{# format_blink_cpp_source_code #} |