| Index: bindings/scripts/v8_utilities.py
|
| diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
|
| index 1cd44abbe378c6d69e80cb8f24d0d6a28e0f9958..1e8733a9ab764c81ebedc4be55b40692539130bb 100644
|
| --- a/bindings/scripts/v8_utilities.py
|
| +++ b/bindings/scripts/v8_utilities.py
|
| @@ -35,7 +35,7 @@ import re
|
|
|
| from idl_types import IdlTypeBase
|
| import idl_types
|
| -from idl_definitions import Exposure, IdlInterface
|
| +from idl_definitions import Exposure, IdlInterface, IdlAttribute
|
| from v8_globals import includes
|
|
|
| ACRONYMS = [
|
| @@ -125,7 +125,7 @@ def scoped_name(interface, definition, base_name):
|
| if partial_interface_implemented_as:
|
| return '%s::%s' % (partial_interface_implemented_as, base_name)
|
| if (definition.is_static or
|
| - definition.name in ('Constructor', 'NamedConstructor')):
|
| + definition.name in ('Constructor', 'NamedConstructor')):
|
| return '%s::%s' % (cpp_name(interface), base_name)
|
| return 'impl->%s' % base_name
|
|
|
| @@ -176,7 +176,7 @@ def activity_logging_world_check(member):
|
| if 'LogActivity' not in extended_attributes:
|
| return False
|
| if ('PerWorldBindings' not in extended_attributes and
|
| - 'LogAllWorlds' not in extended_attributes):
|
| + 'LogAllWorlds' not in extended_attributes):
|
| return True
|
| return False
|
|
|
| @@ -186,7 +186,7 @@ CALL_WITH_ARGUMENTS = {
|
| 'ScriptState': 'scriptState',
|
| 'ExecutionContext': 'executionContext',
|
| 'ScriptArguments': 'scriptArguments.release()',
|
| - 'ActiveWindow': 'callingDOMWindow(info.GetIsolate())',
|
| + 'ActiveWindow': 'currentDOMWindow(info.GetIsolate())',
|
| 'FirstWindow': 'enteredDOMWindow(info.GetIsolate())',
|
| 'Document': 'document',
|
| 'ThisValue': 'ScriptValue(scriptState, info.This())',
|
| @@ -211,24 +211,11 @@ def call_with_arguments(call_with_values):
|
| if extended_attribute_value_contains(call_with_values, value)]
|
|
|
|
|
| -# [Conditional]
|
| -DELIMITER_TO_OPERATOR = {
|
| - '|': '||',
|
| - ',': '&&',
|
| -}
|
| -
|
| -
|
| -def conditional_string(definition_or_member):
|
| - extended_attributes = definition_or_member.extended_attributes
|
| - if 'Conditional' not in extended_attributes:
|
| - return None
|
| - return 'ENABLE(%s)' % extended_attributes['Conditional']
|
| -
|
| -
|
| # [Constructor], [NamedConstructor]
|
| def is_constructor_attribute(member):
|
| # TODO(yukishiino): replace this with [Constructor] and [NamedConstructor] extended attribute
|
| - return member.idl_type.name.endswith('Constructor')
|
| + return (type(member) == IdlAttribute and
|
| + member.idl_type.name.endswith('Constructor'))
|
|
|
|
|
| # [DeprecateAs]
|
| @@ -236,7 +223,7 @@ def deprecate_as(member):
|
| extended_attributes = member.extended_attributes
|
| if 'DeprecateAs' not in extended_attributes:
|
| return None
|
| - includes.add('core/frame/UseCounter.h')
|
| + includes.add('core/frame/Deprecation.h')
|
| return extended_attributes['DeprecateAs']
|
|
|
|
|
| @@ -248,6 +235,7 @@ EXPOSED_EXECUTION_CONTEXT_METHOD = {
|
| 'SharedWorker': 'isSharedWorkerGlobalScope',
|
| 'Window': 'isDocument',
|
| 'Worker': 'isWorkerGlobalScope',
|
| + 'Worklet': 'isWorkletGlobalScope',
|
| }
|
|
|
|
|
| @@ -291,7 +279,7 @@ class ExposureSet:
|
|
|
| @staticmethod
|
| def _code(exposure):
|
| - exposed = ('context->%s()' %
|
| + exposed = ('executionContext->%s()' %
|
| EXPOSED_EXECUTION_CONTEXT_METHOD[exposure.exposed])
|
| if exposure.runtime_enabled is not None:
|
| runtime_enabled = ('RuntimeEnabledFeatures::%sEnabled()' %
|
| @@ -379,6 +367,29 @@ def measure_as(definition_or_member, interface):
|
| return None
|
|
|
|
|
| +def runtime_feature_name(definition_or_member):
|
| + extended_attributes = definition_or_member.extended_attributes
|
| + if 'RuntimeEnabled' not in extended_attributes:
|
| + return None
|
| + return extended_attributes['RuntimeEnabled']
|
| +
|
| +
|
| +def is_origin_trial_enabled(definition_or_member):
|
| + return 'OriginTrialEnabled' in definition_or_member.extended_attributes
|
| +
|
| +
|
| +def origin_trial_name(definition_or_member):
|
| + return definition_or_member.extended_attributes['OriginTrialEnabled'] if is_origin_trial_enabled(definition_or_member) else None
|
| +
|
| +
|
| +def origin_trial_enabled_function(definition_or_member):
|
| + trial_name = origin_trial_name(definition_or_member)
|
| + feature_name = runtime_feature_name(definition_or_member)
|
| + if not feature_name or not trial_name:
|
| + return
|
| + return 'OriginTrials::%sEnabled' % uncapitalize(feature_name)
|
| +
|
| +
|
| # [RuntimeEnabled]
|
| def runtime_enabled_function_name(definition_or_member):
|
| """Returns the name of the RuntimeEnabledFeatures function.
|
| @@ -387,10 +398,16 @@ def runtime_enabled_function_name(definition_or_member):
|
| Given extended attribute RuntimeEnabled=FeatureName, return:
|
| RuntimeEnabledFeatures::{featureName}Enabled
|
| """
|
| - extended_attributes = definition_or_member.extended_attributes
|
| - if 'RuntimeEnabled' not in extended_attributes:
|
| - return None
|
| - feature_name = extended_attributes['RuntimeEnabled']
|
| + feature_name = runtime_feature_name(definition_or_member)
|
| +
|
| + # If an origin trial is on the method/attribute, it overrides the runtime
|
| + # enabled status. For now, we are unconditionally installing these
|
| + # attributes/methods, so we are acting as though the runtime enabled
|
| + # function doesn't exist. (It is checked in the generated OriginTrials
|
| + # function, instead)
|
| + trial_name = origin_trial_name(definition_or_member)
|
| + if not feature_name or trial_name:
|
| + return
|
| return 'RuntimeEnabledFeatures::%sEnabled' % uncapitalize(feature_name)
|
|
|
|
|
| @@ -401,17 +418,13 @@ def is_unforgeable(interface, member):
|
| not member.is_static)
|
|
|
|
|
| -# [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
|
| +# [LegacyInterfaceTypeChecking]
|
| def is_legacy_interface_type_checking(interface, member):
|
| - if not ('TypeChecking' in interface.extended_attributes or
|
| - 'TypeChecking' in member.extended_attributes):
|
| - return True
|
| - if 'LegacyInterfaceTypeChecking' in member.extended_attributes:
|
| - return True
|
| - return False
|
| + return ('LegacyInterfaceTypeChecking' in interface.extended_attributes or
|
| + 'LegacyInterfaceTypeChecking' in member.extended_attributes)
|
|
|
|
|
| -# [Unforgeable], [Global], [PrimaryGlobal] and [DoNotExposeJSAccessors]
|
| +# [Unforgeable], [Global], [PrimaryGlobal]
|
| def on_instance(interface, member):
|
| """Returns True if the interface's member needs to be defined on every
|
| instance object.
|
| @@ -419,60 +432,57 @@ def on_instance(interface, member):
|
| The following members must be defiend on an instance object.
|
| - [Unforgeable] members
|
| - regular members of [Global] or [PrimaryGlobal] interfaces
|
| - - members on which [DoNotExposeJSAccessors] is specified
|
| """
|
| - # TODO(yukishiino): Implement this function following the spec.
|
| - return not on_prototype(interface, member)
|
| + if member.is_static:
|
| + return False
|
| +
|
| + # TODO(yukishiino): Remove a hack for toString once we support
|
| + # Symbol.toStringTag.
|
| + if (interface.name == 'Window' and member.name == 'toString'):
|
| + return False
|
| +
|
| + # TODO(yukishiino): Implement "interface object" and its [[Call]] method
|
| + # in a better way. Then we can get rid of this hack.
|
| + if is_constructor_attribute(member):
|
| + return True
|
| +
|
| + if ('PrimaryGlobal' in interface.extended_attributes or
|
| + 'Global' in interface.extended_attributes or
|
| + 'Unforgeable' in member.extended_attributes or
|
| + 'Unforgeable' in interface.extended_attributes):
|
| + return True
|
| + return False
|
|
|
|
|
| -# [ExposeJSAccessors]
|
| def on_prototype(interface, member):
|
| """Returns True if the interface's member needs to be defined on the
|
| prototype object.
|
|
|
| Most members are defined on the prototype object. Exceptions are as
|
| follows.
|
| - - constant members
|
| - static members (optional)
|
| - [Unforgeable] members
|
| - members of [Global] or [PrimaryGlobal] interfaces
|
| - named properties of [Global] or [PrimaryGlobal] interfaces
|
| - However, if [ExposeJSAccessors] is specified, the member is defined on the
|
| - prototype object.
|
| """
|
| - # TODO(yukishiino): Implement this function following the spec.
|
| -
|
| - if ('ExposeJSAccessors' in interface.extended_attributes and
|
| - 'DoNotExposeJSAccessors' in interface.extended_attributes):
|
| - raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time in an interface: ' + interface.name)
|
| - if ('ExposeJSAccessors' in member.extended_attributes and
|
| - 'DoNotExposeJSAccessors' in member.extended_attributes):
|
| - raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time on a member: ' + member.name + ' in an interface: ' + interface.name)
|
| -
|
| - # Note that ExposeJSAccessors and DoNotExposeJSAccessors are more powerful
|
| - # than 'static', [Unforgeable] and [OverrideBuiltins].
|
| - if 'ExposeJSAccessors' in member.extended_attributes:
|
| - return True
|
| - if 'DoNotExposeJSAccessors' in member.extended_attributes:
|
| - return False
|
| -
|
| - # These members must not be placed on prototype chains.
|
| - if (is_constructor_attribute(member) or
|
| - member.is_static or
|
| - is_unforgeable(interface, member) or
|
| - 'OverrideBuiltins' in interface.extended_attributes):
|
| + if member.is_static:
|
| return False
|
|
|
| - # TODO(yukishiino): We should handle [Global] and [PrimaryGlobal] instead of
|
| - # Window.
|
| - if (interface.name == 'Window'):
|
| - return member.idl_type.name == 'EventHandler'
|
| -
|
| - if 'ExposeJSAccessors' in interface.extended_attributes:
|
| + # TODO(yukishiino): Remove a hack for toString once we support
|
| + # Symbol.toStringTag.
|
| + if (interface.name == 'Window' and member.name == 'toString'):
|
| return True
|
| - if 'DoNotExposeJSAccessors' in interface.extended_attributes:
|
| +
|
| + # TODO(yukishiino): Implement "interface object" and its [[Call]] method
|
| + # in a better way. Then we can get rid of this hack.
|
| + if is_constructor_attribute(member):
|
| return False
|
|
|
| + if ('PrimaryGlobal' in interface.extended_attributes or
|
| + 'Global' in interface.extended_attributes or
|
| + 'Unforgeable' in member.extended_attributes or
|
| + 'Unforgeable' in interface.extended_attributes):
|
| + return False
|
| return True
|
|
|
|
|
| @@ -482,10 +492,10 @@ def on_interface(interface, member):
|
| interface object.
|
|
|
| The following members must be defiend on an interface object.
|
| - - constant members
|
| - static members
|
| """
|
| - # TODO(yukishiino): Implement this function following the spec.
|
| + if member.is_static:
|
| + return True
|
| return False
|
|
|
|
|
|
|