| Index: third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl
|
| diff --git a/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl b/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl
|
| index 240d261c307c71fe63e683fb7f52b3a0fb32e41f..a4221454f80043ec69787671bca75fa63b3e5d61 100644
|
| --- a/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl
|
| +++ b/third_party/WebKit/Source/bindings/templates/methods.cpp.tmpl
|
| @@ -2,68 +2,67 @@
|
|
|
| {##############################################################################}
|
| {% macro generate_method(method, world_suffix) %}
|
| -static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info)
|
| -{% filter format_remove_duplicates([
|
| - 'ExceptionState exceptionState',
|
| - 'ScriptState* scriptState = ']) %}
|
| -{
|
| - {% set define_exception_state -%}
|
| - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{method.name}}");
|
| - {%- endset %}
|
| -
|
| - {% set function_call = func_call_with_prep_of_args(method, world_suffix) %}
|
| -
|
| - {% if 'exceptionState' in function_call %}
|
| - {{define_exception_state}}
|
| - {% if method.returns_promise %}
|
| - ExceptionToRejectPromiseScope rejectPromiseScope(info, exceptionState);
|
| - {% endif %}
|
| - {% endif %}
|
| -
|
| - {% if not method.is_static %}
|
| - {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
|
| - {% endif %}
|
| -
|
| - {# Security checks #}
|
| - {% if method.is_check_security_for_receiver %}
|
| - {{define_exception_state}}
|
| - {% if interface_name == 'EventTarget' %}
|
| - // Performance hack for EventTarget. Checking whether it's a Window or not
|
| - // prior to the call to BindingSecurity::shouldAllowAccessTo increases 30%
|
| - // of speed performance on Android Nexus 7 as of Dec 2015. ALWAYS_INLINE
|
| - // didn't work in this case.
|
| - if (const DOMWindow* window = impl->toDOMWindow()) {
|
| - if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), window, exceptionState)) {
|
| - return;
|
| - }
|
| - }
|
| - {% else %}{# interface_name == 'EventTarget' #}
|
| - if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), impl, exceptionState)) {
|
| - return;
|
| +static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info) {
|
| + {% filter format_remove_duplicates([
|
| + 'ExceptionState exceptionState',
|
| + 'ScriptState* scriptState = ']) %}
|
| + {% set define_exception_state -%}
|
| + ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{method.name}}");
|
| + {%- endset %}
|
| +
|
| + {% set function_call = func_call_with_prep_of_args(method, world_suffix) %}
|
| +
|
| + {% if 'exceptionState' in function_call %}
|
| + {{define_exception_state}}
|
| + {% if method.returns_promise %}
|
| + ExceptionToRejectPromiseScope rejectPromiseScope(info, exceptionState);
|
| + {% endif %}
|
| + {% endif %}
|
| +
|
| + {% if not method.is_static %}
|
| + {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
|
| + {% endif %}
|
| +
|
| + {# Security checks #}
|
| + {% if method.is_check_security_for_receiver %}
|
| + {{define_exception_state}}
|
| + {% if interface_name == 'EventTarget' %}
|
| + // Performance hack for EventTarget. Checking whether it's a Window or not
|
| + // prior to the call to BindingSecurity::shouldAllowAccessTo increases 30%
|
| + // of speed performance on Android Nexus 7 as of Dec 2015. ALWAYS_INLINE
|
| + // didn't work in this case.
|
| + if (const DOMWindow* window = impl->toDOMWindow()) {
|
| + if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), window, exceptionState)) {
|
| + return;
|
| }
|
| - {% endif %}{# interface_name == 'EventTarget' #}
|
| - {% endif %}
|
| - {% if method.is_check_security_for_return_value %}
|
| - {{define_exception_state}}
|
| - if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), {{method.cpp_value}}, exceptionState)) {
|
| - v8SetReturnValueNull(info);
|
| - return;
|
| - }
|
| - {% endif %}
|
| -
|
| - {% if 'scriptState' in function_call %}
|
| - {% if method.is_static %}
|
| - ScriptState* scriptState = ScriptState::forFunctionObject(info);
|
| - {% else %}
|
| - ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| - {% endif %}
|
| - {% endif %}
|
| -
|
| - {% if method.is_custom_element_callbacks %}
|
| - V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope;
|
| - {% endif %}
|
| -
|
| - {{function_call | indent}}
|
| + }
|
| + {% else %}{# interface_name == 'EventTarget' #}
|
| + if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), impl, exceptionState)) {
|
| + return;
|
| + }
|
| + {% endif %}{# interface_name == 'EventTarget' #}
|
| + {% endif %}
|
| + {% if method.is_check_security_for_return_value %}
|
| + {{define_exception_state}}
|
| + if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), {{method.cpp_value}}, exceptionState)) {
|
| + v8SetReturnValueNull(info);
|
| + return;
|
| + }
|
| + {% endif %}
|
| +
|
| + {% if 'scriptState' in function_call %}
|
| + {% if method.is_static %}
|
| + ScriptState* scriptState = ScriptState::forFunctionObject(info);
|
| + {% else %}
|
| + ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| + {% endif %}
|
| + {% endif %}
|
| +
|
| + {% if method.is_custom_element_callbacks %}
|
| + V0CustomElementProcessingStack::CallbackDeliveryScope deliveryScope;
|
| + {% endif %}
|
| +
|
| + {{function_call | indent(2)}}
|
| }
|
| {% endfilter %}
|
| {% endmacro %}
|
| @@ -87,10 +86,10 @@ static void {{method.name}}{{method.overload_index}}Method{{world_suffix}}(const
|
| {# Overloaded methods/constructors have length checked during overload resolution #}
|
| {% if method.number_of_required_arguments and not method.overload_index %}
|
| if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) {
|
| - {{throw_type_error(method,
|
| - 'ExceptionMessages::notEnoughArguments(%(expected)d, info.Length())'
|
| - | format(expected=method.number_of_required_arguments))}}
|
| - return;
|
| + {{throw_type_error(method,
|
| + 'ExceptionMessages::notEnoughArguments(%(expected)d, info.Length())'
|
| + | format(expected=method.number_of_required_arguments))}}
|
| + return;
|
| }
|
| {% endif %}
|
|
|
| @@ -103,17 +102,17 @@ if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) {
|
| interpreted as three arguments are passed. #}
|
| int numArgsPassed = info.Length();
|
| while (numArgsPassed > 0) {
|
| - if (!info[numArgsPassed - 1]->IsUndefined())
|
| - break;
|
| - --numArgsPassed;
|
| + if (!info[numArgsPassed - 1]->IsUndefined())
|
| + break;
|
| + --numArgsPassed;
|
| }
|
| {% endif %}
|
| {% for argument in method.arguments %}
|
| {% if argument.set_default_value %}
|
| if (!info[{{argument.index}}]->IsUndefined()) {
|
| - {{generate_argument(method, argument, world_suffix) | indent}}
|
| + {{generate_argument(method, argument, world_suffix) | indent(2)}}
|
| } else {
|
| - {{argument.set_default_value | indent}};
|
| + {{argument.set_default_value | indent(2)}};
|
| }
|
| {% else %}
|
| {{generate_argument(method, argument, world_suffix)}}
|
| @@ -131,12 +130,12 @@ if (!info[{{argument.index}}]->IsUndefined()) {
|
| fewer arguments if they are omitted.
|
| Optional Dictionary arguments default to empty dictionary. #}
|
| if (UNLIKELY(numArgsPassed <= {{argument.index}})) {
|
| - {% if world_suffix %}
|
| - {{cpp_method_call(method, argument.v8_set_return_value_for_main_world, argument.cpp_value) | indent}}
|
| - {% else %}
|
| - {{cpp_method_call(method, argument.v8_set_return_value, argument.cpp_value) | indent}}
|
| - {% endif %}
|
| - return;
|
| + {% if world_suffix %}
|
| + {{cpp_method_call(method, argument.v8_set_return_value_for_main_world, argument.cpp_value) | indent(2)}}
|
| + {% else %}
|
| + {{cpp_method_call(method, argument.v8_set_return_value, argument.cpp_value) | indent(2)}}
|
| + {% endif %}
|
| + return;
|
| }
|
| {% endif %}
|
| {% if argument.is_callback_interface %}
|
| @@ -152,49 +151,49 @@ if (UNLIKELY(numArgsPassed <= {{argument.index}})) {
|
| http://www.w3.org/TR/WebIDL/#es-callback-function #}
|
| {% if argument.is_optional %}
|
| if (!isUndefinedOrNull(info[{{argument.index}}])) {
|
| - if (!info[{{argument.index}}]->IsFunction()) {
|
| - {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| - return;
|
| - }
|
| - {{argument.name}} = V8{{argument.idl_type}}::create(v8::Local<v8::Function>::Cast(info[{{argument.index}}]), ScriptState::current(info.GetIsolate()));
|
| + if (!info[{{argument.index}}]->IsFunction()) {
|
| + {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| + return;
|
| + }
|
| + {{argument.name}} = V8{{argument.idl_type}}::create(v8::Local<v8::Function>::Cast(info[{{argument.index}}]), ScriptState::current(info.GetIsolate()));
|
| } else {
|
| - {{argument.name}} = nullptr;
|
| + {{argument.name}} = nullptr;
|
| }
|
| {% else %}{# argument.is_optional #}
|
| if (info.Length() <= {{argument.index}} || !{% if argument.is_nullable %}(info[{{argument.index}}]->IsFunction() || info[{{argument.index}}]->IsNull()){% else %}info[{{argument.index}}]->IsFunction(){% endif %}) {
|
| - {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| - return;
|
| + {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| + return;
|
| }
|
| {{argument.name}} = {% if argument.is_nullable %}info[{{argument.index}}]->IsNull() ? nullptr : {% endif %}V8{{argument.idl_type}}::create(v8::Local<v8::Function>::Cast(info[{{argument.index}}]), ScriptState::current(info.GetIsolate()));
|
| {% endif %}{# argument.is_optional #}
|
| {% endif %}{# argument.idl_type == 'EventListener' #}
|
| {% elif argument.is_callback_function %}
|
| if (!info[{{argument.index}}]->IsFunction(){% if argument.is_nullable %} && !info[{{argument.index}}]->IsNull(){% endif %}) {
|
| - {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| - return;
|
| + {{throw_argument_error(method, argument, "The callback provided as parameter %(index)d is not a function.")}}
|
| + return;
|
| }
|
| {{v8_value_to_local_cpp_value(argument)}}
|
| {% elif argument.is_variadic_wrapper_type %}
|
| for (int i = {{argument.index}}; i < info.Length(); ++i) {
|
| - if (!V8{{argument.idl_type}}::hasInstance(info[i], info.GetIsolate())) {
|
| - {{throw_argument_error(method, argument, "parameter %(index)d is not of type '%(type)s'.")}}
|
| - return;
|
| - }
|
| - {{argument.name}}.append(V8{{argument.idl_type}}::toImpl(v8::Local<v8::Object>::Cast(info[i])));
|
| + if (!V8{{argument.idl_type}}::hasInstance(info[i], info.GetIsolate())) {
|
| + {{throw_argument_error(method, argument, "parameter %(index)d is not of type '%(type)s'.")}}
|
| + return;
|
| + }
|
| + {{argument.name}}.append(V8{{argument.idl_type}}::toImpl(v8::Local<v8::Object>::Cast(info[i])));
|
| }
|
| {% elif argument.is_dictionary %}
|
| {% if not argument.use_permissive_dictionary_conversion %}
|
| {# Dictionaries must have type Undefined, Null or Object:
|
| http://heycam.github.io/webidl/#es-dictionary #}
|
| if (!isUndefinedOrNull(info[{{argument.index}}]) && !info[{{argument.index}}]->IsObject()) {
|
| - {{throw_argument_error(method, argument, "parameter %(index)d ('%(name)s') is not an object.")}}
|
| - return;
|
| + {{throw_argument_error(method, argument, "parameter %(index)d ('%(name)s') is not an object.")}}
|
| + return;
|
| }
|
| {% endif %}{# not argument.use_permissive_dictionary_conversion #}
|
| {{v8_value_to_local_cpp_value(argument)}}
|
| {% elif argument.is_explicit_nullable %}
|
| if (!isUndefinedOrNull(info[{{argument.index}}])) {
|
| - {{v8_value_to_local_cpp_value(argument) | indent}}
|
| + {{v8_value_to_local_cpp_value(argument) | indent(2)}}
|
| }
|
| {% else %}{# argument.is_nullable #}
|
| {{v8_value_to_local_cpp_value(argument)}}
|
| @@ -207,22 +206,22 @@ if (!isUndefinedOrNull(info[{{argument.index}}])) {
|
| Note: for variadic arguments, the type checking is done for each matched
|
| argument instead; see argument.is_variadic_wrapper_type code-path above. #}
|
| if (!{{argument.name}}{% if argument.is_nullable %} && !isUndefinedOrNull(info[{{argument.index}}]){% endif %}) {
|
| - {{throw_argument_error(method, argument, "parameter %(index)d is not of type '%(type)s'.")}}
|
| - return;
|
| + {{throw_argument_error(method, argument, "parameter %(index)d is not of type '%(type)s'.")}}
|
| + return;
|
| }
|
| {% elif argument.enum_values %}
|
| {# Invalid enum values: http://www.w3.org/TR/WebIDL/#idl-enums #}
|
| {% set enum_variable = 'valid' + argument.name[0].upper() + argument.name[1:] + 'Values' %}
|
| {{declare_enum_validation_variable(argument.enum_values, enum_variable)}}
|
| if (!isValidEnum({{argument.name}}, {{enum_variable}}, WTF_ARRAY_LENGTH({{enum_variable}}), "{{argument.enum_type}}", exceptionState)) {
|
| - return;
|
| + return;
|
| }
|
| {% elif argument.idl_type == 'Promise' %}
|
| {# We require this for our implementation of promises, though not in spec:
|
| http://heycam.github.io/webidl/#es-promise #}
|
| if (!{{argument.name}}.isUndefinedOrNull() && !{{argument.name}}.isObject()) {
|
| - {{throw_argument_error(method, argument, "parameter %(index)d ('%(name)s') is not an object.")}}
|
| - return;
|
| + {{throw_argument_error(method, argument, "parameter %(index)d ('%(name)s') is not an object.")}}
|
| + return;
|
| }
|
| {% endif %}
|
| {% endmacro %}
|
| @@ -253,7 +252,7 @@ Document& document = *toDocument(currentExecutionContext(info.GetIsolate()));
|
| {% elif method.is_implemented_in_private_script %}
|
| {{method.cpp_type}} result{{method.cpp_type_initializer}};
|
| if (!{{method.cpp_value}})
|
| - return;
|
| + return;
|
| {% elif method.use_output_parameter_for_result %}
|
| {{method.cpp_type}} result;
|
| {{cpp_value}};
|
| @@ -265,7 +264,7 @@ if (!{{method.cpp_value}})
|
| {# Post-call #}
|
| {% if method.is_raises_exception %}
|
| if (exceptionState.hadException()) {
|
| - return;
|
| + return;
|
| }
|
| {% endif %}
|
| {# Set return value #}
|
| @@ -279,9 +278,9 @@ DCHECK(!result || DOMDataStore::getWrapper(result, info.GetIsolate()).IsEmpty())
|
| {%- elif v8_set_return_value %}
|
| {% if method.is_explicit_nullable %}
|
| if (result.isNull())
|
| - v8SetReturnValueNull(info);
|
| + v8SetReturnValueNull(info);
|
| else
|
| - {{v8_set_return_value}};
|
| + {{v8_set_return_value}};
|
| {% else %}
|
| {{v8_set_return_value}};
|
| {% endif %}
|
| @@ -294,8 +293,7 @@ else
|
|
|
| {##############################################################################}
|
| {% macro throw_type_error(method, error_message) %}
|
| -{% if method.has_exception_state or
|
| - method.returns_promise %}
|
| +{% if method.has_exception_state or method.returns_promise %}
|
| exceptionState.throwTypeError({{error_message}});
|
| {%- elif method.is_constructor %}
|
| V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::failedToConstruct("{{interface_name}}", {{error_message}}));
|
| @@ -314,277 +312,268 @@ V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::failedToE
|
|
|
| {##############################################################################}
|
| {% macro runtime_determined_length_method(overloads) %}
|
| -static int {{overloads.name}}MethodLength()
|
| -{
|
| - {% for length, runtime_enabled_functions in overloads.runtime_determined_lengths %}
|
| - {% for runtime_enabled_function in runtime_enabled_functions %}
|
| - {% filter runtime_enabled(runtime_enabled_function) %}
|
| - return {{length}};
|
| - {% endfilter %}
|
| - {% endfor %}
|
| - {% endfor %}
|
| +static int {{overloads.name}}MethodLength() {
|
| + {% for length, runtime_enabled_functions in overloads.runtime_determined_lengths %}
|
| + {% for runtime_enabled_function in runtime_enabled_functions %}
|
| + {% filter runtime_enabled(runtime_enabled_function) %}
|
| + return {{length}};
|
| + {% endfilter %}
|
| + {% endfor %}
|
| + {% endfor %}
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro runtime_determined_maxarg_method(overloads) %}
|
| -static int {{overloads.name}}MethodMaxArg()
|
| -{
|
| - {% for length, runtime_enabled_functions in overloads.runtime_determined_maxargs %}
|
| - {% for runtime_enabled_function in runtime_enabled_functions %}
|
| - {% filter runtime_enabled(runtime_enabled_function) %}
|
| - return {{length}};
|
| - {% endfilter %}
|
| - {% endfor %}
|
| - {% endfor %}
|
| +static int {{overloads.name}}MethodMaxArg() {
|
| + {% for length, runtime_enabled_functions in overloads.runtime_determined_maxargs %}
|
| + {% for runtime_enabled_function in runtime_enabled_functions %}
|
| + {% filter runtime_enabled(runtime_enabled_function) %}
|
| + return {{length}};
|
| + {% endfilter %}
|
| + {% endfor %}
|
| + {% endfor %}
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro overload_resolution_method(overloads, world_suffix) %}
|
| -static void {{overloads.name}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info)
|
| -{
|
| - {% set fall_through_to_partial_overloads =
|
| - not is_partial and overloads.has_partial_overloads %}
|
| -
|
| - {% if overloads.measure_all_as %}
|
| - UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{overloads.measure_all_as}});
|
| - {% endif %}
|
| - {% if overloads.deprecate_all_as %}
|
| - Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{overloads.deprecate_all_as}});
|
| - {% endif %}
|
| -
|
| - {# First resolve by length #}
|
| - {% if not fall_through_to_partial_overloads %}
|
| - bool isArityError = false;
|
| - {% endif %}
|
| - {# 2. Initialize argcount to be min(maxarg, n). #}
|
| - switch (std::min({{overloads.maxarg}}, info.Length())) {
|
| +static void {{overloads.name}}Method{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info) {
|
| + {% set fall_through_to_partial_overloads = not is_partial and overloads.has_partial_overloads %}
|
| +
|
| + {% if overloads.measure_all_as %}
|
| + UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{overloads.measure_all_as}});
|
| + {% endif %}
|
| + {% if overloads.deprecate_all_as %}
|
| + Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{overloads.deprecate_all_as}});
|
| + {% endif %}
|
| +
|
| + {# First resolve by length #}
|
| + {% if not fall_through_to_partial_overloads %}
|
| + bool isArityError = false;
|
| + {% endif %}
|
| + {# 2. Initialize argcount to be min(maxarg, n). #}
|
| + switch (std::min({{overloads.maxarg}}, info.Length())) {
|
| {# 3. Remove from S all entries whose type list is not of length argcount. #}
|
| {% for length, tests_methods in overloads.length_tests_methods %}
|
| {# 10. If i = d, then: #}
|
| case {{length}}:
|
| - {# Then resolve by testing argument #}
|
| - {% for test, method in tests_methods %}
|
| - {% if method.visible %}
|
| - {% filter runtime_enabled(not overloads.runtime_enabled_function_all and
|
| - method.runtime_enabled_function) %}
|
| - if ({{test}}) {
|
| - {% if method.measure_as and not overloads.measure_all_as %}
|
| - UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.measure_as('Method')}});
|
| - {% endif %}
|
| - {% if method.deprecate_as and not overloads.deprecate_all_as %}
|
| - Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.deprecate_as}});
|
| - {% endif %}
|
| - {{method.name}}{{method.overload_index}}Method{{world_suffix}}(info);
|
| - return;
|
| - }
|
| - {% endfilter %}
|
| + {# Then resolve by testing argument #}
|
| + {% for test, method in tests_methods %}
|
| + {% if method.visible %}
|
| + {% filter runtime_enabled(not overloads.runtime_enabled_function_all and
|
| + method.runtime_enabled_function) %}
|
| + if ({{test}}) {
|
| + {% if method.measure_as and not overloads.measure_all_as %}
|
| + UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.measure_as('Method')}});
|
| + {% endif %}
|
| + {% if method.deprecate_as and not overloads.deprecate_all_as %}
|
| + Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.deprecate_as}});
|
| {% endif %}
|
| - {% endfor %}
|
| - break;
|
| - {% endfor %}
|
| + {{method.name}}{{method.overload_index}}Method{{world_suffix}}(info);
|
| + return;
|
| + }
|
| + {% endfilter %}
|
| + {% endif %}
|
| + {% endfor %}
|
| + break;
|
| + {% endfor %}{# length, tests_methods #}
|
| {% if not fall_through_to_partial_overloads %}
|
| default:
|
| - {# 4. If S is empty, then throw a TypeError. #}
|
| - isArityError = true;
|
| + {# 4. If S is empty, then throw a TypeError. #}
|
| + isArityError = true;
|
| {% endif %}
|
| - }
|
| + }
|
|
|
| - {% if fall_through_to_partial_overloads %}
|
| + {% if fall_through_to_partial_overloads %}
|
|
|
| - DCHECK({{overloads.name}}MethodForPartialInterface);
|
| - ({{overloads.name}}MethodForPartialInterface)(info);
|
| + DCHECK({{overloads.name}}MethodForPartialInterface);
|
| + ({{overloads.name}}MethodForPartialInterface)(info);
|
|
|
| - {% else %}{# fall_through_to_partial_overloads #}
|
| + {% else %}{# fall_through_to_partial_overloads #}
|
|
|
| - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{overloads.name}}");
|
| - {% if overloads.returns_promise_all %}
|
| - ExceptionToRejectPromiseScope rejectPromiseScope(info, exceptionState);
|
| - {% endif %}
|
| + ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{overloads.name}}");
|
| + {% if overloads.returns_promise_all %}
|
| + ExceptionToRejectPromiseScope rejectPromiseScope(info, exceptionState);
|
| + {% endif %}
|
|
|
| - if (isArityError) {
|
| - {% if overloads.length != 0 %}
|
| - if (info.Length() < {{overloads.length}}) {
|
| - exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{overloads.length}}, info.Length()));
|
| - return;
|
| - }
|
| - {% endif %}
|
| - {% if overloads.valid_arities %}
|
| - if (info.Length() >= {{overloads.length}}) {
|
| - exceptionState.throwTypeError(ExceptionMessages::invalidArity("{{overloads.valid_arities}}", info.Length()));
|
| - return;
|
| - }
|
| - {% endif %}
|
| + if (isArityError) {
|
| + {% if overloads.length != 0 %}
|
| + if (info.Length() < {{overloads.length}}) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{overloads.length}}, info.Length()));
|
| + return;
|
| + }
|
| + {% endif %}
|
| + {% if overloads.valid_arities %}
|
| + if (info.Length() >= {{overloads.length}}) {
|
| + exceptionState.throwTypeError(ExceptionMessages::invalidArity("{{overloads.valid_arities}}", info.Length()));
|
| + return;
|
| }
|
| - exceptionState.throwTypeError("No function was found that matched the signature provided.");
|
| + {% endif %}
|
| + }
|
| + exceptionState.throwTypeError("No function was found that matched the signature provided.");
|
|
|
| - {% endif %}{# fall_through_to_partial_overloads #}
|
| + {% endif %}{# fall_through_to_partial_overloads #}
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro generate_post_message_impl(method) %}
|
| -static void postMessageImpl(const char* interfaceName, {{cpp_class}}* instance, const v8::FunctionCallbackInfo<v8::Value>& info)
|
| -{
|
| - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, interfaceName, "postMessage");
|
| - if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) {
|
| - exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{method.number_of_required_arguments}}, info.Length()));
|
| - return;
|
| - }
|
| -
|
| - Transferables transferables;
|
| - if (info.Length() > 1) {
|
| - const int transferablesArgIndex = 1;
|
| - if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, transferables, exceptionState)) {
|
| - return;
|
| - }
|
| - }
|
| +static void postMessageImpl(const char* interfaceName, {{cpp_class}}* instance, const v8::FunctionCallbackInfo<v8::Value>& info) {
|
| + ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, interfaceName, "postMessage");
|
| + if (UNLIKELY(info.Length() < {{method.number_of_required_arguments}})) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments({{method.number_of_required_arguments}}, info.Length()));
|
| + return;
|
| + }
|
|
|
| - RefPtr<SerializedScriptValue> message;
|
| - if (instance->canTransferArrayBuffer()) {
|
| - // This instance supports sending array buffers by move semantics.
|
| - message = SerializedScriptValue::serialize(info.GetIsolate(), info[0], &transferables, nullptr, exceptionState);
|
| - if (exceptionState.hadException())
|
| - return;
|
| - } else {
|
| - // This instance doesn't support sending array buffers by move
|
| - // semantics. Emulate it by copy-and-neuter semantics that sends array
|
| - // buffers by copy semantics and then neuters the original array
|
| - // buffers.
|
| -
|
| - // Clear references to array buffers from transferables so that the
|
| - // serializer can consider the array buffers as non-transferable and
|
| - // copy them into the message.
|
| - ArrayBufferArray transferableArrayBuffers = transferables.arrayBuffers;
|
| - transferables.arrayBuffers.clear();
|
| - message = SerializedScriptValue::serialize(info.GetIsolate(), info[0], &transferables, nullptr, exceptionState);
|
| - if (exceptionState.hadException())
|
| - return;
|
| -
|
| - // Neuter the original array buffers on the sender context.
|
| - SerializedScriptValue::transferArrayBufferContents(info.GetIsolate(), transferableArrayBuffers, exceptionState);
|
| - if (exceptionState.hadException())
|
| - return;
|
| + Transferables transferables;
|
| + if (info.Length() > 1) {
|
| + const int transferablesArgIndex = 1;
|
| + if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, transferables, exceptionState)) {
|
| + return;
|
| }
|
| -
|
| - // FIXME: Only pass context/exceptionState if instance really requires it.
|
| - ExecutionContext* context = currentExecutionContext(info.GetIsolate());
|
| - instance->postMessage(context, message.release(), transferables.messagePorts, exceptionState);
|
| + }
|
| +
|
| + RefPtr<SerializedScriptValue> message;
|
| + if (instance->canTransferArrayBuffer()) {
|
| + // This instance supports sending array buffers by move semantics.
|
| + message = SerializedScriptValue::serialize(info.GetIsolate(), info[0], &transferables, nullptr, exceptionState);
|
| + if (exceptionState.hadException())
|
| + return;
|
| + } else {
|
| + // This instance doesn't support sending array buffers by move
|
| + // semantics. Emulate it by copy-and-neuter semantics that sends array
|
| + // buffers by copy semantics and then neuters the original array
|
| + // buffers.
|
| +
|
| + // Clear references to array buffers from transferables so that the
|
| + // serializer can consider the array buffers as non-transferable and
|
| + // copy them into the message.
|
| + ArrayBufferArray transferableArrayBuffers = transferables.arrayBuffers;
|
| + transferables.arrayBuffers.clear();
|
| + message = SerializedScriptValue::serialize(info.GetIsolate(), info[0], &transferables, nullptr, exceptionState);
|
| + if (exceptionState.hadException())
|
| + return;
|
| +
|
| + // Neuter the original array buffers on the sender context.
|
| + SerializedScriptValue::transferArrayBufferContents(info.GetIsolate(), transferableArrayBuffers, exceptionState);
|
| + if (exceptionState.hadException())
|
| + return;
|
| + }
|
| +
|
| + // FIXME: Only pass context/exceptionState if instance really requires it.
|
| + ExecutionContext* context = currentExecutionContext(info.GetIsolate());
|
| + instance->postMessage(context, message.release(), transferables.messagePorts, exceptionState);
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro method_callback(method, world_suffix) %}
|
| -void {{method.name}}MethodCallback{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info)
|
| -{
|
| - {% if not method.overloads %}{# Overloaded methods are measured in overload_resolution_method() #}
|
| - {% if method.measure_as %}
|
| - UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.measure_as('Method')}});
|
| - {% endif %}
|
| - {% if method.deprecate_as %}
|
| - Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.deprecate_as}});
|
| - {% endif %}
|
| - {% endif %}{# not method.overloads #}
|
| - {% if world_suffix in method.activity_logging_world_list %}
|
| - {% if method.is_static %}
|
| - ScriptState* scriptState = ScriptState::forFunctionObject(info);
|
| - {% else %}
|
| - ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| - {% endif %}
|
| - V8PerContextData* contextData = scriptState->perContextData();
|
| - if (contextData && contextData->activityLogger()) {
|
| - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{method.name}}");
|
| - Vector<v8::Local<v8::Value>> loggerArgs = toImplArguments<Vector<v8::Local<v8::Value>>>(info, 0, exceptionState);
|
| - contextData->activityLogger()->logMethod("{{interface_name}}.{{method.name}}", info.Length(), loggerArgs.data());
|
| - }
|
| - {% endif %}
|
| - {% if method.is_ce_reactions %}
|
| - CEReactionsScope ceReactionsScope;
|
| - {% endif %}
|
| - {% if method.is_custom %}
|
| - {{v8_class}}::{{method.name}}MethodCustom(info);
|
| - {% elif method.is_post_message %}
|
| - postMessageImpl("{{interface_name}}", {{v8_class}}::toImpl(info.Holder()), info);
|
| - {% else %}
|
| - {{cpp_class_or_partial}}V8Internal::{{method.name}}Method{{world_suffix}}(info);
|
| - {% endif %}
|
| +void {{method.name}}MethodCallback{{world_suffix}}(const v8::FunctionCallbackInfo<v8::Value>& info) {
|
| + {% if not method.overloads %}{# Overloaded methods are measured in overload_resolution_method() #}
|
| + {% if method.measure_as %}
|
| + UseCounter::countIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.measure_as('Method')}});
|
| + {% endif %}
|
| + {% if method.deprecate_as %}
|
| + Deprecation::countDeprecationIfNotPrivateScript(info.GetIsolate(), currentExecutionContext(info.GetIsolate()), UseCounter::{{method.deprecate_as}});
|
| + {% endif %}
|
| + {% endif %}{# not method.overloads #}
|
| + {% if world_suffix in method.activity_logging_world_list %}
|
| + {% if method.is_static %}
|
| + ScriptState* scriptState = ScriptState::forFunctionObject(info);
|
| + {% else %}
|
| + ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| + {% endif %}
|
| + V8PerContextData* contextData = scriptState->perContextData();
|
| + if (contextData && contextData->activityLogger()) {
|
| + ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ExecutionContext, "{{interface_name}}", "{{method.name}}");
|
| + Vector<v8::Local<v8::Value>> loggerArgs = toImplArguments<Vector<v8::Local<v8::Value>>>(info, 0, exceptionState);
|
| + contextData->activityLogger()->logMethod("{{interface_name}}.{{method.name}}", info.Length(), loggerArgs.data());
|
| + }
|
| + {% endif %}
|
| + {% if method.is_ce_reactions %}
|
| + CEReactionsScope ceReactionsScope;
|
| + {% endif %}
|
| + {% if method.is_custom %}
|
| + {{v8_class}}::{{method.name}}MethodCustom(info);
|
| + {% elif method.is_post_message %}
|
| + postMessageImpl("{{interface_name}}", {{v8_class}}::toImpl(info.Holder()), info);
|
| + {% else %}
|
| + {{cpp_class_or_partial}}V8Internal::{{method.name}}Method{{world_suffix}}(info);
|
| + {% endif %}
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro origin_safe_method_getter(method, world_suffix) %}
|
| -static void {{method.name}}OriginSafeMethodGetter{{world_suffix}}(const v8::PropertyCallbackInfo<v8::Value>& info)
|
| -{
|
| - static int domTemplateKey; // This address is used for a key to look up the dom template.
|
| - V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate());
|
| - const DOMWrapperWorld& world = DOMWrapperWorld::world(info.GetIsolate()->GetCurrentContext());
|
| - v8::Local<v8::FunctionTemplate> interfaceTemplate = data->findInterfaceTemplate(world, &{{v8_class}}::wrapperTypeInfo);
|
| - v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interfaceTemplate);
|
| -
|
| - v8::Local<v8::FunctionTemplate> methodTemplate = data->findOrCreateOperationTemplate(world, &domTemplateKey, {{cpp_class}}V8Internal::{{method.name}}MethodCallback{{world_suffix}}, v8Undefined(), signature, {{method.length}});
|
| - // Return the function by default, unless the user script has overwritten it.
|
| - v8SetReturnValue(info, methodTemplate->GetFunction(info.GetIsolate()->GetCurrentContext()).ToLocalChecked());
|
| -
|
| - {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
|
| - if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), impl, BindingSecurity::ErrorReportOption::DoNotReport)) {
|
| - return;
|
| - }
|
| +static void {{method.name}}OriginSafeMethodGetter{{world_suffix}}(const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| + static int domTemplateKey; // This address is used for a key to look up the dom template.
|
| + V8PerIsolateData* data = V8PerIsolateData::from(info.GetIsolate());
|
| + const DOMWrapperWorld& world = DOMWrapperWorld::world(info.GetIsolate()->GetCurrentContext());
|
| + v8::Local<v8::FunctionTemplate> interfaceTemplate = data->findInterfaceTemplate(world, &{{v8_class}}::wrapperTypeInfo);
|
| + v8::Local<v8::Signature> signature = v8::Signature::New(info.GetIsolate(), interfaceTemplate);
|
| +
|
| + v8::Local<v8::FunctionTemplate> methodTemplate = data->findOrCreateOperationTemplate(world, &domTemplateKey, {{cpp_class}}V8Internal::{{method.name}}MethodCallback{{world_suffix}}, v8Undefined(), signature, {{method.length}});
|
| + // Return the function by default, unless the user script has overwritten it.
|
| + v8SetReturnValue(info, methodTemplate->GetFunction(info.GetIsolate()->GetCurrentContext()).ToLocalChecked());
|
| +
|
| + {{cpp_class}}* impl = {{v8_class}}::toImpl(info.Holder());
|
| + if (!BindingSecurity::shouldAllowAccessTo(currentDOMWindow(info.GetIsolate()), impl, BindingSecurity::ErrorReportOption::DoNotReport)) {
|
| + return;
|
| + }
|
|
|
| - v8::Local<v8::Value> hiddenValue = V8HiddenValue::getHiddenValue(ScriptState::current(info.GetIsolate()), v8::Local<v8::Object>::Cast(info.Holder()), v8AtomicString(info.GetIsolate(), "{{method.name}}"));
|
| - if (!hiddenValue.IsEmpty()) {
|
| - v8SetReturnValue(info, hiddenValue);
|
| - }
|
| + v8::Local<v8::Value> hiddenValue = V8HiddenValue::getHiddenValue(ScriptState::current(info.GetIsolate()), v8::Local<v8::Object>::Cast(info.Holder()), v8AtomicString(info.GetIsolate(), "{{method.name}}"));
|
| + if (!hiddenValue.IsEmpty()) {
|
| + v8SetReturnValue(info, hiddenValue);
|
| + }
|
| }
|
|
|
| -void {{method.name}}OriginSafeMethodGetterCallback{{world_suffix}}(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info)
|
| -{
|
| - {{cpp_class}}V8Internal::{{method.name}}OriginSafeMethodGetter{{world_suffix}}(info);
|
| +void {{method.name}}OriginSafeMethodGetterCallback{{world_suffix}}(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| + {{cpp_class}}V8Internal::{{method.name}}OriginSafeMethodGetter{{world_suffix}}(info);
|
| }
|
| {% endmacro %}
|
|
|
|
|
| {##############################################################################}
|
| {% macro method_implemented_in_private_script(method) %}
|
| -bool {{v8_class}}::PrivateScript::{{method.name}}Method({{method.argument_declarations_for_private_script | join(', ')}})
|
| -{
|
| - if (!frame)
|
| - return false;
|
| - v8::HandleScope handleScope(toIsolate(frame));
|
| - ScriptForbiddenScope::AllowUserAgentScript script;
|
| - ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::privateScriptIsolatedWorld());
|
| - if (!scriptState)
|
| - return false;
|
| - ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame);
|
| - if (!scriptStateInUserScript)
|
| - return false;
|
| -
|
| - ScriptState::Scope scope(scriptState);
|
| - v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Global(), scriptState->isolate());
|
| - {% for argument in method.arguments %}
|
| - v8::Local<v8::Value> {{argument.handle}} = {{argument.private_script_cpp_value_to_v8_value}};
|
| - {% endfor %}
|
| - {% if method.arguments %}
|
| - v8::Local<v8::Value> argv[] = { {{method.arguments | join(', ', 'handle')}} };
|
| - {% else %}
|
| - {# Empty array initializers are illegal, and don\t compile in MSVC. #}
|
| - v8::Local<v8::Value> *argv = 0;
|
| - {% endif %}
|
| - ExceptionState exceptionState(scriptState->isolate(), ExceptionState::ExecutionContext, "{{cpp_class}}", "{{method.name}}");
|
| - v8::Local<v8::Value> v8Value = PrivateScriptRunner::runDOMMethod(scriptState, scriptStateInUserScript, "{{cpp_class}}", "{{method.name}}", holder, {{method.arguments | length}}, argv);
|
| - if (v8Value.IsEmpty())
|
| - return false;
|
| - {% if method.idl_type != 'void' %}
|
| - {{v8_value_to_local_cpp_value(method.private_script_v8_value_to_local_cpp_value) | indent}}
|
| - *result = cppValue;
|
| - {% endif %}
|
| - CHECK(!exceptionState.hadException());
|
| - return true;
|
| +bool {{v8_class}}::PrivateScript::{{method.name}}Method({{method.argument_declarations_for_private_script | join(', ')}}) {
|
| + if (!frame)
|
| + return false;
|
| + v8::HandleScope handleScope(toIsolate(frame));
|
| + ScriptForbiddenScope::AllowUserAgentScript script;
|
| + ScriptState* scriptState = ScriptState::forWorld(frame, DOMWrapperWorld::privateScriptIsolatedWorld());
|
| + if (!scriptState)
|
| + return false;
|
| + ScriptState* scriptStateInUserScript = ScriptState::forMainWorld(frame);
|
| + if (!scriptStateInUserScript)
|
| + return false;
|
| +
|
| + ScriptState::Scope scope(scriptState);
|
| + v8::Local<v8::Value> holder = toV8(holderImpl, scriptState->context()->Global(), scriptState->isolate());
|
| + {% for argument in method.arguments %}
|
| + v8::Local<v8::Value> {{argument.handle}} = {{argument.private_script_cpp_value_to_v8_value}};
|
| + {% endfor %}
|
| + {% if method.arguments %}
|
| + v8::Local<v8::Value> argv[] = { {{method.arguments | join(', ', 'handle')}} };
|
| + {% else %}
|
| + {# Empty array initializers are illegal, and don\t compile in MSVC. #}
|
| + v8::Local<v8::Value> *argv = 0;
|
| + {% endif %}
|
| + ExceptionState exceptionState(scriptState->isolate(), ExceptionState::ExecutionContext, "{{cpp_class}}", "{{method.name}}");
|
| + v8::Local<v8::Value> v8Value = PrivateScriptRunner::runDOMMethod(scriptState, scriptStateInUserScript, "{{cpp_class}}", "{{method.name}}", holder, {{method.arguments | length}}, argv);
|
| + if (v8Value.IsEmpty())
|
| + return false;
|
| + {% if method.idl_type != 'void' %}
|
| + {{v8_value_to_local_cpp_value(method.private_script_v8_value_to_local_cpp_value) | indent(2)}}
|
| + *result = cppValue;
|
| + {% endif %}
|
| + CHECK(!exceptionState.hadException());
|
| + return true;
|
| }
|
| {% endmacro %}
|
|
|
| @@ -594,30 +583,29 @@ bool {{v8_class}}::PrivateScript::{{method.name}}Method({{method.argument_declar
|
| {% set name = '%sConstructorCallback' % v8_class
|
| if constructor.is_named_constructor else
|
| 'constructor%s' % (constructor.overload_index or '') %}
|
| -static void {{name}}(const v8::FunctionCallbackInfo<v8::Value>& info)
|
| -{
|
| - {% set function_call = func_call_with_prep_of_args(constructor) %}
|
| +static void {{name}}(const v8::FunctionCallbackInfo<v8::Value>& info) {
|
| + {% set function_call = func_call_with_prep_of_args(constructor) %}
|
|
|
| - {% if constructor.is_named_constructor %}
|
| - if (!info.IsConstructCall()) {
|
| - V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("{{constructor.name}}"));
|
| - return;
|
| - }
|
| + {% if constructor.is_named_constructor %}
|
| + if (!info.IsConstructCall()) {
|
| + V8ThrowException::throwTypeError(info.GetIsolate(), ExceptionMessages::constructorNotCallableAsFunction("{{constructor.name}}"));
|
| + return;
|
| + }
|
|
|
| - if (ConstructorMode::current(info.GetIsolate()) == ConstructorMode::WrapExistingObject) {
|
| - v8SetReturnValue(info, info.Holder());
|
| - return;
|
| - }
|
| - {% endif %}
|
| + if (ConstructorMode::current(info.GetIsolate()) == ConstructorMode::WrapExistingObject) {
|
| + v8SetReturnValue(info, info.Holder());
|
| + return;
|
| + }
|
| + {% endif %}
|
|
|
| - {% if 'exceptionState' in function_call %}
|
| - ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ConstructionContext, "{{interface_name}}");
|
| - {% endif %}
|
| - {% if 'scriptState' in function_call %}
|
| - ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| - {% endif %}
|
| + {% if 'exceptionState' in function_call %}
|
| + ExceptionState exceptionState(info.GetIsolate(), ExceptionState::ConstructionContext, "{{interface_name}}");
|
| + {% endif %}
|
| + {% if 'scriptState' in function_call %}
|
| + ScriptState* scriptState = ScriptState::forReceiverObject(info);
|
| + {% endif %}
|
|
|
| - {{function_call | indent}}
|
| + {{function_call | indent(2)}}
|
| }
|
| {% endmacro %}
|
|
|
| @@ -662,7 +650,7 @@ V8DOMConfiguration::installMethod(isolate, world, {{instance_template}}, {{proto
|
| {# Define operations with limited exposure #}
|
| v8::Local<v8::Signature> signature = v8::Signature::New(isolate, interfaceTemplate);
|
| ExecutionContext* executionContext = toExecutionContext(prototypeObject->CreationContext());
|
| -ASSERT(executionContext);
|
| +DCHECK(executionContext);
|
| {% for method in methods | conditionally_exposed(is_partial) %}
|
| {% filter secure_context(method.overloads.secure_context_test_all
|
| if method.overloads else
|
|
|