| Index: third_party/WebKit/Source/bindings/scripts/v8_interface.py
|
| diff --git a/third_party/WebKit/Source/bindings/scripts/v8_interface.py b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
|
| index e413f9696799c2a59339b16c3159afe626445302..a9a7acf97bd920888f8a06ef664c9558738a2d4c 100644
|
| --- a/third_party/WebKit/Source/bindings/scripts/v8_interface.py
|
| +++ b/third_party/WebKit/Source/bindings/scripts/v8_interface.py
|
| @@ -376,8 +376,7 @@ def interface_context(interface, interfaces):
|
| # Methods
|
| methods, iterator_method = methods_context(interface)
|
| context.update({
|
| - 'has_origin_safe_method_setter': is_global and any(
|
| - method['is_check_security_for_receiver'] and not method['is_unforgeable']
|
| + 'has_origin_safe_method_setter': any(method['is_cross_origin'] and not method['is_unforgeable']
|
| for method in methods),
|
| 'has_private_script': (any(attribute['is_implemented_in_private_script'] for attribute in attributes) or
|
| any(method['is_implemented_in_private_script'] for method in methods)),
|
| @@ -423,6 +422,41 @@ def interface_context(interface, interfaces):
|
| context.update({
|
| 'origin_trial_features': origin_trial_features(interface, context['constants'], context['attributes'], context['methods']),
|
| })
|
| +
|
| + # Cross-origin interceptors
|
| + has_cross_origin_named_getter = False
|
| + has_cross_origin_named_setter = False
|
| + has_cross_origin_indexed_getter = False
|
| +
|
| + for attribute in attributes:
|
| + if attribute['has_cross_origin_getter']:
|
| + has_cross_origin_named_getter = True
|
| + if attribute['has_cross_origin_setter']:
|
| + has_cross_origin_named_setter = True
|
| +
|
| + # Methods are exposed as getter attributes on the interface: e.g.
|
| + # window.location gets the location attribute on the Window interface. For
|
| + # the cross-origin case, this attribute getter is guaranteed to only return
|
| + # a Function object, which the actual call is dispatched against.
|
| + for method in methods:
|
| + if method['is_cross_origin']:
|
| + has_cross_origin_named_getter = True
|
| +
|
| + has_cross_origin_named_enumerator = has_cross_origin_named_getter or has_cross_origin_named_setter # pylint: disable=invalid-name
|
| +
|
| + if context['named_property_getter'] and context['named_property_getter']['is_cross_origin']:
|
| + has_cross_origin_named_getter = True
|
| +
|
| + if context['indexed_property_getter'] and context['indexed_property_getter']['is_cross_origin']:
|
| + has_cross_origin_indexed_getter = True
|
| +
|
| + context.update({
|
| + 'has_cross_origin_named_getter': has_cross_origin_named_getter,
|
| + 'has_cross_origin_named_setter': has_cross_origin_named_setter,
|
| + 'has_cross_origin_named_enumerator': has_cross_origin_named_enumerator,
|
| + 'has_cross_origin_indexed_getter': has_cross_origin_indexed_getter,
|
| + })
|
| +
|
| return context
|
|
|
|
|
| @@ -798,19 +832,6 @@ def overloads_context(interface, overloads):
|
| maxarg = ('%sV8Internal::%sMethodMaxArg()'
|
| % (cpp_name_or_partial(interface), name))
|
|
|
| - # Check and fail if overloads disagree on any of the extended attributes
|
| - # that affect how the method should be registered.
|
| - # Skip the check for overloaded constructors, since they don't support any
|
| - # of the extended attributes in question.
|
| - if not overloads[0].get('is_constructor'):
|
| - overload_extended_attributes = [
|
| - method['custom_registration_extended_attributes']
|
| - for method in overloads]
|
| - for extended_attribute in v8_methods.CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES:
|
| - if common_key(overload_extended_attributes, extended_attribute) is None:
|
| - raise ValueError('Overloads of %s have conflicting extended attribute %s'
|
| - % (name, extended_attribute))
|
| -
|
| # Check and fail if overloads disagree about whether the return type
|
| # is a Promise or not.
|
| promise_overload_count = sum(1 for method in overloads if method.get('returns_promise'))
|
| @@ -835,7 +856,6 @@ def overloads_context(interface, overloads):
|
| return {
|
| 'deprecate_all_as': common_value(overloads, 'deprecate_as'), # [DeprecateAs]
|
| 'exposed_test_all': common_value(overloads, 'exposed_test'), # [Exposed]
|
| - 'has_custom_registration_all': common_value(overloads, 'has_custom_registration'),
|
| 'length': function_length,
|
| 'length_tests_methods': length_tests_methods(effective_overloads_by_length),
|
| # 1. Let maxarg be the length of the longest type list of the
|
| @@ -1405,8 +1425,8 @@ def property_getter(getter, cpp_arguments):
|
| return {
|
| 'cpp_type': idl_type.cpp_type,
|
| 'cpp_value': cpp_value,
|
| - 'do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
|
| 'is_call_with_script_state': is_call_with_script_state,
|
| + 'is_cross_origin': 'CrossOrigin' in extended_attributes,
|
| 'is_custom':
|
| 'Custom' in extended_attributes and
|
| (not extended_attributes['Custom'] or
|
|
|