Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(440)

Unified Diff: bindings/scripts/v8_interface.py

Issue 2786203002: Roll 50: Copied IDLs, PYTHON scripts from WebKit removed deleted files in WebCore (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bindings/scripts/v8_dictionary.py ('k') | bindings/scripts/v8_methods.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bindings/scripts/v8_interface.py
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index 406fee3ea90f3e71b91bbf804cda892c8fb5bab7..35edaee63b7760b5f65161ff9e53d07ba6b0aabc 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -46,7 +46,7 @@ import v8_methods
import v8_types
from v8_types import cpp_ptr_type, cpp_template_type
import v8_utilities
-from v8_utilities import (cpp_name_or_partial, capitalize, conditional_string, cpp_name, gc_type,
+from v8_utilities import (origin_trial_enabled_function, cpp_name_or_partial, capitalize, cpp_name, gc_type,
has_extended_attribute_value, runtime_enabled_function_name,
extended_attribute_value_as_list, is_legacy_interface_type_checking)
@@ -63,10 +63,7 @@ INTERFACE_CPP_INCLUDES = frozenset([
'bindings/core/v8/ExceptionState.h',
'bindings/core/v8/V8DOMConfiguration.h',
'bindings/core/v8/V8ObjectConstructor.h',
- 'core/dom/ContextFeatures.h',
'core/dom/Document.h',
- 'platform/RuntimeEnabledFeatures.h',
- 'platform/TraceEvent.h',
'wtf/GetPtr.h',
'wtf/RefPtr.h',
])
@@ -96,7 +93,8 @@ def interface_context(interface):
is_array_buffer_or_view = interface.idl_type.is_array_buffer_or_view
is_typed_array_type = interface.idl_type.is_typed_array
if is_array_buffer_or_view:
- includes.add('bindings/core/v8/V8ArrayBuffer.h')
+ includes.update(('bindings/core/v8/V8ArrayBuffer.h',
+ 'bindings/core/v8/V8SharedArrayBuffer.h'))
if interface.name == 'ArrayBufferView':
includes.update((
'bindings/core/v8/V8Int8Array.h',
@@ -110,9 +108,6 @@ def interface_context(interface):
'bindings/core/v8/V8Float64Array.h',
'bindings/core/v8/V8DataView.h'))
- # [ActiveDOMObject]
- is_active_dom_object = 'ActiveDOMObject' in extended_attributes
-
# [CheckSecurity]
is_check_security = 'CheckSecurity' in extended_attributes
if is_check_security:
@@ -121,10 +116,9 @@ def interface_context(interface):
# [DependentLifetime]
is_dependent_lifetime = 'DependentLifetime' in extended_attributes
- # [MeasureAs]
- is_measure_as = 'MeasureAs' in extended_attributes
- if is_measure_as:
- includes.add('core/frame/UseCounter.h')
+ # [PrimaryGlobal] and [Global]
+ is_global = ('PrimaryGlobal' in extended_attributes or
+ 'Global' in extended_attributes)
# [SetWrapperReferenceFrom]
set_wrapper_reference_from = extended_attributes.get('SetWrapperReferenceFrom')
@@ -162,8 +156,14 @@ def interface_context(interface):
cpp_class_name_or_partial = cpp_name_or_partial(interface)
v8_class_name_or_partial = v8_utilities.v8_class_name_or_partial(interface)
+ if 'RuntimeEnabled' in extended_attributes:
+ includes.add('platform/RuntimeEnabledFeatures.h')
+
+ if 'OriginTrialEnabled' in extended_attributes:
+ includes.add('core/inspector/ConsoleMessage.h')
+ includes.add('core/origin_trials/OriginTrials.h')
+
context = {
- 'conditional_string': conditional_string(interface), # [Conditional]
'cpp_class': cpp_class_name,
'cpp_class_or_partial': cpp_class_name_or_partial,
'event_target_inheritance': 'InheritFromEventTarget' if is_event_target else 'NotInheritFromEventTarget',
@@ -177,20 +177,17 @@ def interface_context(interface):
'has_visit_dom_wrapper': has_visit_dom_wrapper,
'header_includes': header_includes,
'interface_name': interface.name,
- 'is_active_dom_object': is_active_dom_object,
'is_array_buffer_or_view': is_array_buffer_or_view,
'is_check_security': is_check_security,
'is_event_target': is_event_target,
'is_exception': interface.is_exception,
+ 'is_global': is_global,
'is_node': inherits_interface(interface.name, 'Node'),
'is_partial': interface.is_partial,
'is_typed_array_type': is_typed_array_type,
- 'lifetime': 'Dependent'
- if (has_visit_dom_wrapper or
- is_active_dom_object or
- is_dependent_lifetime)
- else 'Independent',
+ 'lifetime': 'Dependent' if (has_visit_dom_wrapper or is_dependent_lifetime) else 'Independent',
'measure_as': v8_utilities.measure_as(interface, None), # [MeasureAs]
+ 'origin_trial_name': v8_utilities.origin_trial_name(interface),
'parent_interface': parent_interface,
'pass_cpp_type': cpp_template_type(
cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type),
@@ -225,11 +222,14 @@ def interface_context(interface):
if constructors or custom_constructors or named_constructor:
if interface.is_partial:
raise Exception('[Constructor] and [NamedConstructor] MUST NOT be'
- ' specified on partial interface definitions:'
+ ' specified on partial interface definitions: '
'%s' % interface.name)
includes.add('bindings/core/v8/V8ObjectConstructor.h')
includes.add('core/frame/LocalDOMWindow.h')
+ elif 'Measure' in extended_attributes or 'MeasureAs' in extended_attributes:
+ raise Exception('[Measure] or [MeasureAs] specified for interface without a constructor: '
+ '%s' % interface.name)
# [Unscopeable] attributes and methods
unscopeables = []
@@ -253,15 +253,18 @@ def interface_context(interface):
constants = [constant_context(constant, interface) for constant in interface.constants]
special_getter_constants = []
- runtime_enabled_constants = []
+ runtime_enabled_constants = dict()
constant_configuration_constants = []
for constant in constants:
- if constant['measure_as'] or constant['deprecate_as']:
+ if constant['measure_as'] or constant['deprecate_as'] or constant['origin_trial_name']:
special_getter_constants.append(constant)
continue
- if constant['runtime_enabled_function']:
- runtime_enabled_constants.append(constant)
+ runtime_enabled_function = constant['runtime_enabled_function']
+ if runtime_enabled_function:
+ if runtime_enabled_function not in runtime_enabled_constants:
+ runtime_enabled_constants[runtime_enabled_function] = []
+ runtime_enabled_constants[runtime_enabled_function].append(constant)
continue
constant_configuration_constants.append(constant)
@@ -273,7 +276,7 @@ def interface_context(interface):
'has_constant_configuration': any(
not constant['runtime_enabled_function']
for constant in constants),
- 'runtime_enabled_constants': runtime_enabled_constants,
+ 'runtime_enabled_constants': sorted(runtime_enabled_constants.iteritems()),
'special_getter_constants': special_getter_constants,
})
@@ -288,18 +291,19 @@ def interface_context(interface):
context.update({
'attributes': attributes,
'has_accessor_configuration': any(
- attribute['is_expose_js_accessors'] and
- not (attribute['is_static'] or
+ not (attribute['exposed_test'] or
attribute['runtime_enabled_function']) and
+ not attribute['is_data_type_property'] and
attribute['should_be_exposed_to_script']
for attribute in attributes),
'has_attribute_configuration': any(
- not (attribute['is_expose_js_accessors'] or
- attribute['is_static'] or
- attribute['runtime_enabled_function'])
- and attribute['should_be_exposed_to_script']
- for attribute in attributes),
+ not (attribute['exposed_test'] or
+ attribute['runtime_enabled_function']) and
+ attribute['is_data_type_property'] and
+ attribute['should_be_exposed_to_script']
+ for attribute in attributes),
'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes),
+ 'needs_constructor_setter_callback': any(attribute['constructor_type'] == attribute['name'] for attribute in attributes),
'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes),
})
@@ -344,13 +348,15 @@ def interface_context(interface):
# [Iterable], iterable<>, maplike<> and setlike<>
iterator_method = None
+ has_array_iterator = False
+
# FIXME: support Iterable in partial interfaces. However, we don't
# need to support iterator overloads between interface and
# partial interface definitions.
# http://heycam.github.io/webidl/#idl-overloading
if (not interface.is_partial
and (interface.iterable or interface.maplike or interface.setlike
- or 'Iterable' in extended_attributes)):
+ or interface.has_indexed_elements or 'Iterable' in extended_attributes)):
used_extended_attributes = {}
@@ -383,7 +389,10 @@ def interface_context(interface):
extended_attributes=used_extended_attributes,
implemented_as=implemented_as)
- iterator_method = generated_iterator_method('iterator', implemented_as='iterator')
+ if interface.iterable or interface.maplike or interface.setlike or 'Iterable' in extended_attributes:
+ iterator_method = generated_iterator_method('iterator', implemented_as='iterator')
+ elif interface.has_indexed_elements:
+ has_array_iterator = True
if interface.iterable or interface.maplike or interface.setlike:
implicit_methods = [
@@ -550,12 +559,13 @@ def interface_context(interface):
context.update({
'conditionally_enabled_methods': conditionally_enabled_methods,
'custom_registration_methods': custom_registration_methods,
- 'has_origin_safe_method_setter': any(
- method['is_check_security_for_frame'] and not method['is_read_only']
+ 'has_origin_safe_method_setter': is_global and any(
+ method['is_check_security_for_receiver'] 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),
'iterator_method': iterator_method,
+ 'has_array_iterator': has_array_iterator,
'method_configuration_methods': method_configuration_methods,
'methods': methods,
})
@@ -583,22 +593,34 @@ def interface_context(interface):
'named_property_setter': property_setter(interface.named_property_setter, interface),
'named_property_deleter': property_deleter(interface.named_property_deleter),
})
+ context.update({
+ 'has_named_properties_object': is_global and context['named_property_getter'],
+ })
return context
-# [DeprecateAs], [Reflect], [RuntimeEnabled]
+# [DeprecateAs], [OriginTrialEnabled], [Reflect], [RuntimeEnabled]
def constant_context(constant, interface):
extended_attributes = constant.extended_attributes
+
+ if 'OriginTrialEnabled' in extended_attributes:
+ includes.add('core/inspector/ConsoleMessage.h')
+ includes.add('core/origin_trials/OriginTrials.h')
+
return {
'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
'deprecate_as': v8_utilities.deprecate_as(constant), # [DeprecateAs]
'idl_type': constant.idl_type.name,
+ 'is_origin_trial_enabled': v8_utilities.origin_trial_enabled_function(constant) or v8_utilities.origin_trial_enabled_function(interface), # [OriginTrialEnabled]
'measure_as': v8_utilities.measure_as(constant, interface), # [MeasureAs]
'name': constant.name,
+ 'origin_trial_enabled': v8_utilities.origin_trial_enabled_function(constant), # [OriginTrialEnabled]
+ 'origin_trial_enabled_per_interface': v8_utilities.origin_trial_enabled_function(interface), # [OriginTrialEnabled]
+ 'origin_trial_name': extended_attributes.get('OriginTrialEnabled'), # [OriginTrialEnabled]
# FIXME: use 'reflected_name' as correct 'name'
'reflected_name': extended_attributes.get('Reflect', constant.name),
- 'runtime_enabled_function': runtime_enabled_function_name(constant),
+ 'runtime_enabled_function': runtime_enabled_function_name(constant), # [RuntimeEnabled]
'value': constant.value,
}
@@ -890,7 +912,14 @@ def distinguishing_argument_index(entries):
"""
# Only applicable “If there is more than one entry”
assert len(entries) > 1
- type_lists = [tuple(idl_type.name for idl_type in entry[1])
+
+ def typename_without_nullable(idl_type):
+ if idl_type.is_nullable:
+ return idl_type.inner_type.name
+ return idl_type.name
+
+ type_lists = [tuple(typename_without_nullable(idl_type)
+ for idl_type in entry[1])
for entry in entries]
type_list_length = len(type_lists[0])
# Only applicable for entries that “[have] a given type list length”
@@ -1195,9 +1224,12 @@ def constructor_context(interface, constructor):
is_constructor_raises_exception = \
interface.extended_attributes.get('RaisesException') == 'Constructor'
+ argument_contexts = [
+ v8_methods.argument_context(interface, constructor, argument, index)
+ for index, argument in enumerate(constructor.arguments)]
+
return {
- 'arguments': [v8_methods.argument_context(interface, constructor, argument, index)
- for index, argument in enumerate(constructor.arguments)],
+ 'arguments': argument_contexts,
'cpp_type': cpp_template_type(
cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)),
cpp_name(interface)),
@@ -1208,6 +1240,9 @@ def constructor_context(interface, constructor):
any(argument for argument in constructor.arguments
if argument.idl_type.name == 'SerializedScriptValue' or
argument.idl_type.v8_conversion_needs_exception_state),
+ 'has_optional_argument_without_default_value':
+ any(True for argument_context in argument_contexts
+ if argument_context['is_optional_without_default_value']),
'is_call_with_document':
# [ConstructorCallWith=Document]
has_extended_attribute_value(interface,
@@ -1330,7 +1365,7 @@ def property_setter(setter, interface):
is_call_with_script_state = v8_utilities.has_extended_attribute_value(setter, 'CallWith', 'ScriptState')
is_raises_exception = 'RaisesException' in extended_attributes
- # [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
+ # [LegacyInterfaceTypeChecking]
has_type_checking_interface = (
not is_legacy_interface_type_checking(interface, setter) and
idl_type.is_wrapper_type)
« no previous file with comments | « bindings/scripts/v8_dictionary.py ('k') | bindings/scripts/v8_methods.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698