| Index: third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
|
| diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
|
| index 6ba91f90f2b367f41ae0b675ab5120949308f498..cff7f2b161fc40ff6fd05cc7d66ba6c4efc02cee 100644
|
| --- a/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
|
| +++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMConfiguration.cpp
|
| @@ -333,6 +333,33 @@ void InstallConstantInternal(
|
| }
|
|
|
| template <class Configuration>
|
| +void AddMethodToTemplate(v8::Isolate* isolate,
|
| + v8::Local<v8::Template> v8_template,
|
| + v8::Local<v8::FunctionTemplate> function_template,
|
| + const Configuration& method) {
|
| + v8_template->Set(method.MethodName(isolate), function_template,
|
| + static_cast<v8::PropertyAttribute>(method.attribute));
|
| +}
|
| +
|
| +template <>
|
| +void AddMethodToTemplate(
|
| + v8::Isolate* isolate,
|
| + v8::Local<v8::Template> v8_template,
|
| + v8::Local<v8::FunctionTemplate> function_template,
|
| + const V8DOMConfiguration::SymbolKeyedMethodConfiguration& method) {
|
| + // The order matters here: if the Symbol is added first, the Function object
|
| + // will have no associated name. For example, WebIDL states, among other
|
| + // things, that a pair iterator's @@iterator Function object's name must be
|
| + // set to "entries".
|
| + if (method.symbol_alias) {
|
| + v8_template->Set(V8AtomicString(isolate, method.symbol_alias),
|
| + function_template);
|
| + }
|
| + v8_template->Set(method.MethodName(isolate), function_template,
|
| + static_cast<v8::PropertyAttribute>(method.attribute));
|
| +}
|
| +
|
| +template <class Configuration>
|
| void InstallMethodInternal(v8::Isolate* isolate,
|
| v8::Local<v8::ObjectTemplate> instance_template,
|
| v8::Local<v8::ObjectTemplate> prototype_template,
|
| @@ -343,7 +370,6 @@ void InstallMethodInternal(v8::Isolate* isolate,
|
| if (!WorldConfigurationApplies(method, world))
|
| return;
|
|
|
| - v8::Local<v8::Name> name = method.MethodName(isolate);
|
| v8::FunctionCallback callback = method.callback;
|
| // Promise-returning functions need to return a reject promise when
|
| // an exception occurs. This includes a case that the receiver object is not
|
| @@ -364,15 +390,15 @@ void InstallMethodInternal(v8::Isolate* isolate,
|
| if (method.access_check_configuration == V8DOMConfiguration::kCheckAccess)
|
| function_template->SetAcceptAnyReceiver(false);
|
| if (method.property_location_configuration &
|
| - V8DOMConfiguration::kOnInstance)
|
| - instance_template->Set(
|
| - name, function_template,
|
| - static_cast<v8::PropertyAttribute>(method.attribute));
|
| + V8DOMConfiguration::kOnInstance) {
|
| + AddMethodToTemplate(isolate, instance_template, function_template,
|
| + method);
|
| + }
|
| if (method.property_location_configuration &
|
| - V8DOMConfiguration::kOnPrototype)
|
| - prototype_template->Set(
|
| - name, function_template,
|
| - static_cast<v8::PropertyAttribute>(method.attribute));
|
| + V8DOMConfiguration::kOnPrototype) {
|
| + AddMethodToTemplate(isolate, prototype_template, function_template,
|
| + method);
|
| + }
|
| }
|
| if (method.property_location_configuration &
|
| V8DOMConfiguration::kOnInterface) {
|
| @@ -385,9 +411,7 @@ void InstallMethodInternal(v8::Isolate* isolate,
|
| function_template->RemovePrototype();
|
| // Similarly, there is no need to do an access check for static methods, as
|
| // there is no holder to check against.
|
| - interface_template->Set(
|
| - name, function_template,
|
| - static_cast<v8::PropertyAttribute>(method.attribute));
|
| + AddMethodToTemplate(isolate, interface_template, function_template, method);
|
| }
|
| }
|
|
|
|
|