| Index: Source/bindings/templates/attributes.cpp
|
| diff --git a/Source/bindings/templates/attributes.cpp b/Source/bindings/templates/attributes.cpp
|
| index 53d7b7dddefca94442ac9cfa90099a588f9d983f..cadea5867cde368e4cf7601fbe4aa3fa03519836 100644
|
| --- a/Source/bindings/templates/attributes.cpp
|
| +++ b/Source/bindings/templates/attributes.cpp
|
| @@ -183,7 +183,12 @@ v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info
|
| {##############################################################################}
|
| {% macro constructor_getter_callback(attribute, world_suffix) %}
|
| {% filter conditional(attribute.conditional_string) %}
|
| -static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info)
|
| +static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(
|
| +{%- if attribute.is_expose_js_accessors %}
|
| +const v8::FunctionCallbackInfo<v8::Value>& info
|
| +{%- else %}
|
| +v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info
|
| +{%- endif %})
|
| {
|
| TRACE_EVENT_SET_SAMPLING_STATE("blink", "DOMGetter");
|
| {% if attribute.deprecate_as %}
|
| @@ -192,7 +197,11 @@ static void {{attribute.name}}ConstructorGetterCallback{{world_suffix}}(v8::Loca
|
| {% if attribute.measure_as %}
|
| UseCounter::countIfNotPrivateScript(info.GetIsolate(), callingExecutionContext(info.GetIsolate()), UseCounter::{{attribute.measure_as}});
|
| {% endif %}
|
| - {{cpp_class_or_partial}}V8Internal::{{cpp_class}}ConstructorGetter{{world_suffix}}(property, info);
|
| + {% if attribute.is_expose_js_accessors %}
|
| + v8ConstructorAttributeGetterAsAccessor(info);
|
| + {% else %}
|
| + v8ConstructorAttributeGetterAsProperty(property, info);
|
| + {% endif %}
|
| TRACE_EVENT_SET_SAMPLING_STATE("v8", "V8Execution");
|
| }
|
| {% endfilter %}
|
| @@ -214,21 +223,27 @@ v8::Local<v8::Value> v8Value, const v8::PropertyCallbackInfo<void>& info
|
| {% set cpp_class, v8_class = 'Element', 'V8Element' %}
|
| {% endif %}
|
| {# Local variables #}
|
| - {% if not attribute.is_static and not attribute.is_replaceable %}
|
| + {% if not attribute.is_static and
|
| + not attribute.is_replaceable and
|
| + not attribute.constructor_type %}
|
| v8::Local<v8::Object> holder = info.Holder();
|
| {% endif %}
|
| {% if attribute.has_setter_exception_state %}
|
| ExceptionState exceptionState(ExceptionState::SetterContext, "{{attribute.name}}", "{{interface_name}}", holder, info.GetIsolate());
|
| {% endif %}
|
| + {% if attribute.is_replaceable or
|
| + attribute.constructor_type %}
|
| + v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{attribute.name}}");
|
| + {% endif %}
|
| {# impl #}
|
| {% if attribute.is_put_forwards %}
|
| {{cpp_class}}* proxyImpl = {{v8_class}}::toImpl(holder);
|
| {{attribute.cpp_type}} impl = WTF::getPtr(proxyImpl->{{attribute.name}}());
|
| if (!impl)
|
| return;
|
| - {% elif attribute.is_replaceable %}
|
| - v8::Local<v8::String> propertyName = v8AtomicString(info.GetIsolate(), "{{attribute.name}}");
|
| - {% elif not attribute.is_static %}
|
| + {% elif not attribute.is_static and
|
| + not attribute.is_replaceable and
|
| + not attribute.constructor_type %}
|
| {{cpp_class}}* impl = {{v8_class}}::toImpl(holder);
|
| {% endif %}
|
| {% if attribute.idl_type == 'EventHandler' and interface_name == 'Window' %}
|
| @@ -392,16 +407,21 @@ bool {{v8_class}}::PrivateScript::{{attribute.name}}AttributeSetter(LocalFrame*
|
| {% set getter_callback =
|
| '%sV8Internal::%sAttributeGetterCallback' %
|
| (cpp_class_or_partial, attribute.name)
|
| - if not attribute.constructor_type else
|
| - ('%sV8Internal::%sConstructorGetterCallback' %
|
| + if not attribute.constructor_type else (
|
| + '%sV8Internal::%sConstructorGetterCallback' %
|
| (cpp_class_or_partial, attribute.name)
|
| - if attribute.needs_constructor_getter_callback else
|
| - '%sV8Internal::%sConstructorGetter' % (cpp_class_or_partial, cpp_class)) %}
|
| + if attribute.needs_constructor_getter_callback else (
|
| + 'v8ConstructorAttributeGetterAsAccessor'
|
| + if attribute.is_expose_js_accessors else (
|
| + 'v8ConstructorAttributeGetterAsProperty'))) %}
|
| {% set getter_callback_for_main_world =
|
| '%sV8Internal::%sAttributeGetterCallbackForMainWorld' %
|
| (cpp_class_or_partial, attribute.name)
|
| if attribute.is_per_world_bindings else '0' %}
|
| -{% set setter_callback = attribute.setter_callback %}
|
| +{% set setter_callback =
|
| + '%sV8Internal::%sAttributeSetterCallback' %
|
| + (cpp_class_or_partial, attribute.name)
|
| + if attribute.has_setter else '0' %}
|
| {% set setter_callback_for_main_world =
|
| '%sV8Internal::%sAttributeSetterCallbackForMainWorld' %
|
| (cpp_class_or_partial, attribute.name)
|
|
|