Moved 39 roll
Reviewers=vsm@google.com,asiva@google.com
R=asiva@google.com, vsm@google.com
Review URL: https://codereview.chromium.org//959933002
git-svn-id: http://dart.googlecode.com/svn/third_party/WebCore@44061 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/bindings/IDLExtendedAttributes.txt b/bindings/IDLExtendedAttributes.txt
index 16296b6..73cd6bd 100644
--- a/bindings/IDLExtendedAttributes.txt
+++ b/bindings/IDLExtendedAttributes.txt
@@ -36,7 +36,7 @@
ActiveDOMObject
CachedAttribute=*
CallWith=ExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
-CheckSecurity=Frame|Node
+CheckSecurity=Frame|Node|Window
Clamp
Conditional=*
Constructor
@@ -81,14 +81,16 @@
ImplementedAs=*
ImplementedInPrivateScript
InitializedByEventConstructor
+Iterable
LegacyTreatAsPartialInterface
LogActivity=|GetterOnly|SetterOnly
LogAllWorlds
-LogPreviousValue
MeasureAs=*
NamedConstructor=*
+NoImplHeader
NoInterfaceObject
NotEnumerable
+NotScriptWrappable
OnlyExposedToPrivateScript
OverrideBuiltins
PartialInterfaceImplementedAs=*
diff --git a/bindings/README b/bindings/README
index 1a601a7..418d1e5 100644
--- a/bindings/README
+++ b/bindings/README
@@ -6,4 +6,4 @@
The current version corresponds to:
URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 182210
+Current revision: 190578
diff --git a/bindings/dart/scripts/code_generator_dart.py b/bindings/dart/scripts/code_generator_dart.py
index 3c1c2ea..df3818e 100644
--- a/bindings/dart/scripts/code_generator_dart.py
+++ b/bindings/dart/scripts/code_generator_dart.py
@@ -84,22 +84,24 @@
import dart_interface
import dart_types
from dart_utilities import DartUtilities
-from utilities import write_pickle_file
+from utilities import write_pickle_file, idl_filename_to_interface_name
+import dart_dictionary
from v8_globals import includes, interfaces
-# TODO(jacobr): remove this hacked together list.
-INTERFACES_WITHOUT_RESOLVERS = frozenset([
- 'TypeConversions',
- 'GCObservation',
- 'InternalProfilers',
- 'InternalRuntimeFlags',
- 'InternalSettings',
- 'InternalSettingsGenerated',
- 'Internals',
- 'LayerRect',
- 'LayerRectList',
- 'MallocStatistics',
- 'TypeConversions'])
+
+def render_template(interface_info, header_template, cpp_template,
+ template_context):
+ template_context['code_generator'] = module_pyname
+
+ # Add includes for any dependencies
+ template_context['header_includes'] = sorted(
+ template_context['header_includes'])
+ includes.update(interface_info.get('dependencies_include_paths', []))
+ template_context['cpp_includes'] = sorted(includes)
+
+ header_text = header_template.render(template_context)
+ cpp_text = cpp_template.render(template_context)
+ return header_text, cpp_text
class CodeGeneratorDart(object):
def __init__(self, interfaces_info, cache_dir):
@@ -108,45 +110,49 @@
self.jinja_env = initialize_jinja_env(cache_dir)
# Set global type info
- idl_types.set_ancestors(dict(
- (interface_name, interface_info['ancestors'])
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['ancestors']))
- IdlType.set_callback_interfaces(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['is_callback_interface']))
- IdlType.set_implemented_as_interfaces(dict(
- (interface_name, interface_info['implemented_as'])
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['implemented_as']))
- IdlType.set_garbage_collected_types(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if 'GarbageCollected' in interface_info['inherited_extended_attributes']))
- IdlType.set_will_be_garbage_collected_types(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if 'WillBeGarbageCollected' in interface_info['inherited_extended_attributes']))
- dart_types.set_component_dirs(dict(
- (interface_name, interface_info['component_dir'])
- for interface_name, interface_info in interfaces_info.iteritems()))
+ if 'ancestors' in interfaces_info:
+ idl_types.set_ancestors(interfaces_info['ancestors'])
+ if 'callback_interfaces' in interfaces_info:
+ IdlType.set_callback_interfaces(interfaces_info['callback_interfaces'])
+ if 'dictionaries' in interfaces_info:
+ IdlType.set_dictionaries(interfaces_info['dictionaries'])
+ if 'implemented_as_interfaces' in interfaces_info:
+ IdlType.set_implemented_as_interfaces(interfaces_info['implemented_as_interfaces'])
+ if 'garbage_collected_interfaces' in interfaces_info:
+ IdlType.set_garbage_collected_types(interfaces_info['garbage_collected_interfaces'])
+ if 'will_be_garbage_collected_interfaces' in interfaces_info:
+ IdlType.set_will_be_garbage_collected_types(interfaces_info['will_be_garbage_collected_interfaces'])
+ if 'component_dirs' in interfaces_info:
+ dart_types.set_component_dirs(interfaces_info['component_dirs'])
def generate_code(self, definitions, interface_name, idl_pickle_filename,
only_if_changed):
"""Returns .h/.cpp code as (header_text, cpp_text)."""
- try:
+
+ IdlType.set_enums((enum.name, enum.values)
+ for enum in definitions.enumerations.values())
+
+ if interface_name in definitions.interfaces:
interface = definitions.interfaces[interface_name]
- except KeyError:
- raise Exception('%s not in IDL definitions' % interface_name)
+ elif interface_name in definitions.dictionaries:
+ output_code_list = self.generate_dictionary_code(
+ definitions, interface_name,
+ definitions.dictionaries[interface_name])
+
+ # Pickle the dictionary information...
+ idl_world = self.load_idl_pickle_file(idl_pickle_filename)
+ idl_world['dictionary'] = {'name': interface_name}
+ write_pickle_file(idl_pickle_filename, idl_world, only_if_changed)
+
+ return output_code_list
+ else:
+ raise ValueError('%s is not in IDL definitions' % interface_name)
# Store other interfaces for introspection
interfaces.update(definitions.interfaces)
# Set local type info
IdlType.set_callback_functions(definitions.callback_functions.keys())
- IdlType.set_enums((enum.name, enum.values)
- for enum in definitions.enumerations.values())
# Select appropriate Jinja template and contents function
if interface.is_callback:
@@ -156,7 +162,7 @@
else:
header_template_filename = 'interface_h.template'
cpp_template_filename = 'interface_cpp.template'
- generate_contents = dart_interface.generate_interface
+ generate_contents = dart_interface.interface_context
header_template = self.jinja_env.get_template(header_template_filename)
cpp_template = self.jinja_env.get_template(cpp_template_filename)
@@ -177,27 +183,36 @@
includes.discard('core/dom/GlobalEventHandlers.h')
includes.discard('core/frame/DOMWindowEventHandlers.h')
+ # Remove v8 usages not needed.
+ includes.discard('core/frame/UseCounter.h')
+ includes.discard('bindings/core/v8/V8ScriptState.h')
+ includes.discard('bindings/core/v8/V8DOMActivityLogger.h')
+ includes.discard('bindings/core/v8/V8DOMConfiguration.h')
+ includes.discard('bindings/core/v8/V8ExceptionState.h')
+ includes.discard('bindings/core/v8/V8HiddenValue.h')
+ includes.discard('bindings/core/v8/V8ObjectConstructor.h')
+ includes.discard('core/dom/ContextFeatures.h')
+ includes.discard('core/dom/Document.h')
+ includes.discard('platform/RuntimeEnabledFeatures.h')
+ includes.discard('platform/TraceEvent.h')
+
template_contents['cpp_includes'] = sorted(includes)
- idl_world = {'interface': None, 'callback': None}
-
- # Load the pickle file for this IDL.
- if os.path.isfile(idl_pickle_filename):
- with open(idl_pickle_filename) as idl_pickle_file:
- idl_global_data = pickle.load(idl_pickle_file)
- idl_pickle_file.close()
- idl_world['interface'] = idl_global_data['interface']
- idl_world['callback'] = idl_global_data['callback']
+ idl_world = self.load_idl_pickle_file(idl_pickle_filename)
if 'interface_name' in template_contents:
- interface_global = {'component_dir': interface_info['component_dir'],
- 'name': template_contents['interface_name'],
+ # interfaces no longer remember there component_dir re-compute based
+ # on relative_dir (first directory is the component).
+ component_dir = split_path(interface_info['relative_dir'])[0]
+ interface_global = {'name': template_contents['interface_name'],
'parent_interface': template_contents['parent_interface'],
'is_active_dom_object': template_contents['is_active_dom_object'],
'is_event_target': template_contents['is_event_target'],
- 'has_resolver': template_contents['interface_name'] not in INTERFACES_WITHOUT_RESOLVERS,
+ 'has_resolver': template_contents['interface_name'],
+ 'native_entries': sorted(template_contents['native_entries'], key=lambda(x): x['blink_entry']),
'is_node': template_contents['is_node'],
'conditional_string': template_contents['conditional_string'],
+ 'component_dir': component_dir,
}
idl_world['interface'] = interface_global
else:
@@ -211,51 +226,106 @@
cpp_text = cpp_template.render(template_contents)
return header_text, cpp_text
- # Generates global file for all interfaces.
- def generate_globals(self, global_pickle_directories, output_directory):
- header_template_filename = 'global_h.template'
- cpp_template_filename = 'global_cpp.template'
+ def load_idl_pickle_file(self, idl_pickle_filename):
+ # Pickle the dictionary information...
+ idl_world = {'interface': None, 'callback': None, 'dictionary': None}
- # Delete the global pickle file we'll rebuild from each pickle generated
- # for each IDL file '(%s_globals.pickle) % interface_name'.
- global_pickle_filename = os.path.join(output_directory, 'global.pickle')
- if os.path.isfile(global_pickle_filename):
- os.remove(global_pickle_filename)
+ # Load the pickle file for this IDL.
+ if os.path.isfile(idl_pickle_filename):
+ with open(idl_pickle_filename) as idl_pickle_file:
+ idl_global_data = pickle.load(idl_pickle_file)
+ idl_pickle_file.close()
+ idl_world['interface'] = idl_global_data['interface']
+ idl_world['callback'] = idl_global_data['callback']
+ idl_world['dictionary'] = idl_global_data['dictionary']
+ return idl_world
+
+ def generate_dictionary_code(self, definitions, dictionary_name,
+ dictionary):
+ interface_info = self.interfaces_info[dictionary_name]
+ bindings_results = self.generate_dictionary_bindings(
+ dictionary_name, interface_info, dictionary)
+ impl_results = self.generate_dictionary_impl(
+ dictionary_name, interface_info, dictionary)
+ return bindings_results + impl_results
+
+ def generate_dictionary_bindings(self, dictionary_name,
+ interface_info, dictionary):
+ header_template = self.jinja_env.get_template('dictionary_dart_h.template')
+ cpp_template = self.jinja_env.get_template('dictionary_dart_cpp.template')
+ template_context = dart_dictionary.dictionary_context(dictionary)
+ # Add the include for interface itself
+ template_context['header_includes'].add(interface_info['include_path'])
+ header_text, cpp_text = render_template(
+ interface_info, header_template, cpp_template, template_context)
+ return (header_text, cpp_text)
+
+ def generate_dictionary_impl(self, dictionary_name,
+ interface_info, dictionary):
+ header_template = self.jinja_env.get_template('dictionary_impl_h.template')
+ cpp_template = self.jinja_env.get_template('dictionary_impl_cpp.template')
+ template_context = dart_dictionary.dictionary_impl_context(
+ dictionary, self.interfaces_info)
+ header_text, cpp_text = render_template(
+ interface_info, header_template, cpp_template, template_context)
+ return (header_text, cpp_text)
+
+ def load_global_pickles(self, global_entries):
# List of all interfaces and callbacks for global code generation.
- world = {'interfaces': [], 'callbacks': []}
+ world = {'interfaces': [], 'callbacks': [], 'dictionary': []}
# Load all pickled data for each interface.
- for pickle_directory in global_pickle_directories:
- listing = os.listdir(pickle_directory)
- for filename in listing:
- if filename.endswith('_globals.pickle'):
- idl_filename = os.path.join(pickle_directory, filename)
- with open(idl_filename) as idl_pickle_file:
- idl_world = pickle.load(idl_pickle_file)
- if 'interface' in idl_world:
- # FIXME: Why are some of these None?
- if idl_world['interface']:
- world['interfaces'].append(idl_world['interface'])
- if 'callbacks' in idl_world:
- # FIXME: Why are some of these None?
- if idl_world['callbacks']:
- world['callbacks'].append(idl_world['callback'])
- idl_pickle_file.close()
-
+ for (directory, file_list) in global_entries:
+ for idl_filename in file_list:
+ interface_name = idl_filename_to_interface_name(idl_filename)
+ idl_pickle_filename = interface_name + "_globals.pickle"
+ idl_pickle_filename = os.path.join(directory, idl_pickle_filename)
+ with open(idl_pickle_filename) as idl_pickle_file:
+ idl_world = pickle.load(idl_pickle_file)
+ if 'interface' in idl_world:
+ # FIXME: Why are some of these None?
+ if idl_world['interface']:
+ world['interfaces'].append(idl_world['interface'])
+ if 'callbacks' in idl_world:
+ # FIXME: Why are some of these None?
+ if idl_world['callbacks']:
+ world['callbacks'].append(idl_world['callback'])
+ if 'dictionary' in idl_world:
+ # It's an IDL dictionary
+ if idl_world['dictionary']:
+ world['dictionary'].append(idl_world['dictionary'])
world['interfaces'] = sorted(world['interfaces'], key=lambda (x): x['name'])
world['callbacks'] = sorted(world['callbacks'], key=lambda (x): x['name'])
+ world['dictionary'] = sorted(world['dictionary'], key=lambda (x): x['name'])
+ return world
- template_contents = world
+ # Generates global file for all interfaces.
+ def generate_globals(self, global_entries):
+ template_contents = self.load_global_pickles(global_entries)
template_contents['code_generator'] = module_pyname
+ header_template_filename = 'global_h.template'
header_template = self.jinja_env.get_template(header_template_filename)
header_text = header_template.render(template_contents)
+ cpp_template_filename = 'global_cpp.template'
cpp_template = self.jinja_env.get_template(cpp_template_filename)
cpp_text = cpp_template.render(template_contents)
+
return header_text, cpp_text
+ # Generates global dart blink file for all interfaces.
+ def generate_dart_blink(self, global_entries):
+ template_contents = self.load_global_pickles(global_entries)
+ template_contents['code_generator'] = module_pyname
+
+ template_filename = 'dart_blink.template'
+ template = self.jinja_env.get_template(template_filename)
+
+ text = template.render(template_contents)
+ return text
+
def initialize_jinja_env(cache_dir):
jinja_env = jinja2.Environment(
@@ -294,6 +364,15 @@
' %s' % code)
+def split_path(path):
+ path_list = []
+ while os.path.basename(path):
+ path_list.append(os.path.basename(path))
+ path = os.path.dirname(path)
+ path_list.reverse()
+ return path_list
+
+
################################################################################
def main(argv):
diff --git a/bindings/dart/scripts/compiler.py b/bindings/dart/scripts/compiler.py
index 1f12119..6dbe8f2 100755
--- a/bindings/dart/scripts/compiler.py
+++ b/bindings/dart/scripts/compiler.py
@@ -50,13 +50,19 @@
parser.add_option('--output-directory')
parser.add_option('--interfaces-info-file')
parser.add_option('--write-file-only-if-changed', type='int', default='1')
- parser.add_option('--generate-global', type='int')
- parser.add_option("-p", "--global-pickle-directories",
- action="store",
+ parser.add_option('--generate-dart-blink',
+ action='append',
type='string',
- dest="global_pickle_directories",
+ dest='blink_global_entries',
+ nargs=3,
+ help="Pickle file directory, idl file list, idl dictionaries list")
+
+ parser.add_option('--generate-globals',
+ action='append',
+ type='string',
+ dest='global_entries',
nargs=2,
- help="Directories to load _globals.pickle files (max 2)")
+ help="Pickle file directory and idl file list (global class table)")
# ensure output comes last, so command line easy to parse via regexes
parser.disable_interspersed_args()
@@ -65,12 +71,12 @@
if options.output_directory is None:
parser.error('Must specify output directory using --output-directory.')
options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
- options.generate_global = bool(options.generate_global)
- if len(args) != 1:
- # parser.error('Must specify exactly 1 input file as argument, but %d given.' % len(args))
+ if bool(options.global_entries) or bool(options.blink_global_entries):
return options, None
- idl_filename = os.path.realpath(args[0])
- return options, idl_filename
+ if len(args) != 1:
+ parser.error('Must specify exactly 1 input file as argument, but %d given.' % len(args))
+ filename = os.path.realpath(args[0])
+ return options, filename
def idl_filename_to_interface_name(idl_filename):
@@ -96,26 +102,46 @@
'Dart%s.cpp' % interface_name)
self.compile_and_write(idl_filename, (header_filename, cpp_filename))
- def generate_global(self, global_pickle_directories):
+ def generate_global(self, global_entries):
+ expanded_global_entries = []
+ for (directory, file_list_file) in global_entries:
+ with open(file_list_file) as input_file:
+ idl_file_list = sorted([line.rstrip('\n')
+ for line in input_file])
+ expanded_global_entries.append((directory, idl_file_list))
global_header_filename = os.path.join(self.output_directory, 'DartWebkitClassIds.h')
global_cpp_filename = os.path.join(self.output_directory, 'DartWebkitClassIds.cpp')
- self.generate_global_and_write(global_pickle_directories,
+ self.generate_global_and_write(expanded_global_entries,
(global_header_filename, global_cpp_filename))
+ def generate_dart_blink(self, global_entries):
+ global_dart_blink_filename = os.path.join(self.output_directory,
+ '_blink_dartium.dart')
+ expanded_global_entries = []
+ for (directory, file_list_file, file_list_dictionary) in global_entries:
+ with open(file_list_file) as input_file:
+ idl_file_list = sorted([line.rstrip('\n')
+ for line in input_file])
+ with open(file_list_dictionary) as input_file:
+ dictionary_file_list = sorted([line.rstrip('\n')
+ for line in input_file])
+ expanded_global_entries.append((directory, idl_file_list))
+ expanded_global_entries.append((directory, dictionary_file_list))
+ self.generate_dart_blink_and_write(expanded_global_entries,
+ global_dart_blink_filename)
+
def main():
- options, idl_filename = parse_options()
-
- if options.generate_global:
- idl_compiler = IdlCompilerDart(options.output_directory,
- interfaces_info_filename=options.interfaces_info_file,
- only_if_changed=options.write_file_only_if_changed)
- idl_compiler.generate_global(options.global_pickle_directories)
+ options, filename = parse_options()
+ idl_compiler = IdlCompilerDart(options.output_directory,
+ interfaces_info_filename=options.interfaces_info_file,
+ only_if_changed=options.write_file_only_if_changed)
+ if bool(options.global_entries):
+ idl_compiler.generate_global(options.global_entries)
+ elif bool(options.blink_global_entries):
+ idl_compiler.generate_dart_blink(options.blink_global_entries)
else:
- idl_compiler = IdlCompilerDart(options.output_directory,
- interfaces_info_filename=options.interfaces_info_file,
- only_if_changed=options.write_file_only_if_changed)
- idl_compiler.compile_file(idl_filename)
+ idl_compiler.compile_file(filename)
if __name__ == '__main__':
diff --git a/bindings/dart/scripts/dart_attributes.py b/bindings/dart/scripts/dart_attributes.py
index 7aaec94..4559a66 100644
--- a/bindings/dart/scripts/dart_attributes.py
+++ b/bindings/dart/scripts/dart_attributes.py
@@ -34,28 +34,28 @@
"""
import idl_types
-from idl_types import inherits_interface
from dart_interface import suppress_getter, suppress_setter
import dart_types
from dart_utilities import DartUtilities
-from v8_globals import includes, interfaces
+from v8_globals import interfaces
+
+import v8_attributes
-def generate_attribute(interface, attribute):
+def attribute_context(interface, attribute):
+ # Call v8's implementation.
+ context = v8_attributes.attribute_context(interface, attribute)
+
+ extended_attributes = attribute.extended_attributes
+
+ # Augment's Dart's information to context.
idl_type = attribute.idl_type
base_idl_type = idl_type.base_type
# TODO(terry): Work around for DOMString[] base should be IDLTypeArray
if base_idl_type == None:
# Returns Array or Sequence.
- base_idl_type = idl_type.inner_name
- extended_attributes = attribute.extended_attributes
+ base_idl_type = idl_type.name
- idl_type.add_includes_for_type()
-
- # [CheckSecurity]
- is_check_security_for_node = 'CheckSecurity' in extended_attributes
- if is_check_security_for_node:
- includes.add('bindings/common/BindingSecurity.h')
# [Custom]
has_custom_getter = (('Custom' in extended_attributes and
extended_attributes['Custom'] in [None, 'Getter']) or
@@ -69,128 +69,60 @@
is_call_with_script_state = DartUtilities.has_extended_attribute_value(attribute, 'CallWith', 'ScriptState')
- # [CustomElementCallbacks], [Reflect]
- is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
- is_reflect = 'Reflect' in extended_attributes
- if is_custom_element_callbacks or is_reflect:
- includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
- # [RaisesException], [RaisesException=Setter]
- is_setter_raises_exception = (
- 'RaisesException' in extended_attributes and
- extended_attributes['RaisesException'] in [None, 'Setter'])
- # [DartStrictTypeChecking]
- has_strict_type_checking = (
- ('DartStrictTypeChecking' in extended_attributes or
- 'DartStrictTypeChecking' in interface.extended_attributes) and
- idl_type.is_wrapper_type)
-
- if (base_idl_type == 'EventHandler' and
- interface.name in ['Window', 'WorkerGlobalScope'] and
- attribute.name == 'onerror'):
- includes.add('bindings/core/v8/V8ErrorHandler.h')
-
is_auto_scope = not 'DartNoAutoScope' in extended_attributes
- contents = {
- 'access_control_list': access_control_list(attribute),
- 'activity_logging_world_list_for_getter': DartUtilities.activity_logging_world_list(attribute, 'Getter'), # [ActivityLogging]
- 'activity_logging_world_list_for_setter': DartUtilities.activity_logging_world_list(attribute, 'Setter'), # [ActivityLogging]
- 'cached_attribute_validation_method': extended_attributes.get('CachedAttribute'),
- 'conditional_string': DartUtilities.conditional_string(attribute),
- 'constructor_type': idl_type.constructor_type_name
- if is_constructor_attribute(attribute) else None,
- 'cpp_name': DartUtilities.cpp_name(attribute),
- 'cpp_type': idl_type.cpp_type,
- 'deprecate_as': DartUtilities.deprecate_as(attribute), # [DeprecateAs]
- 'enum_validation_expression': idl_type.enum_validation_expression,
- 'has_custom_getter': has_custom_getter,
- 'has_custom_setter': has_custom_setter,
- 'has_strict_type_checking': has_strict_type_checking,
- 'idl_type': str(idl_type), # need trailing [] on array for Dictionary::ConversionContext::setConversionType
- 'is_auto_scope': is_auto_scope,
- 'auto_scope': DartUtilities.bool_to_cpp(is_auto_scope),
- 'is_call_with_execution_context': DartUtilities.has_extended_attribute_value(attribute, 'CallWith', 'ExecutionContext'),
- 'is_call_with_script_state': is_call_with_script_state,
- 'is_check_security_for_node': is_check_security_for_node,
- 'is_custom_element_callbacks': is_custom_element_callbacks,
- 'is_expose_js_accessors': 'ExposeJSAccessors' in extended_attributes,
- 'is_getter_raises_exception': ( # [RaisesException]
- 'RaisesException' in extended_attributes and
- extended_attributes['RaisesException'] in [None, 'Getter']),
- 'is_partial_interface_member': 'PartialInterfaceImplementedAs' in extended_attributes,
- 'is_initialized_by_event_constructor':
- 'InitializedByEventConstructor' in extended_attributes,
- 'is_keep_alive_for_gc': is_keep_alive_for_gc(interface, attribute),
- 'is_nullable': attribute.idl_type.is_nullable,
- 'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
- 'is_read_only': attribute.is_read_only,
- 'is_reflect': is_reflect,
- 'is_replaceable': 'Replaceable' in attribute.extended_attributes,
- 'is_setter_call_with_execution_context': DartUtilities.has_extended_attribute_value(attribute, 'SetterCallWith', 'ExecutionContext'),
- 'is_setter_raises_exception': is_setter_raises_exception,
- 'has_setter_exception_state': (
- is_setter_raises_exception or has_strict_type_checking or
- idl_type.is_integer_type),
- 'is_static': attribute.is_static,
- 'is_url': 'URL' in extended_attributes,
- 'is_unforgeable': 'Unforgeable' in extended_attributes,
- 'measure_as': DartUtilities.measure_as(attribute), # [MeasureAs]
- 'name': attribute.name,
- 'per_context_enabled_function': DartUtilities.per_context_enabled_function_name(attribute), # [PerContextEnabled]
- 'property_attributes': property_attributes(attribute),
- 'put_forwards': 'PutForwards' in extended_attributes,
- 'ref_ptr': 'RefPtrWillBeRawPtr' if idl_type.is_will_be_garbage_collected else 'RefPtr',
- 'reflect_empty': extended_attributes.get('ReflectEmpty'),
- 'reflect_invalid': extended_attributes.get('ReflectInvalid', ''),
- 'reflect_missing': extended_attributes.get('ReflectMissing'),
- 'reflect_only': extended_attributes['ReflectOnly'].split('|')
- if 'ReflectOnly' in extended_attributes else None,
- 'setter_callback': setter_callback_name(interface, attribute),
- 'v8_type': dart_types.v8_type(base_idl_type),
- 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name(attribute), # [RuntimeEnabled]
- 'world_suffixes': ['', 'ForMainWorld']
- if 'PerWorldBindings' in extended_attributes
- else [''], # [PerWorldBindings]
- }
- if is_constructor_attribute(attribute):
- generate_constructor_getter(interface, attribute, contents)
- return contents
- if not has_custom_getter:
- generate_getter(interface, attribute, contents)
- # FIXME: We did not previously support the PutForwards attribute, so I am
- # disabling it here for now to get things compiling.
- # We may wish to revisit this.
- # if ((not attribute.is_read_only or 'PutForwards' in extended_attributes)):
+ context.update({
+ 'activity_logging_world_list_for_getter': DartUtilities.activity_logging_world_list(attribute, 'Getter'), # [ActivityLogging]
+ 'activity_logging_world_list_for_setter': DartUtilities.activity_logging_world_list(attribute, 'Setter'), # [ActivityLogging]
+ 'deprecate_as': DartUtilities.deprecate_as(attribute), # [DeprecateAs]
+ 'has_custom_getter': has_custom_getter,
+ 'has_custom_setter': has_custom_setter,
+ 'is_auto_scope': is_auto_scope, # Used internally (outside of templates).
+ 'is_call_with_script_state': is_call_with_script_state,
+ 'auto_scope': DartUtilities.bool_to_cpp(is_auto_scope),
+ 'measure_as': DartUtilities.measure_as(attribute), # [MeasureAs]
+ 'v8_type': dart_types.v8_type(base_idl_type),
+ })
+
+ if v8_attributes.is_constructor_attribute(attribute):
+ v8_attributes.constructor_getter_context(interface, attribute, context)
+ return context
+ if not v8_attributes.has_custom_getter(attribute):
+ getter_context(interface, attribute, context)
if (not attribute.is_read_only):
- generate_setter(interface, attribute, contents)
+ # FIXME: We did not previously support the PutForwards attribute, so I am
+ # disabling it here for now to get things compiling.
+ # We may wish to revisit this.
+ # if (not has_custom_setter(attribute) and
+ # (not attribute.is_read_only or 'PutForwards' in extended_attributes)):
+ setter_context(interface, attribute, context)
native_entry_getter = \
- DartUtilities.generate_native_entry(interface.name, contents,
- attribute.name, 'Getter',
- None, [], None)
+ DartUtilities.generate_native_entry(
+ interface.name, attribute.name, 'Getter', attribute.is_static, 0)
native_entry_setter = \
- DartUtilities.generate_native_entry(interface.name, contents,
- attribute.name, 'Setter',
- None, ["value"], None)
- contents.update({
+ DartUtilities.generate_native_entry(
+ interface.name, attribute.name, 'Setter', attribute.is_static, 1)
+ context.update({
'native_entry_getter': native_entry_getter,
'native_entry_setter': native_entry_setter,
})
- return contents
+ return context
################################################################################
# Getter
################################################################################
-def generate_getter(interface, attribute, contents):
+def getter_context(interface, attribute, context):
+ v8_attributes.getter_context(interface, attribute, context)
+
idl_type = attribute.idl_type
base_idl_type = idl_type.base_type
extended_attributes = attribute.extended_attributes
- name = attribute.name
- cpp_value = getter_expression(interface, attribute, contents)
+ cpp_value = getter_expression(interface, attribute, context)
# Normally we can inline the function call into the return statement to
# avoid the overhead of using a Ref<> temporary, but for some cases
# (nullable types, EventHandler, [CachedAttribute], or if there are
@@ -202,8 +134,8 @@
base_idl_type == 'EventHandler' or
'CachedAttribute' in extended_attributes or
'ReflectOnly' in extended_attributes or
- contents['is_getter_raises_exception']):
- contents['cpp_value_original'] = cpp_value
+ context['is_getter_raises_exception']):
+ context['cpp_value_original'] = cpp_value
cpp_value = 'result'
# EventHandler has special handling
if base_idl_type != 'EventHandler' and idl_type.is_interface_type:
@@ -215,99 +147,48 @@
script_wrappable='impl',
release=release,
for_main_world=False,
- auto_scope=contents['is_auto_scope'])
+ auto_scope=context['is_auto_scope'])
# TODO(terry): Should be able to eliminate suppress_getter as we move from
# IGNORE_MEMBERS to DartSuppress in the IDL.
suppress = (suppress_getter(interface.name, attribute.name) or
DartUtilities.has_extended_attribute_value(attribute, 'DartSuppress', 'Getter'))
- contents.update({
+ context.update({
'cpp_value': cpp_value,
'dart_set_return_value': dart_set_return_value,
'is_getter_suppressed': suppress,
})
-def getter_expression(interface, attribute, contents):
+def getter_expression(interface, attribute, context):
+ v8_attributes.getter_expression(interface, attribute, context)
+
arguments = []
- idl_type = attribute.idl_type
- this_getter_base_name = getter_base_name(interface, attribute, arguments)
+ this_getter_base_name = v8_attributes.getter_base_name(interface, attribute, arguments)
getter_name = DartUtilities.scoped_name(interface, attribute, this_getter_base_name)
- arguments.extend(DartUtilities.call_with_arguments(attribute))
+ arguments.extend(DartUtilities.call_with_arguments(
+ attribute.extended_attributes.get('CallWith')))
if ('PartialInterfaceImplementedAs' in attribute.extended_attributes and
not attribute.is_static):
# Pass by reference.
arguments.append('*receiver')
- # TODO(jacobr): refactor has_type_checking_nullable to better match v8.
- has_type_checking_nullable = (
- (DartUtilities.has_extended_attribute_value(interface, 'TypeChecking', 'Nullable') or
- DartUtilities.has_extended_attribute_value(attribute, 'TypeChecking', 'Nullable')) and
- idl_type.is_wrapper_type)
-
if attribute.idl_type.is_explicit_nullable:
arguments.append('isNull')
- if contents['is_getter_raises_exception']:
+ if context['is_getter_raises_exception']:
arguments.append('es')
return '%s(%s)' % (getter_name, ', '.join(arguments))
-CONTENT_ATTRIBUTE_GETTER_NAMES = {
- 'boolean': 'hasAttribute',
- 'long': 'getIntegralAttribute',
- 'unsigned long': 'getUnsignedIntegralAttribute',
-}
-
-
-def getter_base_name(interface, attribute, arguments):
- extended_attributes = attribute.extended_attributes
- if 'Reflect' not in extended_attributes:
- return DartUtilities.uncapitalize(DartUtilities.cpp_name(attribute))
-
- content_attribute_name = extended_attributes['Reflect'] or attribute.name.lower()
- if content_attribute_name in ['class', 'id', 'name']:
- # Special-case for performance optimization.
- return 'get%sAttribute' % content_attribute_name.capitalize()
-
- arguments.append(scoped_content_attribute_name(interface, attribute))
-
- base_idl_type = attribute.idl_type.base_type
- if base_idl_type in CONTENT_ATTRIBUTE_GETTER_NAMES:
- return CONTENT_ATTRIBUTE_GETTER_NAMES[base_idl_type]
- if 'URL' in attribute.extended_attributes:
- return 'getURLAttribute'
- return 'fastGetAttribute'
-
-
-def is_keep_alive_for_gc(interface, attribute):
- idl_type = attribute.idl_type
- base_idl_type = idl_type.base_type
- extended_attributes = attribute.extended_attributes
- return (
- # For readonly attributes, for performance reasons we keep the attribute
- # wrapper alive while the owner wrapper is alive, because the attribute
- # never changes.
- (attribute.is_read_only and
- idl_type.is_wrapper_type and
- # There are some exceptions, however:
- not(
- # Node lifetime is managed by object grouping.
- inherits_interface(interface.name, 'Node') or
- inherits_interface(base_idl_type, 'Node') or
- # A self-reference is unnecessary.
- attribute.name == 'self' or
- # FIXME: Remove these hard-coded hacks.
- base_idl_type in ['EventTarget', 'Window'] or
- base_idl_type.startswith(('HTML', 'SVG')))))
-
-
################################################################################
# Setter
################################################################################
-def generate_setter(interface, attribute, contents):
+def setter_context(interface, attribute, context):
+ v8_attributes.setter_context(interface, attribute, context)
+
def target_attribute():
target_interface_name = attribute.idl_type.base_type
target_attribute_name = extended_attributes['PutForwards']
@@ -322,14 +203,13 @@
(target_attribute_name, target_interface_name))
extended_attributes = attribute.extended_attributes
- interface_extended_attributes = interface.extended_attributes
if 'PutForwards' in extended_attributes:
# Use target attribute in place of original attribute
attribute = target_attribute()
this_cpp_type = 'DartStringAdapter'
else:
- this_cpp_type = contents['cpp_type']
+ this_cpp_type = context['cpp_type']
idl_type = attribute.idl_type
@@ -337,24 +217,32 @@
# IGNORE_MEMBERS to DartSuppress in the IDL.
suppress = (suppress_setter(interface.name, attribute.name) or
DartUtilities.has_extended_attribute_value(attribute, 'DartSuppress', 'Setter'))
- contents.update({
+ context.update({
+ 'has_setter_exception_state': (
+ context['is_setter_raises_exception'] or context['has_type_checking_interface'] or
+ idl_type.is_integer_type),
'is_setter_suppressed': suppress,
'setter_lvalue': dart_types.check_reserved_name(attribute.name),
'cpp_type': this_cpp_type,
'local_cpp_type': idl_type.cpp_type_args(attribute.extended_attributes, raw_type=True),
- 'cpp_setter': setter_expression(interface, attribute, contents),
'dart_value_to_local_cpp_value':
attribute.idl_type.dart_value_to_local_cpp_value(
- interface_extended_attributes, extended_attributes, attribute.name, False, 1,
- contents['is_auto_scope']),
+ extended_attributes, attribute.name, False,
+ context['has_type_checking_interface'], 1,
+ context['is_auto_scope']),
})
+ # setter_expression() depends on context values we set above.
+ context['cpp_setter'] = setter_expression(interface, attribute, context)
-def setter_expression(interface, attribute, contents):
+
+def setter_expression(interface, attribute, context):
extended_attributes = attribute.extended_attributes
- arguments = DartUtilities.call_with_arguments(attribute, extended_attributes.get('SetterCallWith'))
+ arguments = DartUtilities.call_with_arguments(
+ extended_attributes.get('SetterCallWith') or
+ extended_attributes.get('CallWith'))
- this_setter_base_name = setter_base_name(interface, attribute, arguments)
+ this_setter_base_name = v8_attributes.setter_base_name(interface, attribute, arguments)
setter_name = DartUtilities.scoped_name(interface, attribute, this_setter_base_name)
if ('PartialInterfaceImplementedAs' in extended_attributes and
@@ -363,7 +251,7 @@
idl_type = attribute.idl_type
if idl_type.base_type == 'EventHandler':
getter_name = DartUtilities.scoped_name(interface, attribute, DartUtilities.cpp_name(attribute))
- contents['event_handler_getter_expression'] = '%s(%s)' % (
+ context['event_handler_getter_expression'] = '%s(%s)' % (
getter_name, ', '.join(arguments))
# FIXME(vsm): Do we need to support this? If so, what's our analogue of
# V8EventListenerList?
@@ -377,46 +265,12 @@
else:
attribute_name = dart_types.check_reserved_name(attribute.name)
arguments.append(attribute_name)
- if contents['is_setter_raises_exception']:
+ if context['is_setter_raises_exception']:
arguments.append('es')
return '%s(%s)' % (setter_name, ', '.join(arguments))
-CONTENT_ATTRIBUTE_SETTER_NAMES = {
- 'boolean': 'setBooleanAttribute',
- 'long': 'setIntegralAttribute',
- 'unsigned long': 'setUnsignedIntegralAttribute',
-}
-
-
-def setter_base_name(interface, attribute, arguments):
- if 'Reflect' not in attribute.extended_attributes:
- return 'set%s' % DartUtilities.capitalize(DartUtilities.cpp_name(attribute))
- arguments.append(scoped_content_attribute_name(interface, attribute))
-
- base_idl_type = attribute.idl_type.base_type
- if base_idl_type in CONTENT_ATTRIBUTE_SETTER_NAMES:
- return CONTENT_ATTRIBUTE_SETTER_NAMES[base_idl_type]
- return 'setAttribute'
-
-
-def scoped_content_attribute_name(interface, attribute):
- content_attribute_name = attribute.extended_attributes['Reflect'] or attribute.name.lower()
- if interface.name.startswith('SVG'):
- # SVG's xmlbase/xmlspace/xmllang need special behavior, i.e.
- # it is in XMLNames namespace and the generated attribute has no xml prefix.
- if attribute.name.startswith('xml'):
- namespace = 'XMLNames'
- content_attribute_name = content_attribute_name[3:]
- else:
- namespace = 'SVGNames'
- else:
- namespace = 'HTMLNames'
- includes.add('core/%s.h' % namespace)
- return '%s::%sAttr' % (namespace, content_attribute_name)
-
-
################################################################################
# Attribute configuration
################################################################################
@@ -427,7 +281,7 @@
extended_attributes = attribute.extended_attributes
if (('Replaceable' in extended_attributes and
'PutForwards' not in extended_attributes) or
- is_constructor_attribute(attribute)):
+ v8_attributes.is_constructor_attribute(attribute)):
# FIXME: rename to ForceSetAttributeOnThisCallback, since also used for Constructors
return '{0}V8Internal::{0}ReplaceableAttributeSetterCallback'.format(cpp_class_name)
# FIXME:disabling PutForwards for now since we didn't support it before
@@ -437,36 +291,6 @@
return '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_name, attribute.name)
-# [DoNotCheckSecurity], [Unforgeable]
-def access_control_list(attribute):
- extended_attributes = attribute.extended_attributes
- access_control = []
- if 'DoNotCheckSecurity' in extended_attributes:
- do_not_check_security = extended_attributes['DoNotCheckSecurity']
- if do_not_check_security == 'Setter':
- access_control.append('v8::ALL_CAN_WRITE')
- else:
- access_control.append('v8::ALL_CAN_READ')
- if (not attribute.is_read_only or
- 'Replaceable' in extended_attributes):
- access_control.append('v8::ALL_CAN_WRITE')
- if 'Unforgeable' in extended_attributes:
- access_control.append('v8::PROHIBITS_OVERWRITING')
- return access_control or ['v8::DEFAULT']
-
-
-# [NotEnumerable], [Unforgeable]
-def property_attributes(attribute):
- extended_attributes = attribute.extended_attributes
- property_attributes_list = []
- if ('NotEnumerable' in extended_attributes or
- is_constructor_attribute(attribute)):
- property_attributes_list.append('v8::DontEnum')
- if 'Unforgeable' in extended_attributes:
- property_attributes_list.append('v8::DontDelete')
- return property_attributes_list or ['v8::None']
-
-
################################################################################
# Constructors
################################################################################
@@ -474,12 +298,3 @@
idl_types.IdlType.constructor_type_name = property(
# FIXME: replace this with a [ConstructorAttribute] extended attribute
lambda self: DartUtilities.strip_suffix(self.base_type, 'Constructor'))
-
-
-def is_constructor_attribute(attribute):
- # FIXME: replace this with [ConstructorAttribute] extended attribute
- return attribute.idl_type.name.endswith('Constructor')
-
-
-def generate_constructor_getter(interface, attribute, contents):
- contents['needs_constructor_getter_callback'] = contents['measure_as'] or contents['deprecate_as']
diff --git a/bindings/dart/scripts/dart_callback_interface.py b/bindings/dart/scripts/dart_callback_interface.py
index 5120af4..266fb31 100644
--- a/bindings/dart/scripts/dart_callback_interface.py
+++ b/bindings/dart/scripts/dart_callback_interface.py
@@ -114,7 +114,9 @@
def generate_arguments_contents(arguments, call_with_this_handle):
def generate_argument(argument):
- creation_context = '<Dart%s>' % argument.idl_type.base_type
+ creation_context = ''
+ if argument.idl_type.native_array_element_type is not None:
+ creation_context = '<Dart%s>' % argument.idl_type.native_array_element_type
return {
'handle': '%sHandle' % argument.name,
'cpp_value_to_dart_value': argument.idl_type.cpp_value_to_dart_value(argument.name,
diff --git a/bindings/dart/scripts/dart_compiler.py b/bindings/dart/scripts/dart_compiler.py
index 83457d0..84eb655 100755
--- a/bindings/dart/scripts/dart_compiler.py
+++ b/bindings/dart/scripts/dart_compiler.py
@@ -38,7 +38,7 @@
import cPickle as pickle
from idl_reader import IdlReader
-from utilities import write_file
+from utilities import write_file, idl_filename_to_component
# TODO(terry): Temporary whitelist of IDL files to skip code generating. e.g.,
@@ -107,7 +107,9 @@
idl_pickle_filename = os.path.join(self.output_directory,
'%s_globals.pickle' % interface_name)
definitions = self.reader.read_idl_definitions(idl_filename)
- output_code_list = self.code_generator.generate_code(definitions,
+ component = idl_filename_to_component(idl_filename)
+
+ output_code_list = self.code_generator.generate_code(definitions[component],
interface_name,
idl_pickle_filename,
self.only_if_changed)
@@ -120,12 +122,15 @@
for output_code, output_filename in zip(output_code_list, output_filenames):
write_file(output_code, output_filename, self.only_if_changed)
- def generate_global_and_write(self, global_pickle_directories, output_filenames):
- output_code_list = self.code_generator.generate_globals(global_pickle_directories,
- self.output_directory)
+ def generate_global_and_write(self, global_entries, output_filenames):
+ output_code_list = self.code_generator.generate_globals(global_entries)
for output_code, output_filename in zip(output_code_list, output_filenames):
write_file(output_code, output_filename, self.only_if_changed)
+ def generate_dart_blink_and_write(self, global_entries, output_filename):
+ output_code = self.code_generator.generate_dart_blink(global_entries)
+ write_file(output_code, output_filename, self.only_if_changed)
+
@abc.abstractmethod
def compile_file(self, idl_filename):
pass
diff --git a/bindings/dart/scripts/dart_dictionary.py b/bindings/dart/scripts/dart_dictionary.py
new file mode 100644
index 0000000..42a21ba
--- /dev/null
+++ b/bindings/dart/scripts/dart_dictionary.py
@@ -0,0 +1,149 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Generate template contexts of dictionaries for both v8 bindings and
+implementation classes that are used by blink's core/modules.
+"""
+
+import operator
+from v8_globals import includes
+import dart_types
+from dart_utilities import DartUtilities
+
+
+DICTIONARY_H_INCLUDES = frozenset([
+ 'bindings/core/v8/V8Binding.h',
+ 'platform/heap/Handle.h',
+])
+
+DICTIONARY_CPP_INCLUDES = frozenset([
+ 'bindings/common/ExceptionState.h',
+ # FIXME: Remove this, http://crbug.com/321462
+ 'bindings/core/v8/Dictionary.h',
+])
+
+
+def setter_name_for_dictionary_member(member):
+ return 'set%s' % DartUtilities.capitalize(member.name)
+
+
+def has_method_name_for_dictionary_member(member):
+ return 'has%s' % DartUtilities.capitalize(member.name)
+
+
+def unwrap_nullable_if_needed(idl_type):
+ if idl_type.is_nullable:
+ return idl_type.inner_type
+ return idl_type
+
+
+# Context for Dart bindings
+
+def dictionary_context(dictionary):
+ includes.clear()
+ includes.update(DICTIONARY_CPP_INCLUDES)
+ return {
+ 'cpp_class': DartUtilities.cpp_name(dictionary),
+ 'header_includes': set(DICTIONARY_H_INCLUDES),
+ 'members': [member_context(member)
+ for member in sorted(dictionary.members,
+ key=operator.attrgetter('name'))],
+ 'dart_class': dart_types.dart_type(dictionary.name),
+
+ }
+
+
+def member_context(member):
+ idl_type = member.idl_type
+ idl_type.add_includes_for_type()
+ idl_type = unwrap_nullable_if_needed(idl_type)
+
+ def default_values():
+ if not member.default_value:
+ return None, None
+ if member.default_value.is_null:
+ return None, 'v8::Null(isolate)'
+ cpp_default_value = str(member.default_value)
+ v8_default_value = idl_type.cpp_value_to_v8_value(
+ cpp_value=cpp_default_value, isolate='isolate',
+ creation_context='creationContext')
+ return cpp_default_value, v8_default_value
+
+ cpp_default_value, dart_default_value = default_values()
+
+ dart_enum_expression = idl_type.enum_validation_expression
+ if dart_enum_expression:
+ dart_enum_expression = dart_enum_expression.format(param_name='string')
+
+ return {
+ 'cpp_default_value': cpp_default_value,
+ 'cpp_type': idl_type.cpp_type,
+ 'cpp_value_to_dart_value': idl_type.cpp_value_to_dart_value(
+ cpp_value='impl->%s()' % member.name,
+ creation_context='creationContext',
+ extended_attributes=member.extended_attributes),
+ 'enum_validation_expression': dart_enum_expression,
+ 'has_method_name': has_method_name_for_dictionary_member(member),
+ 'is_object': idl_type.name == 'Object',
+ 'name': member.name,
+ 'setter_name': setter_name_for_dictionary_member(member),
+ 'dart_default_value': dart_default_value,
+ }
+
+
+# Context for implementation classes
+
+def dictionary_impl_context(dictionary, interfaces_info):
+ includes.clear()
+ header_includes = set(['platform/heap/Handle.h'])
+ return {
+ 'header_includes': header_includes,
+ 'cpp_class': DartUtilities.cpp_name(dictionary),
+ 'members': [member_impl_context(member, interfaces_info,
+ header_includes)
+ for member in dictionary.members],
+ }
+
+
+def member_impl_context(member, interfaces_info, header_includes):
+ idl_type = unwrap_nullable_if_needed(member.idl_type)
+ is_object = idl_type.name == 'Object'
+
+ def getter_expression():
+ if idl_type.impl_should_use_nullable_container:
+ return 'm_%s.get()' % member.name
+ return 'm_%s' % member.name
+
+ def has_method_expression():
+ if idl_type.impl_should_use_nullable_container or idl_type.is_enum or idl_type.is_string_type:
+ return '!m_%s.isNull()' % member.name
+ elif is_object:
+ return '!(m_{0}.isEmpty() || m_{0}.isNull() || m_{0}.isUndefined())'.format(member.name)
+ else:
+ return 'm_%s' % member.name
+
+ def member_cpp_type():
+ member_cpp_type = idl_type.cpp_type_args(used_in_cpp_sequence=True)
+ if idl_type.impl_should_use_nullable_container:
+ return dart_types.cpp_template_type('Nullable', member_cpp_type)
+ return member_cpp_type
+
+ cpp_default_value = None
+ if member.default_value and not member.default_value.is_null:
+ cpp_default_value = str(member.default_value)
+
+ header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
+ return {
+ 'cpp_default_value': cpp_default_value,
+ 'getter_expression': getter_expression(),
+ 'has_method_expression': has_method_expression(),
+ 'has_method_name': has_method_name_for_dictionary_member(member),
+ 'is_object': is_object,
+ 'is_traceable': (idl_type.is_garbage_collected or
+ idl_type.is_will_be_garbage_collected),
+ 'member_cpp_type': member_cpp_type(),
+ 'name': member.name,
+ 'rvalue_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
+ 'setter_name': setter_name_for_dictionary_member(member),
+ }
diff --git a/bindings/dart/scripts/dart_interface.py b/bindings/dart/scripts/dart_interface.py
index c6a5702..1ab889b 100644
--- a/bindings/dart/scripts/dart_interface.py
+++ b/bindings/dart/scripts/dart_interface.py
@@ -1,4 +1,5 @@
# Copyright (C) 2013 Google Inc. All rights reserved.
+# coding=utf-8
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -32,6 +33,8 @@
"""
from collections import defaultdict
+import itertools
+from operator import itemgetter
import idl_types
from idl_types import IdlType, inherits_interface, IdlArrayOrSequenceType, IdlArrayType
@@ -40,6 +43,8 @@
import dart_types
from dart_utilities import DartUtilities
from v8_globals import includes
+import v8_attributes
+import v8_interface
INTERFACE_H_INCLUDES = frozenset([
@@ -396,22 +401,12 @@
return False
-def add_native_entries(interface, constructors, is_custom):
- for constructor in constructors:
- types = None
- if not is_custom:
- types = [arg['preprocessed_type']
- for arg in constructor['arguments']]
- argument_names = [arg['name'] for arg in constructor['arguments']]
- native_entry = \
- DartUtilities.generate_native_entry(interface.name, constructor,
- None, 'Constructor', None,
- argument_names, types)
- constructor.update({'native_entry': native_entry})
+# TODO(terry): Rename genenerate_interface to interface_context.
+def interface_context(interface):
+ context = v8_interface.interface_context(interface)
-
-def generate_interface(interface):
includes.clear()
+
includes.update(INTERFACE_CPP_INCLUDES)
header_includes = set(INTERFACE_H_INCLUDES)
@@ -420,10 +415,6 @@
header_includes.update(dart_types.includes_for_interface(parent_interface))
extended_attributes = interface.extended_attributes
- is_audio_buffer = inherits_interface(interface.name, 'AudioBuffer')
- if is_audio_buffer:
- includes.add('modules/webaudio/AudioBuffer.h')
-
is_document = inherits_interface(interface.name, 'Document')
if is_document:
# FIXME(vsm): We probably need bindings/dart/DartController and
@@ -438,30 +429,6 @@
if inherits_interface(interface.name, 'EventTarget'):
includes.update(['bindings/core/dart/DartEventListener.h'])
- # [ActiveDOMObject]
- is_active_dom_object = 'ActiveDOMObject' in extended_attributes
-
- # [CheckSecurity]
- is_check_security = 'CheckSecurity' in extended_attributes
- if is_check_security:
- includes.add('bindings/common/BindingSecurity.h')
-
- # [DependentLifetime]
- is_dependent_lifetime = 'DependentLifetime' in extended_attributes
-
- # [MeasureAs]
-# TODO(terry): Remove Me?
-# is_measure_as = 'MeasureAs' in extended_attributes
-# if is_measure_as:
-# includes.add('core/frame/UseCounter.h')
-
- # [SetWrapperReferenceFrom]
- reachable_node_function = extended_attributes.get('SetWrapperReferenceFrom')
- if reachable_node_function:
- # FIXME(vsm): We may need bindings/dart/DartGCController.h instead.
- includes.update(['bindings/core/v8/V8GCController.h',
- 'core/dom/Element.h'])
-
# [SetWrapperReferenceTo]
set_wrapper_reference_to_list = [{
'name': argument.name,
@@ -476,127 +443,81 @@
for set_wrapper_reference_to in set_wrapper_reference_to_list:
set_wrapper_reference_to['idl_type'].add_includes_for_type()
- # [SpecialWrapFor]
- if 'SpecialWrapFor' in extended_attributes:
- special_wrap_for = extended_attributes['SpecialWrapFor'].split('|')
- else:
- special_wrap_for = []
- for special_wrap_interface in special_wrap_for:
- dart_types.add_includes_for_interface(special_wrap_interface)
-
- # [Custom=Wrap], [SetWrapperReferenceFrom]
- has_visit_dom_wrapper = (
- DartUtilities.has_extended_attribute_value(interface, 'Custom', 'VisitDOMWrapper') or
- reachable_node_function or
- set_wrapper_reference_to_list)
-
- this_gc_type = DartUtilities.gc_type(interface)
-
- template_contents = {
+ context.update({
'conditional_string': DartUtilities.conditional_string(interface), # [Conditional]
'cpp_class': DartUtilities.cpp_name(interface),
- 'gc_type': this_gc_type,
- 'has_custom_legacy_call_as_function': DartUtilities.has_extended_attribute_value(interface, 'Custom', 'LegacyCallAsFunction'), # [Custom=LegacyCallAsFunction]
- 'has_custom_to_v8': DartUtilities.has_extended_attribute_value(interface, 'Custom', 'ToV8'), # [Custom=ToV8]
- 'has_custom_wrap': DartUtilities.has_extended_attribute_value(interface, 'Custom', 'Wrap'), # [Custom=Wrap]
- '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_audio_buffer': is_audio_buffer,
- 'is_check_security': is_check_security,
- 'is_dependent_lifetime': is_dependent_lifetime,
- 'is_document': is_document,
- 'is_event_target': inherits_interface(interface.name, 'EventTarget'),
- 'is_exception': interface.is_exception,
- 'is_garbage_collected': this_gc_type == 'GarbageCollectedObject',
- 'is_will_be_garbage_collected': this_gc_type == 'WillBeGarbageCollectedObject',
- 'is_node': inherits_interface(interface.name, 'Node'),
+ 'is_garbage_collected': context['gc_type'] == 'GarbageCollectedObject',
+ 'is_will_be_garbage_collected': context['gc_type'] == 'WillBeGarbageCollectedObject',
'measure_as': DartUtilities.measure_as(interface), # [MeasureAs]
- 'parent_interface': parent_interface,
'pass_cpp_type': dart_types.cpp_template_type(
- dart_types.cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type),
+ dart_types.cpp_ptr_type('PassRefPtr', 'RawPtr', context['gc_type']),
DartUtilities.cpp_name(interface)),
- 'reachable_node_function': reachable_node_function,
'runtime_enabled_function': DartUtilities.runtime_enabled_function_name(interface), # [RuntimeEnabled]
- 'set_wrapper_reference_to_list': set_wrapper_reference_to_list,
- 'special_wrap_for': special_wrap_for,
+ 'set_wrapper_reference_to_list': set_wrapper_reference_to_list,
'dart_class': dart_types.dart_type(interface.name),
'v8_class': DartUtilities.v8_class_name(interface),
- 'wrapper_configuration': 'WrapperConfiguration::Dependent'
- if (has_visit_dom_wrapper or
- is_active_dom_object or
- is_dependent_lifetime)
- else 'WrapperConfiguration::Independent',
- }
+ })
# Constructors
- constructors = [generate_constructor(interface, constructor)
+ constructors = [constructor_context(interface, constructor)
for constructor in interface.constructors
# FIXME: shouldn't put named constructors with constructors
# (currently needed for Perl compatibility)
# Handle named constructors separately
if constructor.name == 'Constructor']
- generate_constructor_overloads(constructors)
+ if len(constructors) > 1:
+ context.update({'constructor_overloads': overloads_context(constructors)})
# [CustomConstructor]
- custom_constructors = [generate_custom_constructor(interface, constructor)
+ custom_constructors = [custom_constructor_context(interface, constructor)
for constructor in interface.custom_constructors]
- # [EventConstructor]
- has_event_constructor = 'EventConstructor' in extended_attributes
- any_type_attributes = [attribute for attribute in interface.attributes
- if attribute.idl_type.name == 'Any']
- if has_event_constructor:
- includes.add('bindings/core/v8/Dictionary.h')
- if any_type_attributes:
- includes.add('bindings/core/v8/SerializedScriptValue.h')
-
# [NamedConstructor]
named_constructor = generate_named_constructor(interface)
- add_native_entries(interface, constructors, bool(custom_constructors))
- add_native_entries(interface, custom_constructors, bool(custom_constructors))
+ generate_method_native_entries(interface, constructors, 'Constructor')
+ generate_method_native_entries(interface, custom_constructors, 'Constructor')
if named_constructor:
- add_native_entries(interface, [named_constructor], bool(custom_constructors))
+ generate_method_native_entries(interface, [named_constructor],
+ 'Constructor')
+ event_constructor = None
+ if context['has_event_constructor']:
+ event_constructor = {
+ 'native_entries': [
+ DartUtilities.generate_native_entry(
+ interface.name, None, 'Constructor', False, 2)],
+ }
- if (constructors or custom_constructors or has_event_constructor or
+ if (context['constructors'] or custom_constructors or context['has_event_constructor'] or
named_constructor):
includes.add('core/frame/LocalDOMWindow.h')
- template_contents.update({
- 'any_type_attributes': any_type_attributes,
+ context.update({
'constructors': constructors,
'custom_constructors': custom_constructors,
+ 'event_constructor': event_constructor,
'has_custom_constructor': bool(custom_constructors),
- 'has_event_constructor': has_event_constructor,
'interface_length':
- interface_length(interface, constructors + custom_constructors),
+ v8_interface.interface_length(interface, constructors + custom_constructors),
'is_constructor_call_with_document': DartUtilities.has_extended_attribute_value(
interface, 'ConstructorCallWith', 'Document'), # [ConstructorCallWith=Document]
'is_constructor_call_with_execution_context': DartUtilities.has_extended_attribute_value(
interface, 'ConstructorCallWith', 'ExecutionContext'), # [ConstructorCallWith=ExeuctionContext]
- 'is_constructor_raises_exception': extended_attributes.get('RaisesException') == 'Constructor', # [RaisesException=Constructor]
'named_constructor': named_constructor,
})
- # Constants
- template_contents.update({
- 'constants': [generate_constant(constant) for constant in interface.constants],
- 'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes,
- })
-
# Attributes
- attributes = [dart_attributes.generate_attribute(interface, attribute)
+ attributes = [dart_attributes.attribute_context(interface, attribute)
for attribute in interface.attributes
# Skip attributes in the IGNORE_MEMBERS list or if an
# extended attribute is in the IGNORE_EXTENDED_ATTRIBUTES.
if (not _suppress_attribute(interface.name, attribute.name) and
- not dart_attributes.is_constructor_attribute(attribute) and
+ not v8_attributes.is_constructor_attribute(attribute) and
not _suppress_extended_attributes(attribute.extended_attributes) and
not ('DartSuppress' in attribute.extended_attributes and
attribute.extended_attributes.get('DartSuppress') == None))]
- template_contents.update({
+ context.update({
'attributes': attributes,
'has_accessors': any(attribute['is_expose_js_accessors'] for attribute in attributes),
'has_attribute_configuration': any(
@@ -611,17 +532,19 @@
})
# Methods
- methods = [dart_methods.generate_method(interface, method)
+ methods = [dart_methods.method_context(interface, method)
for method in interface.operations
# Skip anonymous special operations (methods name empty).
# Skip methods in our IGNORE_MEMBERS list.
# Skip methods w/ extended attributes in IGNORE_EXTENDED_ATTRIBUTES list.
if (method.name and
+ # detect unnamed getters from v8_interface.
+ method.name != 'anonymousNamedGetter' and
# TODO(terry): Eventual eliminate the IGNORE_MEMBERS in favor of DartSupress.
not _suppress_method(interface.name, method.name) and
not _suppress_extended_attributes(method.extended_attributes) and
not 'DartSuppress' in method.extended_attributes)]
- generate_overloads(methods)
+ compute_method_overloads_context(methods)
for method in methods:
method['do_generate_method_configuration'] = (
method['do_not_check_signature'] and
@@ -629,9 +552,9 @@
# For overloaded methods, only generate one accessor
('overload_index' not in method or method['overload_index'] == 1))
- generate_method_native_entries(interface, methods)
+ generate_method_native_entries(interface, methods, 'Method')
- template_contents.update({
+ context.update({
'has_origin_safe_method_setter': any(
method['is_check_security_for_frame'] and not method['is_read_only']
for method in methods),
@@ -640,256 +563,346 @@
'methods': methods,
})
- native_entries = generate_native_entries(interface, constructors,
- custom_constructors, attributes,
- methods, named_constructor)
-
- template_contents.update({
+ context.update({
'indexed_property_getter': indexed_property_getter(interface),
'indexed_property_setter': indexed_property_setter(interface),
- 'indexed_property_deleter': indexed_property_deleter(interface),
+ 'indexed_property_deleter': v8_interface.indexed_property_deleter(interface),
'is_override_builtins': 'OverrideBuiltins' in extended_attributes,
'named_property_getter': named_property_getter(interface),
'named_property_setter': named_property_setter(interface),
- 'named_property_deleter': named_property_deleter(interface),
+ 'named_property_deleter': v8_interface.named_property_deleter(interface),
+ })
+
+ generate_native_entries_for_specials(interface, context)
+
+ native_entries = generate_interface_native_entries(context)
+
+ context.update({
'native_entries': native_entries,
})
- return template_contents
+ return context
-def generate_native_entries(interface, constructors, custom_constructors,
- attributes, methods, named_constructor):
- entries = []
- for constructor in constructors:
- entries.append(constructor['native_entry'])
- for constructor in custom_constructors:
- entries.append(constructor['native_entry'])
- if named_constructor:
- entries.append(named_constructor['native_entry'])
+def generate_interface_native_entries(context):
+ entries = {}
+
+ def add(ne):
+ entries[ne['blink_entry']] = ne
+
+ def addAll(nes):
+ for ne in nes:
+ add(ne)
+
+ for constructor in context['constructors']:
+ addAll(constructor['native_entries'])
+ for constructor in context['custom_constructors']:
+ addAll(constructor['native_entries'])
+ if context['named_constructor']:
+ addAll(context['named_constructor']['native_entries'])
+ if context['event_constructor']:
+ addAll(context['event_constructor']['native_entries'])
+ for method in context['methods']:
+ addAll(method['native_entries'])
+ for attribute in context['attributes']:
+ add(attribute['native_entry_getter'])
+ if not attribute['is_read_only'] or attribute['put_forwards']:
+ add(attribute['native_entry_setter'])
+ if context['indexed_property_getter']:
+ addAll(context['indexed_property_getter']['native_entries'])
+ if context['indexed_property_setter']:
+ addAll(context['indexed_property_setter']['native_entries'])
+ if context['indexed_property_deleter']:
+ addAll(context['indexed_property_deleter']['native_entries'])
+ if context['named_property_getter']:
+ addAll(context['named_property_getter']['native_entries'])
+ if context['named_property_setter']:
+ addAll(context['named_property_setter']['native_entries'])
+ if context['named_property_deleter']:
+ addAll(context['named_property_deleter']['native_entries'])
+ return list(entries.values())
+
+
+def generate_method_native_entry(interface, method, count, kind):
+ name = method.get('name')
+ is_static = bool(method.get('is_static'))
+ native_entry = \
+ DartUtilities.generate_native_entry(interface.name, name,
+ kind, is_static, count)
+ return native_entry
+
+
+def generate_method_native_entries(interface, methods, kind):
for method in methods:
- entries.extend(method['native_entries'])
- for attribute in attributes:
- entries.append(attribute['native_entry_getter'])
- entries.append(attribute['native_entry_setter'])
- return entries
+ native_entries = []
+ arg_count = method['number_of_arguments']
+ min_arg_count = method['number_of_required_arguments']
+ lb = min_arg_count - 2 if min_arg_count > 2 else 0
+ for x in range(lb, arg_count + 3):
+ native_entry = \
+ generate_method_native_entry(interface, method, x, kind)
+ native_entries.append(native_entry)
-
-# [DeprecateAs], [Reflect], [RuntimeEnabled]
-def generate_constant(constant):
- # (Blink-only) string literals are unquoted in tokenizer, must be re-quoted
- # in C++.
- if constant.idl_type.name == 'String':
- value = '"%s"' % constant.value
- else:
- value = constant.value
-
- extended_attributes = constant.extended_attributes
- return {
- 'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
- 'name': constant.name,
- # FIXME: use 'reflected_name' as correct 'name'
- 'reflected_name': extended_attributes.get('Reflect', constant.name),
- 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name(constant),
- 'value': value,
- }
+ method.update({'native_entries': native_entries})
################################################################################
# Overloads
################################################################################
-def generate_method_native_entry(interface, method, count, optional_index):
- types = None
- if not method['is_custom']:
- types = [arg['preprocessed_type'] for arg in method['arguments'][0:count]]
- if method['is_call_with_script_arguments']:
- types.append("object")
- argument_names = [arg['name'] for arg in method['arguments'][0:count]]
- name = method['name']
- native_entry = \
- DartUtilities.generate_native_entry(interface.name, method,
- name, 'Method',
- optional_index,
- argument_names, types)
- return native_entry
+def compute_method_overloads_context(methods):
+ # Regular methods
+ compute_method_overloads_context_by_type([method for method in methods
+ if not method['is_static']])
+ # Static methods
+ compute_method_overloads_context_by_type([method for method in methods
+ if method['is_static']])
-def generate_method_native_entries(interface, methods):
- for method in methods:
- native_entries = []
- required_arg_count = method['number_of_required_arguments']
- arg_count = method['number_of_arguments']
- if required_arg_count != arg_count:
- for x in range(required_arg_count, arg_count + 1):
- # This is really silly, but is here for now just to match up
- # the existing name generation in the old dart:html scripts
- index = arg_count - x + 1
- native_entry = \
- generate_method_native_entry(interface, method, x, index)
- native_entries.append(native_entry)
- else:
- # Eventually, we should probably always generate an unindexed
- # native entry, to handle cases like
- # addEventListener in which we suppress the optionality,
- # and in general to make us more robust against optional changes
- native_entry = \
- generate_method_native_entry(interface, method, arg_count, None)
- native_entries.append(native_entry)
+def compute_method_overloads_context_by_type(methods):
+ """Computes |method.overload*| template values.
- method.update({'native_entries': native_entries})
-
-def generate_overloads(methods):
- generate_overloads_by_type(methods, is_static=False) # Regular methods
- generate_overloads_by_type(methods, is_static=True)
-
-
-def generate_overloads_by_type(methods, is_static):
- # Generates |overloads| template values and modifies |methods| in place;
- # |is_static| flag used (instead of partitioning list in 2) because need to
- # iterate over original list of methods to modify in place
- method_counts = defaultdict(lambda: 0)
- for method in methods:
- if method['is_static'] != is_static:
- continue
- name = method['name']
- # FIXME(vsm): We don't seem to capture optional param
- # overloads here.
- method_counts[name] += 1
-
- # Filter to only methods that are actually overloaded
- overloaded_method_counts = dict((name, count)
- for name, count in method_counts.iteritems()
- if count > 1)
-
+ Called separately for static and non-static (regular) methods,
+ as these are overloaded separately.
+ Modifies |method| in place for |method| in |methods|.
+ Doesn't change the |methods| list itself (only the values, i.e. individual
+ methods), so ok to treat these separately.
+ """
# Add overload information only to overloaded methods, so template code can
# easily verify if a function is overloaded
- method_overloads = defaultdict(list)
- for method in methods:
- name = method['name']
- if (method['is_static'] != is_static or
- name not in overloaded_method_counts):
- continue
- # Overload index includes self, so first append, then compute index
- method_overloads[name].append(method)
- method.update({
- 'overload_index': len(method_overloads[name]),
- 'overload_resolution_expression': overload_resolution_expression(method),
- })
- # FIXME(vsm): Looks like we only handle optional parameters if
- # the method is already overloaded. For a non-overloaded method
- # with optional parameters, we never get here.
-
- # Resolution function is generated after last overloaded function;
- # package necessary information into |method.overloads| for that method.
- for method in methods:
- if (method['is_static'] != is_static or
- 'overload_index' not in method):
- continue
- name = method['name']
- if method['overload_index'] != overloaded_method_counts[name]:
- continue
- overloads = method_overloads[name]
- minimum_number_of_required_arguments = min(
- overload['number_of_required_arguments']
- for overload in overloads)
- method['overloads'] = {
- 'has_exception_state': bool(minimum_number_of_required_arguments),
- 'methods': overloads,
- 'minimum_number_of_required_arguments': minimum_number_of_required_arguments,
- 'name': name,
- }
+ for name, overloads in v8_interface.method_overloads_by_name(methods):
+ # Resolution function is generated after last overloaded function;
+ # package necessary information into |method.overloads| for that method.
+ overloads[-1]['overloads'] = overloads_context(overloads)
+ overloads[-1]['overloads']['name'] = name
-def overload_resolution_expression(method):
- # Expression is an OR of ANDs: each term in the OR corresponds to a
- # possible argument count for a given method, with type checks.
- # FIXME: Blink's overload resolution algorithm is incorrect, per:
- # Implement WebIDL overload resolution algorithm.
- # https://code.google.com/p/chromium/issues/detail?id=293561
+def overloads_context(overloads):
+ """Returns |overloads| template values for a single name.
+
+ Sets |method.overload_index| in place for |method| in |overloads|
+ and returns dict of overall overload template values.
+ """
+ assert len(overloads) > 1 # only apply to overloaded names
+ for index, method in enumerate(overloads, 1):
+ method['overload_index'] = index
+
+ effective_overloads_by_length = v8_interface.effective_overload_set_by_length(overloads)
+ lengths = [length for length, _ in effective_overloads_by_length]
+ name = overloads[0].get('name', '<constructor>')
+
+ # Check and fail if all overloads with the shortest acceptable arguments
+ # list are runtime enabled, since we would otherwise set 'length' on the
+ # function object to an incorrect value when none of those overloads were
+ # actually enabled at runtime. The exception is if all overloads are
+ # controlled by the same runtime enabled feature, in which case there would
+ # be no function object at all if it is not enabled.
+ shortest_overloads = effective_overloads_by_length[0][1]
+ if (all(method.get('runtime_enabled_function')
+ for method, _, _ in shortest_overloads) and
+ not v8_interface.common_value(overloads, 'runtime_enabled_function')):
+ raise ValueError('Function.length of %s depends on runtime enabled features' % name)
+
+ return {
+ 'deprecate_all_as': v8_interface.common_value(overloads, 'deprecate_as'), # [DeprecateAs]
+ 'exposed_test_all': v8_interface.common_value(overloads, 'exposed_test'), # [Exposed]
+ 'length_tests_methods': length_tests_methods(effective_overloads_by_length),
+ # 1. Let maxarg be the length of the longest type list of the
+ # entries in S.
+ 'maxarg': lengths[-1],
+ 'measure_all_as': v8_interface.common_value(overloads, 'measure_as'), # [MeasureAs]
+ 'minarg': lengths[0],
+ 'per_context_enabled_function_all': v8_interface.common_value(overloads, 'per_context_enabled_function'), # [PerContextEnabled]
+ 'runtime_enabled_function_all': v8_interface.common_value(overloads, 'runtime_enabled_function'), # [RuntimeEnabled]
+ 'valid_arities': lengths
+ # Only need to report valid arities if there is a gap in the
+ # sequence of possible lengths, otherwise invalid length means
+ # "not enough arguments".
+ if lengths[-1] - lengths[0] != len(lengths) - 1 else None,
+ }
+
+
+def length_tests_methods(effective_overloads_by_length):
+ """Returns sorted list of resolution tests and associated methods, by length.
+
+ This builds the main data structure for the overload resolution loop.
+ For a given argument length, bindings test argument at distinguishing
+ argument index, in order given by spec: if it is compatible with
+ (optionality or) type required by an overloaded method, resolve to that
+ method.
+
+ Returns:
+ [(length, [(test, method)])]
+ """
+ return [(length, list(resolution_tests_methods(effective_overloads)))
+ for length, effective_overloads in effective_overloads_by_length]
+
+
+DART_CHECK_TYPE = {
+ 'ArrayBufferView': 'Dart_IsTypedData({cpp_value})',
+ 'ArrayBuffer': 'Dart_IsByteBuffer({cpp_value})',
+ 'Uint8Array': 'DartUtilities::isUint8Array({cpp_value})',
+ 'Uint8ClampedArray': 'DartUtilities::isUint8ClampedArray({cpp_value})',
+}
+
+
+def resolution_tests_methods(effective_overloads):
+ """Yields resolution test and associated method, in resolution order, for effective overloads of a given length.
+
+ This is the heart of the resolution algorithm.
+ http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
+
+ Note that a given method can be listed multiple times, with different tests!
+ This is to handle implicit type conversion.
+
+ Returns:
+ [(test, method)]
+ """
+ methods = [effective_overload[0]
+ for effective_overload in effective_overloads]
+ if len(methods) == 1:
+ # If only one method with a given length, no test needed
+ yield 'true', methods[0]
+ return
+
+ # 6. If there is more than one entry in S, then set d to be the
+ # distinguishing argument index for the entries of S.
+ index = v8_interface.distinguishing_argument_index(effective_overloads)
+ # (7-9 are for handling |undefined| values for optional arguments before
+ # the distinguishing argument (as "missing"), so you can specify only some
+ # optional arguments. We don't support this, so we skip these steps.)
+ # 10. If i = d, then:
+ # (d is the distinguishing argument index)
+ # 1. Let V be argi.
+ # Note: This is the argument that will be used to resolve which
+ # overload is selected.
+ cpp_value = 'Dart_GetNativeArgument(args, %s + argOffset)' % index
+
+ # Extract argument and IDL type to simplify accessing these in each loop.
+ arguments = [method['arguments'][index] for method in methods]
+ arguments_methods = zip(arguments, methods)
+ idl_types = [argument['idl_type_object'] for argument in arguments]
+ idl_types_methods = zip(idl_types, methods)
+
+ # We can't do a single loop through all methods or simply sort them, because
+ # a method may be listed in multiple steps of the resolution algorithm, and
+ # which test to apply differs depending on the step.
#
- # Currently if distinguishing non-primitive type from primitive type,
- # (e.g., sequence<DOMString> from DOMString or Dictionary from double)
- # the method with a non-primitive type argument must appear *first* in the
- # IDL file, since we're not adding a check to primitive types.
- # FIXME: Once fixed, check IDLs, as usually want methods with primitive
- # types to appear first (style-wise).
- #
- # Properly:
- # 1. Compute effective overload set.
- # 2. First check type list length.
- # 3. If multiple entries for given length, compute distinguishing argument
- # index and have check for that type.
- arguments = method['arguments']
- overload_checks = [overload_check_expression(method, index)
- # check *omitting* optional arguments at |index| and up:
- # index 0 => argument_count 0 (no arguments)
- # index 1 => argument_count 1 (index 0 argument only)
- for index, argument in enumerate(arguments)
- if argument['is_optional']]
- # FIXME: this is wrong if a method has optional arguments and a variadic
- # one, though there are not yet any examples of this
- if not method['is_variadic']:
- # Includes all optional arguments (len = last index + 1)
- overload_checks.append(overload_check_expression(method, len(arguments)))
- return ' || '.join('(%s)' % check for check in overload_checks)
+ # Instead, we need to go through all methods at each step, either finding
+ # first match (if only one test is allowed) or filtering to matches (if
+ # multiple tests are allowed), and generating an appropriate tests.
+ # 2. If V is undefined, and there is an entry in S whose list of
+ # optionality values has "optional" at index i, then remove from S all
+ # other entries.
+ try:
+ method = next(method for argument, method in arguments_methods
+ if argument['is_optional'])
+ test = 'Dart_IsNull(%s)' % cpp_value
+ yield test, method
+ except StopIteration:
+ pass
-def overload_check_expression(method, argument_count):
- overload_checks = ['info.Length() == %s' % argument_count]
- arguments = method['arguments'][:argument_count]
- overload_checks.extend(overload_check_argument(index, argument)
- for index, argument in
- enumerate(arguments))
- return ' && '.join('(%s)' % check for check in overload_checks if check)
+ # 3. Otherwise: if V is null or undefined, and there is an entry in S that
+ # has one of the following types at position i of its type list,
+ # - a nullable type
+ try:
+ method = next(method for idl_type, method in idl_types_methods
+ if idl_type.is_nullable)
+ test = 'Dart_IsNull(%s)' % cpp_value
+ yield test, method
+ except StopIteration:
+ pass
+ # 4. Otherwise: if V is a platform object - but not a platform array
+ # object - and there is an entry in S that has one of the following
+ # types at position i of its type list,
+ # - an interface type that V implements
+ # (Unlike most of these tests, this can return multiple methods, since we
+ # test if it implements an interface. Thus we need a for loop, not a next.)
+ # (We distinguish wrapper types from built-in interface types.)
+ for idl_type, method in ((idl_type, method)
+ for idl_type, method in idl_types_methods
+ if idl_type.is_wrapper_type):
+ fmtstr = 'Dart{idl_type}::hasInstance({cpp_value})'
+ if idl_type.base_type in DART_CHECK_TYPE:
+ fmtstr = DART_CHECK_TYPE[idl_type.base_type]
+ test = fmtstr.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
+ yield test, method
-def overload_check_argument(index, argument):
- def null_or_optional_check():
- # If undefined is passed for an optional argument, the argument should
- # be treated as missing; otherwise undefined is not allowed.
+ # 8. Otherwise: if V is any kind of object except for a native Date object,
+ # a native RegExp object, and there is an entry in S that has one of the
+ # following types at position i of its type list,
+ # - an array type
+ # - a sequence type
+ # ...
+ # - a dictionary
+ try:
+ # FIXME: IDL dictionary not implemented, so use Blink Dictionary
+ # http://crbug.com/321462
+ idl_type, method = next((idl_type, method)
+ for idl_type, method in idl_types_methods
+ if (idl_type.native_array_element_type or
+ idl_type.name == 'Dictionary'))
+ if idl_type.native_array_element_type:
+ # (We test for Array instead of generic Object to type-check.)
+ # FIXME: test for Object during resolution, then have type check for
+ # Array in overloaded method: http://crbug.com/262383
+ test = 'Dart_IsList(%s)' % cpp_value
+ else:
+ # FIXME: should be '{1}->IsObject() && !{1}->IsDate() && !{1}->IsRegExp()'.format(cpp_value)
+ # FIXME: the IsDate and IsRegExp checks can be skipped if we've
+ # already generated tests for them.
+ test = 'Dart_IsInstance(%s)' % cpp_value
+ yield test, method
+ except StopIteration:
+ pass
- # FIXME(vsm): We need Dart specific checks here.
- if idl_type.is_nullable:
- if argument['is_optional']:
- return 'isUndefinedOrNull(%s)'
- return '%s->IsNull()'
- if argument['is_optional']:
- return '%s->IsUndefined()'
- return None
+ # (Check for exact type matches before performing automatic type conversion;
+ # only needed if distinguishing between primitive types.)
+ if len([idl_type.is_primitive_type for idl_type in idl_types]) > 1:
+ # (Only needed if match in step 11, otherwise redundant.)
+ if any(idl_type.is_string_type or idl_type.is_enum
+ for idl_type in idl_types):
+ # 10. Otherwise: if V is a Number value, and there is an entry in S
+ # that has one of the following types at position i of its type
+ # list,
+ # - a numeric type
+ try:
+ method = next(method for idl_type, method in idl_types_methods
+ if idl_type.is_numeric_type)
+ test = 'Dart_IsNumber(%s)' % cpp_value
+ yield test, method
+ except StopIteration:
+ pass
- cpp_value = 'info[%s]' % index
- idl_type = argument['idl_type_object']
- # FIXME(vsm): We need Dart specific checks for the rest of this method.
- # FIXME: proper type checking, sharing code with attributes and methods
- # FIXME(terry): DartStrictTypeChecking no longer supported; TypeChecking is
- # new extended attribute.
- if idl_type.name == 'String' and argument['is_strict_type_checking']:
- return ' || '.join(['isUndefinedOrNull(%s)' % cpp_value,
- '%s->IsString()' % cpp_value,
- '%s->IsObject()' % cpp_value])
- if idl_type.native_array_element_type:
- return '%s->IsArray()' % cpp_value
- if idl_type.is_callback_interface:
- return ' || '.join(['%s->IsNull()' % cpp_value,
- '%s->IsFunction()' % cpp_value])
- if idl_type.is_wrapper_type:
- type_check = 'V8{idl_type}::hasInstance({cpp_value}, info.GetIsolate())'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
- if idl_type.is_nullable:
- type_check = ' || '.join(['%s->IsNull()' % cpp_value, type_check])
- return type_check
- if idl_type.is_interface_type:
- # Non-wrapper types are just objects: we don't distinguish type
- # We only allow undefined for non-wrapper types (notably Dictionary),
- # as we need it for optional Dictionary arguments, but we don't want to
- # change behavior of existing bindings for other types.
- type_check = '%s->IsObject()' % cpp_value
- added_check_template = null_or_optional_check()
- if added_check_template:
- type_check = ' || '.join([added_check_template % cpp_value,
- type_check])
- return type_check
- return None
+ # (Perform automatic type conversion, in order. If any of these match,
+ # that's the end, and no other tests are needed.) To keep this code simple,
+ # we rely on the C++ compiler's dead code elimination to deal with the
+ # redundancy if both cases below trigger.
+
+ # 11. Otherwise: if there is an entry in S that has one of the following
+ # types at position i of its type list,
+ # - DOMString
+ # - ByteString
+ # - ScalarValueString [a DOMString typedef, per definition.]
+ # - an enumeration type
+ try:
+ method = next(method for idl_type, method in idl_types_methods
+ if idl_type.is_string_type or idl_type.is_enum)
+ yield 'true', method
+ except StopIteration:
+ pass
+
+ # 12. Otherwise: if there is an entry in S that has one of the following
+ # types at position i of its type list,
+ # - a numeric type
+ try:
+ method = next(method for idl_type, method in idl_types_methods
+ if idl_type.is_numeric_type)
+ yield 'true', method
+ except StopIteration:
+ pass
################################################################################
@@ -897,15 +910,17 @@
################################################################################
# [Constructor]
-def generate_custom_constructor(interface, constructor):
+def custom_constructor_context(interface, constructor):
return {
'arguments': [custom_constructor_argument(argument, index)
for index, argument in enumerate(constructor.arguments)],
'auto_scope': 'true',
'is_auto_scope': True,
+ 'is_call_with_script_arguments': False,
+ 'is_custom': True,
'number_of_arguments': len(constructor.arguments),
'number_of_required_arguments':
- number_of_required_arguments(constructor),
+ v8_interface.number_of_required_arguments(constructor),
}
@@ -920,96 +935,30 @@
# [Constructor]
-def generate_constructor(interface, constructor):
+def constructor_context(interface, constructor):
return {
- 'argument_list': constructor_argument_list(interface, constructor),
- # TODO(terry): Use dart_methods.generate_argument instead constructor_argument.
- 'arguments': [constructor_argument(interface, argument, index)
+ 'arguments': [dart_methods.argument_context(interface, constructor, argument, index)
for index, argument in enumerate(constructor.arguments)],
+ 'auto_scope': 'true',
+ 'cpp_value': dart_methods.cpp_value(
+ interface, constructor, len(constructor.arguments)),
'has_exception_state':
# [RaisesException=Constructor]
interface.extended_attributes.get('RaisesException') == 'Constructor' or
any(argument for argument in constructor.arguments
if argument.idl_type.name == 'SerializedScriptValue' or
argument.idl_type.is_integer_type),
- 'is_constructor': True,
- 'auto_scope': 'true',
'is_auto_scope': True,
+ 'is_call_with_script_arguments': False,
+ 'is_constructor': True,
+ 'is_custom': False,
'is_variadic': False, # Required for overload resolution
'number_of_required_arguments':
- number_of_required_arguments(constructor),
+ v8_interface.number_of_required_arguments(constructor),
'number_of_arguments': len(constructor.arguments),
}
-def constructor_argument_list(interface, constructor):
- # FIXME: unify with dart_methods.cpp_argument.
-
- def cpp_argument(argument):
- argument_name = dart_types.check_reserved_name(argument.name)
- idl_type = argument.idl_type
- # FIXMEDART: there has to be a cleaner way to check for arraylike
- # types such as Uint8ClampedArray.
- if isinstance(idl_type, IdlArrayType) or idl_type.preprocessed_type.is_typed_array_type:
- return '%s.get()' % argument_name
-
- return argument_name
-
- arguments = []
- # [ConstructorCallWith=ExecutionContext]
- if DartUtilities.has_extended_attribute_value(interface, 'ConstructorCallWith', 'ExecutionContext'):
- arguments.append('context')
- # [ConstructorCallWith=Document]
- if DartUtilities.has_extended_attribute_value(interface, 'ConstructorCallWith', 'Document'):
- arguments.append('document')
-
- arguments.extend([cpp_argument(argument) for argument in constructor.arguments])
-
- # [RaisesException=Constructor]
- if interface.extended_attributes.get('RaisesException') == 'Constructor':
- arguments.append('es')
-
- return arguments
-
-
-# TODO(terry): Eliminate this function use dart_methods.generate_argument instead
-# for all constructor arguments.
-def constructor_argument(interface, argument, index):
- idl_type = argument.idl_type
- default_value = str(argument.default_value) if argument.default_value else None
-
- argument_content = {
- 'cpp_type': idl_type.cpp_type_args(),
- 'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, raw_type=True),
- # FIXME: check that the default value's type is compatible with the argument's
- 'default_value': default_value,
- # FIXME: remove once [Default] removed and just use argument.default_value
- 'has_default': 'Default' in argument.extended_attributes or default_value,
- 'idl_type_object': idl_type,
- 'preprocessed_type': str(idl_type.preprocessed_type),
- # Dictionary is special-cased, but arrays and sequences shouldn't be
- 'idl_type': idl_type.native_array_element_type,
- 'index': index,
- 'is_array_or_sequence_type': not not idl_type.native_array_element_type,
- 'is_optional': argument.is_optional,
- 'is_strict_type_checking': False, # Required for overload resolution
- 'name': argument.name,
- 'dart_value_to_local_cpp_value': dart_methods.dart_value_to_local_cpp_value(interface, argument, index),
- }
- return argument_content
-
-
-def generate_constructor_overloads(constructors):
- if len(constructors) <= 1:
- return
- for overload_index, constructor in enumerate(constructors):
- constructor.update({
- 'overload_index': overload_index + 1,
- 'overload_resolution_expression':
- overload_resolution_expression(constructor),
- })
-
-
# [NamedConstructor]
def generate_named_constructor(interface):
extended_attributes = interface.extended_attributes
@@ -1019,28 +968,13 @@
# included in constructors (and only name stored in extended attribute)
# for Perl compatibility
idl_constructor = interface.constructors[0]
- constructor = generate_constructor(interface, idl_constructor)
+ constructor = constructor_context(interface, idl_constructor)
# FIXME(vsm): We drop the name. We don't use this in Dart APIs right now.
# We probably need to encode this somehow to deal with conflicts.
# constructor['name'] = extended_attributes['NamedConstructor']
return constructor
-def number_of_required_arguments(constructor):
- return len([argument for argument in constructor.arguments
- if not (argument.is_optional and not (('Default' in argument.extended_attributes) or argument.default_value))])
-
-
-def interface_length(interface, constructors):
- # Docs: http://heycam.github.io/webidl/#es-interface-call
- if 'EventConstructor' in interface.extended_attributes:
- return 1
- if not constructors:
- return 0
- return min(constructor['number_of_required_arguments']
- for constructor in constructors)
-
-
################################################################################
# Special operations (methods)
# http://heycam.github.io/webidl/#idl-special-operations
@@ -1058,6 +992,8 @@
return '!result'
return ''
+ context = v8_interface.property_getter(getter, [])
+
idl_type = getter.idl_type
extended_attributes = getter.extended_attributes
is_raises_exception = 'RaisesException' in extended_attributes
@@ -1069,22 +1005,14 @@
cpp_arguments.append('es')
union_arguments = idl_type.union_arguments
if union_arguments:
- cpp_arguments.extend(union_arguments)
+ cpp_arguments.extend([member_argument['cpp_value']
+ for member_argument in union_arguments])
cpp_value = '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments))
- return {
+ context.update({
'cpp_type': idl_type.cpp_type,
'cpp_value': cpp_value,
- 'is_custom':
- 'Custom' in extended_attributes and
- (not extended_attributes['Custom'] or
- DartUtilities.has_extended_attribute_value(getter, 'Custom', 'PropertyGetter')),
- 'is_custom_property_enumerator': DartUtilities.has_extended_attribute_value(
- getter, 'Custom', 'PropertyEnumerator'),
- 'is_custom_property_query': DartUtilities.has_extended_attribute_value(
- getter, 'Custom', 'PropertyQuery'),
- 'is_enumerable': 'NotEnumerable' not in extended_attributes,
'is_null_expression': is_null_expression(idl_type),
'is_raises_exception': is_raises_exception,
'name': DartUtilities.cpp_name(getter),
@@ -1092,41 +1020,23 @@
'dart_set_return_value': idl_type.dart_set_return_value('result',
extended_attributes=extended_attributes,
script_wrappable='receiver',
- release=idl_type.release)}
+ release=idl_type.release)})
+ return context
-def property_setter(interface, setter):
+def property_setter(setter):
+ context = v8_interface.property_setter(setter)
+
idl_type = setter.arguments[1].idl_type
extended_attributes = setter.extended_attributes
- interface_extended_attributes = interface.extended_attributes
- is_raises_exception = 'RaisesException' in extended_attributes
- return {
- 'has_strict_type_checking':
- 'DartStrictTypeChecking' in extended_attributes and
- idl_type.is_wrapper_type,
- 'idl_type': idl_type.base_type,
- 'is_custom': 'Custom' in extended_attributes,
- 'has_exception_state': is_raises_exception or
- idl_type.is_integer_type,
- 'is_raises_exception': is_raises_exception,
- 'name': DartUtilities.cpp_name(setter),
+
+ context.update({
'dart_value_to_local_cpp_value': idl_type.dart_value_to_local_cpp_value(
- interface_extended_attributes, extended_attributes, 'propertyValue', False),
- }
+ extended_attributes, 'propertyValue', False,
+ context['has_type_checking_interface']),
+ })
-
-def property_deleter(deleter):
- idl_type = deleter.idl_type
- if str(idl_type) != 'boolean':
- raise Exception(
- 'Only deleters with boolean type are allowed, but type is "%s"' %
- idl_type)
- extended_attributes = deleter.extended_attributes
- return {
- 'is_custom': 'Custom' in extended_attributes,
- 'is_raises_exception': 'RaisesException' in extended_attributes,
- 'name': DartUtilities.cpp_name(deleter),
- }
+ return context
################################################################################
@@ -1165,23 +1075,7 @@
except StopIteration:
return None
- return property_setter(interface, setter)
-
-
-def indexed_property_deleter(interface):
- try:
- # Find indexed property deleter, if present; has form:
- # deleter TYPE [OPTIONAL_IDENTIFIER](unsigned long ARG)
- deleter = next(
- method
- for method in interface.operations
- if ('deleter' in method.specials and
- len(method.arguments) == 1 and
- str(method.arguments[0].idl_type) == 'unsigned long'))
- except StopIteration:
- return None
-
- return property_deleter(deleter)
+ return property_setter(setter)
################################################################################
@@ -1203,6 +1097,7 @@
return None
getter.name = getter.name or 'anonymousNamedGetter'
+
return property_getter(getter, ['propertyName'])
@@ -1219,20 +1114,29 @@
except StopIteration:
return None
- return property_setter(interface, setter)
+ return property_setter(setter)
-def named_property_deleter(interface):
- try:
- # Find named property deleter, if present; has form:
- # deleter TYPE [OPTIONAL_IDENTIFIER](DOMString ARG)
- deleter = next(
- method
- for method in interface.operations
- if ('deleter' in method.specials and
- len(method.arguments) == 1 and
- str(method.arguments[0].idl_type) == 'DOMString'))
- except StopIteration:
- return None
+def generate_native_entries_for_specials(interface, context):
+ def add(prop, name, arity):
+ if context[prop]:
+ if 'native_entries' not in context[prop]:
+ context[prop].update({'native_entries': []})
+ context[prop]['native_entries'].append(
+ DartUtilities.generate_native_entry(
+ interface.name, name, 'Method', False, arity))
- return property_deleter(deleter)
+ pre = ['indexed_property', 'named_property']
+ post = [('setter', '__setter__', 2),
+ ('getter', '__getter__', 1),
+ ('deleter', '__delete__', 1),
+ ]
+ props = [(p1 + "_" + p2, name, arity)
+ for (p1, (p2, name, arity)) in itertools.product(pre, post)]
+ for t in props:
+ add(*t)
+
+ for (p, name, arity) in props:
+ if context[p]:
+ if context[p].get('is_custom_property_query'):
+ add(p, '__propertyQuery__', 1)
diff --git a/bindings/dart/scripts/dart_methods.py b/bindings/dart/scripts/dart_methods.py
index 53997fd..b700e89 100644
--- a/bindings/dart/scripts/dart_methods.py
+++ b/bindings/dart/scripts/dart_methods.py
@@ -33,51 +33,26 @@
Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
"""
-from idl_types import IdlTypeBase, IdlType, IdlUnionType, inherits_interface, IdlArrayOrSequenceType, IdlArrayType
+from idl_types import inherits_interface
import dart_types
-from idl_definitions import IdlArgument
from dart_utilities import DartUtilities
from v8_globals import includes
+import v8_methods
-def generate_method(interface, method):
+
+def method_context(interface, method):
+ context = v8_methods.method_context(interface, method)
+
arguments = method.arguments
extended_attributes = method.extended_attributes
idl_type = method.idl_type
- is_static = method.is_static
- name = method.name
- idl_type.add_includes_for_type()
+# idl_type.add_includes_for_type()
this_cpp_value = cpp_value(interface, method, len(arguments))
- def function_template():
- if is_static:
- return 'functionTemplate'
- if 'Unforgeable' in extended_attributes:
- return 'instanceTemplate'
- return 'prototypeTemplate'
-
- is_call_with_script_arguments = DartUtilities.has_extended_attribute_value(method, 'CallWith', 'ScriptArguments')
- if is_call_with_script_arguments:
- includes.update(['bindings/core/v8/ScriptCallStackFactory.h',
- 'core/inspector/ScriptArguments.h'])
- is_call_with_script_state = DartUtilities.has_extended_attribute_value(method, 'CallWith', 'ScriptState')
- if is_call_with_script_state:
+ if context['is_call_with_script_state']:
includes.add('bindings/core/dart/DartScriptState.h')
- is_check_security_for_node = 'CheckSecurity' in extended_attributes
- if is_check_security_for_node:
- includes.add('bindings/common/BindingSecurity.h')
- is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
- if is_custom_element_callbacks:
- includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
-
- has_event_listener_argument = any(
- argument for argument in arguments
- if argument.idl_type.name == 'EventListener')
- is_check_security_for_frame = (
- 'CheckSecurity' in interface.extended_attributes and
- 'DoNotCheckSecurity' not in extended_attributes)
- is_raises_exception = 'RaisesException' in extended_attributes
if idl_type.union_arguments and len(idl_type.union_arguments) > 0:
this_cpp_type = []
@@ -90,136 +65,99 @@
is_auto_scope = not 'DartNoAutoScope' in extended_attributes
- number_of_arguments = len(arguments)
-
- number_of_required_arguments = \
- len([
- argument for argument in arguments
- if not ((argument.is_optional and not ('Default' in argument.extended_attributes or argument.default_value)) or
- argument.is_variadic)])
-
- arguments_data = [generate_argument(interface, method, argument, index)
+ arguments_data = [argument_context(interface, method, argument, index)
for index, argument in enumerate(arguments)]
+ union_arguments = []
+ if idl_type.union_arguments:
+ union_arguments.extend([union_arg['cpp_value']
+ for union_arg in idl_type.union_arguments])
+
is_custom = 'Custom' in extended_attributes or 'DartCustom' in extended_attributes
- method_data = {
+ context.update({
'activity_logging_world_list': DartUtilities.activity_logging_world_list(method), # [ActivityLogging]
'arguments': arguments_data,
- 'conditional_string': DartUtilities.conditional_string(method),
'cpp_type': this_cpp_type,
'cpp_value': this_cpp_value,
'dart_name': extended_attributes.get('DartName'),
'deprecate_as': DartUtilities.deprecate_as(method), # [DeprecateAs]
- 'do_not_check_signature': not(is_static or
+ 'do_not_check_signature': not(context['is_static'] or
DartUtilities.has_extended_attribute(method,
['DoNotCheckSecurity', 'DoNotCheckSignature', 'NotEnumerable',
'ReadOnly', 'RuntimeEnabled', 'Unforgeable'])),
- 'function_template': function_template(),
- 'idl_type': idl_type.base_type,
- 'has_event_listener_argument': has_event_listener_argument,
'has_exception_state':
- has_event_listener_argument or
- is_raises_exception or
- is_check_security_for_frame or
+ context['is_raises_exception'] or
+ context['is_check_security_for_frame'] or
any(argument for argument in arguments
if argument.idl_type.name == 'SerializedScriptValue' or
argument.idl_type.is_integer_type),
'is_auto_scope': is_auto_scope,
'auto_scope': DartUtilities.bool_to_cpp(is_auto_scope),
- 'is_call_with_execution_context': DartUtilities.has_extended_attribute_value(method, 'CallWith', 'ExecutionContext'),
- 'is_call_with_script_arguments': is_call_with_script_arguments,
- 'is_call_with_script_state': is_call_with_script_state,
- 'is_check_security_for_frame': is_check_security_for_frame,
- 'is_check_security_for_node': is_check_security_for_node,
'is_custom': is_custom,
'is_custom_dart': 'DartCustom' in extended_attributes,
'is_custom_dart_new': DartUtilities.has_extended_attribute_value(method, 'DartCustom', 'New'),
- 'is_custom_element_callbacks': is_custom_element_callbacks,
- 'is_do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
- 'is_do_not_check_signature': 'DoNotCheckSignature' in extended_attributes,
- 'is_partial_interface_member': 'PartialInterfaceImplementedAs' in extended_attributes,
- 'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
- 'is_raises_exception': is_raises_exception,
- 'is_read_only': 'ReadOnly' in extended_attributes,
- 'is_static': is_static,
# FIXME(terry): DartStrictTypeChecking no longer supported; TypeChecking is
# new extended attribute.
'is_strict_type_checking':
'DartStrictTypeChecking' in extended_attributes or
'DartStrictTypeChecking' in interface.extended_attributes,
- 'is_variadic': arguments and arguments[-1].is_variadic,
'measure_as': DartUtilities.measure_as(method), # [MeasureAs]
- 'name': name,
- 'number_of_arguments': number_of_arguments,
- 'number_of_required_arguments': number_of_required_arguments,
- 'number_of_required_or_variadic_arguments': len([
- argument for argument in arguments
- if not argument.is_optional]),
- 'per_context_enabled_function': DartUtilities.per_context_enabled_function_name(method), # [PerContextEnabled]
- 'property_attributes': property_attributes(method),
- 'runtime_enabled_function': DartUtilities.runtime_enabled_function_name(method), # [RuntimeEnabled]
- 'signature': 'v8::Local<v8::Signature>()' if is_static or 'DoNotCheckSignature' in extended_attributes else 'defaultSignature',
'suppressed': (arguments and arguments[-1].is_variadic), # FIXME: implement variadic
- 'union_arguments': idl_type.union_arguments,
+ 'union_arguments': union_arguments,
'dart_set_return_value': dart_set_return_value(interface.name, method, this_cpp_value),
- 'world_suffixes': ['', 'ForMainWorld'] if 'PerWorldBindings' in extended_attributes else [''], # [PerWorldBindings]
- }
- return method_data
+ })
+ return context
+def argument_context(interface, method, argument, index):
+ context = v8_methods.argument_context(interface, method, argument, index)
-def generate_argument(interface, method, argument, index):
extended_attributes = argument.extended_attributes
idl_type = argument.idl_type
this_cpp_value = cpp_value(interface, method, index)
- is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
- use_heap_vector_type = is_variadic_wrapper_type and idl_type.is_will_be_garbage_collected
+ use_heap_vector_type = context['is_variadic_wrapper_type'] and idl_type.is_will_be_garbage_collected
auto_scope = not 'DartNoAutoScope' in extended_attributes
- this_has_default = 'Default' in extended_attributes
- arg_index = index + 1 if not method.is_static else index
+ arg_index = index + 1 if not (method.is_static or method.is_constructor) else index
preprocessed_type = str(idl_type.preprocessed_type)
+ local_cpp_type = idl_type.cpp_type_args(argument.extended_attributes, raw_type=True)
+ default_value = argument.default_cpp_value
+ if context['has_default']:
+ default_value = (argument.default_cpp_value or
+ dart_types.default_cpp_value_for_cpp_type(idl_type))
# FIXMEDART: handle the drift between preprocessed type names in 1847 and
# 1985 dartium builds in a more generic way.
if preprocessed_type == 'unrestricted float':
preprocessed_type = 'float'
if preprocessed_type == 'unrestricted double':
preprocessed_type = 'double'
- argument_data = {
+
+ dart_enum_expression = idl_type.enum_validation_expression
+ if dart_enum_expression:
+ dart_enum_expression = dart_enum_expression.format(param_name=argument.name)
+ context.update({
'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attributes,
raw_type=True,
used_in_cpp_sequence=use_heap_vector_type),
'cpp_value': this_cpp_value,
- 'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, raw_type=True),
+ 'local_cpp_type': local_cpp_type,
# FIXME: check that the default value's type is compatible with the argument's
- 'default_value': str(argument.default_value) if argument.default_value else None,
- 'enum_validation_expression': idl_type.enum_validation_expression,
- # Ignore 'Default' in extended_attributes not exposed in dart:html.
- 'has_default': False,
- 'has_event_listener_argument': any(
- argument_so_far for argument_so_far in method.arguments[:index]
- if argument_so_far.idl_type.name == 'EventListener'),
- 'idl_type_object': idl_type,
+ 'default_value': default_value,
+ 'enum_validation_expression': dart_enum_expression,
'preprocessed_type': preprocessed_type,
- # Dictionary is special-cased, but arrays and sequences shouldn't be
- 'idl_type': idl_type.base_type,
- 'index': index,
'is_array_or_sequence_type': not not idl_type.native_array_element_type,
- 'is_clamp': 'Clamp' in extended_attributes,
- 'is_callback_interface': idl_type.is_callback_interface,
- 'is_nullable': idl_type.is_nullable,
- # Only expose as optional if no default value.
- 'is_optional': argument.is_optional and not (this_has_default or argument.default_value),
'is_strict_type_checking': 'DartStrictTypeChecking' in extended_attributes,
- 'is_variadic_wrapper_type': is_variadic_wrapper_type,
+ 'is_dictionary': idl_type.is_dictionary or idl_type.base_type == 'Dictionary',
'vector_type': 'WillBeHeapVector' if use_heap_vector_type else 'Vector',
- 'is_wrapper_type': idl_type.is_wrapper_type,
- 'name': argument.name,
- 'dart_set_return_value_for_main_world': dart_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
+ 'dart_set_return_value_for_main_world': dart_set_return_value(interface.name, method,
+ this_cpp_value, for_main_world=True),
'dart_set_return_value': dart_set_return_value(interface.name, method, this_cpp_value),
'arg_index': arg_index,
- 'dart_value_to_local_cpp_value': dart_value_to_local_cpp_value(interface, argument, arg_index, auto_scope),
- }
- return argument_data
+ 'dart_value_dictionary_cpp_value': dart_dictionary_value_argument(argument, arg_index),
+ 'dart_value_to_local_cpp_value': dart_value_to_local_cpp_value(interface,
+ context['has_type_checking_interface'],
+ argument, arg_index, auto_scope),
+ })
+ return context
################################################################################
@@ -241,27 +179,43 @@
# EventTarget::removeEventListener
return '%s.get()' % argument_name
return argument.name
- if (idl_type.is_callback_interface or
- idl_type.name in ['NodeFilter', 'XPathNSResolver']):
+ if (idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
+ 'XPathNSResolver', 'XPathNSResolverOrNull']):
# FIXME: remove this special case
return '%s.release()' % argument_name
+ # Need to de-ref the generated dictionary class for create call.
+ if (idl_type.is_dictionary):
+ return '*%s' % argument_name
return argument_name
# Truncate omitted optional arguments
arguments = method.arguments[:number_of_arguments]
- cpp_arguments = DartUtilities.call_with_arguments(method)
+ if method.is_constructor:
+ call_with_values = interface.extended_attributes.get('ConstructorCallWith')
+ else:
+ call_with_values = method.extended_attributes.get('CallWith')
+ cpp_arguments = DartUtilities.call_with_arguments(call_with_values)
if ('PartialInterfaceImplementedAs' in method.extended_attributes and not method.is_static):
cpp_arguments.append('*receiver')
cpp_arguments.extend(cpp_argument(argument) for argument in arguments)
- this_union_arguments = method.idl_type.union_arguments
+ this_union_arguments = method.idl_type and method.idl_type.union_arguments
if this_union_arguments:
- cpp_arguments.extend(this_union_arguments)
+ cpp_arguments.extend([member_argument['cpp_value']
+ for member_argument in this_union_arguments])
- if 'RaisesException' in method.extended_attributes:
+ if ('RaisesException' in method.extended_attributes or
+ (method.is_constructor and
+ DartUtilities.has_extended_attribute_value(interface, 'RaisesException', 'Constructor'))):
cpp_arguments.append('es')
- cpp_method_name = DartUtilities.scoped_name(interface, method, DartUtilities.cpp_name(method))
+ if method.name == 'Constructor':
+ base_name = 'create'
+ elif method.name == 'NamedConstructor':
+ base_name = 'createForJSConstructor'
+ else:
+ base_name = DartUtilities.cpp_name(method)
+ cpp_method_name = DartUtilities.scoped_name(interface, method, base_name)
return '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments))
@@ -276,7 +230,8 @@
def dart_set_return_value(interface_name, method, cpp_value, for_main_world=False):
idl_type = method.idl_type
extended_attributes = method.extended_attributes
- if idl_type.name == 'void':
+ if not idl_type or idl_type.name == 'void':
+ # Constructors and void methods don't have a return type
return None
release = False
@@ -301,9 +256,14 @@
auto_scope=auto_scope)
-def dart_value_to_local_cpp_value(interface, argument, index, auto_scope=True):
+def dart_dictionary_value_argument(argument, index):
+ idl_type = argument.idl_type
+ return idl_type.dart_dictionary_to_local_cpp_value(index=index)
+
+
+def dart_value_to_local_cpp_value(interface, has_type_checking_interface,
+ argument, index, auto_scope=True):
extended_attributes = argument.extended_attributes
- interface_extended_attributes = interface.extended_attributes
idl_type = argument.idl_type
name = argument.name
# TODO(terry): Variadic arguments are not handled but treated as one argument.
@@ -317,51 +277,10 @@
# There is also some logic in systemnative.py to force a null check
# for the useCapture argument of those same methods that we may need to
# pull over.
- null_check = (argument.is_optional and \
- (idl_type.is_callback_interface or idl_type == 'Dictionary')) or \
- (argument.default_value and argument.default_value.is_null)
+ null_check = ((argument.is_optional and idl_type.is_callback_interface) or
+ (idl_type.name == 'Dictionary') or
+ (argument.default_value and argument.default_value.is_null))
return idl_type.dart_value_to_local_cpp_value(
- interface_extended_attributes, extended_attributes, name, null_check,
+ extended_attributes, name, null_check, has_type_checking_interface,
index=index, auto_scope=auto_scope)
-
-
-################################################################################
-# Auxiliary functions
-################################################################################
-
-# [NotEnumerable]
-def property_attributes(method):
- extended_attributes = method.extended_attributes
- property_attributes_list = []
- if 'NotEnumerable' in extended_attributes:
- property_attributes_list.append('v8::DontEnum')
- if 'ReadOnly' in extended_attributes:
- property_attributes_list.append('v8::ReadOnly')
- if property_attributes_list:
- property_attributes_list.insert(0, 'v8::DontDelete')
- return property_attributes_list
-
-
-# FIXMEDART: better align this method with the v8 version.
-def union_member_argument_context(idl_type, index):
- """Returns a context of union member for argument."""
- return 'result%d' % index
-
-def union_arguments(idl_type):
- return [union_member_argument_context(member_idl_type, index)
- for index, member_idl_type
- in enumerate(idl_type.member_types)]
-
-
-def argument_default_cpp_value(argument):
- if not argument.default_value:
- return None
- return argument.idl_type.literal_cpp_value(argument.default_value)
-
-
-IdlTypeBase.union_arguments = None
-IdlUnionType.union_arguments = property(union_arguments)
-IdlArgument.default_cpp_value = property(argument_default_cpp_value)
-#IdlType.union_arguments = property(lambda self: None)
-#IdlUnionType.union_arguments = property(union_arguments)
diff --git a/bindings/dart/scripts/dart_types.py b/bindings/dart/scripts/dart_types.py
index 5078460..7ae64fc 100644
--- a/bindings/dart/scripts/dart_types.py
+++ b/bindings/dart/scripts/dart_types.py
@@ -38,9 +38,9 @@
"""
import posixpath
-from idl_types import IdlTypeBase, IdlType, IdlUnionType, TYPE_NAMES, IdlArrayOrSequenceType
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, TYPE_NAMES, IdlArrayOrSequenceType, IdlSequenceType
-import dart_attributes # for IdlType.constructor_type_name
+import dart_attributes
from dart_utilities import DartUtilities
from v8_globals import includes
@@ -50,11 +50,9 @@
################################################################################
NON_WRAPPER_TYPES = frozenset([
- 'CompareHow',
'Dictionary',
'EventHandler',
'EventListener',
- 'MediaQueryListListener',
'NodeFilter',
'SerializedScriptValue',
])
@@ -105,11 +103,10 @@
'unsigned short',
])
CPP_SPECIAL_CONVERSION_RULES = {
- 'CompareHow': 'Range::CompareHow',
'Date': 'double',
'Dictionary': 'Dictionary',
'EventHandler': 'EventListener*',
- 'MediaQueryListListener': 'RefPtrWillBeRawPtr<MediaQueryListListener>',
+ 'NodeFilter': 'RefPtrWillBeRawPtr<NodeFilter>',
'Promise': 'ScriptPromise',
'ScriptValue': 'ScriptValue',
# FIXME: Eliminate custom bindings for XPathNSResolver http://crbug.com/345529
@@ -120,7 +117,7 @@
}
-def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_type=False, used_in_cpp_sequence=False):
+def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_type=False, used_as_variadic_argument=False, used_in_cpp_sequence=False):
"""Returns C++ type corresponding to IDL type.
|idl_type| argument is of type IdlType, while return value is a string
@@ -169,8 +166,6 @@
if idl_type.is_typed_array_type and raw_type:
return 'RefPtr<%s>' % base_idl_type
- if idl_type.is_callback_interface:
- return 'OwnPtr<%s>' % base_idl_type
if idl_type.is_interface_type:
implemented_as_class = idl_type.implemented_as
if raw_type:
@@ -180,6 +175,11 @@
return cpp_template_type(ptr_type, implemented_as_class)
# Default, assume native type is a pointer with same type name as idl type
+
+ # FIXME: How to handle sequence<WebGLShader>?
+ if base_idl_type is None:
+ base_idl_type = idl_type.inner_type.element_type.base_type
+
return base_idl_type + '*'
@@ -198,6 +198,8 @@
IdlArrayOrSequenceType.native_array_element_type = property(
lambda self: self.element_type)
+IdlTypeBase.enum_validation_expression = property(DartUtilities.enum_validation_expression)
+
def cpp_template_type(template, inner_type):
"""Returns C++ template specialized to type, with space added if needed."""
@@ -295,7 +297,6 @@
# TODO(terry): Will we need this group header for dart:blink?
INCLUDES_FOR_TYPE = {
'object': set(),
- 'CompareHow': set(),
'Dictionary': set(['bindings/core/v8/Dictionary.h']),
'EventHandler': set(),
'EventListener': set(),
@@ -303,15 +304,15 @@
'core/dom/ClassCollection.h',
'core/dom/TagCollection.h',
'core/html/HTMLCollection.h',
+ 'core/html/HTMLDataListOptionsCollection.h',
'core/html/HTMLFormControlsCollection.h',
'core/html/HTMLTableRowsCollection.h']),
- 'MediaQueryListListener': set(['core/css/MediaQueryListListener.h']),
'NodeList': set(['bindings/core/dart/DartNodeList.h',
'core/dom/NameNodeList.h',
'core/dom/NodeList.h',
'core/dom/StaticNodeList.h',
'core/html/LabelsNodeList.h']),
- 'Promise': set(),
+ 'Promise': set(['bindings/core/dart/DartScriptPromise.h']),
'SerializedScriptValue': set(),
'ScriptValue': set(['bindings/core/dart/DartScriptValue.h']),
}
@@ -405,12 +406,10 @@
'long long': 'DartUtilities::dartToLongLong(args, {index}, exception)',
'unsigned long long': 'DartUtilities::dartToUnsignedLongLong(args, {index}, exception)',
# Interface types
- 'CompareHow': 'static_cast<Range::CompareHow>(0) /* FIXME, DART_TO_CPP_VALUE[CompareHow] */',
'Dictionary': 'DartUtilities::dartToDictionary{null_check}(args, {index}, exception)',
'EventTarget': '0 /* FIXME, DART_TO_CPP_VALUE[EventTarget] */',
- 'MediaQueryListListener': 'nullptr /* FIXME, DART_TO_CPP_VALUE[MediaQueryListener] */',
'NodeFilter': 'nullptr /* FIXME, DART_TO_CPP_VALUE[NodeFilter] */',
- 'Promise': 'nullptr /* FIXME, DART_TO_CPP_VALUE[Promise] */',
+ 'Promise': 'DartUtilities::dartToScriptPromise{null_check}(args, {index})',
'SerializedScriptValue': 'nullptr /* FIXME, DART_TO_CPP_VALUE[SerializedScriptValue] */',
'ScriptValue': 'DartUtilities::dartToScriptValue{null_check}(args, {index})',
# FIXME(vsm): Why don't we have an entry for Window? V8 does.
@@ -423,8 +422,28 @@
}
-def dart_value_to_cpp_value(idl_type, interface_extended_attributes, extended_attributes, variable_name,
- null_check, index, auto_scope=True):
+def dart_dictionary_value_argument(idl_type, index):
+ if idl_type.is_dictionary:
+ argument_expression_format = 'DartUtilities::dartToDictionaryWithNullCheck(args, {index}, exception)'
+ return argument_expression_format.format(index=index)
+
+ return None
+
+
+def dart_dictionary_to_local_cpp_value(idl_type, index=None):
+ """Returns an expression that converts a Dictionary value as a local value."""
+ idl_type = idl_type.preprocessed_type
+
+ cpp_value = dart_dictionary_value_argument(idl_type, index)
+
+ return cpp_value
+
+IdlTypeBase.dart_dictionary_to_local_cpp_value = dart_dictionary_to_local_cpp_value
+
+
+def dart_value_to_cpp_value(idl_type, extended_attributes, variable_name,
+ null_check, has_type_checking_interface,
+ index, auto_scope=True):
# Composite types
native_array_element_type = idl_type.native_array_element_type
if native_array_element_type:
@@ -453,15 +472,22 @@
cpp_expression_format = ('DartUtilities::dartTo{idl_type}WithNullCheck(args, {index}, exception)')
elif idl_type.is_callback_interface:
cpp_expression_format = ('Dart{idl_type}::create{null_check}(args, {index}, exception)')
+ elif idl_type.is_dictionary:
+ # Value of dictionary is defined in method dart_dictionary_value_argument.
+ cpp_expression_format = 'Dart{idl_type}::toImpl(dictionary, es)'
else:
cpp_expression_format = ('Dart{idl_type}::toNative{null_check}(args, {index}, exception)')
# We allow the calling context to force a null check to handle
# some cases that require calling context info. V8 handles all
# of this differently, and we may wish to reconsider this approach
- null_check = 'WithNullCheck' \
- if null_check or allow_null(idl_type, interface_extended_attributes, extended_attributes) else ''
- return cpp_expression_format.format(null_check=null_check,
+ check_string = ''
+ if null_check or allow_null(idl_type, extended_attributes,
+ has_type_checking_interface):
+ check_string = 'WithNullCheck'
+ elif allow_empty(idl_type, extended_attributes):
+ check_string = 'WithEmptyCheck'
+ return cpp_expression_format.format(null_check=check_string,
arguments=arguments,
index=index,
idl_type=base_idl_type,
@@ -480,7 +506,7 @@
this_cpp_type = None
ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_type.gc_type)
# FIXME(vsm): We're not using ref_ptr_type....
- expression_format = 'DartUtilities::toNativeVector<{cpp_type} >(args, {index}, {variable_name}, exception)'
+ expression_format = 'DartUtilities::toNativeVector<{native_array_element_type} >(args, {index}, {variable_name}, exception)'
add_includes_for_type(native_array_element_type)
else:
ref_ptr_type = None
@@ -492,14 +518,17 @@
variable_name=variable_name)
return expression
-def dart_value_to_local_cpp_value(idl_type, interface_extended_attributes, extended_attributes,
- variable_name, null_check, index=None, auto_scope=True):
+
+def dart_value_to_local_cpp_value(idl_type, extended_attributes, variable_name,
+ null_check, has_type_checking_interface,
+ index=None, auto_scope=True):
"""Returns an expression that converts a Dart value to a C++ value as a local value."""
idl_type = idl_type.preprocessed_type
cpp_value = dart_value_to_cpp_value(
- idl_type, interface_extended_attributes, extended_attributes,
- variable_name, null_check, index, auto_scope)
+ idl_type, extended_attributes, variable_name,
+ null_check, has_type_checking_interface,
+ index, auto_scope)
return cpp_value
@@ -532,7 +561,8 @@
"""Returns IDL type and value, with preliminary type conversions applied."""
idl_type = idl_type.preprocessed_type
if idl_type.name == 'Promise':
- idl_type = IdlType('ScriptValue')
+ idl_type = IdlType('ScriptPromise')
+
# FIXME(vsm): V8 maps 'long long' and 'unsigned long long' to double
# as they are not representable in ECMAScript. Should we do the same?
@@ -559,6 +589,11 @@
# Composite types
native_array_element_type = idl_type.native_array_element_type
+
+ # FIXME: Work around sequence behaving like an array.
+ if (not native_array_element_type) and type(idl_type.inner_type) is IdlSequenceType:
+ native_array_element_type = idl_type.inner_type.native_array_element_type
+
if native_array_element_type:
if native_array_element_type.is_interface_type:
add_includes_for_type(native_array_element_type)
@@ -571,7 +606,9 @@
return 'int'
if base_idl_type in CPP_UNSIGNED_TYPES or base_idl_type == 'unsigned long long':
return 'unsigned'
- if base_idl_type == 'DOMString':
+ if idl_type.is_string_type:
+ if idl_type.is_nullable:
+ return 'StringOrNull'
if 'TreatReturnedNullStringAs' not in extended_attributes:
return 'DOMString'
treat_returned_null_string_as = extended_attributes['TreatReturnedNullStringAs']
@@ -625,6 +662,7 @@
'array': 'Dart_SetReturnValue(args, {cpp_value})',
'Date': 'Dart_SetReturnValue(args, {cpp_value})',
'EventHandler': DART_FIX_ME,
+ 'ScriptPromise': 'Dart_SetReturnValue(args, {cpp_value})',
'ScriptValue': 'Dart_SetReturnValue(args, {cpp_value})',
'SerializedScriptValue': DART_FIX_ME,
# DOMWrapper
@@ -657,7 +695,7 @@
idl_type, cpp_value = preprocess_idl_type_and_value(idl_type, cpp_value, extended_attributes)
this_dart_conversion_type = idl_type.dart_conversion_type(extended_attributes)
# SetReturn-specific overrides
- if this_dart_conversion_type in ['Date', 'EventHandler', 'ScriptValue', 'SerializedScriptValue', 'array']:
+ if this_dart_conversion_type in ['Date', 'EventHandler', 'ScriptPromise', 'ScriptValue', 'SerializedScriptValue', 'array']:
# Convert value to Dart and then use general Dart_SetReturnValue
# FIXME(vsm): Why do we differ from V8 here? It doesn't have a
# creation_context.
@@ -696,7 +734,6 @@
release: can be either False (False for all member types) or
a sequence (list or tuple) of booleans (if specified individually).
"""
-
return [
# FIXME(vsm): Why do we use 'result' instead of cpp_value as V8?
member_type.dart_set_return_value('result' + str(i),
@@ -734,6 +771,7 @@
# Special cases
'EventHandler': '-----OOPS TO DART-EVENT---',
# We need to generate the NullCheck version in some cases.
+ 'ScriptPromise': 'DartUtilities::scriptPromiseToDart({cpp_value})',
'ScriptValue': 'DartUtilities::scriptValueToDart({cpp_value})',
'SerializedScriptValue': 'DartUtilities::serializedScriptValueToDart({cpp_value})',
# General
@@ -755,6 +793,75 @@
IdlTypeBase.cpp_value_to_dart_value = cpp_value_to_dart_value
+# FIXME(leafp) This is horrible, we should do better, but currently this is hard to do
+# in a nice way. Best solution might be to extend DartStringAdapter to accomodate
+# initialization from constant strings, but better to do that once we're stable
+# on the bots so we can track any performance regression
+CPP_LITERAL_TO_DART_VALUE = {
+ 'DOMString': {'nullptr': 'DartStringAdapter(DartStringPeer::nullString())',
+ 'String("")': 'DartStringAdapter(DartStringPeer::emptyString())',
+ '*': 'DartUtilities::dartToString(DartUtilities::stringToDart({cpp_literal}), exception)'},
+ 'ScalarValueString': {'nullptr': 'DartStringAdapter(DartStringPeer::nullString())',
+ 'String("")': 'DartStringAdapter(DartStringPeer::emptyString())',
+ '*': 'DartUtilities::dartToScalarValueString(DartUtilities::stringToDart({cpp_literal}), exception)'},
+}
+
+
+def literal_cpp_value(idl_type, idl_literal):
+ """Converts an expression that is a valid C++ literal for this type."""
+ # FIXME: add validation that idl_type and idl_literal are compatible
+ literal_value = str(idl_literal)
+ base_type = idl_type.preprocessed_type.base_type
+ if base_type in CPP_UNSIGNED_TYPES:
+ return literal_value + 'u'
+ if base_type in CPP_LITERAL_TO_DART_VALUE:
+ if literal_value in CPP_LITERAL_TO_DART_VALUE[base_type]:
+ format_string = CPP_LITERAL_TO_DART_VALUE[base_type][literal_value]
+ else:
+ format_string = CPP_LITERAL_TO_DART_VALUE[base_type]['*']
+ return format_string.format(cpp_literal=literal_value)
+ return literal_value
+
+IdlType.literal_cpp_value = literal_cpp_value
+
+
+CPP_DEFAULT_VALUE_FOR_CPP_TYPE = {
+ 'DOMString': 'DartStringAdapter(DartStringPeer::emptyString())',
+ 'ByteString': 'DartStringAdapter(DartStringPeer::emptyString())',
+ 'ScalarValueString': 'DartStringAdapter(DartStringPeer::emptyString())',
+ 'boolean': 'false',
+ 'float': '0.0f',
+ 'unrestricted float': '0.0f',
+ 'double': '0.0',
+ 'unrestricted double': '0.0',
+ 'byte': '0',
+ 'octet': '0',
+ 'short': '0',
+ 'unsigned short': '0',
+ 'long': '0',
+ 'unsigned long': '0',
+ 'long long': '0',
+ 'unsigned long long': '0',
+ 'Dictionary': 'Dictionary()',
+ 'ScriptValue': 'DartUtilities::dartToScriptValueWithNullCheck(Dart_Null())',
+ 'MediaQueryListListener': 'nullptr',
+ 'NodeFilter': 'nullptr',
+ 'SerializedScriptValue': 'nullptr',
+ 'XPathNSResolver': 'nullptr',
+}
+
+
+def default_cpp_value_for_cpp_type(idl_type):
+ idl_type = idl_type.preprocessed_type
+ add_includes_for_type(idl_type)
+ base_idl_type = idl_type.base_type
+ if base_idl_type in CPP_DEFAULT_VALUE_FOR_CPP_TYPE:
+ return CPP_DEFAULT_VALUE_FOR_CPP_TYPE[base_idl_type]
+ if base_idl_type in NON_WRAPPER_TYPES:
+ return 'nullptr'
+ format_str = 'Dart{idl_type}::toNativeWithNullCheck(Dart_Null(), exception)'
+ return format_str.format(idl_type=idl_type)
+
# Override idl_type.name to not suffix orNull to the name, in Dart we always
# test for null e.g.,
@@ -779,19 +886,8 @@
IdlUnionType.name = property(dart_name)
-def typechecked_interface(extended_attributes):
- return ('TypeChecking' in extended_attributes and\
- DartUtilities.extended_attribute_value_contains(extended_attributes['TypeChecking'], 'Interface'))
-
-
-def typechecked_argument(idl_type, interface_extended_attributes, extended_attributes):
- return (idl_type.is_wrapper_type and
- (typechecked_interface(interface_extended_attributes) or
- (typechecked_interface(extended_attributes))))
-
-
# If True use the WithNullCheck version when converting.
-def allow_null(idl_type, interface_extended_attributes, extended_attributes):
+def allow_null(idl_type, extended_attributes, has_type_checking_interface):
if idl_type.base_type in ('DOMString', 'ByteString', 'ScalarValueString'):
# This logic is in cpp_types in v8_types.py, since they handle
# this using the V8StringResource type. We handle it here
@@ -811,11 +907,25 @@
return False
else:
# This logic is implemented in the methods.cpp template in V8
- if (idl_type.is_nullable or
- (not typechecked_argument(idl_type, interface_extended_attributes, extended_attributes))):
+ if (idl_type.is_nullable or not has_type_checking_interface):
return True
if extended_attributes.get('Default') == 'Undefined':
return True
return False
+
+
+# If True use the WithEmptyCheck version when converting.
+def allow_empty(idl_type, extended_attributes):
+ if idl_type.base_type in ('DOMString', 'ByteString', 'ScalarValueString'):
+ # This logic is in cpp_types in v8_types.py, since they handle
+ # this using the V8StringResource type. We handle it here
+ if (extended_attributes.get('TreatNullAs') == 'EmptyString' or
+ extended_attributes.get('TreatUndefinedAs') == 'EmptyString'):
+ return True
+
+ if extended_attributes.get('Default') == 'EmptyString':
+ return True
+
+ return False
diff --git a/bindings/dart/scripts/dart_utilities.py b/bindings/dart/scripts/dart_utilities.py
index 4f888d6..c9f4fa5 100644
--- a/bindings/dart/scripts/dart_utilities.py
+++ b/bindings/dart/scripts/dart_utilities.py
@@ -44,6 +44,14 @@
import v8_utilities
+def _enum_validation_expression(idl_type):
+ # FIXME: Add IdlEnumType, move property to derived type, and remove this check
+ if not idl_type.is_enum:
+ return None
+ return ' || '.join(['((String){param_name}) == "%s"' % enum_value
+ for enum_value in idl_type.enum_values])
+
+
def _scoped_name(interface, definition, base_name):
# partial interfaces are implemented as separate classes, with their members
# implemented as static member functions
@@ -90,6 +98,7 @@
'ScriptArguments': 'scriptArguments.release()',
'ActiveWindow': 'DartUtilities::callingDomWindowForCurrentIsolate()',
'FirstWindow': 'DartUtilities::enteredDomWindowForCurrentIsolate()',
+ 'Document': 'document',
}
# List because key order matters, as we want arguments in deterministic order
@@ -99,12 +108,11 @@
'ScriptArguments',
'ActiveWindow',
'FirstWindow',
+ 'Document',
]
-def _call_with_arguments(member, call_with_values=None):
- # Optional parameter so setter can override with [SetterCallWith]
- call_with_values = call_with_values or member.extended_attributes.get('CallWith')
+def _call_with_arguments(call_with_values):
if not call_with_values:
return []
return [_CALL_WITH_ARGUMENTS[value]
@@ -132,36 +140,36 @@
return extended_attributes['MeasureAs']
-def _generate_native_entry(interface_name, thing, name, kind,
- optional_index, args, types):
- index = thing.get('overload_index') or optional_index
- is_static = bool(thing.get('is_static'))
- tag = ""
+def _generate_native_entry(interface_name, name, kind, is_static, arity):
+
+ def mkPublic(s):
+ if s.startswith("_") or s.startswith("$"):
+ return "$" + s
+ return s
+
+ arity_str = ""
if kind == 'Getter':
- tag = "%s_Getter" % name
- blink_entry = tag
+ suffix = "_Getter"
elif kind == 'Setter':
- tag = "%s_Setter" % name
- blink_entry = tag
+ suffix = "_Setter"
elif kind == 'Constructor':
- tag = "constructorCallback"
- blink_entry = tag
- if index is not None:
- blink_entry = "_create_%s%s" % (index, blink_entry)
+ name = "constructor"
+ suffix = "Callback"
+ arity_str = "_" + str(arity)
elif kind == 'Method':
- tag = "%s_Callback" % name
- if index is None:
- blink_entry = tag
- else:
- blink_entry = "_%s_%d_Callback" % (name, index)
- components = [interface_name, tag]
- if types is not None:
- components.extend(types)
- native_entry = "_".join(components)
+ suffix = "_Callback"
+ arity_str = "_" + str(arity)
+
+ tag = "%s%s" % (name, suffix)
+ blink_entry = mkPublic(tag + arity_str)
+ native_entry = "_".join([interface_name, tag])
+
+ argument_names = ['__arg_%d' % i for i in range(0, arity)]
if not is_static and kind != 'Constructor':
- args.insert(0, "mthis")
- return {'blink_entry': "$" + blink_entry,
- 'argument_names': args,
+ argument_names.insert(0, "mthis")
+
+ return {'blink_entry': blink_entry,
+ 'argument_names': argument_names,
'resolver_string': native_entry}
################################################################################
@@ -184,6 +192,7 @@
DartUtilities.cpp_name = v8_utilities.cpp_name
DartUtilities.deprecate_as = _deprecate_as
DartUtilities.extended_attribute_value_contains = v8_utilities.extended_attribute_value_contains
+DartUtilities.enum_validation_expression = _enum_validation_expression
DartUtilities.gc_type = v8_utilities.gc_type
DartUtilities.generate_native_entry = _generate_native_entry
DartUtilities.has_extended_attribute = v8_utilities.has_extended_attribute
diff --git a/bindings/dart/scripts/idl_files.py b/bindings/dart/scripts/idl_files.py
index 8a15e54..cbb4157 100644
--- a/bindings/dart/scripts/idl_files.py
+++ b/bindings/dart/scripts/idl_files.py
@@ -1,5 +1,6 @@
-# TODO(terry): Temporary file. Process will be driven by GYP not this file.
-# List of IDL files from Source/core/core.gypi and Source/modules/modules.gypi
+# Testing file for use to debug IDL parsing and code gen in Eclipse.
+# Update list of IDL files from Source/core/core.gypi and
+# Source/modules/modules.gypi
import os
@@ -15,450 +16,460 @@
# This list is copied from Source/core/core.gypi 'core_idl_files'
# Core IDL files bindings (.dart, .cpp and .h files) will be generated
core_idl_files = [
- 'animation/Animation.idl',
- 'animation/AnimationEffect.idl',
- 'animation/AnimationPlayer.idl',
- 'animation/AnimationNode.idl',
- 'animation/AnimationTimeline.idl',
- 'animation/Timing.idl',
- 'clipboard/DataTransfer.idl',
- 'clipboard/DataTransferItem.idl',
- 'clipboard/DataTransferItemList.idl',
- 'css/CSS.idl',
- 'css/CSSCharsetRule.idl',
- 'css/CSSFontFaceLoadEvent.idl',
- 'css/CSSFontFaceRule.idl',
- 'css/CSSImportRule.idl',
- 'css/CSSKeyframeRule.idl',
- 'css/CSSKeyframesRule.idl',
- 'css/CSSMediaRule.idl',
- 'css/CSSPageRule.idl',
- 'css/CSSPrimitiveValue.idl',
- 'css/CSSRule.idl',
- 'css/CSSRuleList.idl',
- 'css/CSSStyleDeclaration.idl',
- 'css/CSSStyleRule.idl',
- 'css/CSSStyleSheet.idl',
- 'css/CSSSupportsRule.idl',
- 'css/CSSUnknownRule.idl',
- 'css/CSSValue.idl',
- 'css/CSSValueList.idl',
- 'css/CSSViewportRule.idl',
- 'css/Counter.idl',
- 'css/FontFace.idl',
- 'css/FontFaceSet.idl',
- 'css/FontFaceSetForEachCallback.idl',
- 'css/MediaList.idl',
- 'css/MediaQueryList.idl',
- 'css/RGBColor.idl',
- 'css/Rect.idl',
- 'css/StyleMedia.idl',
- 'css/StyleSheet.idl',
- 'css/StyleSheetList.idl',
- 'css/WebKitCSSFilterRule.idl',
- 'css/WebKitCSSFilterValue.idl',
- 'css/WebKitCSSMatrix.idl',
- 'css/WebKitCSSTransformValue.idl',
- 'dom/Attr.idl',
- 'dom/CDATASection.idl',
- 'dom/CharacterData.idl',
- 'dom/ClientRect.idl',
- 'dom/ClientRectList.idl',
- 'dom/Comment.idl',
- 'dom/DOMError.idl',
- 'dom/DOMException.idl',
- 'dom/DOMImplementation.idl',
- 'dom/DOMSettableTokenList.idl',
- 'dom/DOMStringList.idl',
- 'dom/DOMStringMap.idl',
- 'dom/DOMTokenList.idl',
- 'dom/Document.idl',
- 'dom/DocumentFragment.idl',
- 'dom/DocumentType.idl',
- 'dom/Element.idl',
- 'dom/MessageChannel.idl',
- 'dom/MessagePort.idl',
- 'dom/MutationObserver.idl',
- 'dom/MutationRecord.idl',
- 'dom/NamedNodeMap.idl',
- 'dom/Node.idl',
- 'dom/NodeFilter.idl',
- 'dom/NodeIterator.idl',
- 'dom/NodeList.idl',
- 'dom/Notation.idl',
- 'dom/ProcessingInstruction.idl',
- 'dom/Range.idl',
- 'dom/RequestAnimationFrameCallback.idl',
- 'dom/StringCallback.idl',
- 'dom/Text.idl',
- 'dom/Touch.idl',
- 'dom/TouchList.idl',
- 'dom/TreeWalker.idl',
- 'dom/URL.idl',
- 'dom/XMLDocument.idl',
- 'dom/shadow/ShadowRoot.idl',
- 'events/AnimationPlayerEvent.idl',
- 'events/ApplicationCacheErrorEvent.idl',
- 'events/AutocompleteErrorEvent.idl',
- 'events/BeforeUnloadEvent.idl',
- 'events/CompositionEvent.idl',
- 'events/CustomEvent.idl',
- 'events/ErrorEvent.idl',
- 'events/Event.idl',
- 'events/EventTarget.idl',
- 'events/FocusEvent.idl',
- 'events/HashChangeEvent.idl',
- 'events/KeyboardEvent.idl',
- 'events/MessageEvent.idl',
- 'events/MouseEvent.idl',
- 'events/MutationEvent.idl',
- 'events/OverflowEvent.idl',
- 'events/PageTransitionEvent.idl',
- 'events/PopStateEvent.idl',
- 'events/ProgressEvent.idl',
- 'events/ResourceProgressEvent.idl',
- 'events/SecurityPolicyViolationEvent.idl',
- 'events/TextEvent.idl',
- 'events/TouchEvent.idl',
- 'events/TransitionEvent.idl',
- 'events/UIEvent.idl',
- 'events/WebKitAnimationEvent.idl',
- 'events/WheelEvent.idl',
- 'fileapi/Blob.idl',
- 'fileapi/File.idl',
- 'fileapi/FileError.idl',
- 'fileapi/FileList.idl',
- 'fileapi/FileReader.idl',
- 'fileapi/FileReaderSync.idl',
- 'fileapi/Stream.idl',
- 'frame/BarProp.idl',
- 'frame/Console.idl',
- 'frame/ConsoleBase.idl',
- 'frame/History.idl',
- 'frame/ImageBitmap.idl',
- 'frame/Location.idl',
- 'frame/Navigator.idl',
- 'frame/Screen.idl',
- 'frame/WebKitPoint.idl',
- 'frame/Window.idl',
- 'html/FormData.idl',
- 'html/HTMLAllCollection.idl',
- 'html/HTMLAnchorElement.idl',
- 'html/HTMLAppletElement.idl',
- 'html/HTMLAreaElement.idl',
- 'html/HTMLAudioElement.idl',
- 'html/HTMLBRElement.idl',
- 'html/HTMLBaseElement.idl',
- 'html/HTMLBodyElement.idl',
- 'html/HTMLButtonElement.idl',
- 'html/HTMLCanvasElement.idl',
- 'html/HTMLCollection.idl',
- 'html/HTMLContentElement.idl',
- 'html/HTMLDListElement.idl',
- 'html/HTMLDataListElement.idl',
- 'html/HTMLDetailsElement.idl',
- 'html/HTMLDialogElement.idl',
- 'html/HTMLDirectoryElement.idl',
- 'html/HTMLDivElement.idl',
- 'html/HTMLDocument.idl',
- 'html/HTMLElement.idl',
- 'html/HTMLEmbedElement.idl',
- 'html/HTMLFieldSetElement.idl',
- 'html/HTMLFontElement.idl',
- 'html/HTMLFormControlsCollection.idl',
- 'html/HTMLFormElement.idl',
- 'html/HTMLFrameElement.idl',
- 'html/HTMLFrameSetElement.idl',
- 'html/HTMLHRElement.idl',
- 'html/HTMLHeadElement.idl',
- 'html/HTMLHeadingElement.idl',
- 'html/HTMLHtmlElement.idl',
- 'html/HTMLIFrameElement.idl',
- 'html/HTMLImageElement.idl',
- 'html/HTMLInputElement.idl',
- 'html/HTMLKeygenElement.idl',
- 'html/HTMLLIElement.idl',
- 'html/HTMLLabelElement.idl',
- 'html/HTMLLegendElement.idl',
- 'html/HTMLLinkElement.idl',
- 'html/HTMLMapElement.idl',
- 'html/HTMLMarqueeElement.idl',
- 'html/HTMLMediaElement.idl',
- 'html/HTMLMenuElement.idl',
- 'html/HTMLMetaElement.idl',
- 'html/HTMLMeterElement.idl',
- 'html/HTMLModElement.idl',
- 'html/HTMLOListElement.idl',
- 'html/HTMLObjectElement.idl',
- 'html/HTMLOptGroupElement.idl',
- 'html/HTMLOptionElement.idl',
- 'html/HTMLOptionsCollection.idl',
- 'html/HTMLOutputElement.idl',
- 'html/HTMLParagraphElement.idl',
- 'html/HTMLParamElement.idl',
- 'html/HTMLPictureElement.idl',
- 'html/HTMLPreElement.idl',
- 'html/HTMLProgressElement.idl',
- 'html/HTMLQuoteElement.idl',
- 'html/HTMLScriptElement.idl',
- 'html/HTMLSelectElement.idl',
- 'html/HTMLShadowElement.idl',
- 'html/HTMLSourceElement.idl',
- 'html/HTMLSpanElement.idl',
- 'html/HTMLStyleElement.idl',
- 'html/HTMLTableCaptionElement.idl',
- 'html/HTMLTableCellElement.idl',
- 'html/HTMLTableColElement.idl',
- 'html/HTMLTableElement.idl',
- 'html/HTMLTableRowElement.idl',
- 'html/HTMLTableSectionElement.idl',
- 'html/HTMLTemplateElement.idl',
- 'html/HTMLTextAreaElement.idl',
- 'html/HTMLTitleElement.idl',
- 'html/HTMLTrackElement.idl',
- 'html/HTMLUListElement.idl',
- 'html/HTMLUnknownElement.idl',
- 'html/HTMLVideoElement.idl',
- 'html/ImageData.idl',
- 'html/MediaController.idl',
- 'html/MediaError.idl',
- 'html/MediaKeyError.idl',
- 'html/MediaKeyEvent.idl',
- 'html/RadioNodeList.idl',
- 'html/TextMetrics.idl',
- 'html/TimeRanges.idl',
- 'html/ValidityState.idl',
- 'html/VoidCallback.idl',
- 'html/canvas/ANGLEInstancedArrays.idl',
- 'html/canvas/Canvas2DContextAttributes.idl',
- 'html/canvas/CanvasGradient.idl',
- 'html/canvas/CanvasPattern.idl',
- 'html/canvas/CanvasRenderingContext2D.idl',
- 'html/canvas/EXTBlendMinMax.idl',
- 'html/canvas/EXTFragDepth.idl',
- 'html/canvas/EXTShaderTextureLOD.idl',
- 'html/canvas/EXTTextureFilterAnisotropic.idl',
- 'html/canvas/OESElementIndexUint.idl',
- 'html/canvas/OESStandardDerivatives.idl',
- 'html/canvas/OESTextureFloat.idl',
- 'html/canvas/OESTextureFloatLinear.idl',
- 'html/canvas/OESTextureHalfFloat.idl',
- 'html/canvas/OESTextureHalfFloatLinear.idl',
- 'html/canvas/OESVertexArrayObject.idl',
- 'html/canvas/Path2D.idl',
- 'html/canvas/WebGLActiveInfo.idl',
- 'html/canvas/WebGLBuffer.idl',
- 'html/canvas/WebGLCompressedTextureATC.idl',
- 'html/canvas/WebGLCompressedTextureETC1.idl',
- 'html/canvas/WebGLCompressedTexturePVRTC.idl',
- 'html/canvas/WebGLCompressedTextureS3TC.idl',
- 'html/canvas/WebGLContextAttributes.idl',
- 'html/canvas/WebGLContextEvent.idl',
- 'html/canvas/WebGLDebugRendererInfo.idl',
- 'html/canvas/WebGLDebugShaders.idl',
- 'html/canvas/WebGLDepthTexture.idl',
- 'html/canvas/WebGLDrawBuffers.idl',
- 'html/canvas/WebGLFramebuffer.idl',
- 'html/canvas/WebGLLoseContext.idl',
- 'html/canvas/WebGLProgram.idl',
- 'html/canvas/WebGLRenderbuffer.idl',
- 'html/canvas/WebGLRenderingContext.idl',
- 'html/canvas/WebGLShader.idl',
- 'html/canvas/WebGLShaderPrecisionFormat.idl',
- 'html/canvas/WebGLTexture.idl',
- 'html/canvas/WebGLUniformLocation.idl',
- 'html/canvas/WebGLVertexArrayObjectOES.idl',
- 'html/ime/InputMethodContext.idl',
- 'html/track/AudioTrack.idl',
- 'html/track/AudioTrackList.idl',
- 'html/track/TextTrack.idl',
- 'html/track/TextTrackCue.idl',
- 'html/track/TextTrackCueList.idl',
- 'html/track/TextTrackList.idl',
- 'html/track/TrackEvent.idl',
- 'html/track/VideoTrack.idl',
- 'html/track/VideoTrackList.idl',
- 'html/track/vtt/VTTCue.idl',
- 'html/track/vtt/VTTRegion.idl',
- 'html/track/vtt/VTTRegionList.idl',
- 'inspector/InjectedScriptHost.idl',
- 'inspector/InspectorFrontendHost.idl',
- 'inspector/InspectorOverlayHost.idl',
- 'inspector/JavaScriptCallFrame.idl',
- 'loader/appcache/ApplicationCache.idl',
- 'page/EventSource.idl',
- 'page/PagePopupController.idl',
- 'page/Selection.idl',
- 'plugins/MimeType.idl',
- 'plugins/MimeTypeArray.idl',
- 'plugins/Plugin.idl',
- 'plugins/PluginArray.idl',
- 'storage/Storage.idl',
- 'storage/StorageEvent.idl',
- 'svg/SVGAElement.idl',
- 'svg/SVGAltGlyphDefElement.idl',
- 'svg/SVGAltGlyphElement.idl',
- 'svg/SVGAltGlyphItemElement.idl',
- 'svg/SVGAngle.idl',
- 'svg/SVGAnimateElement.idl',
- 'svg/SVGAnimateMotionElement.idl',
- 'svg/SVGAnimateTransformElement.idl',
- 'svg/SVGAnimatedAngle.idl',
- 'svg/SVGAnimatedBoolean.idl',
- 'svg/SVGAnimatedEnumeration.idl',
- 'svg/SVGAnimatedInteger.idl',
- 'svg/SVGAnimatedLength.idl',
- 'svg/SVGAnimatedLengthList.idl',
- 'svg/SVGAnimatedNumber.idl',
- 'svg/SVGAnimatedNumberList.idl',
- 'svg/SVGAnimatedPreserveAspectRatio.idl',
- 'svg/SVGAnimatedRect.idl',
- 'svg/SVGAnimatedString.idl',
- 'svg/SVGAnimatedTransformList.idl',
- 'svg/SVGAnimationElement.idl',
- 'svg/SVGCircleElement.idl',
- 'svg/SVGClipPathElement.idl',
- 'svg/SVGComponentTransferFunctionElement.idl',
- 'svg/SVGCursorElement.idl',
- 'svg/SVGDefsElement.idl',
- 'svg/SVGDescElement.idl',
- 'svg/SVGDiscardElement.idl',
- 'svg/SVGElement.idl',
- 'svg/SVGEllipseElement.idl',
- 'svg/SVGFEBlendElement.idl',
- 'svg/SVGFEColorMatrixElement.idl',
- 'svg/SVGFEComponentTransferElement.idl',
- 'svg/SVGFECompositeElement.idl',
- 'svg/SVGFEConvolveMatrixElement.idl',
- 'svg/SVGFEDiffuseLightingElement.idl',
- 'svg/SVGFEDisplacementMapElement.idl',
- 'svg/SVGFEDistantLightElement.idl',
- 'svg/SVGFEDropShadowElement.idl',
- 'svg/SVGFEFloodElement.idl',
- 'svg/SVGFEFuncAElement.idl',
- 'svg/SVGFEFuncBElement.idl',
- 'svg/SVGFEFuncGElement.idl',
- 'svg/SVGFEFuncRElement.idl',
- 'svg/SVGFEGaussianBlurElement.idl',
- 'svg/SVGFEImageElement.idl',
- 'svg/SVGFEMergeElement.idl',
- 'svg/SVGFEMergeNodeElement.idl',
- 'svg/SVGFEMorphologyElement.idl',
- 'svg/SVGFEOffsetElement.idl',
- 'svg/SVGFEPointLightElement.idl',
- 'svg/SVGFESpecularLightingElement.idl',
- 'svg/SVGFESpotLightElement.idl',
- 'svg/SVGFETileElement.idl',
- 'svg/SVGFETurbulenceElement.idl',
- 'svg/SVGFilterElement.idl',
- 'svg/SVGFontElement.idl',
- 'svg/SVGFontFaceElement.idl',
- 'svg/SVGFontFaceFormatElement.idl',
- 'svg/SVGFontFaceNameElement.idl',
- 'svg/SVGFontFaceSrcElement.idl',
- 'svg/SVGFontFaceUriElement.idl',
- 'svg/SVGForeignObjectElement.idl',
- 'svg/SVGGElement.idl',
- 'svg/SVGGeometryElement.idl',
- 'svg/SVGGlyphElement.idl',
- 'svg/SVGGlyphRefElement.idl',
- 'svg/SVGGradientElement.idl',
- 'svg/SVGGraphicsElement.idl',
- 'svg/SVGHKernElement.idl',
- 'svg/SVGImageElement.idl',
- 'svg/SVGLength.idl',
- 'svg/SVGLengthList.idl',
- 'svg/SVGLineElement.idl',
- 'svg/SVGLinearGradientElement.idl',
- 'svg/SVGMPathElement.idl',
- 'svg/SVGMarkerElement.idl',
- 'svg/SVGMaskElement.idl',
- 'svg/SVGMatrix.idl',
- 'svg/SVGMetadataElement.idl',
- 'svg/SVGMissingGlyphElement.idl',
- 'svg/SVGNumber.idl',
- 'svg/SVGNumberList.idl',
- 'svg/SVGPathElement.idl',
- 'svg/SVGPathSeg.idl',
- 'svg/SVGPathSegArcAbs.idl',
- 'svg/SVGPathSegArcRel.idl',
- 'svg/SVGPathSegClosePath.idl',
- 'svg/SVGPathSegCurvetoCubicAbs.idl',
- 'svg/SVGPathSegCurvetoCubicRel.idl',
- 'svg/SVGPathSegCurvetoCubicSmoothAbs.idl',
- 'svg/SVGPathSegCurvetoCubicSmoothRel.idl',
- 'svg/SVGPathSegCurvetoQuadraticAbs.idl',
- 'svg/SVGPathSegCurvetoQuadraticRel.idl',
- 'svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl',
- 'svg/SVGPathSegCurvetoQuadraticSmoothRel.idl',
- 'svg/SVGPathSegLinetoAbs.idl',
- 'svg/SVGPathSegLinetoHorizontalAbs.idl',
- 'svg/SVGPathSegLinetoHorizontalRel.idl',
- 'svg/SVGPathSegLinetoRel.idl',
- 'svg/SVGPathSegLinetoVerticalAbs.idl',
- 'svg/SVGPathSegLinetoVerticalRel.idl',
- 'svg/SVGPathSegList.idl',
- 'svg/SVGPathSegMovetoAbs.idl',
- 'svg/SVGPathSegMovetoRel.idl',
- 'svg/SVGPatternElement.idl',
- 'svg/SVGPoint.idl',
- 'svg/SVGPointList.idl',
- 'svg/SVGPolygonElement.idl',
- 'svg/SVGPolylineElement.idl',
- 'svg/SVGPreserveAspectRatio.idl',
- 'svg/SVGRadialGradientElement.idl',
- 'svg/SVGRect.idl',
- 'svg/SVGRectElement.idl',
- 'svg/SVGRenderingIntent.idl',
- 'svg/SVGSVGElement.idl',
- 'svg/SVGScriptElement.idl',
- 'svg/SVGSetElement.idl',
- 'svg/SVGStopElement.idl',
- 'svg/SVGStringList.idl',
- 'svg/SVGStyleElement.idl',
- 'svg/SVGSwitchElement.idl',
- 'svg/SVGSymbolElement.idl',
- 'svg/SVGTSpanElement.idl',
- 'svg/SVGTextContentElement.idl',
- 'svg/SVGTextElement.idl',
- 'svg/SVGTextPathElement.idl',
- 'svg/SVGTextPositioningElement.idl',
- 'svg/SVGTitleElement.idl',
- 'svg/SVGTransform.idl',
- 'svg/SVGTransformList.idl',
- 'svg/SVGUnitTypes.idl',
- 'svg/SVGUseElement.idl',
- 'svg/SVGVKernElement.idl',
- 'svg/SVGViewElement.idl',
- 'svg/SVGViewSpec.idl',
- 'svg/SVGZoomEvent.idl',
- 'timing/MemoryInfo.idl',
- 'timing/Performance.idl',
- 'timing/PerformanceEntry.idl',
- 'timing/PerformanceMark.idl',
- 'timing/PerformanceMeasure.idl',
- 'timing/PerformanceNavigation.idl',
- 'timing/PerformanceResourceTiming.idl',
- 'timing/PerformanceTiming.idl',
- 'workers/DedicatedWorkerGlobalScope.idl',
- 'workers/SharedWorker.idl',
- 'workers/SharedWorkerGlobalScope.idl',
- 'workers/Worker.idl',
- 'workers/WorkerConsole.idl',
- 'workers/WorkerGlobalScope.idl',
- 'workers/WorkerLocation.idl',
- 'workers/WorkerNavigator.idl',
- 'xml/DOMParser.idl',
- 'xml/XMLHttpRequest.idl',
- 'xml/XMLHttpRequestEventTarget.idl',
- 'xml/XMLHttpRequestProgressEvent.idl',
- 'xml/XMLHttpRequestUpload.idl',
- 'xml/XMLSerializer.idl',
- 'xml/XPathEvaluator.idl',
- 'xml/XPathExpression.idl',
- 'xml/XPathNSResolver.idl',
- 'xml/XPathResult.idl',
- 'xml/XSLTProcessor.idl',
+ 'animation/Animation.idl',
+ 'animation/AnimationEffect.idl',
+ 'animation/AnimationPlayer.idl',
+ 'animation/AnimationNode.idl',
+ 'animation/AnimationTimeline.idl',
+ 'animation/Timing.idl',
+ 'clipboard/DataTransfer.idl',
+ 'clipboard/DataTransferItem.idl',
+ 'clipboard/DataTransferItemList.idl',
+ 'css/CSS.idl',
+ 'css/CSSCharsetRule.idl',
+ 'css/CSSFontFaceRule.idl',
+ 'css/CSSImportRule.idl',
+ 'css/CSSKeyframeRule.idl',
+ 'css/CSSKeyframesRule.idl',
+ 'css/CSSMediaRule.idl',
+ 'css/CSSPageRule.idl',
+ 'css/CSSPrimitiveValue.idl',
+ 'css/CSSRule.idl',
+ 'css/CSSRuleList.idl',
+ 'css/CSSStyleDeclaration.idl',
+ 'css/CSSStyleRule.idl',
+ 'css/CSSStyleSheet.idl',
+ 'css/CSSSupportsRule.idl',
+ 'css/CSSUnknownRule.idl',
+ 'css/CSSValue.idl',
+ 'css/CSSValueList.idl',
+ 'css/CSSViewportRule.idl',
+ 'css/Counter.idl',
+ 'css/FontFace.idl',
+ 'css/FontFaceSet.idl',
+ 'css/FontFaceSetForEachCallback.idl',
+ 'css/FontFaceSetLoadEvent.idl',
+ 'css/MediaList.idl',
+ 'css/MediaQueryList.idl',
+ 'css/MediaQueryListEvent.idl',
+ 'css/RGBColor.idl',
+ 'css/Rect.idl',
+ 'css/StyleMedia.idl',
+ 'css/StyleSheet.idl',
+ 'css/StyleSheetList.idl',
+ 'css/WebKitCSSFilterRule.idl',
+ 'css/WebKitCSSFilterValue.idl',
+ 'css/WebKitCSSMatrix.idl',
+ 'css/WebKitCSSTransformValue.idl',
+ 'dom/Attr.idl',
+ 'dom/CDATASection.idl',
+ 'dom/CharacterData.idl',
+ 'dom/ClientRect.idl',
+ 'dom/ClientRectList.idl',
+ 'dom/Comment.idl',
+ 'dom/DOMError.idl',
+ 'dom/DOMException.idl',
+ 'dom/DOMImplementation.idl',
+ 'dom/DOMMatrix.idl',
+ 'dom/DOMMatrixReadOnly.idl',
+ 'dom/DOMPoint.idl',
+ 'dom/DOMPointReadOnly.idl',
+ 'dom/DOMRect.idl',
+ 'dom/DOMRectReadOnly.idl',
+ 'dom/DOMSettableTokenList.idl',
+ 'dom/DOMStringList.idl',
+ 'dom/DOMStringMap.idl',
+ 'dom/DOMTokenList.idl',
+ 'dom/Document.idl',
+ 'dom/DocumentFragment.idl',
+ 'dom/DocumentType.idl',
+ 'dom/Element.idl',
+ 'dom/Iterator.idl',
+ 'dom/MessageChannel.idl',
+ 'dom/MessagePort.idl',
+ 'dom/MutationObserver.idl',
+ 'dom/MutationRecord.idl',
+ 'dom/NamedNodeMap.idl',
+ 'dom/Node.idl',
+ 'dom/NodeFilter.idl',
+ 'dom/NodeIterator.idl',
+ 'dom/NodeList.idl',
+ 'dom/ProcessingInstruction.idl',
+ 'dom/Range.idl',
+ 'dom/RequestAnimationFrameCallback.idl',
+ 'dom/StringCallback.idl',
+ 'dom/Text.idl',
+ 'dom/Touch.idl',
+ 'dom/TouchList.idl',
+ 'dom/TreeWalker.idl',
+ 'dom/URL.idl',
+ 'dom/XMLDocument.idl',
+ 'dom/shadow/ShadowRoot.idl',
+ 'editing/Selection.idl',
+ 'events/AnimationPlayerEvent.idl',
+ 'events/ApplicationCacheErrorEvent.idl',
+ 'events/AutocompleteErrorEvent.idl',
+ 'events/BeforeUnloadEvent.idl',
+ 'events/CompositionEvent.idl',
+ 'events/CustomEvent.idl',
+ 'events/ErrorEvent.idl',
+ 'events/Event.idl',
+ 'events/EventTarget.idl',
+ 'events/FocusEvent.idl',
+ 'events/HashChangeEvent.idl',
+ 'events/KeyboardEvent.idl',
+ 'events/MessageEvent.idl',
+ 'events/MouseEvent.idl',
+ 'events/MutationEvent.idl',
+ 'events/OverflowEvent.idl',
+ 'events/PageTransitionEvent.idl',
+ 'events/PopStateEvent.idl',
+ 'events/ProgressEvent.idl',
+ 'events/RelatedEvent.idl',
+ 'events/ResourceProgressEvent.idl',
+ 'events/SecurityPolicyViolationEvent.idl',
+ 'events/TextEvent.idl',
+ 'events/TouchEvent.idl',
+ 'events/TransitionEvent.idl',
+ 'events/UIEvent.idl',
+ 'events/WebKitAnimationEvent.idl',
+ 'events/WheelEvent.idl',
+ 'fileapi/Blob.idl',
+ 'fileapi/File.idl',
+ 'fileapi/FileError.idl',
+ 'fileapi/FileList.idl',
+ 'fileapi/FileReader.idl',
+ 'fileapi/FileReaderSync.idl',
+ 'frame/BarProp.idl',
+ 'frame/Console.idl',
+ 'frame/ConsoleBase.idl',
+ 'frame/History.idl',
+ 'frame/ImageBitmap.idl',
+ 'frame/Location.idl',
+ 'frame/Navigator.idl',
+ 'frame/Screen.idl',
+ 'frame/Window.idl',
+ 'html/FormData.idl',
+ 'html/HTMLAllCollection.idl',
+ 'html/HTMLAnchorElement.idl',
+ 'html/HTMLAppletElement.idl',
+ 'html/HTMLAreaElement.idl',
+ 'html/HTMLAudioElement.idl',
+ 'html/HTMLBRElement.idl',
+ 'html/HTMLBaseElement.idl',
+ 'html/HTMLBodyElement.idl',
+ 'html/HTMLButtonElement.idl',
+ 'html/HTMLCanvasElement.idl',
+ 'html/HTMLCollection.idl',
+ 'html/HTMLContentElement.idl',
+ 'html/HTMLDListElement.idl',
+ 'html/HTMLDataListElement.idl',
+ 'html/HTMLDetailsElement.idl',
+ 'html/HTMLDialogElement.idl',
+ 'html/HTMLDirectoryElement.idl',
+ 'html/HTMLDivElement.idl',
+ 'html/HTMLDocument.idl',
+ 'html/HTMLElement.idl',
+ 'html/HTMLEmbedElement.idl',
+ 'html/HTMLFieldSetElement.idl',
+ 'html/HTMLFontElement.idl',
+ 'html/HTMLFormControlsCollection.idl',
+ 'html/HTMLFormElement.idl',
+ 'html/HTMLFrameElement.idl',
+ 'html/HTMLFrameSetElement.idl',
+ 'html/HTMLHRElement.idl',
+ 'html/HTMLHeadElement.idl',
+ 'html/HTMLHeadingElement.idl',
+ 'html/HTMLHtmlElement.idl',
+ 'html/HTMLIFrameElement.idl',
+ 'html/HTMLImageElement.idl',
+ 'html/HTMLInputElement.idl',
+ 'html/HTMLKeygenElement.idl',
+ 'html/HTMLLIElement.idl',
+ 'html/HTMLLabelElement.idl',
+ 'html/HTMLLegendElement.idl',
+ 'html/HTMLLinkElement.idl',
+ 'html/HTMLMapElement.idl',
+ 'html/HTMLMarqueeElement.idl',
+ 'html/HTMLMediaElement.idl',
+ 'html/HTMLMenuElement.idl',
+ 'html/HTMLMenuItemElement.idl',
+ 'html/HTMLMetaElement.idl',
+ 'html/HTMLMeterElement.idl',
+ 'html/HTMLModElement.idl',
+ 'html/HTMLOListElement.idl',
+ 'html/HTMLObjectElement.idl',
+ 'html/HTMLOptGroupElement.idl',
+ 'html/HTMLOptionElement.idl',
+ 'html/HTMLOptionsCollection.idl',
+ 'html/HTMLOutputElement.idl',
+ 'html/HTMLParagraphElement.idl',
+ 'html/HTMLParamElement.idl',
+ 'html/HTMLPictureElement.idl',
+ 'html/HTMLPreElement.idl',
+ 'html/HTMLProgressElement.idl',
+ 'html/HTMLQuoteElement.idl',
+ 'html/HTMLScriptElement.idl',
+ 'html/HTMLSelectElement.idl',
+ 'html/HTMLShadowElement.idl',
+ 'html/HTMLSourceElement.idl',
+ 'html/HTMLSpanElement.idl',
+ 'html/HTMLStyleElement.idl',
+ 'html/HTMLTableCaptionElement.idl',
+ 'html/HTMLTableCellElement.idl',
+ 'html/HTMLTableColElement.idl',
+ 'html/HTMLTableElement.idl',
+ 'html/HTMLTableRowElement.idl',
+ 'html/HTMLTableSectionElement.idl',
+ 'html/HTMLTemplateElement.idl',
+ 'html/HTMLTextAreaElement.idl',
+ 'html/HTMLTitleElement.idl',
+ 'html/HTMLTrackElement.idl',
+ 'html/HTMLUListElement.idl',
+ 'html/HTMLUnknownElement.idl',
+ 'html/HTMLVideoElement.idl',
+ 'html/ImageData.idl',
+ 'html/MediaController.idl',
+ 'html/MediaError.idl',
+ 'html/MediaKeyError.idl',
+ 'html/MediaKeyEvent.idl',
+ 'html/RadioNodeList.idl',
+ 'html/TextMetrics.idl',
+ 'html/TimeRanges.idl',
+ 'html/ValidityState.idl',
+ 'html/VoidCallback.idl',
+ 'html/canvas/ANGLEInstancedArrays.idl',
+ 'html/canvas/Canvas2DContextAttributes.idl',
+ 'html/canvas/CanvasGradient.idl',
+ 'html/canvas/CanvasPattern.idl',
+ 'html/canvas/CanvasRenderingContext2D.idl',
+ 'html/canvas/EXTBlendMinMax.idl',
+ 'html/canvas/EXTFragDepth.idl',
+ 'html/canvas/EXTShaderTextureLOD.idl',
+ 'html/canvas/EXTTextureFilterAnisotropic.idl',
+ 'html/canvas/OESElementIndexUint.idl',
+ 'html/canvas/OESStandardDerivatives.idl',
+ 'html/canvas/OESTextureFloat.idl',
+ 'html/canvas/OESTextureFloatLinear.idl',
+ 'html/canvas/OESTextureHalfFloat.idl',
+ 'html/canvas/OESTextureHalfFloatLinear.idl',
+ 'html/canvas/OESVertexArrayObject.idl',
+ 'html/canvas/Path2D.idl',
+ 'html/canvas/WebGLActiveInfo.idl',
+ 'html/canvas/WebGLBuffer.idl',
+ 'html/canvas/WebGLCompressedTextureATC.idl',
+ 'html/canvas/WebGLCompressedTextureETC1.idl',
+ 'html/canvas/WebGLCompressedTexturePVRTC.idl',
+ 'html/canvas/WebGLCompressedTextureS3TC.idl',
+ 'html/canvas/WebGLContextAttributes.idl',
+ 'html/canvas/WebGLContextEvent.idl',
+ 'html/canvas/WebGLDebugRendererInfo.idl',
+ 'html/canvas/WebGLDebugShaders.idl',
+ 'html/canvas/WebGLDepthTexture.idl',
+ 'html/canvas/WebGLDrawBuffers.idl',
+ 'html/canvas/WebGLFramebuffer.idl',
+ 'html/canvas/WebGLLoseContext.idl',
+ 'html/canvas/WebGLProgram.idl',
+ 'html/canvas/WebGLRenderbuffer.idl',
+ 'html/canvas/WebGLRenderingContext.idl',
+ 'html/canvas/WebGLShader.idl',
+ 'html/canvas/WebGLShaderPrecisionFormat.idl',
+ 'html/canvas/WebGLTexture.idl',
+ 'html/canvas/WebGLUniformLocation.idl',
+ 'html/canvas/WebGLVertexArrayObjectOES.idl',
+ 'html/ime/InputMethodContext.idl',
+ 'html/shadow/PluginPlaceholderElement.idl',
+ 'html/track/AudioTrack.idl',
+ 'html/track/AudioTrackList.idl',
+ 'html/track/TextTrack.idl',
+ 'html/track/TextTrackCue.idl',
+ 'html/track/TextTrackCueList.idl',
+ 'html/track/TextTrackList.idl',
+ 'html/track/TrackEvent.idl',
+ 'html/track/VideoTrack.idl',
+ 'html/track/VideoTrackList.idl',
+ 'html/track/vtt/VTTCue.idl',
+ 'html/track/vtt/VTTRegion.idl',
+ 'html/track/vtt/VTTRegionList.idl',
+ 'inspector/InjectedScriptHost.idl',
+ 'inspector/InspectorFrontendHost.idl',
+ 'inspector/InspectorOverlayHost.idl',
+ 'inspector/JavaScriptCallFrame.idl',
+ 'loader/appcache/ApplicationCache.idl',
+ 'page/EventSource.idl',
+ 'page/PagePopupController.idl',
+ 'plugins/MimeType.idl',
+ 'plugins/MimeTypeArray.idl',
+ 'plugins/Plugin.idl',
+ 'plugins/PluginArray.idl',
+ 'storage/Storage.idl',
+ 'storage/StorageEvent.idl',
+ 'streams/ReadableStream.idl',
+ 'streams/Stream.idl',
+ 'svg/SVGAElement.idl',
+ 'svg/SVGAltGlyphDefElement.idl',
+ 'svg/SVGAltGlyphElement.idl',
+ 'svg/SVGAltGlyphItemElement.idl',
+ 'svg/SVGAngle.idl',
+ 'svg/SVGAnimateElement.idl',
+ 'svg/SVGAnimateMotionElement.idl',
+ 'svg/SVGAnimateTransformElement.idl',
+ 'svg/SVGAnimatedAngle.idl',
+ 'svg/SVGAnimatedBoolean.idl',
+ 'svg/SVGAnimatedEnumeration.idl',
+ 'svg/SVGAnimatedInteger.idl',
+ 'svg/SVGAnimatedLength.idl',
+ 'svg/SVGAnimatedLengthList.idl',
+ 'svg/SVGAnimatedNumber.idl',
+ 'svg/SVGAnimatedNumberList.idl',
+ 'svg/SVGAnimatedPreserveAspectRatio.idl',
+ 'svg/SVGAnimatedRect.idl',
+ 'svg/SVGAnimatedString.idl',
+ 'svg/SVGAnimatedTransformList.idl',
+ 'svg/SVGAnimationElement.idl',
+ 'svg/SVGCircleElement.idl',
+ 'svg/SVGClipPathElement.idl',
+ 'svg/SVGComponentTransferFunctionElement.idl',
+ 'svg/SVGCursorElement.idl',
+ 'svg/SVGDefsElement.idl',
+ 'svg/SVGDescElement.idl',
+ 'svg/SVGDiscardElement.idl',
+ 'svg/SVGElement.idl',
+ 'svg/SVGEllipseElement.idl',
+ 'svg/SVGFEBlendElement.idl',
+ 'svg/SVGFEColorMatrixElement.idl',
+ 'svg/SVGFEComponentTransferElement.idl',
+ 'svg/SVGFECompositeElement.idl',
+ 'svg/SVGFEConvolveMatrixElement.idl',
+ 'svg/SVGFEDiffuseLightingElement.idl',
+ 'svg/SVGFEDisplacementMapElement.idl',
+ 'svg/SVGFEDistantLightElement.idl',
+ 'svg/SVGFEDropShadowElement.idl',
+ 'svg/SVGFEFloodElement.idl',
+ 'svg/SVGFEFuncAElement.idl',
+ 'svg/SVGFEFuncBElement.idl',
+ 'svg/SVGFEFuncGElement.idl',
+ 'svg/SVGFEFuncRElement.idl',
+ 'svg/SVGFEGaussianBlurElement.idl',
+ 'svg/SVGFEImageElement.idl',
+ 'svg/SVGFEMergeElement.idl',
+ 'svg/SVGFEMergeNodeElement.idl',
+ 'svg/SVGFEMorphologyElement.idl',
+ 'svg/SVGFEOffsetElement.idl',
+ 'svg/SVGFEPointLightElement.idl',
+ 'svg/SVGFESpecularLightingElement.idl',
+ 'svg/SVGFESpotLightElement.idl',
+ 'svg/SVGFETileElement.idl',
+ 'svg/SVGFETurbulenceElement.idl',
+ 'svg/SVGFilterElement.idl',
+ 'svg/SVGFontElement.idl',
+ 'svg/SVGFontFaceElement.idl',
+ 'svg/SVGFontFaceFormatElement.idl',
+ 'svg/SVGFontFaceNameElement.idl',
+ 'svg/SVGFontFaceSrcElement.idl',
+ 'svg/SVGFontFaceUriElement.idl',
+ 'svg/SVGForeignObjectElement.idl',
+ 'svg/SVGGElement.idl',
+ 'svg/SVGGeometryElement.idl',
+ 'svg/SVGGlyphElement.idl',
+ 'svg/SVGGlyphRefElement.idl',
+ 'svg/SVGGradientElement.idl',
+ 'svg/SVGGraphicsElement.idl',
+ 'svg/SVGHKernElement.idl',
+ 'svg/SVGImageElement.idl',
+ 'svg/SVGLength.idl',
+ 'svg/SVGLengthList.idl',
+ 'svg/SVGLineElement.idl',
+ 'svg/SVGLinearGradientElement.idl',
+ 'svg/SVGMPathElement.idl',
+ 'svg/SVGMarkerElement.idl',
+ 'svg/SVGMaskElement.idl',
+ 'svg/SVGMatrix.idl',
+ 'svg/SVGMetadataElement.idl',
+ 'svg/SVGMissingGlyphElement.idl',
+ 'svg/SVGNumber.idl',
+ 'svg/SVGNumberList.idl',
+ 'svg/SVGPathElement.idl',
+ 'svg/SVGPathSeg.idl',
+ 'svg/SVGPathSegArcAbs.idl',
+ 'svg/SVGPathSegArcRel.idl',
+ 'svg/SVGPathSegClosePath.idl',
+ 'svg/SVGPathSegCurvetoCubicAbs.idl',
+ 'svg/SVGPathSegCurvetoCubicRel.idl',
+ 'svg/SVGPathSegCurvetoCubicSmoothAbs.idl',
+ 'svg/SVGPathSegCurvetoCubicSmoothRel.idl',
+ 'svg/SVGPathSegCurvetoQuadraticAbs.idl',
+ 'svg/SVGPathSegCurvetoQuadraticRel.idl',
+ 'svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl',
+ 'svg/SVGPathSegCurvetoQuadraticSmoothRel.idl',
+ 'svg/SVGPathSegLinetoAbs.idl',
+ 'svg/SVGPathSegLinetoHorizontalAbs.idl',
+ 'svg/SVGPathSegLinetoHorizontalRel.idl',
+ 'svg/SVGPathSegLinetoRel.idl',
+ 'svg/SVGPathSegLinetoVerticalAbs.idl',
+ 'svg/SVGPathSegLinetoVerticalRel.idl',
+ 'svg/SVGPathSegList.idl',
+ 'svg/SVGPathSegMovetoAbs.idl',
+ 'svg/SVGPathSegMovetoRel.idl',
+ 'svg/SVGPatternElement.idl',
+ 'svg/SVGPoint.idl',
+ 'svg/SVGPointList.idl',
+ 'svg/SVGPolygonElement.idl',
+ 'svg/SVGPolylineElement.idl',
+ 'svg/SVGPreserveAspectRatio.idl',
+ 'svg/SVGRadialGradientElement.idl',
+ 'svg/SVGRect.idl',
+ 'svg/SVGRectElement.idl',
+ 'svg/SVGRenderingIntent.idl',
+ 'svg/SVGSVGElement.idl',
+ 'svg/SVGScriptElement.idl',
+ 'svg/SVGSetElement.idl',
+ 'svg/SVGStopElement.idl',
+ 'svg/SVGStringList.idl',
+ 'svg/SVGStyleElement.idl',
+ 'svg/SVGSwitchElement.idl',
+ 'svg/SVGSymbolElement.idl',
+ 'svg/SVGTSpanElement.idl',
+ 'svg/SVGTextContentElement.idl',
+ 'svg/SVGTextElement.idl',
+ 'svg/SVGTextPathElement.idl',
+ 'svg/SVGTextPositioningElement.idl',
+ 'svg/SVGTitleElement.idl',
+ 'svg/SVGTransform.idl',
+ 'svg/SVGTransformList.idl',
+ 'svg/SVGUnitTypes.idl',
+ 'svg/SVGUseElement.idl',
+ 'svg/SVGVKernElement.idl',
+ 'svg/SVGViewElement.idl',
+ 'svg/SVGViewSpec.idl',
+ 'svg/SVGZoomEvent.idl',
+ 'timing/MemoryInfo.idl',
+ 'timing/Performance.idl',
+ 'timing/PerformanceEntry.idl',
+ 'timing/PerformanceMark.idl',
+ 'timing/PerformanceMeasure.idl',
+ 'timing/PerformanceNavigation.idl',
+ 'timing/PerformanceResourceTiming.idl',
+ 'timing/PerformanceTiming.idl',
+ 'workers/DedicatedWorkerGlobalScope.idl',
+ 'workers/SharedWorker.idl',
+ 'workers/SharedWorkerGlobalScope.idl',
+ 'workers/Worker.idl',
+ 'workers/WorkerConsole.idl',
+ 'workers/WorkerGlobalScope.idl',
+ 'workers/WorkerLocation.idl',
+ 'workers/WorkerNavigator.idl',
+ 'xml/DOMParser.idl',
+ 'xml/XMLHttpRequest.idl',
+ 'xml/XMLHttpRequestEventTarget.idl',
+ 'xml/XMLHttpRequestProgressEvent.idl',
+ 'xml/XMLHttpRequestUpload.idl',
+ 'xml/XMLSerializer.idl',
+ 'xml/XPathEvaluator.idl',
+ 'xml/XPathExpression.idl',
+ 'xml/XPathNSResolver.idl',
+ 'xml/XPathResult.idl',
+ 'xml/XSLTProcessor.idl',
]
@@ -469,35 +480,40 @@
# This list is copied from Source/core/core.gypi 'core_dependency_idl_files'
# 'partial interface' or target (right side of) 'implements'
core_dependency_idl_files = [
- 'animation/DocumentAnimation.idl',
- 'animation/ElementAnimation.idl',
- 'css/DocumentFontFaceSet.idl',
- 'dom/ChildNode.idl',
- 'dom/DocumentFullscreen.idl',
- 'dom/GlobalEventHandlers.idl',
- 'dom/ParentNode.idl',
- 'dom/URLUtils.idl',
- 'dom/URLUtilsReadOnly.idl',
- 'events/EventListener.idl',
- 'events/NavigatorEvents.idl',
- 'frame/NavigatorCPU.idl',
- 'frame/NavigatorID.idl',
- 'frame/NavigatorLanguage.idl',
- 'frame/NavigatorOnLine.idl',
- 'frame/WindowBase64.idl',
- 'frame/WindowEventHandlers.idl',
- 'frame/WindowTimers.idl',
- 'html/canvas/CanvasPathMethods.idl',
- 'html/canvas/WebGLRenderingContextBase.idl',
- 'page/WindowPagePopup.idl',
- 'svg/SVGDocument.idl',
- 'svg/SVGFilterPrimitiveStandardAttributes.idl',
- 'svg/SVGFitToViewBox.idl',
- 'svg/SVGTests.idl',
- 'svg/SVGURIReference.idl',
- 'svg/SVGZoomAndPan.idl',
- 'workers/AbstractWorker.idl',
- 'xml/DocumentXPathEvaluator.idl',
+ 'animation/DocumentAnimation.idl',
+ 'animation/ElementAnimation.idl',
+ 'css/DocumentFontFaceSet.idl',
+ 'dom/ChildNode.idl',
+ 'dom/DocumentFullscreen.idl',
+ 'dom/ElementFullscreen.idl',
+ 'dom/GlobalEventHandlers.idl',
+ 'dom/ParentNode.idl',
+ 'dom/URLUtils.idl',
+ 'dom/URLUtilsReadOnly.idl',
+ 'events/EventListener.idl',
+ 'events/NavigatorEvents.idl',
+ 'frame/NavigatorCPU.idl',
+ 'frame/NavigatorID.idl',
+ 'frame/NavigatorLanguage.idl',
+ 'frame/NavigatorOnLine.idl',
+ 'frame/WindowBase64.idl',
+ 'frame/WindowEventHandlers.idl',
+ 'frame/WindowTimers.idl',
+ 'html/canvas/CanvasPathMethods.idl',
+ 'html/canvas/MouseEventHitRegion.idl',
+ 'html/canvas/WebGLRenderingContextBase.idl',
+ 'imagebitmap/ImageBitmapFactories.idl',
+ 'imagebitmap/WindowImageBitmapFactories.idl',
+ 'page/WindowPagePopup.idl',
+ 'svg/SVGDocument.idl',
+ 'svg/SVGFilterPrimitiveStandardAttributes.idl',
+ 'svg/SVGFitToViewBox.idl',
+ 'svg/SVGTests.idl',
+ 'svg/SVGURIReference.idl',
+ 'svg/SVGZoomAndPan.idl',
+ 'workers/AbstractWorker.idl',
+ 'xml/DocumentXMLTreeViewer.idl',
+ 'xml/DocumentXPathEvaluator.idl',
]
@@ -508,186 +524,193 @@
# This list is copied from Source/modules/modules.gypi 'modules_idl_files'
# Modules IDL files bindings (.dart, .cpp and .h files) will be generated
modules_idl_files = [
- 'battery/BatteryManager.idl',
- 'crypto/AesKeyAlgorithm.idl',
- 'crypto/Crypto.idl',
- 'crypto/HmacKeyAlgorithm.idl',
- 'crypto/Key.idl',
- 'crypto/KeyAlgorithm.idl',
- 'crypto/RsaHashedKeyAlgorithm.idl',
- 'crypto/RsaKeyAlgorithm.idl',
- 'crypto/SubtleCrypto.idl',
- 'device_light/DeviceLightEvent.idl',
- 'device_orientation/DeviceAcceleration.idl',
- 'device_orientation/DeviceMotionEvent.idl',
- 'device_orientation/DeviceOrientationEvent.idl',
- 'device_orientation/DeviceRotationRate.idl',
- 'encoding/TextDecoder.idl',
- 'encoding/TextEncoder.idl',
- 'encryptedmedia/MediaKeyMessageEvent.idl',
- 'encryptedmedia/MediaKeyNeededEvent.idl',
- 'encryptedmedia/MediaKeySession.idl',
- 'encryptedmedia/MediaKeys.idl',
- 'filesystem/DOMFileSystem.idl',
- 'filesystem/DOMFileSystemSync.idl',
- 'filesystem/DirectoryEntry.idl',
- 'filesystem/DirectoryEntrySync.idl',
- 'filesystem/DirectoryReader.idl',
- 'filesystem/DirectoryReaderSync.idl',
- 'filesystem/EntriesCallback.idl',
- 'filesystem/Entry.idl',
- 'filesystem/EntryCallback.idl',
- 'filesystem/EntrySync.idl',
- 'filesystem/ErrorCallback.idl',
- 'filesystem/FileCallback.idl',
- 'filesystem/FileEntry.idl',
- 'filesystem/FileEntrySync.idl',
- 'filesystem/FileSystemCallback.idl',
- 'filesystem/FileWriter.idl',
- 'filesystem/FileWriterCallback.idl',
- 'filesystem/FileWriterSync.idl',
- 'filesystem/Metadata.idl',
- 'filesystem/MetadataCallback.idl',
- 'gamepad/Gamepad.idl',
- 'gamepad/GamepadButton.idl',
- 'gamepad/GamepadEvent.idl',
- 'gamepad/GamepadList.idl',
- 'gamepad/WebKitGamepad.idl',
- 'gamepad/WebKitGamepadList.idl',
- 'geolocation/Coordinates.idl',
- 'geolocation/Geolocation.idl',
- 'geolocation/Geoposition.idl',
- 'geolocation/PositionCallback.idl',
- 'geolocation/PositionError.idl',
- 'geolocation/PositionErrorCallback.idl',
- 'indexeddb/IDBCursor.idl',
- 'indexeddb/IDBCursorWithValue.idl',
- 'indexeddb/IDBDatabase.idl',
- 'indexeddb/IDBFactory.idl',
- 'indexeddb/IDBIndex.idl',
- 'indexeddb/IDBKeyRange.idl',
- 'indexeddb/IDBObjectStore.idl',
- 'indexeddb/IDBOpenDBRequest.idl',
- 'indexeddb/IDBRequest.idl',
- 'indexeddb/IDBTransaction.idl',
- 'indexeddb/IDBVersionChangeEvent.idl',
- 'mediasource/MediaSource.idl',
- 'mediasource/SourceBuffer.idl',
- 'mediasource/SourceBufferList.idl',
- 'mediasource/VideoPlaybackQuality.idl',
- 'mediastream/MediaDeviceInfo.idl',
- 'mediastream/MediaDeviceInfoCallback.idl',
- 'mediastream/MediaStream.idl',
- 'mediastream/MediaStreamEvent.idl',
- 'mediastream/MediaStreamTrack.idl',
- 'mediastream/MediaStreamTrackEvent.idl',
- 'mediastream/MediaStreamTrackSourcesCallback.idl',
- 'mediastream/NavigatorUserMediaError.idl',
- 'mediastream/NavigatorUserMediaErrorCallback.idl',
- 'mediastream/NavigatorUserMediaSuccessCallback.idl',
- 'mediastream/RTCDTMFSender.idl',
- 'mediastream/RTCDTMFToneChangeEvent.idl',
- 'mediastream/RTCDataChannel.idl',
- 'mediastream/RTCDataChannelEvent.idl',
- 'mediastream/RTCErrorCallback.idl',
- 'mediastream/RTCIceCandidate.idl',
- 'mediastream/RTCIceCandidateEvent.idl',
- 'mediastream/RTCPeerConnection.idl',
- 'mediastream/RTCSessionDescription.idl',
- 'mediastream/RTCSessionDescriptionCallback.idl',
- 'mediastream/RTCStatsCallback.idl',
- 'mediastream/RTCStatsReport.idl',
- 'mediastream/RTCStatsResponse.idl',
- 'mediastream/SourceInfo.idl',
- 'netinfo/NetworkInformation.idl',
- 'notifications/Notification.idl',
- 'notifications/NotificationPermissionCallback.idl',
- 'performance/WorkerPerformance.idl',
- 'push_messaging/PushEvent.idl',
- 'push_messaging/PushManager.idl',
- 'push_messaging/PushRegistration.idl',
- 'quota/DeprecatedStorageInfo.idl',
- 'quota/DeprecatedStorageQuota.idl',
- 'quota/StorageErrorCallback.idl',
- 'quota/StorageInfo.idl',
- 'quota/StorageQuota.idl',
- 'quota/StorageQuotaCallback.idl',
- 'quota/StorageUsageCallback.idl',
- 'serviceworkers/Client.idl',
- 'serviceworkers/FetchEvent.idl',
- 'serviceworkers/HeaderMap.idl',
- 'serviceworkers/HeaderMapForEachCallback.idl',
- 'serviceworkers/InstallEvent.idl',
- 'serviceworkers/InstallPhaseEvent.idl',
- 'serviceworkers/Request.idl',
- 'serviceworkers/Response.idl',
- 'serviceworkers/ServiceWorker.idl',
- 'serviceworkers/ServiceWorkerClients.idl',
- 'serviceworkers/ServiceWorkerContainer.idl',
- 'serviceworkers/ServiceWorkerGlobalScope.idl',
- 'speech/SpeechGrammar.idl',
- 'speech/SpeechGrammarList.idl',
- 'speech/SpeechRecognition.idl',
- 'speech/SpeechRecognitionAlternative.idl',
- 'speech/SpeechRecognitionError.idl',
- 'speech/SpeechRecognitionEvent.idl',
- 'speech/SpeechRecognitionResult.idl',
- 'speech/SpeechRecognitionResultList.idl',
- 'speech/SpeechSynthesis.idl',
- 'speech/SpeechSynthesisEvent.idl',
- 'speech/SpeechSynthesisUtterance.idl',
- 'speech/SpeechSynthesisVoice.idl',
- 'webaudio/AnalyserNode.idl',
- 'webaudio/AudioBuffer.idl',
- 'webaudio/AudioBufferCallback.idl',
- 'webaudio/AudioBufferSourceNode.idl',
- 'webaudio/AudioContext.idl',
- 'webaudio/AudioDestinationNode.idl',
- 'webaudio/AudioListener.idl',
- 'webaudio/AudioNode.idl',
- 'webaudio/AudioParam.idl',
- 'webaudio/AudioProcessingEvent.idl',
- 'webaudio/AudioSourceNode.idl',
- 'webaudio/BiquadFilterNode.idl',
- 'webaudio/ChannelMergerNode.idl',
- 'webaudio/ChannelSplitterNode.idl',
- 'webaudio/ConvolverNode.idl',
- 'webaudio/DelayNode.idl',
- 'webaudio/DynamicsCompressorNode.idl',
- 'webaudio/GainNode.idl',
- 'webaudio/MediaElementAudioSourceNode.idl',
- 'webaudio/MediaStreamAudioDestinationNode.idl',
- 'webaudio/MediaStreamAudioSourceNode.idl',
- 'webaudio/OfflineAudioCompletionEvent.idl',
- 'webaudio/OfflineAudioContext.idl',
- 'webaudio/OscillatorNode.idl',
- 'webaudio/PannerNode.idl',
- 'webaudio/PeriodicWave.idl',
- 'webaudio/ScriptProcessorNode.idl',
- 'webaudio/WaveShaperNode.idl',
- 'webdatabase/Database.idl',
- 'webdatabase/DatabaseCallback.idl',
- 'webdatabase/DatabaseSync.idl',
- 'webdatabase/SQLError.idl',
- 'webdatabase/SQLResultSet.idl',
- 'webdatabase/SQLResultSetRowList.idl',
- 'webdatabase/SQLStatementCallback.idl',
- 'webdatabase/SQLStatementErrorCallback.idl',
- 'webdatabase/SQLTransaction.idl',
- 'webdatabase/SQLTransactionCallback.idl',
- 'webdatabase/SQLTransactionErrorCallback.idl',
- 'webdatabase/SQLTransactionSync.idl',
- 'webdatabase/SQLTransactionSyncCallback.idl',
- 'webmidi/MIDIAccess.idl',
- 'webmidi/MIDIConnectionEvent.idl',
- 'webmidi/MIDIErrorCallback.idl',
- 'webmidi/MIDIInput.idl',
- 'webmidi/MIDIMessageEvent.idl',
- 'webmidi/MIDIOutput.idl',
- 'webmidi/MIDIPort.idl',
- 'webmidi/MIDISuccessCallback.idl',
- 'websockets/CloseEvent.idl',
- 'websockets/WebSocket.idl',
+ 'battery/BatteryManager.idl',
+ 'credentialmanager/Credential.idl',
+ 'credentialmanager/CredentialsContainer.idl',
+ 'credentialmanager/FederatedCredential.idl',
+ 'credentialmanager/LocalCredential.idl',
+ 'crypto/Crypto.idl',
+ 'crypto/CryptoKey.idl',
+ 'crypto/SubtleCrypto.idl',
+ 'device_light/DeviceLightEvent.idl',
+ 'device_orientation/DeviceAcceleration.idl',
+ 'device_orientation/DeviceMotionEvent.idl',
+ 'device_orientation/DeviceOrientationEvent.idl',
+ 'device_orientation/DeviceRotationRate.idl',
+ 'encoding/TextDecoder.idl',
+ 'encoding/TextEncoder.idl',
+ 'encryptedmedia/MediaKeyMessageEvent.idl',
+ 'encryptedmedia/MediaKeyNeededEvent.idl',
+ 'encryptedmedia/MediaKeySession.idl',
+ 'encryptedmedia/MediaKeys.idl',
+ 'filesystem/DOMFileSystem.idl',
+ 'filesystem/DOMFileSystemSync.idl',
+ 'filesystem/DirectoryEntry.idl',
+ 'filesystem/DirectoryEntrySync.idl',
+ 'filesystem/DirectoryReader.idl',
+ 'filesystem/DirectoryReaderSync.idl',
+ 'filesystem/EntriesCallback.idl',
+ 'filesystem/Entry.idl',
+ 'filesystem/EntryCallback.idl',
+ 'filesystem/EntrySync.idl',
+ 'filesystem/ErrorCallback.idl',
+ 'filesystem/FileCallback.idl',
+ 'filesystem/FileEntry.idl',
+ 'filesystem/FileEntrySync.idl',
+ 'filesystem/FileSystemCallback.idl',
+ 'filesystem/FileWriter.idl',
+ 'filesystem/FileWriterCallback.idl',
+ 'filesystem/FileWriterSync.idl',
+ 'filesystem/Metadata.idl',
+ 'filesystem/MetadataCallback.idl',
+ 'gamepad/Gamepad.idl',
+ 'gamepad/GamepadButton.idl',
+ 'gamepad/GamepadEvent.idl',
+ 'gamepad/GamepadList.idl',
+ 'gamepad/WebKitGamepad.idl',
+ 'gamepad/WebKitGamepadList.idl',
+ 'geofencing/CircularGeofencingRegion.idl',
+ 'geofencing/Geofencing.idl',
+ 'geofencing/GeofencingRegion.idl',
+ 'geolocation/Coordinates.idl',
+ 'geolocation/Geolocation.idl',
+ 'geolocation/Geoposition.idl',
+ 'geolocation/PositionCallback.idl',
+ 'geolocation/PositionError.idl',
+ 'geolocation/PositionErrorCallback.idl',
+ 'indexeddb/IDBCursor.idl',
+ 'indexeddb/IDBCursorWithValue.idl',
+ 'indexeddb/IDBDatabase.idl',
+ 'indexeddb/IDBFactory.idl',
+ 'indexeddb/IDBIndex.idl',
+ 'indexeddb/IDBKeyRange.idl',
+ 'indexeddb/IDBObjectStore.idl',
+ 'indexeddb/IDBOpenDBRequest.idl',
+ 'indexeddb/IDBRequest.idl',
+ 'indexeddb/IDBTransaction.idl',
+ 'indexeddb/IDBVersionChangeEvent.idl',
+ 'mediasource/MediaSource.idl',
+ 'mediasource/SourceBuffer.idl',
+ 'mediasource/SourceBufferList.idl',
+ 'mediasource/VideoPlaybackQuality.idl',
+ 'mediastream/MediaDeviceInfo.idl',
+ 'mediastream/MediaDeviceInfoCallback.idl',
+ 'mediastream/MediaStream.idl',
+ 'mediastream/MediaStreamEvent.idl',
+ 'mediastream/MediaStreamTrack.idl',
+ 'mediastream/MediaStreamTrackEvent.idl',
+ 'mediastream/MediaStreamTrackSourcesCallback.idl',
+ 'mediastream/NavigatorUserMediaError.idl',
+ 'mediastream/NavigatorUserMediaErrorCallback.idl',
+ 'mediastream/NavigatorUserMediaSuccessCallback.idl',
+ 'mediastream/RTCDTMFSender.idl',
+ 'mediastream/RTCDTMFToneChangeEvent.idl',
+ 'mediastream/RTCDataChannel.idl',
+ 'mediastream/RTCDataChannelEvent.idl',
+ 'mediastream/RTCErrorCallback.idl',
+ 'mediastream/RTCIceCandidate.idl',
+ 'mediastream/RTCIceCandidateEvent.idl',
+ 'mediastream/RTCPeerConnection.idl',
+ 'mediastream/RTCSessionDescription.idl',
+ 'mediastream/RTCSessionDescriptionCallback.idl',
+ 'mediastream/RTCStatsCallback.idl',
+ 'mediastream/RTCStatsReport.idl',
+ 'mediastream/RTCStatsResponse.idl',
+ 'mediastream/SourceInfo.idl',
+ 'netinfo/NetworkInformation.idl',
+ 'notifications/Notification.idl',
+ 'notifications/NotificationPermissionCallback.idl',
+ 'performance/WorkerPerformance.idl',
+ 'presentation/Presentation.idl',
+ 'push_messaging/PushEvent.idl',
+ 'push_messaging/PushManager.idl',
+ 'push_messaging/PushRegistration.idl',
+ 'quota/DeprecatedStorageInfo.idl',
+ 'quota/DeprecatedStorageQuota.idl',
+ 'quota/StorageErrorCallback.idl',
+ 'quota/StorageInfo.idl',
+ 'quota/StorageQuota.idl',
+ 'quota/StorageQuotaCallback.idl',
+ 'quota/StorageUsageCallback.idl',
+ 'screen_orientation/ScreenOrientation.idl',
+ 'serviceworkers/Body.idl',
+ 'serviceworkers/Cache.idl',
+ 'serviceworkers/CacheStorage.idl',
+ 'serviceworkers/ExtendableEvent.idl',
+ 'serviceworkers/FetchEvent.idl',
+ 'serviceworkers/Headers.idl',
+ 'serviceworkers/HeadersForEachCallback.idl',
+ 'serviceworkers/InstallEvent.idl',
+ 'serviceworkers/Request.idl',
+ 'serviceworkers/Response.idl',
+ 'serviceworkers/ServiceWorker.idl',
+ 'serviceworkers/ServiceWorkerClient.idl',
+ 'serviceworkers/ServiceWorkerClients.idl',
+ 'serviceworkers/ServiceWorkerContainer.idl',
+ 'serviceworkers/ServiceWorkerGlobalScope.idl',
+ 'serviceworkers/ServiceWorkerRegistration.idl',
+ 'speech/SpeechGrammar.idl',
+ 'speech/SpeechGrammarList.idl',
+ 'speech/SpeechRecognition.idl',
+ 'speech/SpeechRecognitionAlternative.idl',
+ 'speech/SpeechRecognitionError.idl',
+ 'speech/SpeechRecognitionEvent.idl',
+ 'speech/SpeechRecognitionResult.idl',
+ 'speech/SpeechRecognitionResultList.idl',
+ 'speech/SpeechSynthesis.idl',
+ 'speech/SpeechSynthesisEvent.idl',
+ 'speech/SpeechSynthesisUtterance.idl',
+ 'speech/SpeechSynthesisVoice.idl',
+ 'webaudio/AnalyserNode.idl',
+ 'webaudio/AudioBuffer.idl',
+ 'webaudio/AudioBufferCallback.idl',
+ 'webaudio/AudioBufferSourceNode.idl',
+ 'webaudio/AudioContext.idl',
+ 'webaudio/AudioDestinationNode.idl',
+ 'webaudio/AudioListener.idl',
+ 'webaudio/AudioNode.idl',
+ 'webaudio/AudioParam.idl',
+ 'webaudio/AudioProcessingEvent.idl',
+ 'webaudio/AudioSourceNode.idl',
+ 'webaudio/BiquadFilterNode.idl',
+ 'webaudio/ChannelMergerNode.idl',
+ 'webaudio/ChannelSplitterNode.idl',
+ 'webaudio/ConvolverNode.idl',
+ 'webaudio/DelayNode.idl',
+ 'webaudio/DynamicsCompressorNode.idl',
+ 'webaudio/GainNode.idl',
+ 'webaudio/MediaElementAudioSourceNode.idl',
+ 'webaudio/MediaStreamAudioDestinationNode.idl',
+ 'webaudio/MediaStreamAudioSourceNode.idl',
+ 'webaudio/OfflineAudioCompletionEvent.idl',
+ 'webaudio/OfflineAudioContext.idl',
+ 'webaudio/OscillatorNode.idl',
+ 'webaudio/PannerNode.idl',
+ 'webaudio/PeriodicWave.idl',
+ 'webaudio/ScriptProcessorNode.idl',
+ 'webaudio/WaveShaperNode.idl',
+ 'webdatabase/Database.idl',
+ 'webdatabase/DatabaseCallback.idl',
+ 'webdatabase/SQLError.idl',
+ 'webdatabase/SQLResultSet.idl',
+ 'webdatabase/SQLResultSetRowList.idl',
+ 'webdatabase/SQLStatementCallback.idl',
+ 'webdatabase/SQLStatementErrorCallback.idl',
+ 'webdatabase/SQLTransaction.idl',
+ 'webdatabase/SQLTransactionCallback.idl',
+ 'webdatabase/SQLTransactionErrorCallback.idl',
+ 'webmidi/MIDIAccess.idl',
+ 'webmidi/MIDIConnectionEvent.idl',
+ 'webmidi/MIDIErrorCallback.idl',
+ 'webmidi/MIDIInput.idl',
+ 'webmidi/MIDIInputMap.idl',
+ 'webmidi/MIDIMessageEvent.idl',
+ 'webmidi/MIDIOutput.idl',
+ 'webmidi/MIDIOutputMap.idl',
+ 'webmidi/MIDIPort.idl',
+ 'webmidi/MIDISuccessCallback.idl',
+ 'websockets/CloseEvent.idl',
+ 'websockets/WebSocket.idl',
]
@@ -699,52 +722,79 @@
# 'modules_dependency_idl_files'.
# 'partial interface' or target (right side of) 'implements'
modules_dependency_idl_files = [
- 'battery/NavigatorBattery.idl',
- 'beacon/NavigatorBeacon.idl',
- 'crypto/WindowCrypto.idl',
- 'crypto/WorkerGlobalScopeCrypto.idl',
- 'device_light/WindowDeviceLight.idl',
- 'device_orientation/WindowDeviceMotion.idl',
- 'device_orientation/WindowDeviceOrientation.idl',
- 'donottrack/NavigatorDoNotTrack.idl',
- 'encryptedmedia/HTMLMediaElementEncryptedMedia.idl',
- 'filesystem/DataTransferItemFileSystem.idl',
- 'filesystem/HTMLInputElementFileSystem.idl',
- 'filesystem/InspectorFrontendHostFileSystem.idl',
- 'filesystem/WindowFileSystem.idl',
- 'filesystem/WorkerGlobalScopeFileSystem.idl',
- 'gamepad/NavigatorGamepad.idl',
- 'geolocation/NavigatorGeolocation.idl',
- 'imagebitmap/ImageBitmapFactories.idl',
- 'imagebitmap/WindowImageBitmapFactories.idl',
- 'indexeddb/WindowIndexedDatabase.idl',
- 'indexeddb/WorkerGlobalScopeIndexedDatabase.idl',
- 'mediasource/HTMLVideoElementMediaSource.idl',
- 'mediasource/URLMediaSource.idl',
- 'mediastream/NavigatorMediaStream.idl',
- 'mediastream/URLMediaStream.idl',
- 'mediastream/WindowMediaStream.idl',
- 'navigatorcontentutils/NavigatorContentUtils.idl',
- 'netinfo/NavigatorNetworkInformation.idl',
- 'netinfo/WorkerNavigatorNetworkInformation.idl',
- 'performance/SharedWorkerPerformance.idl',
- 'performance/WorkerGlobalScopePerformance.idl',
- 'push_messaging/NavigatorPushManager.idl',
- 'push_messaging/ServiceWorkerGlobalScopePush.idl',
- 'quota/NavigatorStorageQuota.idl',
- 'quota/WindowQuota.idl',
- 'quota/WorkerNavigatorStorageQuota.idl',
- 'screen_orientation/ScreenOrientation.idl',
- 'serviceworkers/NavigatorServiceWorker.idl',
- 'speech/WindowSpeech.idl',
- 'speech/WindowSpeechSynthesis.idl',
- 'vibration/NavigatorVibration.idl',
- 'webaudio/WindowWebAudio.idl',
- 'webdatabase/WindowWebDatabase.idl',
- 'webdatabase/WorkerGlobalScopeWebDatabase.idl',
- 'webmidi/NavigatorWebMIDI.idl',
+ 'battery/NavigatorBattery.idl',
+ 'beacon/NavigatorBeacon.idl',
+ 'credentialmanager/NavigatorCredentials.idl',
+ 'crypto/WindowCrypto.idl',
+ 'crypto/WorkerGlobalScopeCrypto.idl',
+ 'device_light/WindowDeviceLight.idl',
+ 'device_orientation/WindowDeviceMotion.idl',
+ 'device_orientation/WindowDeviceOrientation.idl',
+ 'donottrack/NavigatorDoNotTrack.idl',
+ 'encryptedmedia/HTMLMediaElementEncryptedMedia.idl',
+ 'filesystem/DataTransferItemFileSystem.idl',
+ 'filesystem/HTMLInputElementFileSystem.idl',
+ 'filesystem/InspectorFrontendHostFileSystem.idl',
+ 'filesystem/WindowFileSystem.idl',
+ 'filesystem/WorkerGlobalScopeFileSystem.idl',
+ 'gamepad/NavigatorGamepad.idl',
+ 'geofencing/NavigatorGeofencing.idl',
+ 'geofencing/WorkerNavigatorGeofencing.idl',
+ 'geolocation/NavigatorGeolocation.idl',
+ 'indexeddb/WindowIndexedDatabase.idl',
+ 'indexeddb/WorkerGlobalScopeIndexedDatabase.idl',
+ 'mediasource/HTMLVideoElementMediaSource.idl',
+ 'mediasource/URLMediaSource.idl',
+ 'mediastream/NavigatorMediaStream.idl',
+ 'mediastream/URLMediaStream.idl',
+ 'mediastream/WindowMediaStream.idl',
+ 'navigatorcontentutils/NavigatorContentUtils.idl',
+ 'netinfo/NavigatorNetworkInformation.idl',
+ 'netinfo/WorkerNavigatorNetworkInformation.idl',
+ 'performance/SharedWorkerPerformance.idl',
+ 'performance/WorkerGlobalScopePerformance.idl',
+ 'presentation/NavigatorPresentation.idl',
+ 'push_messaging/NavigatorPushManager.idl',
+ 'push_messaging/ServiceWorkerGlobalScopePush.idl',
+ 'quota/NavigatorStorageQuota.idl',
+ 'quota/WindowQuota.idl',
+ 'quota/WorkerNavigatorStorageQuota.idl',
+ 'screen_orientation/ScreenScreenOrientation.idl',
+ 'serviceworkers/NavigatorServiceWorker.idl',
+ 'speech/WindowSpeech.idl',
+ 'speech/WindowSpeechSynthesis.idl',
+ 'vibration/NavigatorVibration.idl',
+ 'webaudio/WindowWebAudio.idl',
+ 'webdatabase/WindowWebDatabase.idl',
+ 'webmidi/NavigatorWebMIDI.idl',
]
-
def full_path_modules_dependency_idl_files():
return full_path(['Source', 'modules'], modules_dependency_idl_files)
+
+
+core_dictionary_idl_files = [
+ 'css/FontFaceDescriptors.idl',
+ 'dom/DOMPointInit.idl',
+ 'dom/MutationObserverInit.idl',
+ 'frame/ScrollOptions.idl',
+ 'html/canvas/HitRegionOptions.idl',
+ 'page/EventSourceInit.idl',
+]
+def full_path_core_dictionary_idl_files():
+ return full_path(['Source', 'core'], core_dictionary_idl_files)
+
+
+modules_dictionary_idl_files = [
+ 'encoding/TextDecodeOptions.idl',
+ 'encoding/TextDecoderOptions.idl',
+ 'indexeddb/IDBIndexParameters.idl',
+ 'notifications/NotificationOptions.idl',
+ 'serviceworkers/QueryParams.idl',
+ 'serviceworkers/RegistrationOptionList.idl',
+ 'serviceworkers/ServiceWorkerClientQueryParams.idl',
+ 'webmidi/MIDIOptions.idl',
+]
+
+def full_path_modules_dictionary_idl_files():
+ return full_path(['Source', 'modules'], modules_dictionary_idl_files)
diff --git a/bindings/dart/scripts/test/main.py b/bindings/dart/scripts/test/main.py
index db3c00a..659fd86 100755
--- a/bindings/dart/scripts/test/main.py
+++ b/bindings/dart/scripts/test/main.py
@@ -39,7 +39,12 @@
from compiler import IdlCompilerDart
# TODO(terry): Temporary solution list of IDLs to parse and IDL as dependencies.
-from idl_files import full_path_core_idl_files, full_path_core_dependency_idl_files, full_path_modules_idl_files, full_path_modules_dependency_idl_files
+from idl_files import full_path_core_idl_files,\
+ full_path_core_dependency_idl_files,\
+ full_path_modules_idl_files,\
+ full_path_modules_dependency_idl_files,\
+ full_path_core_dictionary_idl_files,\
+ full_path_modules_dictionary_idl_files
#from dart_tests import run_dart_tests
@@ -191,14 +196,17 @@
core_dependency_idls = full_path_core_dependency_idl_files()
modules_idls = full_path_modules_idl_files()
modules_dependency_idls = full_path_modules_dependency_idl_files()
+ core_dictionary_idls = full_path_core_dictionary_idl_files()
+ modules_dictionary_idls = full_path_modules_dictionary_idl_files()
all_interfaces = core_idls + modules_idls
all_dependencies = core_dependency_idls + modules_dependency_idls
- all_files = all_interfaces + all_dependencies
+ all_dictionaries = core_dictionary_idls + modules_dictionary_idls
+ all_files = all_interfaces + all_dependencies + all_dictionaries
# 2-stage computation: individual, then overall
for idl_filename in all_files:
- compute_info_individual(idl_filename, 'dart')
+ compute_info_individual(idl_filename)
info_individuals = [info_individual()]
compute_interfaces_info_overall(info_individuals)
@@ -214,7 +222,7 @@
print 'Output directory %s created' % build.output_directory
# Compile IDLs
- for filename in all_interfaces:
+ for filename in (all_dictionaries + all_interfaces):
if not filename.endswith('.idl'):
continue
if build.generate_from_idl(filename):
diff --git a/bindings/scripts/aggregate_generated_bindings.py b/bindings/scripts/aggregate_generated_bindings.py
index 98bbaa9..050c93a 100755
--- a/bindings/scripts/aggregate_generated_bindings.py
+++ b/bindings/scripts/aggregate_generated_bindings.py
@@ -51,16 +51,15 @@
import errno
import os
import re
-import subprocess
import sys
-from utilities import idl_filename_to_interface_name
+from utilities import idl_filename_to_interface_name, read_idl_files_list_from_file
# A regexp for finding Conditional attributes in interface definitions.
CONDITIONAL_PATTERN = re.compile(
r'\['
r'[^\]]*'
- r'Conditional=([\_0-9a-zA-Z&|]*)'
+ r'Conditional=([\_0-9a-zA-Z]*)'
r'[^\]]*'
r'\]\s*'
r'((callback|partial)\s+)?'
@@ -101,16 +100,6 @@
"""
-def format_conditional(conditional):
- """Wraps conditional with ENABLE() and replace '&','|' with '&&','||' if
- more than one conditional is specified."""
- def wrap_with_enable(s):
- if s in ['|', '&']:
- return s * 2
- return 'ENABLE(' + s + ')'
- return ' '.join(map(wrap_with_enable, conditional))
-
-
def extract_conditional(idl_file_path):
"""Find [Conditional] interface extended attribute."""
with open(idl_file_path) as idl_file:
@@ -119,8 +108,7 @@
match = CONDITIONAL_PATTERN.search(idl_contents)
if not match:
return None
- conditional = match.group(1)
- return re.split('([|,])', conditional)
+ return match.group(1)
def extract_meta_data(file_paths):
@@ -161,7 +149,7 @@
if prev_conditional:
output.append('#endif\n')
if conditional:
- output.append('\n#if %s\n' % format_conditional(conditional))
+ output.append('\n#if ENABLE(%s)\n' % conditional)
prev_conditional = conditional
output.append('#include "bindings/%s/%s/%s%s.cpp"\n' %
@@ -182,21 +170,6 @@
f.write(content)
-def resolve_cygpath(cygdrive_names):
- if not cygdrive_names:
- return []
- cmd = ['cygpath', '-f', '-', '-wa']
- process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- idl_file_names = []
- for file_name in cygdrive_names:
- process.stdin.write('%s\n' % file_name)
- process.stdin.flush()
- idl_file_names.append(process.stdout.readline().rstrip())
- process.stdin.close()
- process.wait()
- return idl_file_names
-
-
def main(args):
if len(args) <= 4:
raise Exception('Expected at least 5 arguments.')
@@ -211,15 +184,7 @@
in_out_break_index = args.index('--')
output_file_names = args[in_out_break_index + 1:]
- with open(input_file_name) as input_file:
- file_names = sorted([os.path.realpath(line.rstrip('\n'))
- for line in input_file])
- idl_file_names = [file_name for file_name in file_names
- if not file_name.startswith('/cygdrive')]
- cygdrive_names = [file_name for file_name in file_names
- if file_name.startswith('/cygdrive')]
- idl_file_names.extend(resolve_cygpath(cygdrive_names))
-
+ idl_file_names = read_idl_files_list_from_file(input_file_name)
files_meta_data = extract_meta_data(idl_file_names)
total_partitions = len(output_file_names)
for partition, file_name in enumerate(output_file_names):
diff --git a/bindings/scripts/blink_idl_parser.py b/bindings/scripts/blink_idl_parser.py
index 59218a8..592bf91 100644
--- a/bindings/scripts/blink_idl_parser.py
+++ b/bindings/scripts/blink_idl_parser.py
@@ -285,14 +285,15 @@
if len(p) > 3:
p[0] = ListFromConcat(p[2], p[3])
- # [b51] Add ExtendedAttributeIdentAndOrIdent
+ # [b51] Add ExtendedAttributeStringLiteral and ExtendedAttributeStringLiteralList
def p_ExtendedAttribute(self, p):
"""ExtendedAttribute : ExtendedAttributeNoArgs
| ExtendedAttributeArgList
| ExtendedAttributeIdent
| ExtendedAttributeIdentList
- | ExtendedAttributeStringLiteralList
- | ExtendedAttributeNamedArgList"""
+ | ExtendedAttributeNamedArgList
+ | ExtendedAttributeStringLiteral
+ | ExtendedAttributeStringLiteralList"""
p[0] = p[1]
# [59]
@@ -333,44 +334,35 @@
elif len(p) == 3:
p[0] = ListFromConcat(self.BuildTrue('NULLABLE'), p[2])
- # [b94] Add support for OR Extended Attribute values "A|B"
- def p_ExtendedAttributeIdentList(self, p):
- """ExtendedAttributeIdentList : identifier '=' '(' IdentifierList ')'
- | identifier '=' identifier '|' IdentOrList"""
- if type(p[4]) is list:
- value = self.BuildAttribute('VALUE', ','.join(p[4]))
- else:
- value = self.BuildAttribute('VALUE', p[3] + p[4] + p[5])
+ # Blink extension: Add support for string literal Extended Attribute values
+ def p_ExtendedAttributeStringLiteral(self, p):
+ """ExtendedAttributeStringLiteral : identifier '=' StringLiteral """
+ def unwrap_string(ls):
+ """Reach in and grab the string literal's "NAME"."""
+ return ls[1].value
+
+ value = self.BuildAttribute('VALUE', unwrap_string(p[3]))
p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
- # [b94.1] A|B|C
- def p_IdentOrList(self, p):
- """IdentOrList : identifier '|' IdentOrList
- | identifier"""
- if len(p) > 3:
- p[0] = p[1] + p[2] + p[3]
- else:
- p[0] = p[1]
-
- # Blink extension: Add support for compound Extended Attribute values over string literals ("A"|"B")
+ # Blink extension: Add support for compound Extended Attribute values over string literals ("A","B")
def p_ExtendedAttributeStringLiteralList(self, p):
- """ExtendedAttributeStringLiteralList : identifier '=' StringLiteralOrList"""
- value = self.BuildAttribute('VALUE', p[3])
+ """ExtendedAttributeStringLiteralList : identifier '=' '(' StringLiteralList ')' """
+ value = self.BuildAttribute('VALUE', p[4])
p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
# Blink extension: one or more string literals. The values aren't propagated as literals,
# but their by their value only.
- def p_StringLiteralOrList(self, p):
- """StringLiteralOrList : StringLiteral '|' StringLiteralOrList
- | StringLiteral"""
+ def p_StringLiteralList(self, p):
+ """StringLiteralList : StringLiteral ',' StringLiteralList
+ | StringLiteral"""
def unwrap_string(ls):
"""Reach in and grab the string literal's "NAME"."""
return ls[1].value
if len(p) > 3:
- p[0] = unwrap_string(p[1]) + p[2] + p[3]
+ p[0] = ListFromConcat(unwrap_string(p[1]), p[3])
else:
- p[0] = unwrap_string(p[1])
+ p[0] = ListFromConcat(unwrap_string(p[1]))
def __init__(self,
# common parameters
diff --git a/bindings/scripts/code_generator_v8.py b/bindings/scripts/code_generator_v8.py
index 272b611..065873d 100644
--- a/bindings/scripts/code_generator_v8.py
+++ b/bindings/scripts/code_generator_v8.py
@@ -78,6 +78,7 @@
import v8_interface
import v8_types
from v8_utilities import capitalize, cpp_name, conditional_string, v8_class_name
+from utilities import KNOWN_COMPONENTS
def render_template(interface_info, header_template, cpp_template,
@@ -95,7 +96,9 @@
return header_text, cpp_text
-class CodeGeneratorV8(object):
+class CodeGeneratorBase(object):
+ """Base class for v8 bindings generator and IDL dictionary impl generator"""
+
def __init__(self, interfaces_info, cache_dir, output_dir):
interfaces_info = interfaces_info or {}
self.interfaces_info = interfaces_info
@@ -103,52 +106,38 @@
self.output_dir = output_dir
# Set global type info
- idl_types.set_ancestors(dict(
- (interface_name, interface_info['ancestors'])
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['ancestors']))
- IdlType.set_callback_interfaces(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['is_callback_interface']))
- IdlType.set_dictionaries(set(
- dictionary_name
- for dictionary_name, interface_info in interfaces_info.iteritems()
- if interface_info['is_dictionary']))
- IdlType.set_implemented_as_interfaces(dict(
- (interface_name, interface_info['implemented_as'])
- for interface_name, interface_info in interfaces_info.iteritems()
- if interface_info['implemented_as']))
- IdlType.set_garbage_collected_types(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if 'GarbageCollected' in interface_info['inherited_extended_attributes']))
- IdlType.set_will_be_garbage_collected_types(set(
- interface_name
- for interface_name, interface_info in interfaces_info.iteritems()
- if 'WillBeGarbageCollected' in interface_info['inherited_extended_attributes']))
- v8_types.set_component_dirs(dict(
- (interface_name, interface_info['component_dir'])
- for interface_name, interface_info in interfaces_info.iteritems()))
+ idl_types.set_ancestors(interfaces_info['ancestors'])
+ IdlType.set_callback_interfaces(interfaces_info['callback_interfaces'])
+ IdlType.set_dictionaries(interfaces_info['dictionaries'])
+ IdlType.set_implemented_as_interfaces(interfaces_info['implemented_as_interfaces'])
+ IdlType.set_garbage_collected_types(interfaces_info['garbage_collected_interfaces'])
+ IdlType.set_will_be_garbage_collected_types(interfaces_info['will_be_garbage_collected_interfaces'])
+ v8_types.set_component_dirs(interfaces_info['component_dirs'])
- def output_paths_for_bindings(self, definition_name):
+ def generate_code(self, definitions, definition_name):
+ """Returns .h/.cpp code as ((path, content)...)."""
+ # Set local type info
+ IdlType.set_callback_functions(definitions.callback_functions.keys())
+ IdlType.set_enums((enum.name, enum.values)
+ for enum in definitions.enumerations.values())
+ return self.generate_code_internal(definitions, definition_name)
+
+ def generate_code_internal(self, definitions, definition_name):
+ # This should be implemented in subclasses.
+ raise NotImplementedError()
+
+
+class CodeGeneratorV8(CodeGeneratorBase):
+ def __init__(self, interfaces_info, cache_dir, output_dir):
+ CodeGeneratorBase.__init__(self, interfaces_info, cache_dir, output_dir)
+
+ def output_paths(self, definition_name):
header_path = posixpath.join(self.output_dir,
'V8%s.h' % definition_name)
cpp_path = posixpath.join(self.output_dir, 'V8%s.cpp' % definition_name)
return header_path, cpp_path
- def output_paths_for_impl(self, definition_name):
- header_path = posixpath.join(self.output_dir, '%s.h' % definition_name)
- cpp_path = posixpath.join(self.output_dir, '%s.cpp' % definition_name)
- return header_path, cpp_path
-
- def generate_code(self, definitions, definition_name):
- """Returns .h/.cpp code as (header_text, cpp_text)."""
- # Set local type info
- IdlType.set_callback_functions(definitions.callback_functions.keys())
- IdlType.set_enums((enum.name, enum.values)
- for enum in definitions.enumerations.values())
-
+ def generate_code_internal(self, definitions, definition_name):
if definition_name in definitions.interfaces:
return self.generate_interface_code(
definitions, definition_name,
@@ -182,7 +171,7 @@
template_context['header_includes'].add(interface_info['include_path'])
header_text, cpp_text = render_template(
interface_info, header_template, cpp_template, template_context)
- header_path, cpp_path = self.output_paths_for_bindings(interface_name)
+ header_path, cpp_path = self.output_paths(interface_name)
return (
(header_path, header_text),
(cpp_path, cpp_text),
@@ -190,37 +179,45 @@
def generate_dictionary_code(self, definitions, dictionary_name,
dictionary):
- interface_info = self.interfaces_info[dictionary_name]
- bindings_results = self.generate_dictionary_bindings(
- dictionary_name, interface_info, dictionary)
- impl_results = self.generate_dictionary_impl(
- dictionary_name, interface_info, dictionary)
- return bindings_results + impl_results
-
- def generate_dictionary_bindings(self, dictionary_name,
- interface_info, dictionary):
header_template = self.jinja_env.get_template('dictionary_v8.h')
cpp_template = self.jinja_env.get_template('dictionary_v8.cpp')
template_context = v8_dictionary.dictionary_context(dictionary)
+ interface_info = self.interfaces_info[dictionary_name]
# Add the include for interface itself
template_context['header_includes'].add(interface_info['include_path'])
header_text, cpp_text = render_template(
interface_info, header_template, cpp_template, template_context)
- header_path, cpp_path = self.output_paths_for_bindings(dictionary_name)
+ header_path, cpp_path = self.output_paths(dictionary_name)
return (
(header_path, header_text),
(cpp_path, cpp_text),
)
- def generate_dictionary_impl(self, dictionary_name,
- interface_info, dictionary):
+
+class CodeGeneratorDictionaryImpl(CodeGeneratorBase):
+ def __init__(self, interfaces_info, cache_dir, output_dir):
+ CodeGeneratorBase.__init__(self, interfaces_info, cache_dir, output_dir)
+
+ def output_paths(self, definition_name, interface_info):
+ output_dir = posixpath.join(self.output_dir,
+ interface_info['relative_dir'])
+ header_path = posixpath.join(output_dir, '%s.h' % definition_name)
+ cpp_path = posixpath.join(output_dir, '%s.cpp' % definition_name)
+ return header_path, cpp_path
+
+ def generate_code_internal(self, definitions, definition_name):
+ if not definition_name in definitions.dictionaries:
+ raise ValueError('%s is not an IDL dictionary')
+ dictionary = definitions.dictionaries[definition_name]
+ interface_info = self.interfaces_info[definition_name]
header_template = self.jinja_env.get_template('dictionary_impl.h')
cpp_template = self.jinja_env.get_template('dictionary_impl.cpp')
template_context = v8_dictionary.dictionary_impl_context(
dictionary, self.interfaces_info)
header_text, cpp_text = render_template(
interface_info, header_template, cpp_template, template_context)
- header_path, cpp_path = self.output_paths_for_impl(dictionary_name)
+ header_path, cpp_path = self.output_paths(
+ definition_name, interface_info)
return (
(header_path, header_text),
(cpp_path, cpp_text),
diff --git a/bindings/scripts/compute_interfaces_info_individual.py b/bindings/scripts/compute_interfaces_info_individual.py
index d7b58e1..58f6790 100755
--- a/bindings/scripts/compute_interfaces_info_individual.py
+++ b/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,7 +47,7 @@
import posixpath
import sys
-from utilities import get_file_contents, read_file_to_list, idl_filename_to_interface_name, write_pickle_file, get_interface_extended_attributes_from_idl, is_callback_interface_from_idl, is_dictionary_from_idl, get_partial_interface_name_from_idl, get_implements_from_idl, get_parent_interface, get_put_forward_interfaces_from_idl
+from utilities import get_file_contents, read_file_to_list, idl_filename_to_interface_name, idl_filename_to_component, write_pickle_file, get_interface_extended_attributes_from_idl, is_callback_interface_from_idl, is_dictionary_from_idl, get_partial_interface_name_from_idl, get_implements_from_idl, get_parent_interface, get_put_forward_interfaces_from_idl
module_path = os.path.dirname(__file__)
source_path = os.path.normpath(os.path.join(module_path, os.pardir, os.pardir))
@@ -63,14 +63,11 @@
def parse_options():
usage = 'Usage: %prog [options] [generated1.idl]...'
parser = optparse.OptionParser(usage=usage)
- parser.add_option('--component-dir', help='component directory')
parser.add_option('--idl-files-list', help='file listing IDL files')
parser.add_option('--interfaces-info-file', help='output pickle file')
parser.add_option('--write-file-only-if-changed', type='int', help='if true, do not write an output file if it would be identical to the existing one, which avoids unnecessary rebuilds in ninja')
options, args = parser.parse_args()
- if options.component_dir is None:
- parser.error('Must specify a component directory using --component-dir.')
if options.interfaces_info_file is None:
parser.error('Must specify an output file using --interfaces-info-file.')
if options.idl_files_list is None:
@@ -85,21 +82,26 @@
# Computations
################################################################################
+def relative_dir_posix(idl_filename):
+ """Returns relative path to the directory of idl_file in POSIX format."""
+ relative_path_local = os.path.relpath(idl_filename, source_path)
+ relative_dir_local = os.path.dirname(relative_path_local)
+ return relative_dir_local.replace(os.path.sep, posixpath.sep)
+
+
def include_path(idl_filename, implemented_as=None):
"""Returns relative path to header file in POSIX format; used in includes.
POSIX format is used for consistency of output, so reference tests are
platform-independent.
"""
- relative_path_local = os.path.relpath(idl_filename, source_path)
- relative_dir_local = os.path.dirname(relative_path_local)
- relative_dir_posix = relative_dir_local.replace(os.path.sep, posixpath.sep)
+ relative_dir = relative_dir_posix(idl_filename)
# IDL file basename is used even if only a partial interface file
idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
cpp_class_name = implemented_as or idl_file_basename
- return posixpath.join(relative_dir_posix, cpp_class_name + '.h')
+ return posixpath.join(relative_dir, cpp_class_name + '.h')
def add_paths_to_partials_dict(partial_interface_name, full_path, this_include_path=None):
@@ -109,13 +111,14 @@
paths_dict['include_paths'].append(this_include_path)
-def compute_info_individual(idl_filename, component_dir):
+def compute_info_individual(idl_filename):
full_path = os.path.realpath(idl_filename)
idl_file_contents = get_file_contents(full_path)
extended_attributes = get_interface_extended_attributes_from_idl(idl_file_contents)
implemented_as = extended_attributes.get('ImplementedAs')
- this_include_path = include_path(idl_filename, implemented_as)
+ relative_dir = relative_dir_posix(idl_filename)
+ this_include_path = None if 'NoImplHeader' in extended_attributes else include_path(idl_filename, implemented_as)
# Handle partial interfaces
partial_interface_name = get_partial_interface_name_from_idl(idl_file_contents)
@@ -133,7 +136,6 @@
left_interfaces, right_interfaces = get_implements_from_idl(idl_file_contents, interface_name)
interfaces_info[interface_name] = {
- 'component_dir': component_dir,
'extended_attributes': extended_attributes,
'full_path': full_path,
'implemented_as': implemented_as,
@@ -153,6 +155,7 @@
# These cause rebuilds of referrers, due to the dependency, so these
# should be minimized; currently only targets of [PutForwards].
'referenced_interfaces': get_put_forward_interfaces_from_idl(idl_file_contents),
+ 'relative_dir': relative_dir,
}
@@ -182,7 +185,7 @@
# Information is stored in global variables interfaces_info and
# partial_interface_files.
for idl_filename in idl_files:
- compute_info_individual(idl_filename, options.component_dir)
+ compute_info_individual(idl_filename)
write_pickle_file(options.interfaces_info_file,
info_individual(),
diff --git a/bindings/scripts/compute_interfaces_info_overall.py b/bindings/scripts/compute_interfaces_info_overall.py
index 658ccfa..6e31121 100755
--- a/bindings/scripts/compute_interfaces_info_overall.py
+++ b/bindings/scripts/compute_interfaces_info_overall.py
@@ -81,12 +81,13 @@
import optparse
import sys
-from utilities import read_pickle_files, write_pickle_file
+from utilities import idl_filename_to_component, read_pickle_files, write_pickle_file
INHERITED_EXTENDED_ATTRIBUTES = set([
'ActiveDOMObject',
'DependentLifetime',
'GarbageCollected',
+ 'NotScriptWrappable',
'WillBeGarbageCollected',
])
@@ -159,6 +160,42 @@
})
+def compute_global_type_info():
+ ancestors = {}
+ dictionaries = {}
+ component_dirs = {}
+ implemented_as_interfaces = {}
+ will_be_garbage_collected_interfaces = set()
+ garbage_collected_interfaces = set()
+ callback_interfaces = set()
+
+ for interface_name, interface_info in interfaces_info.iteritems():
+ component_dirs[interface_name] = idl_filename_to_component(interface_info['full_path'])
+
+ if interface_info['ancestors']:
+ ancestors[interface_name] = interface_info['ancestors']
+ if interface_info['is_callback_interface']:
+ callback_interfaces.add(interface_name)
+ if interface_info['is_dictionary']:
+ dictionaries[interface_name] = interface_info['is_dictionary']
+ if interface_info['implemented_as']:
+ implemented_as_interfaces[interface_name] = interface_info['implemented_as']
+
+ inherited_extended_attributes = interface_info['inherited_extended_attributes']
+ if 'WillBeGarbageCollected' in inherited_extended_attributes:
+ will_be_garbage_collected_interfaces.add(interface_name)
+ if 'GarbageCollected' in inherited_extended_attributes:
+ garbage_collected_interfaces.add(interface_name)
+
+ interfaces_info['ancestors'] = ancestors
+ interfaces_info['callback_interfaces'] = callback_interfaces
+ interfaces_info['dictionaries'] = dictionaries
+ interfaces_info['implemented_as_interfaces'] = implemented_as_interfaces
+ interfaces_info['garbage_collected_interfaces'] = garbage_collected_interfaces
+ interfaces_info['will_be_garbage_collected_interfaces'] = will_be_garbage_collected_interfaces
+ interfaces_info['component_dirs'] = component_dirs
+
+
def compute_interfaces_info_overall(info_individuals):
"""Compute information about IDL files.
@@ -227,10 +264,11 @@
# However, they are needed for legacy implemented interfaces that
# are being treated as partial interfaces, until we remove these.
# http://crbug.com/360435
- implemented_interfaces_include_paths = [
- implemented_interface_info['include_path']
- for implemented_interface_info in implemented_interfaces_info
- if implemented_interface_info['is_legacy_treat_as_partial_interface']]
+ implemented_interfaces_include_paths = []
+ for implemented_interface_info in implemented_interfaces_info:
+ if (implemented_interface_info['is_legacy_treat_as_partial_interface'] and
+ implemented_interface_info['include_path']):
+ implemented_interfaces_include_paths.append(implemented_interface_info['include_path'])
interface_info.update({
'dependencies_full_paths': (partial_interfaces_full_paths +
@@ -245,6 +283,10 @@
del interface_info['is_legacy_treat_as_partial_interface']
del interface_info['parent']
+ # Compute global_type_info to interfaces_info so that idl_compiler does
+ # not need to always calculate the info in __init__.
+ compute_global_type_info()
+
################################################################################
diff --git a/bindings/scripts/idl_compiler.py b/bindings/scripts/idl_compiler.py
index c74aae7..3721e12 100755
--- a/bindings/scripts/idl_compiler.py
+++ b/bindings/scripts/idl_compiler.py
@@ -38,15 +38,17 @@
import cPickle as pickle
import sys
-from code_generator_v8 import CodeGeneratorV8
+from code_generator_v8 import CodeGeneratorDictionaryImpl, CodeGeneratorV8
from idl_reader import IdlReader
-from utilities import write_file
+from utilities import read_idl_files_list_from_file, write_file, idl_filename_to_component
def parse_options():
parser = OptionParser()
parser.add_option('--cache-directory',
help='cache directory, defaults to output directory')
+ parser.add_option('--generate-dictionary-impl',
+ action="store_true", default=False)
parser.add_option('--output-directory')
parser.add_option('--interfaces-info-file')
parser.add_option('--write-file-only-if-changed', type='int')
@@ -102,9 +104,10 @@
def compile_and_write(self, idl_filename):
interface_name = idl_filename_to_interface_name(idl_filename)
+ component = idl_filename_to_component(idl_filename)
definitions = self.reader.read_idl_definitions(idl_filename)
output_code_list = self.code_generator.generate_code(
- definitions, interface_name)
+ definitions[component], interface_name)
for output_path, output_code in output_code_list:
write_file(output_code, output_path, self.only_if_changed)
@@ -124,14 +127,46 @@
self.compile_and_write(idl_filename)
-def main():
- options, idl_filename = parse_options()
+class IdlCompilerDictionaryImpl(IdlCompiler):
+ def __init__(self, *args, **kwargs):
+ IdlCompiler.__init__(self, *args, **kwargs)
+ self.code_generator = CodeGeneratorDictionaryImpl(
+ self.interfaces_info, self.cache_directory, self.output_directory)
+
+ def compile_file(self, idl_filename):
+ self.compile_and_write(idl_filename)
+
+
+def generate_bindings(options, input_filename):
idl_compiler = IdlCompilerV8(
options.output_directory,
cache_directory=options.cache_directory,
interfaces_info_filename=options.interfaces_info_file,
only_if_changed=options.write_file_only_if_changed)
- idl_compiler.compile_file(idl_filename)
+ idl_compiler.compile_file(input_filename)
+
+
+def generate_dictionary_impl(options, input_filename):
+ idl_compiler = IdlCompilerDictionaryImpl(
+ options.output_directory,
+ cache_directory=options.cache_directory,
+ interfaces_info_filename=options.interfaces_info_file,
+ only_if_changed=options.write_file_only_if_changed)
+
+ idl_filenames = read_idl_files_list_from_file(input_filename)
+ for idl_filename in idl_filenames:
+ idl_compiler.compile_file(idl_filename)
+
+
+def main():
+ options, input_filename = parse_options()
+ if options.generate_dictionary_impl:
+ # |input_filename| should be a file which contains a list of IDL
+ # dictionary paths.
+ generate_dictionary_impl(options, input_filename)
+ else:
+ # |input_filename| should be a path of an IDL file.
+ generate_bindings(options, input_filename)
if __name__ == '__main__':
diff --git a/bindings/scripts/idl_definitions.py b/bindings/scripts/idl_definitions.py
index d5dae32..ee7158a 100644
--- a/bindings/scripts/idl_definitions.py
+++ b/bindings/scripts/idl_definitions.py
@@ -62,7 +62,7 @@
import abc
-from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType
+from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlNullableType
SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER']
STANDARD_TYPEDEFS = {
@@ -637,13 +637,14 @@
"""
Returns:
Dictionary of {ExtAttributeName: ExtAttributeValue}.
- Value is usually a string, with three exceptions:
+ Value is usually a string, with these exceptions:
Constructors: value is a list of Arguments nodes, corresponding to
possible signatures of the constructor.
CustomConstructors: value is a list of Arguments nodes, corresponding to
possible signatures of the custom constructor.
NamedConstructor: value is a Call node, corresponding to the single
signature of the named constructor.
+ SetWrapperReferenceTo: value is an Arguments node.
"""
# Primarily just make a dictionary from the children.
# The only complexity is handling various types of constructors:
@@ -755,23 +756,25 @@
if len(children) < 1 or len(children) > 2:
raise ValueError('Type node expects 1 or 2 children (type + optional array []), got %s (multi-dimensional arrays are not supported).' % len(children))
- is_nullable = node.GetProperty('NULLABLE') or False # syntax: T?
- type_node_child = children[0]
- base_type = type_node_inner_to_type(type_node_child, is_nullable=is_nullable)
+ base_type = type_node_inner_to_type(children[0])
+
+ if node.GetProperty('NULLABLE'):
+ base_type = IdlNullableType(base_type)
if len(children) == 2:
array_node = children[1]
array_node_class = array_node.GetClass()
if array_node_class != 'Array':
raise ValueError('Expected Array node as TypeSuffix, got %s node.' % array_node_class)
- array_is_nullable = array_node.GetProperty('NULLABLE') or False
- return IdlArrayType(base_type, is_nullable=array_is_nullable)
+ array_type = IdlArrayType(base_type)
+ if array_node.GetProperty('NULLABLE'):
+ return IdlNullableType(array_type)
+ return array_type
return base_type
-def type_node_inner_to_type(node, is_nullable=False):
- # FIXME: remove is_nullable once have IdlNullableType
+def type_node_inner_to_type(node):
node_class = node.GetClass()
# Note Type*r*ef, not Typedef, meaning the type is an identifier, thus
# either a typedef shorthand (but not a Typedef declaration itself) or an
@@ -779,18 +782,17 @@
if node_class in ['PrimitiveType', 'Typeref']:
# unrestricted syntax: unrestricted double | unrestricted float
is_unrestricted = node.GetProperty('UNRESTRICTED') or False
- return IdlType(node.GetName(), is_nullable=is_nullable, is_unrestricted=is_unrestricted)
+ return IdlType(node.GetName(), is_unrestricted=is_unrestricted)
elif node_class == 'Any':
- return IdlType('any', is_nullable=is_nullable)
+ return IdlType('any')
elif node_class == 'Sequence':
- sequence_is_nullable = node.GetProperty('NULLABLE') or False
- return sequence_node_to_type(node, is_nullable=sequence_is_nullable)
+ return sequence_node_to_type(node)
elif node_class == 'UnionType':
- return union_type_node_to_idl_union_type(node, is_nullable=is_nullable)
+ return union_type_node_to_idl_union_type(node)
raise ValueError('Unrecognized node class: %s' % node_class)
-def sequence_node_to_type(node, is_nullable=False):
+def sequence_node_to_type(node):
children = node.GetChildren()
if len(children) != 1:
raise ValueError('Sequence node expects exactly 1 child, got %s' % len(children))
@@ -799,7 +801,10 @@
if sequence_child_class != 'Type':
raise ValueError('Unrecognized node class: %s' % sequence_child_class)
element_type = type_node_to_type(sequence_child)
- return IdlSequenceType(element_type, is_nullable=is_nullable)
+ sequence_type = IdlSequenceType(element_type)
+ if node.GetProperty('NULLABLE'):
+ return IdlNullableType(sequence_type)
+ return sequence_type
def typedef_node_to_type(node):
@@ -813,7 +818,7 @@
return type_node_to_type(child)
-def union_type_node_to_idl_union_type(node, is_nullable=False):
+def union_type_node_to_idl_union_type(node):
member_types = [type_node_to_type(member_type_node)
for member_type_node in node.GetChildren()]
- return IdlUnionType(member_types, is_nullable=is_nullable)
+ return IdlUnionType(member_types)
diff --git a/bindings/scripts/idl_reader.py b/bindings/scripts/idl_reader.py
index 23797a7..7c7f5e5 100644
--- a/bindings/scripts/idl_reader.py
+++ b/bindings/scripts/idl_reader.py
@@ -39,12 +39,14 @@
from idl_definitions import IdlDefinitions
from idl_validator import EXTENDED_ATTRIBUTES_RELATIVE_PATH, IDLInvalidExtendedAttributeError, IDLExtendedAttributeValidator
from interface_dependency_resolver import InterfaceDependencyResolver
+from utilities import idl_filename_to_component
class IdlReader(object):
def __init__(self, interfaces_info=None, outputdir='', multi_interface=False):
self.multi_interface = multi_interface
self.extended_attribute_validator = IDLExtendedAttributeValidator()
+ self.interfaces_info = interfaces_info
if interfaces_info:
self.interface_dependency_resolver = InterfaceDependencyResolver(interfaces_info, self)
@@ -54,12 +56,19 @@
self.parser = BlinkIDLParser(outputdir=outputdir)
def read_idl_definitions(self, idl_filename):
- """Returns an IdlDefinitions object for an IDL file, including all dependencies."""
+ """Returns a dictionary whose key is component and value is an IdlDefinitions object for an IDL file, including all dependencies."""
definitions = self.read_idl_file(idl_filename)
+ component = idl_filename_to_component(idl_filename)
+
if not self.interface_dependency_resolver:
- return definitions
- self.interface_dependency_resolver.resolve_dependencies(definitions)
- return definitions
+ return {component: definitions}
+
+ # This definitions should have a dictionary. No need to resolve any
+ # dependencies.
+ if not definitions.interfaces:
+ return {component: definitions}
+
+ return self.interface_dependency_resolver.resolve_dependencies(definitions, component)
def read_idl_file(self, idl_filename):
"""Returns an IdlDefinitions object for an IDL file, without any dependencies.
diff --git a/bindings/scripts/idl_types.py b/bindings/scripts/idl_types.py
index d0797a6..7be4b7d 100644
--- a/bindings/scripts/idl_types.py
+++ b/bindings/scripts/idl_types.py
@@ -10,6 +10,7 @@
IdlArrayOrSequenceType
IdlArrayType
IdlSequenceType
+ IdlNullableType
"""
from collections import defaultdict
@@ -99,86 +100,17 @@
class IdlTypeBase(object):
- """Base class for IdlType, IdlUnionType and IdlArrayOrSequenceType."""
-
- def __init__(self, is_nullable):
- self.base_type = None
- self.is_nullable = is_nullable
+ """Base class for IdlType, IdlUnionType, IdlArrayOrSequenceType and IdlNullableType."""
def __str__(self):
- inner_string = self.inner_string
- if self.is_nullable:
- # FIXME: Dictionary::ConversionContext::setConversionType can't
- # handle the '?' in nullable types (passes nullability separately).
- # Update that function to handle nullability from the type name,
- # simplifying its signature.
- # return inner_string + '?'
- return inner_string
- return inner_string
-
- @property
- def inner_string(self):
raise NotImplementedError(
- 'inner_string property should be defined in subclasses')
+ '__str__() should be defined in subclasses')
- @property
- def is_basic_type(self):
- return False
-
- @property
- def is_callback_function(self):
- return False
-
- @property
- def is_callback_interface(self):
- return False
-
- @property
- def is_dictionary(self):
- return False
-
- @property
- def is_enum(self):
- return False
-
- @property
- def is_integer_type(self):
- return False
-
- @property
- def is_numeric_type(self):
- return False
-
- @property
- def is_primitive_type(self):
- return False
-
- @property
- def is_interface_type(self):
- return False
-
- @property
- def is_string_type(self):
- return False
-
- @property
- def is_union_type(self):
- return False
-
- @property
- def may_raise_exception_on_conversion(self):
- return False
-
- @property
- def name(self):
- if self.is_nullable:
- return self.inner_name + 'OrNull'
- return self.inner_name
-
- @property
- def inner_name(self):
- raise NotImplementedError(
- 'inner_name property should be defined in subclasses')
+ def __getattr__(self, name):
+ # Default undefined attributes to None (analogous to Jinja variables).
+ # This allows us to not define default properties in the base class, and
+ # allows us to relay __getattr__ in IdlNullableType to the inner type.
+ return None
def resolve_typedefs(self, typedefs):
raise NotImplementedError(
@@ -198,15 +130,14 @@
dictionaries = set()
enums = {} # name -> values
- def __init__(self, base_type, is_nullable=False, is_unrestricted=False):
- super(IdlType, self).__init__(is_nullable)
+ def __init__(self, base_type, is_unrestricted=False):
+ super(IdlType, self).__init__()
if is_unrestricted:
self.base_type = 'unrestricted %s' % base_type
else:
self.base_type = base_type
- @property
- def inner_string(self):
+ def __str__(self):
return self.base_type
@property
@@ -263,20 +194,15 @@
@property
def is_string_type(self):
- return self.inner_name in STRING_TYPES
-
- @property
- def may_raise_exception_on_conversion(self):
- return (self.is_integer_type or
- self.name in ('ByteString', 'ScalarValueString'))
+ return self.name in STRING_TYPES
@property
def is_union_type(self):
return isinstance(self, IdlUnionType)
@property
- def inner_name(self):
- """Return type name (or inner type name if nullable)
+ def name(self):
+ """Return type name
http://heycam.github.io/webidl/#dfn-type-name
"""
@@ -300,19 +226,9 @@
cls.enums.update(new_enums)
def resolve_typedefs(self, typedefs):
- # This function either returns |self|, possibly mutated, or leaves this
- # object unmodified and returns a different object.
- # FIXME: Change to never mutate |self|, and rename typedefs_resolved().
- if self.base_type not in typedefs:
- return self
- new_type = typedefs[self.base_type]
- if type(new_type) != type(self):
- # If type changes, need to return a different object,
- # since can't change type(self)
- return new_type
- # If type doesn't change, just mutate self to avoid a new object
- self.__init__(new_type.base_type, self.is_nullable or new_type.is_nullable)
- return self
+ # This function either returns |self| or a different object.
+ # FIXME: Rename typedefs_resolved().
+ return typedefs.get(self.base_type, self)
################################################################################
@@ -321,8 +237,8 @@
class IdlUnionType(IdlTypeBase):
# http://heycam.github.io/webidl/#idl-union
- def __init__(self, member_types, is_nullable=False):
- super(IdlUnionType, self).__init__(is_nullable=is_nullable)
+ def __init__(self, member_types):
+ super(IdlUnionType, self).__init__()
self.member_types = member_types
@property
@@ -330,7 +246,7 @@
return True
@property
- def inner_name(self):
+ def name(self):
"""Return type name (or inner type name if nullable)
http://heycam.github.io/webidl/#dfn-type-name
@@ -351,8 +267,8 @@
class IdlArrayOrSequenceType(IdlTypeBase):
"""Base class for IdlArrayType and IdlSequenceType."""
- def __init__(self, element_type, is_nullable=False):
- super(IdlArrayOrSequenceType, self).__init__(is_nullable)
+ def __init__(self, element_type):
+ super(IdlArrayOrSequenceType, self).__init__()
self.element_type = element_type
def resolve_typedefs(self, typedefs):
@@ -361,26 +277,60 @@
class IdlArrayType(IdlArrayOrSequenceType):
- def __init__(self, element_type, is_nullable=False):
- super(IdlArrayType, self).__init__(element_type, is_nullable)
+ def __init__(self, element_type):
+ super(IdlArrayType, self).__init__(element_type)
- @property
- def inner_string(self):
+ def __str__(self):
return '%s[]' % self.element_type
@property
- def inner_name(self):
+ def name(self):
return self.element_type.name + 'Array'
class IdlSequenceType(IdlArrayOrSequenceType):
- def __init__(self, element_type, is_nullable=False):
- super(IdlSequenceType, self).__init__(element_type, is_nullable)
+ def __init__(self, element_type):
+ super(IdlSequenceType, self).__init__(element_type)
- @property
- def inner_string(self):
+ def __str__(self):
return 'sequence<%s>' % self.element_type
@property
- def inner_name(self):
+ def name(self):
return self.element_type.name + 'Sequence'
+
+
+################################################################################
+# IdlNullableType
+################################################################################
+
+class IdlNullableType(IdlTypeBase):
+ def __init__(self, inner_type):
+ super(IdlNullableType, self).__init__()
+ self.inner_type = inner_type
+
+ def __str__(self):
+ # FIXME: Dictionary::ConversionContext::setConversionType can't
+ # handle the '?' in nullable types (passes nullability separately).
+ # Update that function to handle nullability from the type name,
+ # simplifying its signature.
+ # return str(self.inner_type) + '?'
+ return str(self.inner_type)
+
+ def __getattr__(self, name):
+ return getattr(self.inner_type, name)
+
+ @property
+ def is_nullable(self):
+ return True
+
+ @property
+ def name(self):
+ # DartFix: Don't handle OrNull all classes generated are same regardless
+ # of nullable type.
+ # return self.inner_type.name + 'OrNull'
+ return self.inner_type.name
+
+ def resolve_typedefs(self, typedefs):
+ self.inner_type = self.inner_type.resolve_typedefs(typedefs)
+ return self
diff --git a/bindings/scripts/idl_validator.py b/bindings/scripts/idl_validator.py
index 29ccd7d..e75099e 100644
--- a/bindings/scripts/idl_validator.py
+++ b/bindings/scripts/idl_validator.py
@@ -77,8 +77,10 @@
return
if values_string is None:
values = set([None])
+ elif isinstance(values_string, list):
+ values = set(values_string)
else:
- values = set(re.split('[|,]', values_string))
+ values = set([values_string])
invalid_values = values - valid_values
if invalid_values:
invalid_value = invalid_values.pop()
diff --git a/bindings/scripts/interface_dependency_resolver.py b/bindings/scripts/interface_dependency_resolver.py
index ece506a..7bf3b05 100644
--- a/bindings/scripts/interface_dependency_resolver.py
+++ b/bindings/scripts/interface_dependency_resolver.py
@@ -63,7 +63,7 @@
self.interfaces_info = interfaces_info
self.reader = reader
- def resolve_dependencies(self, definitions):
+ def resolve_dependencies(self, definitions, component):
"""Resolve dependencies, merging them into IDL definitions of main file.
Dependencies consist of 'partial interface' for the same interface as
@@ -81,10 +81,27 @@
Args:
definitions: IdlDefinitions object, modified in place
+ component:
+ string, describing where the above definitions are defined,
+ 'core' or 'modules'. See KNOWN_COMPONENTS in utilities.py
+
+ Returns:
+ A dictionary whose key is component and value is IdlDefinitions
+ object whose dependency is resolved.
+
+ Raises:
+ Exception:
+ A given IdlDefinitions object doesn't have any interfaces,
+ or a given IdlDefinitions object has incorrect referenced
+ interfaces.
"""
+ # FIXME: we need to resolve dependency when we implement partial
+ # dictionary.
if not definitions.interfaces:
- # This definitions should have a dictionary. Nothing to do for it.
- return
+ raise Exception('No need to resolve any dependencies of '
+ 'this definition: %s, because this should '
+ 'have a dictionary.' % definitions.idl_name)
+
target_interface = next(definitions.interfaces.itervalues())
interface_name = target_interface.name
interface_info = self.interfaces_info[interface_name]
@@ -93,18 +110,30 @@
target_interface.extended_attributes.update(
interface_info['inherited_extended_attributes'])
- merge_interface_dependencies(definitions,
- target_interface,
- interface_info['dependencies_full_paths'],
- self.reader)
+ resolved_definitions = merge_interface_dependencies(
+ definitions,
+ component,
+ target_interface,
+ interface_info['dependencies_full_paths'],
+ self.reader)
for referenced_interface_name in interface_info['referenced_interfaces']:
referenced_definitions = self.reader.read_idl_definitions(
self.interfaces_info[referenced_interface_name]['full_path'])
- definitions.update(referenced_definitions)
+
+ if component not in referenced_definitions:
+ raise Exception('This definitions: %s is defined in %s '
+ 'but reference interface:%s is not defined '
+ 'in %s' % (definitions.idl_name,
+ component,
+ referenced_interface_name,
+ component))
+
+ resolved_definitions[component].update(referenced_definitions[component])
+ return resolved_definitions
-def merge_interface_dependencies(definitions, target_interface, dependency_idl_filenames, reader):
+def merge_interface_dependencies(definitions, component, target_interface, dependency_idl_filenames, reader):
"""Merge dependencies ('partial interface' and 'implements') in dependency_idl_filenames into target_interface.
No return: modifies target_interface in place.
@@ -112,6 +141,8 @@
# Sort so order consistent, so can compare output from run to run.
for dependency_idl_filename in sorted(dependency_idl_filenames):
dependency_definitions = reader.read_idl_file(dependency_idl_filename)
+ # FIXME(crbug.com/358074): should not merge core definitions with
+ # modules definitions.
dependency_interface = next(dependency_definitions.interfaces.itervalues())
dependency_interface_basename, _ = os.path.splitext(os.path.basename(dependency_idl_filename))
@@ -124,6 +155,12 @@
# over one list (and not need to handle 'implements' itself).
target_interface.merge(dependency_interface)
+ # FIXME: Currently, this function just returns one IdlDefinitions
+ # instance. However, for partial interface modularization, we need to
+ # make this function return multiple definitions, i.e.
+ # { 'core': ..., 'modules': ... }.
+ return {component: definitions}
+
def transfer_extended_attributes(dependency_interface, dependency_interface_basename):
"""Transfer extended attributes from dependency interface onto members.
diff --git a/bindings/scripts/utilities.py b/bindings/scripts/utilities.py
index 3674765..4d80ca7 100644
--- a/bindings/scripts/utilities.py
+++ b/bindings/scripts/utilities.py
@@ -11,6 +11,10 @@
import cPickle as pickle
import re
import string
+import subprocess
+
+
+KNOWN_COMPONENTS = frozenset(['core', 'modules'])
class IdlBadFilenameError(Exception):
@@ -23,6 +27,16 @@
return os.path.splitext(os.path.basename(idl_filename))[0]
+def idl_filename_to_component(idl_filename):
+ path = os.path.dirname(os.path.realpath(idl_filename))
+ while path:
+ dirname, basename = os.path.split(path)
+ if basename.lower() in KNOWN_COMPONENTS:
+ return basename.lower()
+ path = dirname
+ raise 'Unknown component type for %s' % idl_filename
+
+
################################################################################
# Basic file reading/writing
################################################################################
@@ -38,6 +52,34 @@
return [line.rstrip('\n') for line in f]
+def resolve_cygpath(cygdrive_names):
+ if not cygdrive_names:
+ return []
+ cmd = ['cygpath', '-f', '-', '-wa']
+ process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ idl_file_names = []
+ for file_name in cygdrive_names:
+ process.stdin.write('%s\n' % file_name)
+ process.stdin.flush()
+ idl_file_names.append(process.stdout.readline().rstrip())
+ process.stdin.close()
+ process.wait()
+ return idl_file_names
+
+
+def read_idl_files_list_from_file(filename):
+ """Similar to read_file_to_list, but also resolves cygpath."""
+ with open(filename) as input_file:
+ file_names = sorted([os.path.realpath(line.rstrip('\n'))
+ for line in input_file])
+ idl_file_names = [file_name for file_name in file_names
+ if not file_name.startswith('/cygdrive')]
+ cygdrive_names = [file_name for file_name in file_names
+ if file_name.startswith('/cygdrive')]
+ idl_file_names.extend(resolve_cygpath(cygdrive_names))
+ return idl_file_names
+
+
def read_pickle_files(pickle_filenames):
for pickle_filename in pickle_filenames:
with open(pickle_filename) as pickle_file:
@@ -49,6 +91,9 @@
with open(destination_filename) as destination_file:
if destination_file.read() == new_text:
return
+ destination_dirname = os.path.dirname(destination_filename)
+ if not os.path.exists(destination_dirname):
+ os.makedirs(destination_dirname)
with open(destination_filename, 'w') as destination_file:
destination_file.write(new_text)
diff --git a/bindings/scripts/v8_attributes.py b/bindings/scripts/v8_attributes.py
index bb61ef9..2a09c88 100644
--- a/bindings/scripts/v8_attributes.py
+++ b/bindings/scripts/v8_attributes.py
@@ -38,7 +38,9 @@
from v8_globals import includes, interfaces
import v8_types
import v8_utilities
-from v8_utilities import capitalize, cpp_name, has_extended_attribute, has_extended_attribute_value, scoped_name, strip_suffix, uncapitalize
+from v8_utilities import (capitalize, cpp_name, has_extended_attribute,
+ has_extended_attribute_value, scoped_name, strip_suffix,
+ uncapitalize, extended_attribute_value_as_list)
def attribute_context(interface, attribute):
@@ -56,7 +58,7 @@
is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
is_reflect = 'Reflect' in extended_attributes
if is_custom_element_callbacks or is_reflect:
- includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
+ includes.add('core/dom/custom/CustomElementProcessingStack.h')
# [PerWorldBindings]
if 'PerWorldBindings' in extended_attributes:
assert idl_type.is_wrapper_type or 'LogActivity' in extended_attributes, '[PerWorldBindings] should only be used with wrapper types: %s.%s' % (interface.name, attribute.name)
@@ -84,7 +86,6 @@
'access_control_list': access_control_list(attribute),
'activity_logging_world_list_for_getter': v8_utilities.activity_logging_world_list(attribute, 'Getter'), # [ActivityLogging]
'activity_logging_world_list_for_setter': v8_utilities.activity_logging_world_list(attribute, 'Setter'), # [ActivityLogging]
- 'activity_logging_include_old_value_for_setter': 'LogPreviousValue' in extended_attributes, # [ActivityLogging]
'activity_logging_world_check': v8_utilities.activity_logging_world_check(attribute), # [ActivityLogging]
'argument_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
'cached_attribute_validation_method': extended_attributes.get('CachedAttribute'),
@@ -135,8 +136,7 @@
'reflect_empty': extended_attributes.get('ReflectEmpty'),
'reflect_invalid': extended_attributes.get('ReflectInvalid', ''),
'reflect_missing': extended_attributes.get('ReflectMissing'),
- 'reflect_only': extended_attributes['ReflectOnly'].split('|')
- if 'ReflectOnly' in extended_attributes else None,
+ 'reflect_only': extended_attribute_value_as_list(attribute, 'ReflectOnly'),
'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(attribute), # [RuntimeEnabled]
'setter_callback': setter_callback_name(interface, attribute),
'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script),
@@ -176,7 +176,8 @@
release = False
if 'ImplementedInPrivateScript' in extended_attributes:
if (not idl_type.is_wrapper_type and
- not idl_type.is_basic_type):
+ not idl_type.is_basic_type and
+ not idl_type.is_enum):
raise Exception('Private scripts supports only primitive types and DOM wrappers.')
context['cpp_value_original'] = cpp_value
@@ -187,7 +188,6 @@
elif (idl_type.is_explicit_nullable or
base_idl_type == 'EventHandler' or
'CachedAttribute' in extended_attributes or
- 'LogPreviousValue' in extended_attributes or
'ReflectOnly' in extended_attributes or
context['is_keep_alive_for_gc'] or
context['is_getter_raises_exception']):
@@ -327,7 +327,7 @@
'has_setter_exception_state':
is_setter_raises_exception or has_type_checking_interface or
context['has_type_checking_unrestricted'] or
- idl_type.may_raise_exception_on_conversion,
+ idl_type.v8_conversion_needs_exception_state,
'has_type_checking_interface': has_type_checking_interface,
'is_setter_call_with_execution_context': v8_utilities.has_extended_attribute_value(
attribute, 'SetterCallWith', 'ExecutionContext'),
diff --git a/bindings/scripts/v8_dictionary.py b/bindings/scripts/v8_dictionary.py
index 6dc772f..a5be6c8 100644
--- a/bindings/scripts/v8_dictionary.py
+++ b/bindings/scripts/v8_dictionary.py
@@ -6,7 +6,6 @@
implementation classes that are used by blink's core/modules.
"""
-import copy
import operator
from v8_globals import includes
import v8_types
@@ -19,6 +18,7 @@
])
DICTIONARY_CPP_INCLUDES = frozenset([
+ 'bindings/common/ExceptionState.h',
# FIXME: Remove this, http://crbug.com/321462
'bindings/core/v8/Dictionary.h',
])
@@ -32,6 +32,12 @@
return 'has%s' % v8_utilities.capitalize(member.name)
+def unwrap_nullable_if_needed(idl_type):
+ if idl_type.is_nullable:
+ return idl_type.inner_type
+ return idl_type
+
+
# Context for V8 bindings
def dictionary_context(dictionary):
@@ -50,14 +56,7 @@
def member_context(member):
idl_type = member.idl_type
idl_type.add_includes_for_type()
-
- def idl_type_for_default_value():
- copied_type = copy.copy(idl_type)
- # IdlType for default values shouldn't be nullable. Otherwise,
- # it will generate meaningless expression like
- # 'String("default value").isNull() ? ...'.
- copied_type.is_nullable = False
- return copied_type
+ idl_type = unwrap_nullable_if_needed(idl_type)
def default_values():
if not member.default_value:
@@ -65,7 +64,7 @@
if member.default_value.is_null:
return None, 'v8::Null(isolate)'
cpp_default_value = str(member.default_value)
- v8_default_value = idl_type_for_default_value().cpp_value_to_v8_value(
+ v8_default_value = idl_type.cpp_value_to_v8_value(
cpp_value=cpp_default_value, isolate='isolate',
creation_context='creationContext')
return cpp_default_value, v8_default_value
@@ -79,7 +78,9 @@
cpp_value='impl->%s()' % member.name, isolate='isolate',
creation_context='creationContext',
extended_attributes=member.extended_attributes),
+ 'enum_validation_expression': idl_type.enum_validation_expression,
'has_method_name': has_method_name_for_dictionary_member(member),
+ 'is_object': idl_type.name == 'Object',
'name': member.name,
'setter_name': setter_name_for_dictionary_member(member),
'v8_default_value': v8_default_value,
@@ -101,7 +102,8 @@
def member_impl_context(member, interfaces_info, header_includes):
- idl_type = member.idl_type
+ idl_type = unwrap_nullable_if_needed(member.idl_type)
+ is_object = idl_type.name == 'Object'
def getter_expression():
if idl_type.impl_should_use_nullable_container:
@@ -109,9 +111,10 @@
return 'm_%s' % member.name
def has_method_expression():
- if (idl_type.impl_should_use_nullable_container or
- idl_type.is_string_type):
+ if idl_type.impl_should_use_nullable_container or idl_type.is_enum or idl_type.is_string_type:
return '!m_%s.isNull()' % member.name
+ elif is_object:
+ return '!(m_{0}.isEmpty() || m_{0}.isNull() || m_{0}.isUndefined())'.format(member.name)
else:
return 'm_%s' % member.name
@@ -121,11 +124,17 @@
return v8_types.cpp_template_type('Nullable', member_cpp_type)
return member_cpp_type
+ cpp_default_value = None
+ if member.default_value and not member.default_value.is_null:
+ cpp_default_value = str(member.default_value)
+
header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
return {
+ 'cpp_default_value': cpp_default_value,
'getter_expression': getter_expression(),
'has_method_expression': has_method_expression(),
'has_method_name': has_method_name_for_dictionary_member(member),
+ 'is_object': is_object,
'is_traceable': (idl_type.is_garbage_collected or
idl_type.is_will_be_garbage_collected),
'member_cpp_type': member_cpp_type(),
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index 2980628..bf63e61 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -46,7 +46,9 @@
import v8_types
from v8_types import cpp_ptr_type, cpp_template_type
import v8_utilities
-from v8_utilities import capitalize, conditional_string, cpp_name, gc_type, has_extended_attribute_value, runtime_enabled_function_name
+from v8_utilities import (capitalize, conditional_string, cpp_name, gc_type,
+ has_extended_attribute_value, runtime_enabled_function_name,
+ extended_attribute_value_as_list)
INTERFACE_H_INCLUDES = frozenset([
@@ -101,6 +103,17 @@
# [DependentLifetime]
is_dependent_lifetime = 'DependentLifetime' in extended_attributes
+ # [Iterable]
+ iterator_method = None
+ if 'Iterable' in extended_attributes:
+ iterator_operation = IdlOperation(interface.idl_name)
+ iterator_operation.name = 'iterator'
+ iterator_operation.idl_type = IdlType('Iterator')
+ iterator_operation.extended_attributes['RaisesException'] = None
+ iterator_operation.extended_attributes['CallWith'] = 'ScriptState'
+ iterator_method = v8_methods.method_context(interface,
+ iterator_operation)
+
# [MeasureAs]
is_measure_as = 'MeasureAs' in extended_attributes
if is_measure_as:
@@ -126,9 +139,12 @@
for set_wrapper_reference_to in set_wrapper_reference_to_list:
set_wrapper_reference_to['idl_type'].add_includes_for_type()
+ # [NotScriptWrappable]
+ is_script_wrappable = 'NotScriptWrappable' not in extended_attributes
+
# [SpecialWrapFor]
if 'SpecialWrapFor' in extended_attributes:
- special_wrap_for = extended_attributes['SpecialWrapFor'].split('|')
+ special_wrap_for = extended_attribute_value_as_list(interface, 'SpecialWrapFor')
else:
special_wrap_for = []
for special_wrap_interface in special_wrap_for:
@@ -142,10 +158,16 @@
this_gc_type = gc_type(interface)
+ wrapper_class_id = ('NodeClassId' if inherits_interface(interface.name, 'Node') else 'ObjectClassId')
+
context = {
'conditional_string': conditional_string(interface), # [Conditional]
'cpp_class': cpp_name(interface),
'gc_type': this_gc_type,
+ # FIXME: Remove 'EventTarget' special handling, http://crbug.com/383699
+ 'has_access_check_callbacks': (is_check_security and
+ interface.name != 'Window' and
+ interface.name != 'EventTarget'),
'has_custom_legacy_call_as_function': has_extended_attribute_value(interface, 'Custom', 'LegacyCallAsFunction'), # [Custom=LegacyCallAsFunction]
'has_custom_to_v8': has_extended_attribute_value(interface, 'Custom', 'ToV8'), # [Custom=ToV8]
'has_custom_wrap': has_extended_attribute_value(interface, 'Custom', 'Wrap'), # [Custom=Wrap]
@@ -160,6 +182,13 @@
'is_event_target': inherits_interface(interface.name, 'EventTarget'),
'is_exception': interface.is_exception,
'is_node': inherits_interface(interface.name, 'Node'),
+ 'is_script_wrappable': is_script_wrappable,
+ 'iterator_method': iterator_method,
+ 'lifetime': 'Dependent'
+ if (has_visit_dom_wrapper or
+ is_active_dom_object or
+ is_dependent_lifetime)
+ else 'Independent',
'measure_as': v8_utilities.measure_as(interface), # [MeasureAs]
'parent_interface': parent_interface,
'pass_cpp_type': cpp_template_type(
@@ -170,11 +199,7 @@
'set_wrapper_reference_to_list': set_wrapper_reference_to_list,
'special_wrap_for': special_wrap_for,
'v8_class': v8_utilities.v8_class_name(interface),
- 'wrapper_configuration': 'WrapperConfiguration::Dependent'
- if (has_visit_dom_wrapper or
- is_active_dom_object or
- is_dependent_lifetime)
- else 'WrapperConfiguration::Independent',
+ 'wrapper_class_id': wrapper_class_id,
}
# Constructors
@@ -221,11 +246,31 @@
'named_constructor': named_constructor,
})
+ constants = [constant_context(constant) for constant in interface.constants]
+
+ special_getter_constants = []
+ runtime_enabled_constants = []
+ constant_configuration_constants = []
+
+ for constant in constants:
+ if constant['measure_as'] or constant['deprecate_as']:
+ special_getter_constants.append(constant)
+ continue
+ if constant['runtime_enabled_function']:
+ runtime_enabled_constants.append(constant)
+ continue
+ constant_configuration_constants.append(constant)
+
# Constants
context.update({
- 'constants': [constant_context(constant)
- for constant in interface.constants],
+ 'constant_configuration_constants': constant_configuration_constants,
+ 'constants': constants,
'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes,
+ 'has_constant_configuration': any(
+ not constant['runtime_enabled_function']
+ for constant in constants),
+ 'runtime_enabled_constants': runtime_enabled_constants,
+ 'special_getter_constants': special_getter_constants,
})
# Attributes
@@ -339,22 +384,17 @@
# [DeprecateAs], [Reflect], [RuntimeEnabled]
def constant_context(constant):
- # (Blink-only) string literals are unquoted in tokenizer, must be re-quoted
- # in C++.
- if constant.idl_type.name == 'String':
- value = '"%s"' % constant.value
- else:
- value = constant.value
-
extended_attributes = constant.extended_attributes
return {
'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
+ 'deprecate_as': v8_utilities.deprecate_as(constant), # [DeprecateAs]
'idl_type': constant.idl_type.name,
+ 'measure_as': v8_utilities.measure_as(constant), # [MeasureAs]
'name': constant.name,
# FIXME: use 'reflected_name' as correct 'name'
'reflected_name': extended_attributes.get('Reflect', constant.name),
'runtime_enabled_function': runtime_enabled_function_name(constant),
- 'value': value,
+ 'value': constant.value,
}
@@ -442,6 +482,13 @@
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('idl_type') == 'Promise')
+ if promise_overload_count not in (0, len(overloads)):
+ raise ValueError('Overloads of %s have conflicting Promise/non-Promise types'
+ % (name))
+
return {
'deprecate_all_as': common_value(overloads, 'deprecate_as'), # [DeprecateAs]
'exposed_test_all': common_value(overloads, 'exposed_test'), # [Exposed]
@@ -736,26 +783,26 @@
# • a sequence type
# ...
# • a dictionary
- try:
- # FIXME: IDL dictionary not implemented, so use Blink Dictionary
- # http://crbug.com/321462
- idl_type, method = next((idl_type, method)
- for idl_type, method in idl_types_methods
- if (idl_type.native_array_element_type or
- idl_type.name == 'Dictionary'))
+ #
+ # FIXME:
+ # We don't strictly follow the algorithm here. The algorithm says "remove
+ # all other entries" if there is "one entry" matching, but we yield all
+ # entries to support following constructors:
+ # [constructor(sequence<DOMString> arg), constructor(Dictionary arg)]
+ # interface I { ... }
+ # (Need to check array types before objects because an array is an object)
+ for idl_type, method in idl_types_methods:
if idl_type.native_array_element_type:
# (We test for Array instead of generic Object to type-check.)
# FIXME: test for Object during resolution, then have type check for
# Array in overloaded method: http://crbug.com/262383
- test = '%s->IsArray()' % cpp_value
- else:
+ yield '%s->IsArray()' % cpp_value, method
+ for idl_type, method in idl_types_methods:
+ if idl_type.is_dictionary or idl_type.name == 'Dictionary':
# FIXME: should be '{1}->IsObject() && !{1}->IsDate() && !{1}->IsRegExp()'.format(cpp_value)
# FIXME: the IsDate and IsRegExp checks can be skipped if we've
# already generated tests for them.
- test = '%s->IsObject()' % cpp_value
- yield test, method
- except StopIteration:
- pass
+ yield '%s->IsObject()' % cpp_value, method
# (Check for exact type matches before performing automatic type conversion;
# only needed if distinguishing between primitive types.)
@@ -858,9 +905,6 @@
# [Constructor]
def constructor_context(interface, constructor):
- arguments_need_try_catch = any(v8_methods.argument_needs_try_catch(argument, return_promise=False)
- for argument in constructor.arguments)
-
# [RaisesException=Constructor]
is_constructor_raises_exception = \
interface.extended_attributes.get('RaisesException') == 'Constructor'
@@ -868,7 +912,6 @@
return {
'arguments': [v8_methods.argument_context(interface, constructor, argument, index)
for index, argument in enumerate(constructor.arguments)],
- 'arguments_need_try_catch': arguments_need_try_catch,
'cpp_type': cpp_template_type(
cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)),
cpp_name(interface)),
@@ -878,7 +921,7 @@
is_constructor_raises_exception or
any(argument for argument in constructor.arguments
if argument.idl_type.name == 'SerializedScriptValue' or
- argument.idl_type.may_raise_exception_on_conversion),
+ argument.idl_type.v8_conversion_needs_exception_state),
'is_call_with_document':
# [ConstructorCallWith=Document]
has_extended_attribute_value(interface,
@@ -992,8 +1035,8 @@
idl_type.is_wrapper_type,
'idl_type': idl_type.base_type,
'is_custom': 'Custom' in extended_attributes,
- 'has_exception_state': is_raises_exception or
- idl_type.is_integer_type,
+ 'has_exception_state': (is_raises_exception or
+ idl_type.v8_conversion_needs_exception_state),
'is_raises_exception': is_raises_exception,
'name': cpp_name(setter),
'v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
diff --git a/bindings/scripts/v8_methods.py b/bindings/scripts/v8_methods.py
index 16fceaa..d330712 100644
--- a/bindings/scripts/v8_methods.py
+++ b/bindings/scripts/v8_methods.py
@@ -34,7 +34,7 @@
Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
"""
-from idl_definitions import IdlArgument
+from idl_definitions import IdlArgument, IdlOperation
from idl_types import IdlTypeBase, IdlUnionType, inherits_interface
from v8_globals import includes
import v8_types
@@ -52,23 +52,6 @@
])
-def argument_needs_try_catch(argument, return_promise):
- idl_type = argument.idl_type
- base_type = idl_type.base_type
-
- return not (
- # These cases are handled by separate code paths in the
- # generate_argument() macro in Source/bindings/templates/methods.cpp.
- idl_type.is_callback_interface or
- base_type == 'SerializedScriptValue' or
- (argument.is_variadic and idl_type.is_wrapper_type) or
- # String and enumeration arguments converted using one of the
- # TOSTRING_* macros except for _PROMISE variants in
- # Source/bindings/core/v8/V8BindingMacros.h don't use a v8::TryCatch.
- (base_type == 'DOMString' and not argument.is_variadic and
- not return_promise))
-
-
def use_local_result(method):
extended_attributes = method.extended_attributes
idl_type = method.idl_type
@@ -85,7 +68,6 @@
idl_type = method.idl_type
is_static = method.is_static
name = method.name
- return_promise = idl_type.name == 'Promise'
idl_type.add_includes_for_type()
this_cpp_value = cpp_value(interface, method, len(arguments))
@@ -118,16 +100,19 @@
includes.add('bindings/common/BindingSecurity.h')
is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
if is_custom_element_callbacks:
- includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
+ includes.add('core/dom/custom/CustomElementProcessingStack.h')
+
+ is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
is_check_security_for_frame = (
- 'CheckSecurity' in interface.extended_attributes and
- 'DoNotCheckSecurity' not in extended_attributes)
- is_raises_exception = 'RaisesException' in extended_attributes
+ has_extended_attribute_value(interface, 'CheckSecurity', 'Frame') and
+ not is_do_not_check_security)
- arguments_need_try_catch = (
- any(argument_needs_try_catch(argument, return_promise)
- for argument in arguments))
+ is_check_security_for_window = (
+ has_extended_attribute_value(interface, 'CheckSecurity', 'Window') and
+ not is_do_not_check_security)
+
+ is_raises_exception = 'RaisesException' in extended_attributes
return {
'activity_logging_world_list': v8_utilities.activity_logging_world_list(method), # [ActivityLogging]
@@ -135,7 +120,6 @@
for index, argument in enumerate(arguments)],
'argument_declarations_for_private_script':
argument_declarations_for_private_script(interface, method),
- 'arguments_need_try_catch': arguments_need_try_catch,
'conditional_string': v8_utilities.conditional_string(method),
'cpp_type': (v8_types.cpp_template_type('Nullable', idl_type.cpp_type)
if idl_type.is_explicit_nullable else idl_type.cpp_type),
@@ -153,19 +137,20 @@
'has_exception_state':
is_raises_exception or
is_check_security_for_frame or
- interface.name == 'EventTarget' or # FIXME: merge with is_check_security_for_frame http://crbug.com/383699
+ is_check_security_for_window or
any(argument for argument in arguments
- if argument.idl_type.name == 'SerializedScriptValue' or
- argument.idl_type.may_raise_exception_on_conversion),
+ if (argument.idl_type.name == 'SerializedScriptValue' or
+ argument_conversion_needs_exception_state(method, argument))),
'idl_type': idl_type.base_type,
'is_call_with_execution_context': has_extended_attribute_value(method, 'CallWith', 'ExecutionContext'),
'is_call_with_script_arguments': is_call_with_script_arguments,
'is_call_with_script_state': is_call_with_script_state,
'is_check_security_for_frame': is_check_security_for_frame,
'is_check_security_for_node': is_check_security_for_node,
+ 'is_check_security_for_window': is_check_security_for_window,
'is_custom': 'Custom' in extended_attributes,
'is_custom_element_callbacks': is_custom_element_callbacks,
- 'is_do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
+ 'is_do_not_check_security': is_do_not_check_security,
'is_do_not_check_signature': 'DoNotCheckSignature' in extended_attributes,
'is_explicit_nullable': idl_type.is_explicit_nullable,
'is_implemented_in_private_script': is_implemented_in_private_script,
@@ -206,26 +191,24 @@
idl_type = argument.idl_type
this_cpp_value = cpp_value(interface, method, index)
is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
- return_promise = (method.idl_type.name == 'Promise' if method.idl_type
- else False)
if ('ImplementedInPrivateScript' in extended_attributes and
not idl_type.is_wrapper_type and
not idl_type.is_basic_type):
raise Exception('Private scripts supports only primitive types and DOM wrappers.')
+ default_cpp_value = argument.default_cpp_value
return {
'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attributes,
raw_type=True,
used_as_variadic_argument=argument.is_variadic),
- 'cpp_type_initializer': idl_type.cpp_type_initializer,
'cpp_value': this_cpp_value,
# FIXME: check that the default value's type is compatible with the argument's
- 'default_value': argument.default_cpp_value,
+ 'default_value': default_cpp_value,
'enum_validation_expression': idl_type.enum_validation_expression,
'handle': '%sHandle' % argument.name,
# FIXME: remove once [Default] removed and just use argument.default_value
- 'has_default': 'Default' in extended_attributes or argument.default_value,
+ 'has_default': 'Default' in extended_attributes or default_cpp_value,
'has_type_checking_interface':
(has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or
has_extended_attribute_value(method, 'TypeChecking', 'Interface')) and
@@ -238,8 +221,9 @@
'idl_type': idl_type.base_type,
'idl_type_object': idl_type,
'index': index,
- 'is_clamp': 'Clamp' in extended_attributes,
'is_callback_interface': idl_type.is_callback_interface,
+ # FIXME: Remove generic 'Dictionary' special-casing
+ 'is_dictionary': idl_type.is_dictionary or idl_type.base_type == 'Dictionary',
'is_nullable': idl_type.is_nullable,
'is_optional': argument.is_optional,
'is_variadic_wrapper_type': is_variadic_wrapper_type,
@@ -250,7 +234,7 @@
creation_context='scriptState->context()->Global()'),
'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value),
'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
- 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index, return_promise=return_promise),
+ 'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index, return_promise=method.returns_promise),
'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type),
}
@@ -274,8 +258,9 @@
idl_type = argument.idl_type
if idl_type.name == 'EventListener':
return argument.name
- if (idl_type.is_callback_interface or
- idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
+ if idl_type.is_dictionary:
+ return '*%s' % argument.name
+ if (idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
'XPathNSResolver', 'XPathNSResolverOrNull']):
# FIXME: remove this special case
return '%s.release()' % argument.name
@@ -361,15 +346,16 @@
suffix = ''
- macro = 'TONATIVE_VOID'
+ macro = 'TONATIVE_VOID_EXCEPTIONSTATE'
macro_args = [
- argument.name,
- 'toNativeArguments<%s>(info, %s)' % (idl_type.cpp_type, index),
+ argument.name,
+ 'toImplArguments<%s>(info, %s, exceptionState)' % (idl_type.cpp_type, index),
+ 'exceptionState',
]
if return_promise:
suffix += '_PROMISE'
- macro_args.append('info')
+ macro_args.extend(['info', 'V8ScriptState::current(info.GetIsolate())'])
suffix += '_INTERNAL'
@@ -407,10 +393,12 @@
"""Returns a context of union member for argument."""
this_cpp_value = 'result%d' % index
this_cpp_type = idl_type.cpp_type
+ this_cpp_type_initializer = idl_type.cpp_type_initializer
cpp_return_value = this_cpp_value
if not idl_type.cpp_type_has_null_value:
this_cpp_type = v8_types.cpp_template_type('Nullable', this_cpp_type)
+ this_cpp_type_initializer = ''
cpp_return_value = '%s.get()' % this_cpp_value
if idl_type.is_string_type:
@@ -420,6 +408,7 @@
return {
'cpp_type': this_cpp_type,
+ 'cpp_type_initializer': this_cpp_type_initializer,
'cpp_value': this_cpp_value,
'null_check_value': null_check_value,
'v8_set_return_value': idl_type.v8_set_return_value(
@@ -435,6 +424,9 @@
def argument_default_cpp_value(argument):
+ if argument.idl_type.is_dictionary:
+ # We always create impl objects for IDL dictionaries.
+ return '%s::create()' % argument.idl_type.base_type
if not argument.default_value:
return None
return argument.idl_type.literal_cpp_value(argument.default_value)
@@ -442,3 +434,17 @@
IdlTypeBase.union_arguments = None
IdlUnionType.union_arguments = property(union_arguments)
IdlArgument.default_cpp_value = property(argument_default_cpp_value)
+
+
+def method_returns_promise(method):
+ return method.idl_type and method.idl_type.name == 'Promise'
+
+IdlOperation.returns_promise = property(method_returns_promise)
+
+
+def argument_conversion_needs_exception_state(method, argument):
+ idl_type = argument.idl_type
+ return (idl_type.v8_conversion_needs_exception_state or
+ argument.is_variadic or
+ (method.returns_promise and (idl_type.is_string_type or
+ idl_type.is_enum)))
diff --git a/bindings/scripts/v8_types.py b/bindings/scripts/v8_types.py
index 1ee093a..a332f4a 100644
--- a/bindings/scripts/v8_types.py
+++ b/bindings/scripts/v8_types.py
@@ -39,7 +39,7 @@
import posixpath
-from idl_types import IdlTypeBase, IdlType, IdlUnionType, IdlArrayOrSequenceType
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, IdlArrayOrSequenceType, IdlNullableType
import v8_attributes # for IdlType.constructor_type_name
from v8_globals import includes
@@ -49,11 +49,9 @@
################################################################################
NON_WRAPPER_TYPES = frozenset([
- 'CompareHow',
'Dictionary',
'EventHandler',
'EventListener',
- 'MediaQueryListListener',
'NodeFilter',
'SerializedScriptValue',
])
@@ -72,12 +70,9 @@
'Uint32Array': ('unsigned int', 'v8::kExternalUnsignedIntArray'),
}
-IdlTypeBase.is_typed_array_element_type = False
IdlType.is_typed_array_element_type = property(
lambda self: self.base_type in TYPED_ARRAYS)
-
-IdlTypeBase.is_wrapper_type = False
IdlType.is_wrapper_type = property(
lambda self: (self.is_interface_type and
self.base_type not in NON_WRAPPER_TYPES))
@@ -105,11 +100,9 @@
'unsigned short',
])
CPP_SPECIAL_CONVERSION_RULES = {
- 'CompareHow': 'Range::CompareHow',
'Date': 'double',
'Dictionary': 'Dictionary',
'EventHandler': 'EventListener*',
- 'MediaQueryListListener': 'RefPtrWillBeRawPtr<MediaQueryListListener>',
'NodeFilter': 'RefPtrWillBeRawPtr<NodeFilter>',
'Promise': 'ScriptPromise',
'ScriptValue': 'ScriptValue',
@@ -203,13 +196,24 @@
|idl_type| argument is of type IdlType.
"""
- if (idl_type.is_numeric_type):
+ base_idl_type = idl_type.base_type
+
+ if idl_type.native_array_element_type:
+ return ''
+ if idl_type.is_numeric_type:
return ' = 0'
- if idl_type.base_type == 'boolean':
+ if base_idl_type == 'boolean':
return ' = false'
if idl_type.base_type == 'Promise':
return '(nullptr)'
- return ''
+
+ if (base_idl_type in NON_WRAPPER_TYPES or
+ base_idl_type in CPP_SPECIAL_CONVERSION_RULES or
+ base_idl_type == 'any' or
+ idl_type.is_string_type or
+ idl_type.is_enum):
+ return ''
+ return ' = nullptr'
def cpp_type_union(idl_type, extended_attributes=None, raw_type=False):
@@ -231,7 +235,6 @@
IdlUnionType.cpp_type_args = cpp_type_union
-IdlTypeBase.native_array_element_type = None
IdlArrayOrSequenceType.native_array_element_type = property(
lambda self: self.element_type)
@@ -287,7 +290,6 @@
# [GarbageCollected]
IdlType.garbage_collected_types = set()
-IdlTypeBase.is_garbage_collected = False
IdlType.is_garbage_collected = property(
lambda self: self.base_type in IdlType.garbage_collected_types)
@@ -299,7 +301,6 @@
# [WillBeGarbageCollected]
IdlType.will_be_garbage_collected_types = set()
-IdlTypeBase.is_will_be_garbage_collected = False
IdlType.is_will_be_garbage_collected = property(
lambda self: self.base_type in IdlType.will_be_garbage_collected_types)
@@ -328,7 +329,6 @@
INCLUDES_FOR_TYPE = {
'object': set(),
- 'CompareHow': set(),
'Dictionary': set(['bindings/core/v8/Dictionary.h']),
'EventHandler': set(['bindings/core/v8/V8AbstractEventListener.h',
'bindings/core/v8/V8EventListenerList.h']),
@@ -339,9 +339,9 @@
'core/dom/ClassCollection.h',
'core/dom/TagCollection.h',
'core/html/HTMLCollection.h',
+ 'core/html/HTMLDataListOptionsCollection.h',
'core/html/HTMLFormControlsCollection.h',
'core/html/HTMLTableRowsCollection.h']),
- 'MediaQueryListListener': set(['core/css/MediaQueryListListener.h']),
'NodeList': set(['bindings/core/v8/V8NodeList.h',
'core/dom/NameNodeList.h',
'core/dom/NodeList.h',
@@ -381,7 +381,7 @@
IdlType.includes_for_type = property(includes_for_type)
IdlUnionType.includes_for_type = property(
- lambda self: set.union(*[includes_for_type(member_type)
+ lambda self: set.union(*[member_type.includes_for_type
for member_type in self.member_types]))
IdlArrayOrSequenceType.includes_for_type = property(
lambda self: self.element_type.includes_for_type)
@@ -420,11 +420,14 @@
native_array_element_type, interfaces_info))
includes_for_type.add('wtf/Vector.h')
+ base_idl_type = idl_type.base_type
if idl_type.is_string_type:
includes_for_type.add('wtf/text/WTFString.h')
- if idl_type.name in interfaces_info:
- interface_info = interfaces_info[idl_type.name]
+ if base_idl_type in interfaces_info:
+ interface_info = interfaces_info[idl_type.base_type]
includes_for_type.add(interface_info['include_path'])
+ if base_idl_type in INCLUDES_FOR_TYPE:
+ includes_for_type.update(INCLUDES_FOR_TYPE[base_idl_type])
return includes_for_type
IdlTypeBase.impl_includes_for_type = impl_includes_for_type
@@ -448,10 +451,10 @@
'ByteString': 'toByteString({arguments})',
'ScalarValueString': 'toScalarValueString({arguments})',
'boolean': '{v8_value}->BooleanValue()',
- 'float': 'static_cast<float>({v8_value}->NumberValue())',
- 'unrestricted float': 'static_cast<float>({v8_value}->NumberValue())',
- 'double': 'static_cast<double>({v8_value}->NumberValue())',
- 'unrestricted double': 'static_cast<double>({v8_value}->NumberValue())',
+ 'float': 'toFloat({arguments})',
+ 'unrestricted float': 'toFloat({arguments})',
+ 'double': 'toDouble({arguments})',
+ 'unrestricted double': 'toDouble({arguments})',
'byte': 'toInt8({arguments})',
'octet': 'toUInt8({arguments})',
'short': 'toInt16({arguments})',
@@ -461,19 +464,46 @@
'long long': 'toInt64({arguments})',
'unsigned long long': 'toUInt64({arguments})',
# Interface types
- 'CompareHow': 'static_cast<Range::CompareHow>({v8_value}->Int32Value())',
'Dictionary': 'Dictionary({v8_value}, {isolate})',
'EventTarget': 'V8DOMWrapper::isDOMWrapper({v8_value}) ? toWrapperTypeInfo(v8::Handle<v8::Object>::Cast({v8_value}))->toEventTarget(v8::Handle<v8::Object>::Cast({v8_value})) : 0',
- 'MediaQueryListListener': 'MediaQueryListListener::create(V8ScriptState::current({isolate}), ScriptValue(V8ScriptState::current({isolate}), {v8_value}))',
'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), V8ScriptState::current({isolate}))',
'Promise': 'V8ScriptPromise::cast(V8ScriptState::current({isolate}), {v8_value})',
- 'SerializedScriptValue': 'SerializedScriptValue::create({v8_value}, {isolate})',
+ 'SerializedScriptValue': 'SerializedScriptValue::create({v8_value}, 0, 0, exceptionState, {isolate})',
'ScriptValue': 'ScriptValue(V8ScriptState::current({isolate}), {v8_value})',
'Window': 'toDOMWindow({v8_value}, {isolate})',
'XPathNSResolver': 'toXPathNSResolver({v8_value}, {isolate})',
}
+def v8_conversion_needs_exception_state(idl_type):
+ return (idl_type.is_numeric_type or
+ idl_type.is_dictionary or
+ idl_type.name in ('ByteString', 'ScalarValueString', 'SerializedScriptValue'))
+
+IdlType.v8_conversion_needs_exception_state = property(v8_conversion_needs_exception_state)
+IdlArrayOrSequenceType.v8_conversion_needs_exception_state = True
+
+
+TRIVIAL_CONVERSIONS = frozenset([
+ 'any',
+ 'boolean',
+ 'Date',
+ 'Dictionary',
+ 'NodeFilter',
+ 'XPathNSResolver',
+ 'Promise'
+])
+
+
+def v8_conversion_is_trivial(idl_type):
+ # The conversion is a simple expression that returns the converted value and
+ # cannot raise an exception.
+ return (idl_type.base_type in TRIVIAL_CONVERSIONS or
+ idl_type.is_wrapper_type)
+
+IdlType.v8_conversion_is_trivial = property(v8_conversion_is_trivial)
+
+
def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolate):
if idl_type.name == 'void':
return ''
@@ -490,7 +520,9 @@
if 'EnforceRange' in extended_attributes:
arguments = ', '.join([v8_value, 'EnforceRange', 'exceptionState'])
- elif idl_type.may_raise_exception_on_conversion:
+ elif 'Clamp' in extended_attributes:
+ arguments = ', '.join([v8_value, 'Clamp', 'exceptionState'])
+ elif idl_type.v8_conversion_needs_exception_state:
arguments = ', '.join([v8_value, 'exceptionState'])
else:
arguments = v8_value
@@ -500,12 +532,12 @@
elif idl_type.is_typed_array_element_type:
cpp_expression_format = (
'{v8_value}->Is{idl_type}() ? '
- 'V8{idl_type}::toNative(v8::Handle<v8::{idl_type}>::Cast({v8_value})) : 0')
+ 'V8{idl_type}::toImpl(v8::Handle<v8::{idl_type}>::Cast({v8_value})) : 0')
elif idl_type.is_dictionary:
- cpp_expression_format = 'V8{idl_type}::toNative({isolate}, {v8_value})'
+ cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, exceptionState)'
else:
cpp_expression_format = (
- 'V8{idl_type}::toNativeWithTypeCheck({isolate}, {v8_value})')
+ 'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})')
return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_type, v8_value=v8_value, isolate=isolate)
@@ -521,12 +553,12 @@
native_array_element_type.name != 'Dictionary'):
this_cpp_type = None
ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_type.gc_type)
- expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}))'
+ expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionState))'
add_includes_for_type(native_array_element_type)
else:
ref_ptr_type = None
this_cpp_type = native_array_element_type.cpp_type
- expression_format = 'toNativeArray<{cpp_type}>({v8_value}, {index}, {isolate})'
+ expression_format = 'toImplArray<{cpp_type}>({v8_value}, {index}, {isolate}, exceptionState)'
expression = expression_format.format(native_array_element_type=native_array_element_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_type, v8_value=v8_value, isolate=isolate)
return expression
@@ -536,40 +568,60 @@
# FIXME: Support union type.
if idl_type.is_union_type:
- return ''
+ return '/* no V8 -> C++ conversion for IDL union type: %s */' % idl_type.name
this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, raw_type=True)
-
idl_type = idl_type.preprocessed_type
+
+ if idl_type.base_type in ('void', 'object', 'EventHandler', 'EventListener'):
+ return '/* no V8 -> C++ conversion for IDL type: %s */' % idl_type.name
+
cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolate)
- args = [variable_name, cpp_value]
- if idl_type.base_type == 'DOMString':
- macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_VOID'
- elif idl_type.may_raise_exception_on_conversion:
- macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script else 'TONATIVE_VOID_EXCEPTIONSTATE'
- args.append('exceptionState')
- else:
- macro = 'TONATIVE_DEFAULT' if used_in_private_script else 'TONATIVE_VOID'
+ if idl_type.is_string_type or idl_type.v8_conversion_needs_exception_state:
+ # Types that need error handling and use one of a group of (C++) macros
+ # to take care of this.
- if used_in_private_script:
- args.append('false')
+ args = [variable_name, cpp_value]
- # Macros come in several variants, to minimize expensive creation of
- # v8::TryCatch.
- suffix = ''
+ if idl_type.v8_conversion_needs_exception_state:
+ macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script else 'TONATIVE_VOID_EXCEPTIONSTATE'
+ elif return_promise:
+ macro = 'TOSTRING_VOID_EXCEPTIONSTATE'
+ else:
+ macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_VOID'
- if return_promise:
- suffix += '_PROMISE'
- args.append('info')
- if macro == 'TONATIVE_VOID_EXCEPTIONSTATE':
- args.append('V8ScriptState::current(%s)' % isolate)
+ if macro.endswith('_EXCEPTIONSTATE'):
+ args.append('exceptionState')
+ if used_in_private_script:
+ args.append('false')
+
+ suffix = ''
+
+ if return_promise:
+ suffix += '_PROMISE'
+ args.append('info')
+ if macro.endswith('_EXCEPTIONSTATE'):
+ args.append('V8ScriptState::current(%s)' % isolate)
+
+ if declare_variable:
+ args.insert(0, this_cpp_type)
+ else:
+ suffix += '_INTERNAL'
+
+ return '%s(%s)' % (macro + suffix, ', '.join(args))
+
+ # Types that don't need error handling, and simply assign a value to the
+ # local variable.
+
+ if not idl_type.v8_conversion_is_trivial:
+ raise Exception('unclassified V8 -> C++ conversion for IDL type: %s' % idl_type.name)
+
+ assignment = '%s = %s' % (variable_name, cpp_value)
if declare_variable:
- args.insert(0, this_cpp_type)
- else:
- suffix += '_INTERNAL'
+ return '%s %s' % (this_cpp_type, assignment)
+ return assignment
- return '%s(%s)' % (macro + suffix, ', '.join(args))
IdlTypeBase.v8_value_to_local_cpp_value = v8_value_to_local_cpp_value
@@ -582,7 +634,7 @@
if idl_type.is_enum:
# Enumerations are internally DOMStrings
return IdlType('DOMString')
- if (idl_type.name == 'Any' or idl_type.is_callback_function):
+ if (idl_type.name in ['Any', 'Object'] or idl_type.is_callback_function):
return IdlType('ScriptValue')
return idl_type
@@ -597,7 +649,10 @@
if idl_type.base_type in ['long long', 'unsigned long long']:
# long long and unsigned long long are not representable in ECMAScript;
# we represent them as doubles.
- idl_type = IdlType('double', is_nullable=idl_type.is_nullable)
+ is_nullable = idl_type.is_nullable
+ idl_type = IdlType('double')
+ if is_nullable:
+ idl_type = IdlNullableType(idl_type)
cpp_value = 'static_cast<double>(%s)' % cpp_value
# HTML5 says that unsigned reflected attributes should be in the range
# [0, 2^31). When a value isn't in this range, a default value (or 0)
@@ -734,7 +789,6 @@
IdlUnionType.release = property(
lambda self: [member_type.is_interface_type
for member_type in self.member_types])
-IdlArrayOrSequenceType.release = False
CPP_VALUE_TO_V8_VALUE = {
@@ -795,9 +849,14 @@
def cpp_type_has_null_value(idl_type):
# - String types (String/AtomicString) represent null as a null string,
# i.e. one for which String::isNull() returns true.
+ # - Enum types, as they are implemented as Strings.
# - Wrapper types (raw pointer or RefPtr/PassRefPtr) represent null as
# a null pointer.
- return idl_type.is_string_type or idl_type.is_wrapper_type
+ # - Dictionary types represent null as a null pointer. They are garbage
+ # collected so their type is raw pointer.
+ # - 'Object' type. We use ScriptValue for object type.
+ return (idl_type.is_string_type or idl_type.is_wrapper_type or
+ idl_type.is_enum or idl_type.is_dictionary or idl_type.base_type == 'object')
IdlTypeBase.cpp_type_has_null_value = property(cpp_type_has_null_value)
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
index 4a2b46a..e6ee9c9 100644
--- a/bindings/scripts/v8_utilities.py
+++ b/bindings/scripts/v8_utilities.py
@@ -58,9 +58,10 @@
# Extended attribute parsing
################################################################################
-def extended_attribute_value_contains(extended_attribute_value, value):
- return (extended_attribute_value and
- value in re.split('[|,]', extended_attribute_value))
+def extended_attribute_value_contains(extended_attribute_value, key):
+ return (extended_attribute_value == key or
+ (isinstance(extended_attribute_value, list) and
+ key in extended_attribute_value))
def has_extended_attribute(definition_or_member, extended_attribute_list):
@@ -74,13 +75,14 @@
extended_attribute_value_contains(extended_attributes[name], value))
-def sorted_extended_attribute_set(definition_or_member, name):
+def extended_attribute_value_as_list(definition_or_member, name):
extended_attributes = definition_or_member.extended_attributes
if name not in extended_attributes:
- return []
-
- attribute_values = re.split('[|,]', extended_attributes[name])
- return sorted(attribute_values)
+ return None
+ value = extended_attributes[name]
+ if isinstance(value, list):
+ return value
+ return [value]
################################################################################
@@ -222,13 +224,7 @@
extended_attributes = definition_or_member.extended_attributes
if 'Conditional' not in extended_attributes:
return None
- conditional = extended_attributes['Conditional']
- for delimiter in ',|':
- if delimiter in conditional:
- conditions = conditional.split(delimiter)
- operator_separator = ' %s ' % DELIMITER_TO_OPERATOR[delimiter]
- return operator_separator.join('ENABLE(%s)' % expression for expression in sorted(conditions))
- return 'ENABLE(%s)' % conditional
+ return 'ENABLE(%s)' % extended_attributes['Conditional']
# [DeprecateAs]
@@ -251,7 +247,7 @@
def exposed(definition_or_member, interface):
- exposure_set = sorted_extended_attribute_set(definition_or_member, 'Exposed')
+ exposure_set = extended_attribute_value_as_list(definition_or_member, 'Exposed')
if not exposure_set:
return None
@@ -273,7 +269,7 @@
def expanded_exposure_set_for_interface(interface):
- exposure_set = sorted_extended_attribute_set(interface, 'Exposed')
+ exposure_set = extended_attribute_value_as_list(interface, 'Exposed')
# "Worker" is an aggregation for the different kinds of workers.
if 'Worker' in exposure_set:
diff --git a/bindings/tests/idls/SVGTestInterface.idl b/bindings/tests/idls/core/SVGTestInterface.idl
similarity index 100%
rename from bindings/tests/idls/SVGTestInterface.idl
rename to bindings/tests/idls/core/SVGTestInterface.idl
diff --git a/bindings/tests/idls/TestCallbackInterface.idl b/bindings/tests/idls/core/TestCallbackInterface.idl
similarity index 100%
rename from bindings/tests/idls/TestCallbackInterface.idl
rename to bindings/tests/idls/core/TestCallbackInterface.idl
diff --git a/bindings/tests/idls/TestDictionary.idl b/bindings/tests/idls/core/TestDictionary.idl
similarity index 84%
rename from bindings/tests/idls/TestDictionary.idl
rename to bindings/tests/idls/core/TestDictionary.idl
index a05f0b8..7bd1ac0 100644
--- a/bindings/tests/idls/TestDictionary.idl
+++ b/bindings/tests/idls/core/TestDictionary.idl
@@ -1,6 +1,9 @@
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
+enum TestEnum { "foo", "bar", "baz" };
+
[
GarbageCollected,
] dictionary TestDictionary {
@@ -17,4 +20,8 @@
TestInterfaceWillBeGarbageCollected? testInterfaceWillBeGarbageCollectedOrNullMember;
DOMString[] stringArrayMember;
sequence<DOMString> stringSequenceMember;
+ TestEnum enumMember = "foo";
+ Element? elementOrNullMember;
+ object objectMember;
+ object? objectOrNullMember;
};
diff --git a/bindings/tests/idls/TestException.idl b/bindings/tests/idls/core/TestException.idl
similarity index 100%
rename from bindings/tests/idls/TestException.idl
rename to bindings/tests/idls/core/TestException.idl
diff --git a/bindings/tests/idls/TestImplements.idl b/bindings/tests/idls/core/TestImplements.idl
similarity index 100%
rename from bindings/tests/idls/TestImplements.idl
rename to bindings/tests/idls/core/TestImplements.idl
diff --git a/bindings/tests/idls/TestImplements2.idl b/bindings/tests/idls/core/TestImplements2.idl
similarity index 100%
rename from bindings/tests/idls/TestImplements2.idl
rename to bindings/tests/idls/core/TestImplements2.idl
diff --git a/bindings/tests/idls/TestImplements3.idl b/bindings/tests/idls/core/TestImplements3.idl
similarity index 100%
rename from bindings/tests/idls/TestImplements3.idl
rename to bindings/tests/idls/core/TestImplements3.idl
diff --git a/bindings/tests/idls/TestInterface.idl b/bindings/tests/idls/core/TestInterface.idl
similarity index 95%
rename from bindings/tests/idls/TestInterface.idl
rename to bindings/tests/idls/core/TestInterface.idl
index 7dfed9a..135c6f8 100644
--- a/bindings/tests/idls/TestInterface.idl
+++ b/bindings/tests/idls/core/TestInterface.idl
@@ -34,12 +34,13 @@
[
ActiveDOMObject,
Conditional=CONDITION,
- Custom=LegacyCallAsFunction|ToV8,
+ Custom=(LegacyCallAsFunction,ToV8),
DoNotCheckConstants,
ImplementedAs=TestInterfaceImplementation,
+ Iterable,
RuntimeEnabled=FeatureName,
SetWrapperReferenceTo(TestInterface referencedName),
- TypeChecking=Interface|Unrestricted,
+ TypeChecking=(Interface,Unrestricted),
Exposed=(Worker,Window),
] interface TestInterface : TestInterfaceEmpty {
// members needed to test [ImplementedAs], as this affect attribute
@@ -87,6 +88,9 @@
[Exposed=Window] attribute long windowExposedAttribute;
[Exposed=(Window,ServiceWorker)] void windowAndServiceWorkerExposedMethod();
+
+ void voidMethodPartailOverload();
+ static void voidMethodPartailOverload();
};
TestInterface implements TestImplements;
diff --git a/bindings/tests/idls/TestInterface2.idl b/bindings/tests/idls/core/TestInterface2.idl
similarity index 92%
rename from bindings/tests/idls/TestInterface2.idl
rename to bindings/tests/idls/core/TestInterface2.idl
index 8027826..8bb30a6 100644
--- a/bindings/tests/idls/TestInterface2.idl
+++ b/bindings/tests/idls/core/TestInterface2.idl
@@ -38,8 +38,11 @@
Custom=Wrap, // Conflicts with and [Custom=ToV8], respectively
DependentLifetime, // Covered by [ActiveDOMObject]
SetWrapperReferenceFrom=ownerNode, // Conflicts with [SetWrapperReferenceTo]
- SpecialWrapFor=TestInterface|TestInterfaceEmpty, // Conflicts with [Custom=ToV8]
+ SpecialWrapFor=(TestInterface,TestInterfaceEmpty), // Conflicts with [Custom=ToV8]
] interface TestInterface2 {
+ // This interface has only runtime enabled constants.
+ [RuntimeEnabled=FeatureName] const unsigned short CONST_VALUE_1 = 1;
+
// Indexed property operations with an identifier
[RaisesException] getter TestInterfaceEmpty item(unsigned long index);
[RaisesException] setter DOMString setItem(unsigned long index, DOMString value);
diff --git a/bindings/tests/idls/TestInterface3.idl b/bindings/tests/idls/core/TestInterface3.idl
similarity index 95%
rename from bindings/tests/idls/TestInterface3.idl
rename to bindings/tests/idls/core/TestInterface3.idl
index 6b90bda..2e20986 100644
--- a/bindings/tests/idls/TestInterface3.idl
+++ b/bindings/tests/idls/core/TestInterface3.idl
@@ -40,7 +40,7 @@
[Custom] setter boolean (unsigned long index, Node value);
[Custom] deleter boolean (unsigned long index);
- [Custom=PropertyGetter|PropertyEnumerator|PropertyQuery] getter Node (DOMString name);
+ [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter Node (DOMString name);
[Custom] setter Node (DOMString name, Node value);
[Custom] deleter boolean (DOMString name);
};
diff --git a/bindings/tests/idls/TestInterfaceCheckSecurity.idl b/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceCheckSecurity.idl
rename to bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
diff --git a/bindings/tests/idls/TestInterfaceConstructor.idl b/bindings/tests/idls/core/TestInterfaceConstructor.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceConstructor.idl
rename to bindings/tests/idls/core/TestInterfaceConstructor.idl
diff --git a/bindings/tests/idls/TestInterfaceConstructor2.idl b/bindings/tests/idls/core/TestInterfaceConstructor2.idl
similarity index 96%
rename from bindings/tests/idls/TestInterfaceConstructor2.idl
rename to bindings/tests/idls/core/TestInterfaceConstructor2.idl
index 10057de..209a000 100644
--- a/bindings/tests/idls/TestInterfaceConstructor2.idl
+++ b/bindings/tests/idls/core/TestInterfaceConstructor2.idl
@@ -40,6 +40,7 @@
// 2 constructors with same type length, to test overload resolution
Constructor(DOMString stringArg),
Constructor(Dictionary dictionaryArg),
+ Constructor(sequence<sequence<DOMString>> stringSequenceSequenceArg),
Constructor(
TestInterfaceEmpty testInterfaceEmptyArg,
long longArg,
diff --git a/bindings/tests/idls/TestInterfaceConstructor3.idl b/bindings/tests/idls/core/TestInterfaceConstructor3.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceConstructor3.idl
rename to bindings/tests/idls/core/TestInterfaceConstructor3.idl
diff --git a/bindings/tests/idls/TestInterfaceConstructor4.idl b/bindings/tests/idls/core/TestInterfaceConstructor4.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceConstructor4.idl
rename to bindings/tests/idls/core/TestInterfaceConstructor4.idl
diff --git a/bindings/tests/idls/TestInterfaceCustomConstructor.idl b/bindings/tests/idls/core/TestInterfaceCustomConstructor.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceCustomConstructor.idl
rename to bindings/tests/idls/core/TestInterfaceCustomConstructor.idl
diff --git a/bindings/tests/idls/TestInterfaceDocument.idl b/bindings/tests/idls/core/TestInterfaceDocument.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceDocument.idl
rename to bindings/tests/idls/core/TestInterfaceDocument.idl
diff --git a/bindings/tests/idls/TestInterfaceEmpty.idl b/bindings/tests/idls/core/TestInterfaceEmpty.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceEmpty.idl
rename to bindings/tests/idls/core/TestInterfaceEmpty.idl
diff --git a/bindings/tests/idls/TestInterfaceEventConstructor.idl b/bindings/tests/idls/core/TestInterfaceEventConstructor.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceEventConstructor.idl
rename to bindings/tests/idls/core/TestInterfaceEventConstructor.idl
diff --git a/bindings/tests/idls/TestInterfaceEventTarget.idl b/bindings/tests/idls/core/TestInterfaceEventTarget.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceEventTarget.idl
rename to bindings/tests/idls/core/TestInterfaceEventTarget.idl
diff --git a/bindings/tests/idls/TestInterfaceGarbageCollected.idl b/bindings/tests/idls/core/TestInterfaceGarbageCollected.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceGarbageCollected.idl
rename to bindings/tests/idls/core/TestInterfaceGarbageCollected.idl
diff --git a/bindings/tests/idls/TestInterfaceNamedConstructor.idl b/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceNamedConstructor.idl
rename to bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
diff --git a/bindings/tests/idls/TestInterfaceNamedConstructor2.idl b/bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceNamedConstructor2.idl
rename to bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl
diff --git a/bindings/tests/idls/TestInterfaceNode.idl b/bindings/tests/idls/core/TestInterfaceNode.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceNode.idl
rename to bindings/tests/idls/core/TestInterfaceNode.idl
diff --git a/bindings/tests/idls/core/TestInterfaceNotScriptWrappable.idl b/bindings/tests/idls/core/TestInterfaceNotScriptWrappable.idl
new file mode 100644
index 0000000..aa8192d
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfaceNotScriptWrappable.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ NotScriptWrappable,
+] interface TestInterfaceNotScriptWrappable {
+ attribute TestInterfaceNotScriptWrappable attr1;
+ void func(TestInterfaceNotScriptWrappable arg);
+};
diff --git a/bindings/tests/idls/TestInterfaceWillBeGarbageCollected.idl b/bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.idl
similarity index 100%
rename from bindings/tests/idls/TestInterfaceWillBeGarbageCollected.idl
rename to bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.idl
diff --git a/bindings/tests/idls/TestNode.idl b/bindings/tests/idls/core/TestNode.idl
similarity index 100%
rename from bindings/tests/idls/TestNode.idl
rename to bindings/tests/idls/core/TestNode.idl
diff --git a/bindings/tests/idls/TestObject.idl b/bindings/tests/idls/core/TestObject.idl
similarity index 94%
rename from bindings/tests/idls/TestObject.idl
rename to bindings/tests/idls/core/TestObject.idl
index e76b5b9..44d9cae 100644
--- a/bindings/tests/idls/TestObject.idl
+++ b/bindings/tests/idls/core/TestObject.idl
@@ -62,6 +62,7 @@
// Extended attributes
[DeprecateAs=Constant] const short DEPRECATED_CONSTANT = 1;
+ [MeasureAs=Constant] const short MEASURED_CONSTANT = 1;
[RuntimeEnabled=FeatureName] const short FEATURE_ENABLED_CONST = 1;
[Reflect=CONST_IMPL] const short CONST_JAVASCRIPT = 1;
@@ -164,11 +165,9 @@
[CachedAttribute=isStringDirty] attribute DOMString? cachedStringOrNoneAttribute;
[CallWith=ExecutionContext] attribute any callWithExecutionContextAnyAttribute;
[CallWith=ScriptState] attribute any callWithScriptStateAnyAttribute;
- [CallWith=ExecutionContext|ScriptState] attribute any callWithExecutionContextAndScriptStateAnyAttribute;
+ [CallWith=(ExecutionContext,ScriptState)] attribute any callWithExecutionContextAndScriptStateAnyAttribute;
[CheckSecurity=Node] readonly attribute Document checkSecurityForNodeReadonlyDocumentAttribute; // All uses are read only
[Conditional=CONDITION] attribute long conditionalLongAttribute;
- [Conditional=(CONDITION_1,CONDITION_2)] attribute long conditionalAndLongAttribute;
- [Conditional=CONDITION_1|CONDITION_2] attribute long conditionalOrLongAttribute;
// Constructors: FIXME: replace suffix with [ConstructorAttribute]
attribute TestInterfaceEmptyConstructor testInterfaceEmptyConstructorAttribute;
[DeprecateAs=deprecatedTestInterfaceEmptyConstructorAttribute] attribute TestInterfaceEmptyConstructor testInterfaceEmptyConstructorAttribute;
@@ -224,12 +223,12 @@
[Reflect=class] attribute DOMString reflectedClass;
// Limited value attributes and enumerated attributes
[Reflect, ReflectOnly="unique"] attribute DOMString limitedToOnlyOneAttribute;
- [Reflect, ReflectOnly="Per"|"Paal"|"Espen"] attribute DOMString limitedToOnlyAttribute;
- [Reflect=other, ReflectOnly="Value1"|"Value2" ] attribute DOMString limitedToOnlyOtherAttribute;
- [Reflect, ReflectOnly="rsa"|"dsa", ReflectMissing="rsa"] attribute DOMString limitedWithMissingDefaultAttribute;
- [Reflect, ReflectOnly="ltr"|"rtl"|"auto", ReflectMissing="auto", ReflectInvalid="ltr"] attribute DOMString limitedWithInvalidMissingDefaultAttribute;
- [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] readonly attribute DOMString corsSettingAttribute;
- [Reflect, ReflectOnly="empty"|"missing"|"invalid"|"a-normal", ReflectEmpty="empty", ReflectMissing="missing", ReflectInvalid="invalid"] readonly attribute DOMString limitedWithEmptyMissingInvalidAttribute;
+ [Reflect, ReflectOnly=("Per","Paal","Espen")] attribute DOMString limitedToOnlyAttribute;
+ [Reflect=other, ReflectOnly=("Value1","Value2")] attribute DOMString limitedToOnlyOtherAttribute;
+ [Reflect, ReflectOnly=("rsa","dsa"), ReflectMissing="rsa"] attribute DOMString limitedWithMissingDefaultAttribute;
+ [Reflect, ReflectOnly=("ltr","rtl","auto"), ReflectMissing="auto", ReflectInvalid="ltr"] attribute DOMString limitedWithInvalidMissingDefaultAttribute;
+ [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] readonly attribute DOMString corsSettingAttribute;
+ [Reflect, ReflectOnly=("empty","missing","invalid","a-normal"), ReflectEmpty="empty", ReflectMissing="missing", ReflectInvalid="invalid"] readonly attribute DOMString limitedWithEmptyMissingInvalidAttribute;
[Replaceable] readonly attribute long replaceableReadonlyLongAttribute;
[Replaceable, PutForwards=href] readonly attribute TestNode locationReplaceable;
@@ -253,8 +252,6 @@
[Reflect, URL] attribute DOMString urlStringAttribute;
[Reflect=reflectUrlAttribute, URL] attribute DOMString urlStringAttribute;
[Unforgeable] attribute long unforgeableLongAttribute;
- [LogActivity=SetterOnly, LogPreviousValue] attribute DOMString? activityLoggingSetterOnlyLogPreviousValueAttribute;
- [LogActivity, LogPreviousValue] attribute TestInterfaceEmpty activityLoggingLogPreviousValueInterfaceAttribute;
// Methods
@@ -311,11 +308,8 @@
void voidMethodVoidCallbackFunctionArg(VoidCallbackFunction voidCallbackFunctionArg);
void voidMethodAnyCallbackFunctionOptionalAnyArg(AnyCallbackFunctionOptionalAnyArg anyCallbackFunctionOptionalAnyArgArg);
// Custom type conversions
- CompareHow compareHowMethod();
any anyMethod();
- void voidMethodCompareHowArg(CompareHow compareHowArg);
void voidMethodEventTargetArg(EventTarget eventTargetArg);
- void voidMethodMediaQueryListListenerArg(MediaQueryListListener mediaQueryListListenerArg);
void voidMethodAnyArg(any anyArg);
// DOM node types
void voidMethodAttrArg(Attr attrArg);
@@ -349,11 +343,16 @@
void voidMethodSequenceLongArg(sequence<long> longSequenceArg);
void voidMethodSequenceStringArg(sequence<DOMString> stringSequenceArg);
void voidMethodSequenceTestInterfaceEmptyArg(sequence<TestInterfaceEmpty> testInterfaceEmptySequenceArg);
+ void voidMethodSequenceSequenceDOMStringArg(sequence<sequence<DOMString>> stringSequenceSequenceArg);
// Nullable types
long? nullableLongMethod();
DOMString? nullableStringMethod();
TestInterface? nullableTestInterfaceMethod();
sequence<long>? nullableLongSequenceMethod();
+ // Union types
+ (TestInterfaceGarbageCollected or DOMString) testInterfaceGarbageCollectedOrDOMStringMethod();
+ (TestInterfaceWillBeGarbageCollected or TestDictionary) testInterfaceWillBeGarbageCollectedOrTestDictionaryMethod();
+ (sequence<long> or DOMString[] or unrestricted double) longSequenceOrDOMStringArrayOrUnrestrictedDoubleMethod();
// Currently only used on interface type arguments
void voidMethodTestInterfaceEmptyOrNullArg(TestInterfaceEmpty? nullableTestInterfaceEmptyArg);
// Callback interface types
@@ -376,6 +375,8 @@
void voidMethodSerializedScriptValueArg(SerializedScriptValue serializedScriptValueArg);
void voidMethodXPathNSResolverArg(XPathNSResolver xPathNSResolverArg);
void voidMethodDictionarySequenceArg(sequence<Dictionary> dictionarySequenceArg);
+ Promise overloadedPromiseMethod(long arg);
+ Promise overloadedPromiseMethod(DOMString arg);
// Arguments
void voidMethodStringArgLongArg(DOMString stringArg, long longArg);
@@ -433,6 +434,8 @@
void overloadedMethodH(TestInterfaceEmpty testInterfaceEmptyArg);
void overloadedMethodI(DOMString stringArg);
void overloadedMethodI(double doubleArg);
+ void overloadedMethodJ(DOMString stringArg);
+ void overloadedMethodJ(TestDictionary testDictionaryArg);
[PerWorldBindings] void overloadedPerWorldBindingsMethod();
@@ -468,7 +471,6 @@
[CallWith=(ActiveWindow,FirstWindow)] void callWithActiveWindowScriptWindow();
[CheckSecurity=Node] void checkSecurityForNodeVoidMethod();
[Conditional=CONDITION] void conditionalConditionVoidMethod();
- [Conditional=(CONDITION_1,CONDITION_2)] void conditionalCondition1AndCondition2VoidMethod();
[Conditional=CONDITION] static void conditionalConditionStaticVoidMethod();
[Custom] void customVoidMethod();
[Conditional=CONDITION, Custom] void conditionalConditionCustomVoidMethod();
@@ -549,4 +551,5 @@
[OnlyExposedToPrivateScript] attribute DOMString attributeImplementedInCPPForPrivateScriptOnly;
[ImplementedInPrivateScript, OnlyExposedToPrivateScript] short methodForPrivateScriptOnly(short value1, short value2);
[ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString attributeForPrivateScriptOnly;
+ [ImplementedInPrivateScript] attribute TestEnum enumForPrivateScript;
};
diff --git a/bindings/tests/idls/TestPartialInterface.idl b/bindings/tests/idls/core/TestPartialInterface.idl
similarity index 100%
rename from bindings/tests/idls/TestPartialInterface.idl
rename to bindings/tests/idls/core/TestPartialInterface.idl
diff --git a/bindings/tests/idls/TestPartialInterface2.idl b/bindings/tests/idls/core/TestPartialInterface2.idl
similarity index 100%
rename from bindings/tests/idls/TestPartialInterface2.idl
rename to bindings/tests/idls/core/TestPartialInterface2.idl
diff --git a/bindings/tests/idls/TestSpecialOperations.idl b/bindings/tests/idls/core/TestSpecialOperations.idl
similarity index 100%
rename from bindings/tests/idls/TestSpecialOperations.idl
rename to bindings/tests/idls/core/TestSpecialOperations.idl
diff --git a/bindings/tests/idls/TestSpecialOperationsNotEnumerable.idl b/bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl
similarity index 100%
rename from bindings/tests/idls/TestSpecialOperationsNotEnumerable.idl
rename to bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl
diff --git a/bindings/tests/idls/TestTypedefs.idl b/bindings/tests/idls/core/TestTypedefs.idl
similarity index 100%
rename from bindings/tests/idls/TestTypedefs.idl
rename to bindings/tests/idls/core/TestTypedefs.idl
diff --git a/bindings/tests/idls/TestInterface.idl b/bindings/tests/idls/modules/TestInterface5.idl
similarity index 86%
copy from bindings/tests/idls/TestInterface.idl
copy to bindings/tests/idls/modules/TestInterface5.idl
index 7dfed9a..72e8535 100644
--- a/bindings/tests/idls/TestInterface.idl
+++ b/bindings/tests/idls/modules/TestInterface5.idl
@@ -34,22 +34,23 @@
[
ActiveDOMObject,
Conditional=CONDITION,
- Custom=LegacyCallAsFunction|ToV8,
+ Custom=(LegacyCallAsFunction,ToV8),
DoNotCheckConstants,
- ImplementedAs=TestInterfaceImplementation,
+ ImplementedAs=TestInterface5Implementation,
+ Iterable,
RuntimeEnabled=FeatureName,
- SetWrapperReferenceTo(TestInterface referencedName),
- TypeChecking=Interface|Unrestricted,
+ SetWrapperReferenceTo(TestInterface5 referencedName),
+ TypeChecking=(Interface,Unrestricted),
Exposed=(Worker,Window),
-] interface TestInterface : TestInterfaceEmpty {
+] interface TestInterface5 : TestInterfaceEmpty {
// members needed to test [ImplementedAs], as this affect attribute
// configuration and method configuration, and [TypeChecking]
// constants also needed for [DoNotCheckConstants]
const unsigned long UNSIGNED_LONG = 0;
[Reflect=CONST_CPP] const short CONST_JAVASCRIPT = 1;
- attribute TestInterface testInterfaceAttribute; // Self-referential interface type with [ImplementedAs]
- attribute TestInterfaceConstructor testInterfaceConstructorAttribute;
+ attribute TestInterface5 testInterfaceAttribute; // Self-referential interface type with [ImplementedAs]
+ attribute TestInterface5Constructor testInterfaceConstructorAttribute;
attribute double doubleAttribute;
attribute float floatAttribute;
attribute unrestricted double unrestrictedDoubleAttribute;
@@ -89,6 +90,3 @@
[Exposed=(Window,ServiceWorker)] void windowAndServiceWorkerExposedMethod();
};
-TestInterface implements TestImplements;
-// TestInterface implements TestImplements2; // at implement*ed* interface
-TestInterface implements TestImplements3;
diff --git a/modules/serviceworkers/InstallPhaseEvent.idl b/bindings/tests/idls/modules/TestPartialInterface3.idl
similarity index 74%
copy from modules/serviceworkers/InstallPhaseEvent.idl
copy to bindings/tests/idls/modules/TestPartialInterface3.idl
index 9f2637f..d09f7bd 100644
--- a/modules/serviceworkers/InstallPhaseEvent.idl
+++ b/bindings/tests/idls/modules/TestPartialInterface3.idl
@@ -28,10 +28,18 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#install-phase-event-interface
[
- RuntimeEnabled=ServiceWorker,
- Exposed=ServiceWorker,
-] interface InstallPhaseEvent : Event {
- [CallWith=ScriptState] void waitUntil(any value);
+ ImplementedAs=TestPartialInterfaceImplementation3,
+ PerContextEnabled=PartialContextName3,
+] partial interface TestInterface {
+ const unsigned short PARTIAL3_UNSIGNED_SHORT = 0;
+
+ attribute long partial3LongAttribute;
+ static attribute long partial3StaticLongAttribute;
+
+ void voidMethodPartialOverload(DOMString value);
+ static void voidMethodPartialOverload(DOMString value);
+
+ void partial2VoidMethod(DOMString value);
+ static void partial2StaticVoidMethod(DOMString value);
};
diff --git a/core/README b/core/README
index 1a601a7..418d1e5 100644
--- a/core/README
+++ b/core/README
@@ -6,4 +6,4 @@
The current version corresponds to:
URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 182210
+Current revision: 190578
diff --git a/core/animation/AnimationPlayer.idl b/core/animation/AnimationPlayer.idl
index bc38234..45720a4 100644
--- a/core/animation/AnimationPlayer.idl
+++ b/core/animation/AnimationPlayer.idl
@@ -28,22 +28,22 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+enum AnimationPlayState { "idle", "pending", "running", "paused", "finished" };
+
[
- RuntimeEnabled=WebAnimationsElementAnimate,
NoInterfaceObject,
WillBeGarbageCollected,
ActiveDOMObject,
] interface AnimationPlayer : EventTarget {
- [RuntimeEnabled=WebAnimationsAPI] attribute AnimationNode? source;
- [RuntimeEnabled=WebAnimationsAPI] attribute double startTime;
- [RuntimeEnabled=WebAnimationsAPI] attribute double currentTime;
- [RuntimeEnabled=WebAnimationsAPI] attribute double playbackRate;
- [RuntimeEnabled=WebAnimationsAPI] readonly attribute boolean paused;
- [RuntimeEnabled=WebAnimationsAPI] readonly attribute boolean finished;
- [RuntimeEnabled=WebAnimationsAPI, RaisesException] void finish();
- [RuntimeEnabled=WebAnimationsAPI] void play();
- [RuntimeEnabled=WebAnimationsAPI] void pause();
- [RuntimeEnabled=WebAnimationsAPI] void reverse();
+ [RuntimeEnabled=WebAnimationsAPI] attribute AnimationNode? source;
+ [RuntimeEnabled=WebAnimationsPlaybackControl] attribute double? startTime;
+ [RuntimeEnabled=WebAnimationsPlaybackControl] attribute double? currentTime;
+ [RuntimeEnabled=WebAnimationsPlaybackControl] attribute double playbackRate;
+ [RuntimeEnabled=WebAnimationsPlaybackControl, MeasureAs=AnimationPlayerGetPlayState] readonly attribute AnimationPlayState playState;
+ [RuntimeEnabled=WebAnimationsPlaybackControl, MeasureAs=AnimationPlayerFinish, RaisesException] void finish();
+ [RuntimeEnabled=WebAnimationsPlaybackControl, MeasureAs=AnimationPlayerPlay] void play();
+ [RuntimeEnabled=WebAnimationsPlaybackControl, MeasureAs=AnimationPlayerPause] void pause();
+ [RuntimeEnabled=WebAnimationsPlaybackControl, MeasureAs=AnimationPlayerReverse] void reverse();
void cancel();
[MeasureAs=AnimationPlayerFinishEvent] attribute EventHandler onfinish;
diff --git a/core/css/CSSRule.idl b/core/css/CSSRule.idl
index a70bd3e..a708af4 100644
--- a/core/css/CSSRule.idl
+++ b/core/css/CSSRule.idl
@@ -22,6 +22,7 @@
[
Custom=Wrap,
DependentLifetime,
+ NotScriptWrappable,
WillBeGarbageCollected,
] interface CSSRule {
diff --git a/core/css/CSSStyleDeclaration.idl b/core/css/CSSStyleDeclaration.idl
index 45127b6..1e7803a 100644
--- a/core/css/CSSStyleDeclaration.idl
+++ b/core/css/CSSStyleDeclaration.idl
@@ -34,7 +34,7 @@
readonly attribute unsigned long length;
getter DOMString item([Default=Undefined] optional unsigned long index);
- [Custom=PropertyGetter|PropertyEnumerator|PropertyQuery] getter (DOMString or float) (DOMString name);
+ [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter (DOMString or float) (DOMString name);
[Custom] setter void (DOMString propertyName, DOMString? propertyValue);
readonly attribute CSSRule parentRule;
diff --git a/core/css/CSSValue.idl b/core/css/CSSValue.idl
index 7218639..3f33813 100644
--- a/core/css/CSSValue.idl
+++ b/core/css/CSSValue.idl
@@ -21,6 +21,7 @@
[
Custom=Wrap,
DependentLifetime,
+ NotScriptWrappable,
WillBeGarbageCollected,
] interface CSSValue {
diff --git a/core/css/CSSValueList.idl b/core/css/CSSValueList.idl
index 04ad96f..4d808f9 100644
--- a/core/css/CSSValueList.idl
+++ b/core/css/CSSValueList.idl
@@ -24,8 +24,7 @@
*/
// Introduced in DOM Level 2:
-[
-] interface CSSValueList : CSSValue {
+interface CSSValueList : CSSValue {
readonly attribute unsigned long length;
[ImplementedAs=itemWithBoundsCheck] getter CSSValue item(unsigned long index);
};
diff --git a/core/css/DocumentFontFaceSet.idl b/core/css/DocumentFontFaceSet.idl
index 6ed56ab..04de8b7 100644
--- a/core/css/DocumentFontFaceSet.idl
+++ b/core/css/DocumentFontFaceSet.idl
@@ -28,8 +28,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-[
- RuntimeEnabled=FontLoadEvents,
-] partial interface Document {
+partial interface Document {
[MeasureAs=DocumentFonts] readonly attribute FontFaceSet fonts;
};
diff --git a/core/css/FontFace.idl b/core/css/FontFace.idl
index ef915f0..d83c666 100644
--- a/core/css/FontFace.idl
+++ b/core/css/FontFace.idl
@@ -38,12 +38,12 @@
};
[
+ ActiveDOMObject,
// FIXME: should be union type http://crbug.com/240176
- Constructor(DOMString family, DOMString source, optional Dictionary descriptors),
- Constructor(DOMString family, ArrayBuffer source, optional Dictionary descriptors),
- Constructor(DOMString family, ArrayBufferView source, optional Dictionary descriptors),
+ Constructor(DOMString family, DOMString source, optional FontFaceDescriptors descriptors),
+ Constructor(DOMString family, ArrayBuffer source, optional FontFaceDescriptors descriptors),
+ Constructor(DOMString family, ArrayBufferView source, optional FontFaceDescriptors descriptors),
ConstructorCallWith=ExecutionContext,
- RuntimeEnabled=FontLoadEvents,
WillBeGarbageCollected,
] interface FontFace {
diff --git a/core/css/FontFaceDescriptors.idl b/core/css/FontFaceDescriptors.idl
new file mode 100644
index 0000000..1ba9ef1
--- /dev/null
+++ b/core/css/FontFaceDescriptors.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ GarbageCollected
+] dictionary FontFaceDescriptors {
+ DOMString style = "normal";
+ DOMString weight = "normal";
+ DOMString stretch = "normal";
+ DOMString unicodeRange = "U+0-10FFFF";
+ DOMString variant = "normal";
+ DOMString featureSettings = "normal";
+};
diff --git a/core/css/FontFaceSet.idl b/core/css/FontFaceSet.idl
index 10bc2f7..31ae4fc 100644
--- a/core/css/FontFaceSet.idl
+++ b/core/css/FontFaceSet.idl
@@ -34,15 +34,14 @@
ActiveDOMObject,
SetWrapperReferenceFrom=document,
NoInterfaceObject,
- RuntimeEnabled=FontLoadEvents,
] interface FontFaceSet : EventTarget {
attribute EventHandler onloading;
attribute EventHandler onloadingdone;
attribute EventHandler onloadingerror;
- [RaisesException] boolean check(DOMString font, optional DOMString text = null);
- [CallWith=ScriptState] Promise load(DOMString font, optional DOMString text = null);
+ [RaisesException] boolean check(DOMString font, optional DOMString text = " ");
+ [CallWith=ScriptState] Promise load(DOMString font, optional DOMString text = " ");
[MeasureAs=FontFaceSetReady, CallWith=ScriptState] Promise ready();
[RaisesException] void add(FontFace fontFace);
diff --git a/core/css/FontFaceSetLoadEvent.idl b/core/css/FontFaceSetLoadEvent.idl
index 455ad6b..10530b4 100644
--- a/core/css/FontFaceSetLoadEvent.idl
+++ b/core/css/FontFaceSetLoadEvent.idl
@@ -31,7 +31,6 @@
// FIXME: Make this constructable from Javascript
[
NoInterfaceObject,
- RuntimeEnabled=FontLoadEvents,
] interface FontFaceSetLoadEvent : Event {
readonly attribute FontFace[] fontfaces;
};
diff --git a/core/css/MediaQueryList.idl b/core/css/MediaQueryList.idl
index 7b8b77b..cb93f6f 100644
--- a/core/css/MediaQueryList.idl
+++ b/core/css/MediaQueryList.idl
@@ -16,13 +16,22 @@
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
+
+// http://dev.w3.org/csswg/cssom-view/#mediaquerylist
[
ActiveDOMObject,
NoInterfaceObject,
WillBeGarbageCollected
-] interface MediaQueryList {
+] interface MediaQueryList : EventTarget {
readonly attribute DOMString media;
readonly attribute boolean matches;
- void addListener([Default=Undefined] optional MediaQueryListListener listener);
- void removeListener([Default=Undefined] optional MediaQueryListListener listener);
+
+ // Even though this interface is now an event target, these functions
+ // exist as aliases for addEventListener for backwards compatibility
+ // with older versions of this interface. See the note at
+ // http://dev.w3.org/csswg/cssom-view/#dom-mediaquerylist-removelistener
+ [ImplementedAs=addDeprecatedListener] void addListener([Default=Undefined] optional EventListener listener);
+ [ImplementedAs=removeDeprecatedListener]void removeListener([Default=Undefined] optional EventListener listener);
+
+ attribute EventHandler onchange;
};
diff --git a/core/css/MediaQueryListEvent.idl b/core/css/MediaQueryListEvent.idl
new file mode 100644
index 0000000..2376a4f
--- /dev/null
+++ b/core/css/MediaQueryListEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+
+// http://dev.w3.org/csswg/cssom-view/#mediaquerylistevent
+[
+ EventConstructor,
+] interface MediaQueryListEvent : Event {
+ [InitializedByEventConstructor] readonly attribute DOMString media;
+ [InitializedByEventConstructor] readonly attribute boolean matches;
+};
diff --git a/core/css/RGBColor.idl b/core/css/RGBColor.idl
index 398fe1b..81ae393 100644
--- a/core/css/RGBColor.idl
+++ b/core/css/RGBColor.idl
@@ -19,6 +19,7 @@
*/
[
+ NotScriptWrappable,
WillBeGarbageCollected
] interface RGBColor {
readonly attribute CSSPrimitiveValue red;
diff --git a/core/css/Rect.idl b/core/css/Rect.idl
index 87336d5..dbf1b36 100644
--- a/core/css/Rect.idl
+++ b/core/css/Rect.idl
@@ -18,6 +18,7 @@
*/
[
+ NotScriptWrappable,
WillBeGarbageCollected
] interface Rect {
readonly attribute CSSPrimitiveValue top;
diff --git a/core/css/WebKitCSSTransformValue.idl b/core/css/WebKitCSSTransformValue.idl
index a17e482..05258f9 100644
--- a/core/css/WebKitCSSTransformValue.idl
+++ b/core/css/WebKitCSSTransformValue.idl
@@ -30,9 +30,7 @@
DoNotCheckConstants,
ImplementedAs=CSSTransformValue,
] interface WebKitCSSTransformValue : CSSValueList {
-
// OperationTypes
-
const unsigned short CSS_TRANSLATE = 1;
const unsigned short CSS_TRANSLATEX = 2;
const unsigned short CSS_TRANSLATEY = 3;
diff --git a/core/dom/DOMMatrix.idl b/core/dom/DOMMatrix.idl
index c6497e5..33d40dd 100644
--- a/core/dom/DOMMatrix.idl
+++ b/core/dom/DOMMatrix.idl
@@ -34,4 +34,23 @@
attribute unrestricted double m44;
// FIXME: Should implement some methods (See: crbug.com/388780)
+ // Mutable transform methods
+ DOMMatrix multiplySelf(DOMMatrix other);
+ DOMMatrix preMultiplySelf(DOMMatrix other);
+ DOMMatrix translateSelf(unrestricted double tx,
+ unrestricted double ty,
+ optional unrestricted double tz = 0);
+ DOMMatrix scaleSelf(unrestricted double scale,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0);
+ DOMMatrix scale3dSelf(unrestricted double scale,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0,
+ optional unrestricted double oz = 0);
+ DOMMatrix scaleNonUniformSelf(unrestricted double sx,
+ optional unrestricted double sy = 1,
+ optional unrestricted double sz = 1,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0,
+ optional unrestricted double oz = 0);
};
diff --git a/core/dom/DOMMatrixReadOnly.idl b/core/dom/DOMMatrixReadOnly.idl
index 53cec15..f049f7b 100644
--- a/core/dom/DOMMatrixReadOnly.idl
+++ b/core/dom/DOMMatrixReadOnly.idl
@@ -4,6 +4,7 @@
[
GarbageCollected,
+ NotScriptWrappable,
RuntimeEnabled=GeometryInterfaces,
] interface DOMMatrixReadOnly {
// These attributes are simple aliases for certain elements of the 4x4 matrix
@@ -35,4 +36,24 @@
readonly attribute boolean isIdentity;
// FIXME: Should implement some methods (See: crbug.com/388780)
+ // Immutable transform methods
+ DOMMatrix multiply(DOMMatrix other);
+ DOMMatrix translate(unrestricted double tx,
+ unrestricted double ty,
+ optional unrestricted double tz = 0);
+ DOMMatrix scale(unrestricted double scale,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0);
+ DOMMatrix scale3d(unrestricted double scale,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0,
+ optional unrestricted double oz = 0);
+ DOMMatrix scaleNonUniform(unrestricted double sx,
+ optional unrestricted double sy = 1,
+ optional unrestricted double sz = 1,
+ optional unrestricted double ox = 0,
+ optional unrestricted double oy = 0,
+ optional unrestricted double oz = 0);
+ Float32Array toFloat32Array();
+ Float64Array toFloat64Array();
};
diff --git a/core/dom/DOMPoint.idl b/core/dom/DOMPoint.idl
index d75c518..e202163 100644
--- a/core/dom/DOMPoint.idl
+++ b/core/dom/DOMPoint.idl
@@ -2,17 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// FIXME: Blink doesn't currently support dictionary definitions.
-// For now, we can use Dictionary interface. See http://crbug.com/321462.
-// dictionary DOMPointInit {
-// unrestricted double x = 0;
-// unrestricted double y = 0;
-// unrestricted double z = 0;
-// unrestricted double w = 1;
-// };
-
[
- Constructor(optional Dictionary point),
+ Constructor(optional DOMPointInit point),
Constructor(unrestricted double x, unrestricted double y,
optional unrestricted double z = 0, optional unrestricted double w = 1),
RuntimeEnabled=GeometryInterfaces,
diff --git a/core/dom/DOMPointInit.idl b/core/dom/DOMPointInit.idl
new file mode 100644
index 0000000..b1d7090
--- /dev/null
+++ b/core/dom/DOMPointInit.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Spec: http://dev.w3.org/fxtf/geometry/#DOMPoint
+
+[
+ GarbageCollected
+] dictionary DOMPointInit {
+ unrestricted double x = 0;
+ unrestricted double y = 0;
+ unrestricted double z = 0;
+ unrestricted double w = 1;
+};
diff --git a/core/dom/DOMPointReadOnly.idl b/core/dom/DOMPointReadOnly.idl
index a02868d..6fa6110 100644
--- a/core/dom/DOMPointReadOnly.idl
+++ b/core/dom/DOMPointReadOnly.idl
@@ -6,6 +6,7 @@
Constructor(unrestricted double x, unrestricted double y,
unrestricted double z, unrestricted double w),
GarbageCollected,
+ NotScriptWrappable,
RuntimeEnabled=GeometryInterfaces,
] interface DOMPointReadOnly {
readonly attribute unrestricted double x;
diff --git a/core/dom/DOMRectReadOnly.idl b/core/dom/DOMRectReadOnly.idl
index 50e05a5..87b80da 100644
--- a/core/dom/DOMRectReadOnly.idl
+++ b/core/dom/DOMRectReadOnly.idl
@@ -6,6 +6,7 @@
Constructor(unrestricted double x, unrestricted double y,
unrestricted double width, unrestricted double height),
GarbageCollected,
+ NotScriptWrappable,
RuntimeEnabled=GeometryInterfaces,
] interface DOMRectReadOnly {
readonly attribute unrestricted double x;
diff --git a/core/dom/Document.idl b/core/dom/Document.idl
index e6cadff..09e5837 100644
--- a/core/dom/Document.idl
+++ b/core/dom/Document.idl
@@ -23,7 +23,7 @@
typedef (CanvasRenderingContext2D or WebGLRenderingContext) RenderingContext;
[
- SpecialWrapFor=HTMLDocument|XMLDocument
+ SpecialWrapFor=(HTMLDocument,XMLDocument)
] interface Document : Node {
// DOM Level 1 Core
@@ -80,7 +80,7 @@
// DOM Level 2 Abstract Views (DocumentView interface)
- [ImplementedAs=executingWindow] readonly attribute Window defaultView;
+ [ImplementedAs=domWindow] readonly attribute Window defaultView;
// DOM Level 2 Style (DocumentStyle interface)
diff --git a/core/dom/DocumentFullscreen.idl b/core/dom/DocumentFullscreen.idl
index 43547f7..ca9d85a 100644
--- a/core/dom/DocumentFullscreen.idl
+++ b/core/dom/DocumentFullscreen.idl
@@ -29,7 +29,7 @@
[RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenerror;
// Mozilla version
- [MeasureAs=PrefixedDocumentIsFullscreen] readonly attribute boolean webkitIsFullScreen;
+ [MeasureAs=PrefixedDocumentIsFullscreen, ImplementedAs=webkitCurrentFullScreenElement] readonly attribute boolean webkitIsFullScreen;
[MeasureAs=PrefixedDocumentFullScreenKeyboardInputAllowed] readonly attribute boolean webkitFullScreenKeyboardInputAllowed;
[MeasureAs=PrefixedDocumentCurrentFullScreenElement] readonly attribute Element webkitCurrentFullScreenElement;
[MeasureAs=PrefixedDocumentCancelFullScreen, ImplementedAs=exitFullscreen] void webkitCancelFullScreen();
diff --git a/core/dom/Element.idl b/core/dom/Element.idl
index 89e5e7c..688db84 100644
--- a/core/dom/Element.idl
+++ b/core/dom/Element.idl
@@ -19,7 +19,7 @@
*/
[
- SpecialWrapFor=HTMLElement|SVGElement,
+ SpecialWrapFor=(HTMLElement,SVGElement),
] interface Element : Node {
// DOM Level 1 Core
@@ -55,7 +55,7 @@
[Reflect, DartNoAutoScope] attribute DOMString id;
readonly attribute DOMString? namespaceURI;
[RaisesException=Setter] attribute DOMString? prefix;
- readonly attribute DOMString? localName;
+ [DartCustom] readonly attribute DOMString? localName;
[RaisesException] boolean matches(DOMString selectors);
@@ -75,8 +75,8 @@
// attribute (Dictionary or double) scrollLeft;
// attribute (Dictionary or double) scrollTop;
// http://crbug.com/240176
- [Custom=Setter] attribute long scrollLeft;
- [Custom=Setter] attribute long scrollTop;
+ [Custom=Setter] attribute double scrollLeft;
+ [Custom=Setter] attribute double scrollTop;
readonly attribute long scrollWidth;
readonly attribute long scrollHeight;
diff --git a/core/dom/Iterator.idl b/core/dom/Iterator.idl
new file mode 100644
index 0000000..87027c5
--- /dev/null
+++ b/core/dom/Iterator.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ Iterable,
+ GarbageCollected,
+ NoInterfaceObject,
+] interface Iterator {
+ [CallWith=ScriptState, RaisesException] any next(optional any value);
+};
diff --git a/core/dom/MutationObserver.idl b/core/dom/MutationObserver.idl
index 2c6d142..e024d4a 100644
--- a/core/dom/MutationObserver.idl
+++ b/core/dom/MutationObserver.idl
@@ -33,7 +33,7 @@
Custom=VisitDOMWrapper,
WillBeGarbageCollected,
] interface MutationObserver {
- [RaisesException] void observe(Node target, Dictionary options);
+ [RaisesException] void observe(Node target, MutationObserverInit options);
sequence<MutationRecord> takeRecords();
void disconnect();
};
diff --git a/core/dom/MutationObserverInit.idl b/core/dom/MutationObserverInit.idl
new file mode 100644
index 0000000..e44a484
--- /dev/null
+++ b/core/dom/MutationObserverInit.idl
@@ -0,0 +1,17 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Spec: http://dom.spec.whatwg.org/#interface-mutationobserver
+
+[
+ GarbageCollected
+] dictionary MutationObserverInit {
+ boolean childList = false;
+ boolean attributes;
+ boolean characterData;
+ boolean subtree = false;
+ boolean attributeOldValue;
+ boolean characterDataOldValue;
+ sequence<DOMString> attributeFilter;
+};
diff --git a/core/dom/Notation.idl b/core/dom/Notation.idl
deleted file mode 100644
index 5ad13ec..0000000
--- a/core/dom/Notation.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-// FIXME: Remove Notation interface. We never create Notation objects. We have
-// this interface to provide window.Notation.
-interface Notation : Node {
- // We don't need to provide any attributes.
-};
-
diff --git a/core/dom/Range.idl b/core/dom/Range.idl
index cb2d8fd..51a9da4 100644
--- a/core/dom/Range.idl
+++ b/core/dom/Range.idl
@@ -48,7 +48,7 @@
const unsigned short END_TO_END = 2;
const unsigned short END_TO_START = 3;
- [RaisesException, TypeChecking=Interface] short compareBoundaryPoints(CompareHow how, Range sourceRange);
+ [RaisesException, TypeChecking=Interface] short compareBoundaryPoints(unsigned short how, Range sourceRange);
[RaisesException, CustomElementCallbacks] void deleteContents();
[RaisesException, CustomElementCallbacks] DocumentFragment extractContents();
diff --git a/core/editing/Selection.idl b/core/editing/Selection.idl
index dc27b0d..263a3c2 100644
--- a/core/editing/Selection.idl
+++ b/core/editing/Selection.idl
@@ -45,14 +45,13 @@
readonly attribute long focusOffset;
readonly attribute boolean isCollapsed;
- [RaisesException, TypeChecking=Interface] void collapse(Node node, optional long offset);
+ [RaisesException] void collapse(Node? node, optional long offset = 0);
[RaisesException] void collapseToStart();
[RaisesException] void collapseToEnd();
- // FIXME: should be: optional long offset = 0 http://crbug.com/258153
// We mark offset as optional, defaulting to 0; this differs from spec.
// http://crbug.com/384966
- [RaisesException, TypeChecking=Interface] void extend(Node node, optional long offset);
+ [RaisesException, TypeChecking=Interface] void extend(Node node, optional long offset = 0);
[RaisesException] void selectAllChildren([Default=Undefined] optional Node node);
[CustomElementCallbacks] void deleteFromDocument();
@@ -67,8 +66,7 @@
// Firefox extensions
// https://developer.mozilla.org/En/DOM/Selection
//
- // FIXME: Add use counters.
- boolean containsNode([Default = Undefined] optional Node node, [Default = Undefined] optional boolean allowPartial);
+ [MeasureAs=SelectionContainsNode] boolean containsNode([Default = Undefined] optional Node node, [Default = Undefined] optional boolean allowPartial);
// WebKit extensions
[MeasureAs=SelectionBaseNode] readonly attribute Node baseNode;
@@ -87,8 +85,7 @@
[Default=Undefined] optional long baseOffset,
[Default=Undefined] optional Node extentNode,
[Default=Undefined] optional long extentOffset);
- [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException, TypeChecking=Interface] void setPosition(Node node,
- optional long offset);
+ [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException] void setPosition(Node? node, optional long offset = 0);
// IE extensions
// http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx
diff --git a/core/events/EventTarget.idl b/core/events/EventTarget.idl
index c83100d..eacdc4e 100644
--- a/core/events/EventTarget.idl
+++ b/core/events/EventTarget.idl
@@ -19,6 +19,7 @@
*/
[
+ CheckSecurity=Window,
Custom=ToV8,
WillBeGarbageCollected,
] interface EventTarget {
diff --git a/core/fileapi/FileReader.idl b/core/fileapi/FileReader.idl
index d6cd5d0..1d10d87 100644
--- a/core/fileapi/FileReader.idl
+++ b/core/fileapi/FileReader.idl
@@ -34,7 +34,8 @@
ActiveDOMObject,
Constructor,
ConstructorCallWith=ExecutionContext,
- Exposed=(Window,Worker)
+ Exposed=(Window,Worker),
+ TypeChecking=Interface
] interface FileReader : EventTarget {
// ready states
const unsigned short EMPTY = 0;
diff --git a/core/frame/ConsoleBase.idl b/core/frame/ConsoleBase.idl
index 508c5b9..533d293 100644
--- a/core/frame/ConsoleBase.idl
+++ b/core/frame/ConsoleBase.idl
@@ -51,8 +51,8 @@
[CallWith=ScriptState] void timeEnd(optional DOMString title = null);
void timeStamp(optional DOMString title = null);
- [CallWith=ScriptState] void timeline(optional DOMString title = null);
- [CallWith=ScriptState] void timelineEnd(optional DOMString title = null);
+ [DeprecateAs=ConsoleTimeline,CallWith=ScriptState] void timeline(optional DOMString title = null);
+ [DeprecateAs=ConsoleTimelineEnd,CallWith=ScriptState] void timelineEnd(optional DOMString title = null);
[CallWith=(ScriptArguments,ScriptState)] void group();
[CallWith=(ScriptArguments,ScriptState)] void groupCollapsed();
diff --git a/core/frame/ScrollOptions.idl b/core/frame/ScrollOptions.idl
new file mode 100644
index 0000000..8a2af31
--- /dev/null
+++ b/core/frame/ScrollOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Spec: Non-standard
+
+[
+ GarbageCollected
+] dictionary ScrollOptions {
+ DOMString behavior;
+};
diff --git a/core/frame/WebKitPoint.idl b/core/frame/WebKitPoint.idl
deleted file mode 100644
index cc11b47..0000000
--- a/core/frame/WebKitPoint.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
- CustomConstructor,
- CustomConstructor(float x, float y),
- MeasureAs=WebKitPoint,
- WillBeGarbageCollected,
-] interface WebKitPoint {
- attribute float x;
- attribute float y;
-};
-
diff --git a/core/frame/Window.idl b/core/frame/Window.idl
index ce7aa0e..4ef969a 100644
--- a/core/frame/Window.idl
+++ b/core/frame/Window.idl
@@ -98,12 +98,12 @@
// Overloading can be replaced by optional if RuntimeEnabled is removed, by
// changing the third argument to *optional* Dictionary scrollOptions
- void scrollBy(long x, long y);
- [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scrollBy(long x, long y, Dictionary scrollOptions);
- void scrollTo(long x, long y);
- [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scrollTo(long x, long y, Dictionary scrollOptions);
- void scroll(long x, long y);
- [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scroll(long x, long y, Dictionary scrollOptions);
+ void scrollBy(double x, double y);
+ [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scrollBy(double x, double y, ScrollOptions scrollOptions);
+ void scrollTo(double x, double y);
+ [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scrollTo(double x, double y, ScrollOptions scrollOptions);
+ void scroll(double x, double y);
+ [RuntimeEnabled=CSSOMSmoothScroll, RaisesException] void scroll(double x, double y, ScrollOptions scrollOptions);
void moveBy([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
void moveTo([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
void resizeBy([Default=Undefined] optional float x, [Default=Undefined] optional float y); // FIXME: this should take longs not floats.
diff --git a/core/html/HTMLDialogElement.idl b/core/html/HTMLDialogElement.idl
index c26e394..702653d 100644
--- a/core/html/HTMLDialogElement.idl
+++ b/core/html/HTMLDialogElement.idl
@@ -23,9 +23,7 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-[
- RuntimeEnabled=DialogElement
-] interface HTMLDialogElement : HTMLElement {
+interface HTMLDialogElement : HTMLElement {
[Reflect] attribute boolean open;
attribute DOMString returnValue;
[RaisesException] void close(optional DOMString returnValue = null);
diff --git a/core/html/HTMLElement.idl b/core/html/HTMLElement.idl
index a138212..e606b15 100644
--- a/core/html/HTMLElement.idl
+++ b/core/html/HTMLElement.idl
@@ -40,6 +40,7 @@
[CustomElementCallbacks, RaisesException=Setter] attribute DOMString contentEditable;
readonly attribute boolean isContentEditable;
+ [RuntimeEnabled=ContextMenu] attribute HTMLMenuElement? contextMenu;
attribute boolean spellcheck;
diff --git a/core/html/HTMLFormElement.idl b/core/html/HTMLFormElement.idl
index 6c2f1f9..36db8c9 100644
--- a/core/html/HTMLFormElement.idl
+++ b/core/html/HTMLFormElement.idl
@@ -23,7 +23,7 @@
] interface HTMLFormElement : HTMLElement {
[Reflect=accept_charset] attribute DOMString acceptCharset;
[Reflect, URL] attribute DOMString action;
- [Reflect, ReflectOnly="on"|"off", ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete;
+ [Reflect, ReflectOnly=("on","off"), ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete;
[CustomElementCallbacks] attribute DOMString enctype;
[CustomElementCallbacks] attribute DOMString encoding;
[CustomElementCallbacks] attribute DOMString method;
diff --git a/core/html/HTMLImageElement.idl b/core/html/HTMLImageElement.idl
index bd0808a..cde8092 100644
--- a/core/html/HTMLImageElement.idl
+++ b/core/html/HTMLImageElement.idl
@@ -28,7 +28,7 @@
[Reflect] attribute DOMString alt;
[Reflect, TreatNullAs=EmptyString] attribute DOMString border;
readonly attribute boolean complete;
- [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
+ [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
attribute long height;
[Reflect] attribute long hspace;
[Reflect] attribute boolean isMap;
diff --git a/core/html/HTMLInputElement.idl b/core/html/HTMLInputElement.idl
index 61a1ff6..d53dd5b 100644
--- a/core/html/HTMLInputElement.idl
+++ b/core/html/HTMLInputElement.idl
@@ -64,8 +64,8 @@
[RaisesException=Setter, CustomElementCallbacks] attribute Date? valueAsDate;
[RaisesException=Setter, CustomElementCallbacks] attribute unrestricted double valueAsNumber;
- [RaisesException, CustomElementCallbacks] void stepUp(optional long n);
- [RaisesException, CustomElementCallbacks] void stepDown(optional long n);
+ [RaisesException, CustomElementCallbacks] void stepUp(optional long n = 1);
+ [RaisesException, CustomElementCallbacks] void stepDown(optional long n = 1);
[CustomElementCallbacks] attribute unsigned long width;
readonly attribute boolean willValidate;
@@ -85,7 +85,7 @@
[RaisesException] void setRangeText(DOMString replacement,
unsigned long start,
unsigned long end,
- optional DOMString selectionMode = null);
+ optional DOMString selectionMode = "preserve");
[RaisesException, ImplementedAs=setSelectionRangeForBinding]
void setSelectionRange([Default=Undefined] optional long start,
diff --git a/core/html/HTMLLinkElement.idl b/core/html/HTMLLinkElement.idl
index 667acdb..a31a5ef 100644
--- a/core/html/HTMLLinkElement.idl
+++ b/core/html/HTMLLinkElement.idl
@@ -23,7 +23,7 @@
[Reflect] attribute boolean disabled;
[Reflect] attribute DOMString charset;
[Reflect, URL] attribute DOMString href;
- [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
+ [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
[Reflect] attribute DOMString hreflang;
[Reflect] attribute DOMString media;
[Reflect] attribute DOMString rel;
@@ -35,7 +35,7 @@
// DOM Level 2 Style
readonly attribute StyleSheet sheet;
- [RuntimeEnabled=HTMLImports] readonly attribute Document import;
+ readonly attribute Document import;
[Reflect, RuntimeEnabled=SubresourceIntegrity] attribute DOMString integrity;
};
diff --git a/core/html/HTMLMediaElement.idl b/core/html/HTMLMediaElement.idl
index aa9d040..7990f6b 100644
--- a/core/html/HTMLMediaElement.idl
+++ b/core/html/HTMLMediaElement.idl
@@ -26,6 +26,7 @@
[
ActiveDOMObject,
RuntimeEnabled=Media,
+ SpecialWrapFor=(HTMLAudioElement,HTMLVideoElement),
TypeChecking=Unrestricted,
] interface HTMLMediaElement : HTMLElement {
@@ -35,7 +36,7 @@
// network state
[Reflect, URL] attribute DOMString src;
[URL] readonly attribute DOMString currentSrc;
- [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
+ [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
const unsigned short NETWORK_EMPTY = 0;
const unsigned short NETWORK_IDLE = 1;
diff --git a/core/html/HTMLScriptElement.idl b/core/html/HTMLScriptElement.idl
index a626770..c96ec40 100644
--- a/core/html/HTMLScriptElement.idl
+++ b/core/html/HTMLScriptElement.idl
@@ -26,7 +26,7 @@
[Reflect] attribute boolean defer;
[Reflect, URL] attribute DOMString src;
[Reflect] attribute DOMString type;
- [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
+ [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
[Reflect, RuntimeEnabled=ExperimentalContentSecurityPolicyFeatures] attribute DOMString nonce;
[Reflect, RuntimeEnabled=SubresourceIntegrity] attribute DOMString integrity;
diff --git a/core/html/HTMLTableElement.idl b/core/html/HTMLTableElement.idl
index e6897fa..69d364f 100644
--- a/core/html/HTMLTableElement.idl
+++ b/core/html/HTMLTableElement.idl
@@ -45,6 +45,6 @@
HTMLElement createCaption();
void deleteCaption();
- [RaisesException] HTMLElement insertRow(optional long index);
+ [RaisesException] HTMLElement insertRow(optional long index = -1);
[RaisesException] void deleteRow([Default=Undefined] optional long index);
};
diff --git a/core/html/HTMLTableRowElement.idl b/core/html/HTMLTableRowElement.idl
index aadbc51..1f06529 100644
--- a/core/html/HTMLTableRowElement.idl
+++ b/core/html/HTMLTableRowElement.idl
@@ -27,6 +27,6 @@
[Reflect=char] attribute DOMString ch;
[Reflect=charoff] attribute DOMString chOff;
[Reflect] attribute DOMString vAlign;
- [RaisesException] HTMLElement insertCell(optional long index);
+ [RaisesException] HTMLElement insertCell(optional long index = -1);
[RaisesException] void deleteCell([Default=Undefined] optional long index);
};
diff --git a/core/html/HTMLTableSectionElement.idl b/core/html/HTMLTableSectionElement.idl
index a8f0b89..8816676 100644
--- a/core/html/HTMLTableSectionElement.idl
+++ b/core/html/HTMLTableSectionElement.idl
@@ -24,6 +24,6 @@
[Reflect=charoff] attribute DOMString chOff;
[Reflect] attribute DOMString vAlign;
readonly attribute HTMLCollection rows;
- [RaisesException] HTMLElement insertRow(optional long index);
+ [RaisesException] HTMLElement insertRow(optional long index = -1);
[RaisesException] void deleteRow([Default=Undefined] optional long index);
};
diff --git a/core/html/MediaController.idl b/core/html/MediaController.idl
index 8e70a8b..0a61cb6 100644
--- a/core/html/MediaController.idl
+++ b/core/html/MediaController.idl
@@ -35,7 +35,7 @@
readonly attribute TimeRanges seekable;
readonly attribute unrestricted double duration;
- [RaisesException=Setter] attribute double currentTime;
+ attribute double currentTime;
readonly attribute boolean paused;
readonly attribute TimeRanges played;
diff --git a/core/html/canvas/CanvasPattern.idl b/core/html/canvas/CanvasPattern.idl
index d8e453d..7bc553c 100644
--- a/core/html/canvas/CanvasPattern.idl
+++ b/core/html/canvas/CanvasPattern.idl
@@ -25,4 +25,7 @@
[
WillBeGarbageCollected,
] interface CanvasPattern {
+
+ [RuntimeEnabled=ExperimentalCanvasFeatures] void setTransform(SVGMatrix transform);
+
};
diff --git a/core/html/canvas/CanvasRenderingContext2D.idl b/core/html/canvas/CanvasRenderingContext2D.idl
index aa076cc..b1eb216 100644
--- a/core/html/canvas/CanvasRenderingContext2D.idl
+++ b/core/html/canvas/CanvasRenderingContext2D.idl
@@ -38,7 +38,7 @@
enum CanvasFillRule { "nonzero", "evenodd" };
[
- TypeChecking=Interface|Unrestricted,
+ TypeChecking=(Interface,Unrestricted),
WillBeGarbageCollected,
] interface CanvasRenderingContext2D {
// back-reference to the canvas
@@ -89,20 +89,20 @@
// path API (see also CanvasPathMethods)
void beginPath();
void fill(optional CanvasFillRule winding);
- [RuntimeEnabled=Path2D] void fill(Path2D path, optional CanvasFillRule winding);
+ void fill(Path2D path, optional CanvasFillRule winding);
void stroke();
- [RuntimeEnabled=Path2D] void stroke(Path2D path);
+ void stroke(Path2D path);
// Focus rings
void drawFocusIfNeeded(Element element);
- [RuntimeEnabled=Path2D] void drawFocusIfNeeded(Path2D path, Element element);
+ void drawFocusIfNeeded(Path2D path, Element element);
[RuntimeEnabled=ExperimentalCanvasFeatures] void scrollPathIntoView(optional Path2D path);
void clip(optional CanvasFillRule winding);
- [RuntimeEnabled=Path2D] void clip(Path2D path, optional CanvasFillRule winding);
+ void clip(Path2D path, optional CanvasFillRule winding);
boolean isPointInPath(unrestricted float x, unrestricted float y, optional CanvasFillRule winding);
- [RuntimeEnabled=Path2D] boolean isPointInPath(Path2D path, unrestricted float x, unrestricted float y, optional CanvasFillRule winding);
+ boolean isPointInPath(Path2D path, unrestricted float x, unrestricted float y, optional CanvasFillRule winding);
boolean isPointInStroke(unrestricted float x, unrestricted float y);
- [RuntimeEnabled=Path2D] boolean isPointInStroke(Path2D path, unrestricted float x, unrestricted float y);
+ boolean isPointInStroke(Path2D path, unrestricted float x, unrestricted float y);
// text (see also the CanvasDrawingStyles interface)
void fillText(DOMString text, unrestricted float x, unrestricted float y, optional unrestricted float maxWidth);
@@ -124,9 +124,7 @@
[RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void drawImage(ImageBitmap imageBitmap, unrestricted float sx, unrestricted float sy, unrestricted float sw, unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
// hit regions
- // FIXME: Blink does not currently support WebIDL dictionary definitions.
- // See http://crbug.com/321462
- [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void addHitRegion(optional Dictionary options);
+ [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void addHitRegion(optional HitRegionOptions options);
[RuntimeEnabled=ExperimentalCanvasFeatures] void removeHitRegion(DOMString id);
[RuntimeEnabled=ExperimentalCanvasFeatures] void clearHitRegions();
@@ -159,6 +157,7 @@
attribute DOMString font; // (default 10px sans-serif)
attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start")
attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
+ [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString direction; // "inherit", "rtl", "ltr" (default: "inherit")
// Non-standard APIs. Candidates for deprecation
// https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D
diff --git a/core/html/canvas/HitRegionOptions.idl b/core/html/canvas/HitRegionOptions.idl
new file mode 100644
index 0000000..33380b8
--- /dev/null
+++ b/core/html/canvas/HitRegionOptions.idl
@@ -0,0 +1,17 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Spec: https://html.spec.whatwg.org/multipage/scripting.html#hitregionoptions
+
+enum CanvasFillRule { "nonzero", "evenodd" };
+
+[
+ GarbageCollected
+] dictionary HitRegionOptions {
+ Path2D? path = null;
+ CanvasFillRule fillRule = "nonzero";
+ DOMString id = "";
+ Element? control = null;
+ // We don't use parentID, label and role yet.
+};
diff --git a/core/html/canvas/Path2D.idl b/core/html/canvas/Path2D.idl
index c89979d..9210737 100644
--- a/core/html/canvas/Path2D.idl
+++ b/core/html/canvas/Path2D.idl
@@ -32,7 +32,6 @@
Constructor,
Constructor(Path2D path),
Constructor(DOMString text),
- RuntimeEnabled=Path2D,
WillBeGarbageCollected,
] interface Path2D {
diff --git a/core/html/canvas/WebGLRenderingContextBase.idl b/core/html/canvas/WebGLRenderingContextBase.idl
index a790556..5ba1683 100644
--- a/core/html/canvas/WebGLRenderingContextBase.idl
+++ b/core/html/canvas/WebGLRenderingContextBase.idl
@@ -41,11 +41,11 @@
typedef unrestricted float GLclampf;
[
- // FIXME: [DoNotCheckConstants] and [TypeChecking=Interface|Unrestricted] should be applied
+ // FIXME: [DoNotCheckConstants] and [TypeChecking=(Interface,Unrestricted)] should be applied
// to members and not need to be put on implementing interface
// DoNotCheckConstants, // need to put on implementing interface
NoInterfaceObject, // Always used on target of 'implements'
- // TypeChecking=Interface|Unrestricted, // need to put on implementing interface
+ // TypeChecking=(Interface,Unrestricted), // need to put on implementing interface
WillBeGarbageCollected,
] interface WebGLRenderingContextBase {
diff --git a/core/html/shadow/PluginPlaceholderElement.idl b/core/html/shadow/PluginPlaceholderElement.idl
new file mode 100644
index 0000000..54b5e49
--- /dev/null
+++ b/core/html/shadow/PluginPlaceholderElement.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ NoInterfaceObject
+] interface PluginPlaceholderElement : HTMLDivElement {
+ [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString message;
+ [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void createdCallback();
+};
diff --git a/core/inspector/CodeGeneratorInspector.py b/core/inspector/CodeGeneratorInspector.py
index 7d4be18..5d02acf 100755
--- a/core/inspector/CodeGeneratorInspector.py
+++ b/core/inspector/CodeGeneratorInspector.py
@@ -48,7 +48,7 @@
TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor", "Runtime.InternalPropertyDescriptor",
- "Debugger.FunctionDetails", "Debugger.CallFrame", "Debugger.Location",
+ "Debugger.FunctionDetails", "Debugger.CollectionEntry", "Debugger.CallFrame", "Debugger.Location",
"Canvas.TraceLog", "Canvas.ResourceState"])
TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset([
@@ -57,8 +57,6 @@
# InspectorResourceAgent needs to update mime-type.
"Network.Response"])
-EXACTLY_INT_SUPPORTED = False
-
cmdline_parser = optparse.OptionParser()
cmdline_parser.add_option("--output_dir")
@@ -117,58 +115,15 @@
str = possible_abbreviation.lower() + str[pos:]
return str
- @staticmethod
- def camel_case_to_capitalized_with_underscores(str):
- if len(str) == 0:
- return str
- output = Capitalizer.split_camel_case_(str)
- return "_".join(output).upper()
-
- @staticmethod
- def split_camel_case_(str):
- output = []
- pos_being = 0
- pos = 1
- has_oneletter = False
- while pos < len(str):
- if str[pos].isupper():
- output.append(str[pos_being:pos].upper())
- if pos - pos_being == 1:
- has_oneletter = True
- pos_being = pos
- pos += 1
- output.append(str[pos_being:])
- if has_oneletter:
- array_pos = 0
- while array_pos < len(output) - 1:
- if len(output[array_pos]) == 1:
- array_pos_end = array_pos + 1
- while array_pos_end < len(output) and len(output[array_pos_end]) == 1:
- array_pos_end += 1
- if array_pos_end - array_pos > 1:
- possible_abbreviation = "".join(output[array_pos:array_pos_end])
- if possible_abbreviation.upper() in Capitalizer.ABBREVIATION:
- output[array_pos:array_pos_end] = [possible_abbreviation]
- else:
- array_pos = array_pos_end - 1
- array_pos += 1
- return output
-
ABBREVIATION = frozenset(["XHR", "DOM", "CSS"])
VALIDATOR_IFDEF_NAME = "ENABLE(ASSERT)"
class DomainNameFixes:
- @classmethod
- def get_fixed_data(cls, domain_name):
- field_name_res = Capitalizer.upper_camel_case_to_lower(domain_name) + "Agent"
-
- class Res(object):
- agent_field_name = field_name_res
-
- return Res
-
+ @staticmethod
+ def get_fixed_data(domain_name):
+ return Capitalizer.upper_camel_case_to_lower(domain_name) + "Agent"
class RawTypes(object):
@staticmethod
@@ -190,41 +145,14 @@
else:
raise Exception("Unknown type: %s" % json_type)
- # For output parameter all values are passed by pointer except RefPtr-based types.
- class OutputPassModel:
- class ByPointer:
- @staticmethod
- def get_argument_prefix():
- return "&"
-
- @staticmethod
- def get_parameter_type_suffix():
- return "*"
-
- class ByReference:
- @staticmethod
- def get_argument_prefix():
- return ""
-
- @staticmethod
- def get_parameter_type_suffix():
- return "&"
-
class BaseType(object):
- need_internal_runtime_cast_ = False
-
- @classmethod
- def request_raw_internal_runtime_cast(cls):
- if not cls.need_internal_runtime_cast_:
- cls.need_internal_runtime_cast_ = True
-
@classmethod
def get_raw_validator_call_text(cls):
- return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_validate_method_params().template_type
+ return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_getter_name()
@staticmethod
- def get_validate_method_params():
- raise Exception("Abstract method")
+ def get_getter_name():
+ raise Exception("Unsupported")
class String(BaseType):
@staticmethod
@@ -238,20 +166,6 @@
return "InspectorString::create(%s)"
@staticmethod
- def get_c_initializer():
- return "\"\""
-
- @staticmethod
- def get_validate_method_params():
- class ValidateMethodParams:
- template_type = "String"
- return ValidateMethodParams
-
- @staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByPointer
-
- @staticmethod
def is_heavy_value():
return True
@@ -276,19 +190,11 @@
def get_constructor_pattern():
return "InspectorBasicValue::create(%s)"
- @staticmethod
- def get_c_initializer():
- return "0"
-
@classmethod
def get_raw_validator_call_text(cls):
return "RuntimeCastHelper::assertInt"
@staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByPointer
-
- @staticmethod
def is_heavy_value():
return False
@@ -314,18 +220,8 @@
return "InspectorBasicValue::create(%s)"
@staticmethod
- def get_c_initializer():
- return "0"
-
- @staticmethod
- def get_validate_method_params():
- class ValidateMethodParams:
- template_type = "Number"
- return ValidateMethodParams
-
- @staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByPointer
+ def get_raw_validator_call_text():
+ return "RuntimeCastHelper::assertType<JSONValue::TypeNumber>"
@staticmethod
def is_heavy_value():
@@ -351,20 +247,6 @@
return "InspectorBasicValue::create(%s)"
@staticmethod
- def get_c_initializer():
- return "false"
-
- @staticmethod
- def get_validate_method_params():
- class ValidateMethodParams:
- template_type = "Boolean"
- return ValidateMethodParams
-
- @staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByPointer
-
- @staticmethod
def is_heavy_value():
return False
@@ -390,24 +272,10 @@
return "%s"
@staticmethod
- def get_c_initializer():
- return "JSONObject::create()"
-
- @staticmethod
def get_output_argument_prefix():
return ""
@staticmethod
- def get_validate_method_params():
- class ValidateMethodParams:
- template_type = "Object"
- return ValidateMethodParams
-
- @staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByReference
-
- @staticmethod
def is_heavy_value():
return True
@@ -427,10 +295,6 @@
get_setter_name = get_getter_name
@staticmethod
- def get_c_initializer():
- raise Exception("Unsupported")
-
- @staticmethod
def get_constructor_pattern():
raise Exception("Unsupported")
@@ -439,10 +303,6 @@
return "RuntimeCastHelper::assertAny"
@staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByReference
-
- @staticmethod
def is_heavy_value():
return True
@@ -468,24 +328,10 @@
return "%s"
@staticmethod
- def get_c_initializer():
- return "JSONArray::create()"
-
- @staticmethod
def get_output_argument_prefix():
return ""
@staticmethod
- def get_validate_method_params():
- class ValidateMethodParams:
- template_type = "Array"
- return ValidateMethodParams
-
- @staticmethod
- def get_output_pass_model():
- return RawTypes.OutputPassModel.ByReference
-
- @staticmethod
def is_heavy_value():
return True
@@ -669,23 +515,10 @@
def get_event_setter_expression_pattern():
return "*%s"
- class ExactlyInt(ValueType):
- def __init__(self):
- TypeModel.ValueType.__init__(self, "int", False)
-
- def get_input_param_type_text(self):
- return "TypeBuilder::ExactlyInt"
-
- def get_opt_output_type_(self):
- return "TypeBuilder::ExactlyInt"
-
@classmethod
def init_class(cls):
cls.Bool = cls.ValueType("bool", False)
- if EXACTLY_INT_SUPPORTED:
- cls.Int = cls.ExactlyInt()
- else:
- cls.Int = cls.ValueType("int", False)
+ cls.Int = cls.ValueType("int", False)
cls.Number = cls.ValueType("double", False)
cls.String = cls.ValueType("String", True,)
cls.Object = cls.RefPtrBased("JSONObject")
@@ -754,9 +587,6 @@
def get_indent(self):
return self.indent
- def get_indented(self, additional_indent):
- return Writer(self.output, self.indent + additional_indent)
-
def insert_writer(self, additional_indent):
new_output = []
self.output.append(new_output)
@@ -859,8 +689,6 @@
@classmethod
def get_code_generator(enum_binding_cls):
- #FIXME: generate ad-hoc enums too once we figure out how to better implement them in C++.
- comment_out = helper.is_ad_hoc
class CodeGenerator:
@staticmethod
@@ -896,8 +724,6 @@
validator_writer = generate_context.validator_writer
- domain_fixes = DomainNameFixes.get_fixed_data(context_domain_name)
-
validator_writer.newline("void %s%s::assertCorrectValue(JSONValue* value)\n" % (helper.full_name_prefix_for_impl, enum_name))
validator_writer.newline("{\n")
validator_writer.newline(" WTF::String s;\n")
@@ -1003,7 +829,7 @@
@staticmethod
def request_internal_runtime_cast():
- RawTypes.String.request_raw_internal_runtime_cast()
+ pass
@staticmethod
def get_code_generator():
@@ -1196,7 +1022,6 @@
for prop_data in resolve_data.main_properties:
prop_name = prop_data.p["name"]
param_type_binding = prop_data.param_type_binding
- raw_type = param_type_binding.reduce_to_raw_type()
if isinstance(param_type_binding.get_type_model(), TypeModel.ValueType):
writer.append_multiline("\n void %s" % prop_name)
writer.append("(%s value)\n" % param_type_binding.get_type_model().get_command_return_pass_model().get_output_parameter_type())
@@ -1244,8 +1069,6 @@
validator_writer = generate_context.validator_writer
- domain_fixes = DomainNameFixes.get_fixed_data(context_domain_name)
-
validator_writer.newline("void %s%s::assertCorrectValue(JSONValue* value)\n" % (helper.full_name_prefix_for_impl, class_name))
validator_writer.newline("{\n")
validator_writer.newline(" RefPtr<JSONObject> object;\n")
@@ -1369,7 +1192,7 @@
@staticmethod
def request_internal_runtime_cast():
- RawTypes.Object.request_raw_internal_runtime_cast()
+ pass
@staticmethod
def get_code_generator():
@@ -1516,7 +1339,7 @@
raise Exception("Unsupported")
def request_internal_runtime_cast(self):
- self.raw_type_.request_raw_internal_runtime_cast()
+ pass
def get_code_generator(self):
return None
@@ -1803,30 +1626,11 @@
def go():
Generator.process_types(type_map)
- first_cycle_guardable_list_list = [
- Generator.backend_method_declaration_list,
- Generator.backend_method_implementation_list,
- Generator.backend_method_name_declaration_list,
- Generator.backend_method_name_declaration_index_list,
- Generator.backend_agent_interface_list,
- Generator.frontend_class_field_lines,
- Generator.frontend_constructor_init_list,
- Generator.frontend_domain_class_lines,
- Generator.frontend_method_list,
- Generator.method_handler_list,
- Generator.method_name_enum_list,
- Generator.backend_constructor_init_list,
- Generator.backend_virtual_setters_list,
- Generator.backend_setters_list,
- Generator.backend_field_list]
-
for json_domain in json_api["domains"]:
domain_name = json_domain["domain"]
domain_name_lower = domain_name.lower()
- domain_fixes = DomainNameFixes.get_fixed_data(domain_name)
-
- agent_field_name = domain_fixes.agent_field_name
+ agent_field_name = DomainNameFixes.get_fixed_data(domain_name)
frontend_method_declaration_lines = []
@@ -1914,7 +1718,6 @@
method_in_code = ""
method_out_code = ""
- result_object_declaration = ""
agent_call_param_list = ["&error"]
agent_call_params_declaration_list = [" ErrorString error;"]
send_response_call_params_list = ["error"]
@@ -1947,10 +1750,6 @@
optional = json_parameter.get("optional")
non_optional_type_model = param_raw_type.get_raw_type_model()
- if optional:
- type_model = non_optional_type_model.get_optional()
- else:
- type_model = non_optional_type_model
if optional:
code = (" bool %s_valueFound = false;\n"
@@ -1988,7 +1787,7 @@
callback_writer.newline("class " + callback_name + " : public CallbackBase {\n")
callback_writer.newline("public:\n")
- callback_writer.newline(" " + callback_name + "(PassRefPtr<InspectorBackendDispatcherImpl>, int id);\n")
+ callback_writer.newline(" " + callback_name + "(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl>, int id);\n")
callback_writer.newline(" void sendSuccess(" + ", ".join(decl_parameter_list) + ");\n")
error_part_writer = callback_writer.insert_writer("")
callback_writer.newline("};\n")
@@ -2009,12 +1808,12 @@
ad_hoc_type_output.append(callback_output)
- method_out_code += " RefPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRef(new " + agent_interface_name + "::" + callback_name + "(this, callId));\n"
+ method_out_code += " RefPtrWillBeRawPtr<" + agent_interface_name + "::" + callback_name + "> callback = adoptRefWillBeNoop(new " + agent_interface_name + "::" + callback_name + "(this, callId));\n"
agent_call_param_list.append("callback")
normal_response_cook_text += " if (!error.length()) \n"
normal_response_cook_text += " return;\n"
normal_response_cook_text += " callback->disable();\n"
- backend_agent_interface_list.append(", PassRefPtr<%s> callback" % callback_name)
+ backend_agent_interface_list.append(", PassRefPtrWillBeRawPtr<%s> callback" % callback_name)
else:
if "returns" in json_command:
method_out_code += "\n"
@@ -2031,7 +1830,6 @@
raw_type = return_type_binding.reduce_to_raw_type()
setter_type = raw_type.get_setter_name()
- initializer = raw_type.get_c_initializer()
type_model = return_type_binding.get_type_model()
if optional:
@@ -2070,8 +1868,7 @@
# Redirect to another agent's implementation.
agent_field = "m_" + agent_field_name
if "redirect" in json_command:
- domain_fixes = DomainNameFixes.get_fixed_data(json_command.get("redirect"))
- agent_field = "m_" + domain_fixes.agent_field_name
+ agent_field = "m_" + DomainNameFixes.get_fixed_data(json_command.get("redirect"))
Generator.backend_method_implementation_list.append(Templates.backend_method.substitute(None,
domainName=domain_name, methodName=json_command_name,
@@ -2211,8 +2008,6 @@
def generate_all_domains_code(out, type_data_callback):
writer = Writer(out, "")
for domain_data in type_map.domains():
- domain_fixes = DomainNameFixes.get_fixed_data(domain_data.name())
-
namespace_declared = []
def namespace_lazy_generator():
@@ -2272,40 +2067,8 @@
fill_recursive(input)
return res
-
-# A writer that only updates file if it actually changed to better support incremental build.
-class SmartOutput:
- def __init__(self, file_name):
- self.file_name_ = file_name
- self.output_ = ""
-
- def write(self, text):
- self.output_ += text
-
- def close(self):
- text_changed = True
-
- try:
- read_file = open(self.file_name_, "r")
- old_text = read_file.read()
- read_file.close()
- text_changed = old_text != self.output_
- except:
- # Ignore, just overwrite by default
- pass
-
- if text_changed:
- out_file = open(self.file_name_, "w")
- out_file.write(self.output_)
- out_file.close()
-
-
def output_file(file_name):
- # For now, disable the incremental build optimisation in all cases.
- if False:
- return SmartOutput(file_name)
- else:
- return open(file_name, "w")
+ return open(file_name, "w")
Generator.go()
diff --git a/core/inspector/CodeGeneratorInspectorStrings.py b/core/inspector/CodeGeneratorInspectorStrings.py
index 83705c5..0591782 100644
--- a/core/inspector/CodeGeneratorInspectorStrings.py
+++ b/core/inspector/CodeGeneratorInspectorStrings.py
@@ -70,7 +70,7 @@
""")
callback_main_methods = (
-"""InspectorBackendDispatcher::$agentName::$callbackName::$callbackName(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int id) : CallbackBase(backendImpl, id) {}
+"""InspectorBackendDispatcher::$agentName::$callbackName::$callbackName(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id) : CallbackBase(backendImpl, id) {}
void InspectorBackendDispatcher::$agentName::$callbackName::sendSuccess($parameters)
{
@@ -126,6 +126,7 @@
#include "InspectorTypeBuilder.h"
+#include "platform/heap/Handle.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefCounted.h"
#include "wtf/text/WTFString.h"
@@ -140,15 +141,17 @@
class InspectorBackendDispatcherImpl;
-class InspectorBackendDispatcher: public RefCounted<InspectorBackendDispatcher> {
+class InspectorBackendDispatcher: public RefCountedWillBeGarbageCollectedFinalized<InspectorBackendDispatcher> {
public:
- static PassRefPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel* inspectorFrontendChannel);
+ static PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel* inspectorFrontendChannel);
virtual ~InspectorBackendDispatcher() { }
+ virtual void trace(Visitor*) { }
- class CallbackBase: public RefCounted<CallbackBase> {
+ class CallbackBase: public RefCountedWillBeGarbageCollectedFinalized<CallbackBase> {
public:
- CallbackBase(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int id);
+ CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id);
virtual ~CallbackBase();
+ virtual void trace(Visitor*);
void sendFailure(const ErrorString&);
bool isActive();
@@ -158,7 +161,7 @@
private:
void disable() { m_alreadySent = true; }
- RefPtr<InspectorBackendDispatcherImpl> m_backendImpl;
+ RefPtrWillBeMember<InspectorBackendDispatcherImpl> m_backendImpl;
int m_id;
bool m_alreadySent;
@@ -278,15 +281,15 @@
$methods
-PassRefPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(InspectorFrontendChannel* inspectorFrontendChannel)
+PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(InspectorFrontendChannel* inspectorFrontendChannel)
{
- return adoptRef(new InspectorBackendDispatcherImpl(inspectorFrontendChannel));
+ return adoptRefWillBeNoop(new InspectorBackendDispatcherImpl(inspectorFrontendChannel));
}
void InspectorBackendDispatcherImpl::dispatch(const String& message)
{
- RefPtr<InspectorBackendDispatcher> protect = this;
+ RefPtrWillBeRawPtr<InspectorBackendDispatcher> protect(this);
typedef void (InspectorBackendDispatcherImpl::*CallHandler)(long callId, JSONObject* messageObject, JSONArray* protocolErrors);
typedef HashMap<String, CallHandler> DispatchMap;
DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, );
@@ -484,11 +487,16 @@
return true;
}
-InspectorBackendDispatcher::CallbackBase::CallbackBase(PassRefPtr<InspectorBackendDispatcherImpl> backendImpl, int id)
+InspectorBackendDispatcher::CallbackBase::CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id)
: m_backendImpl(backendImpl), m_id(id), m_alreadySent(false) {}
InspectorBackendDispatcher::CallbackBase::~CallbackBase() {}
+void InspectorBackendDispatcher::CallbackBase::trace(Visitor* visitor)
+{
+ visitor->trace(m_backendImpl);
+}
+
void InspectorBackendDispatcher::CallbackBase::sendFailure(const ErrorString& error)
{
ASSERT(error.length());
@@ -576,30 +584,6 @@
WTF_MAKE_NONCOPYABLE(OptOutput);
};
-
-// A small transient wrapper around int type, that can be used as a funciton parameter type
-// cleverly disallowing C++ implicit casts from float or double.
-class ExactlyInt {
-public:
- template<typename T>
- ExactlyInt(T t) : m_value(cast_to_int<T>(t)) {}
-
- ExactlyInt() {}
-
- operator int() { return m_value; }
-private:
- int m_value;
-
- template<typename T>
- static int cast_to_int(T) { return T::default_case_cast_is_not_supported(); }
-};
-
-template<>
-inline int ExactlyInt::cast_to_int<int>(int i) { return i; }
-
-template<>
-inline int ExactlyInt::cast_to_int<unsigned int>(unsigned int i) { return i; }
-
class RuntimeCastHelper {
public:
#if $validatorIfdefName
diff --git a/core/inspector/CodeGeneratorInstrumentation.py b/core/inspector/CodeGeneratorInstrumentation.py
index aa0335e..54e5ce8 100755
--- a/core/inspector/CodeGeneratorInstrumentation.py
+++ b/core/inspector/CodeGeneratorInstrumentation.py
@@ -324,7 +324,8 @@
if len(self.agents) == 0:
return
- body_lines = map(self.generate_agent_call, self.agents)
+ body_lines = map(self.generate_ref_ptr, self.params)
+ body_lines += map(self.generate_agent_call, self.agents)
if self.returns_cookie:
if "Timeline" in self.agents:
@@ -371,6 +372,11 @@
maybe_return=maybe_return,
params_agent=", ".join(map(Parameter.to_str_value, self.params_impl)[1:]))
+ def generate_ref_ptr(self, param):
+ if param.is_prp:
+ return "\n RefPtr<%s> %s = %s;" % (param.inner_type, param.value, param.name)
+ else:
+ return ""
class Parameter:
def __init__(self, source):
@@ -401,8 +407,12 @@
self.name = generate_param_name(self.type)
if re.match("PassRefPtr<", param_decl):
- self.value = "%s.get()" % self.name
+ self.is_prp = True
+ self.value = self.name
+ self.name = "prp" + self.name[0].upper() + self.name[1:]
+ self.inner_type = re.match("PassRefPtr<(.+)>", param_decl).group(1)
else:
+ self.is_prp = False
self.value = self.name
diff --git a/core/inspector/InjectedScriptHost.idl b/core/inspector/InjectedScriptHost.idl
index 018f9d2..56f1e4d 100644
--- a/core/inspector/InjectedScriptHost.idl
+++ b/core/inspector/InjectedScriptHost.idl
@@ -36,23 +36,25 @@
] interface InjectedScriptHost {
[NotEnumerable, Unforgeable] void clearConsoleMessages();
- [NotEnumerable, Unforgeable, Custom] void inspect(any objectId, any hints);
+ [NotEnumerable, Unforgeable, Custom] void inspect(any objectId, object hints);
[NotEnumerable, Unforgeable, Custom] any inspectedObject(long num);
- [NotEnumerable, Unforgeable, Custom] any internalConstructorName(any obj);
+ [NotEnumerable, Unforgeable, Custom] DOMString internalConstructorName(any obj);
[NotEnumerable, Unforgeable, Custom] boolean isHTMLAllCollection(any obj);
- [NotEnumerable, Unforgeable, Custom] DOMString type(any obj);
- [NotEnumerable, Unforgeable, Custom] any functionDetails(any obj);
+ [NotEnumerable, Unforgeable, Custom] DOMString subtype(any obj);
+ [NotEnumerable, Unforgeable, Custom] any functionDetails(Function obj);
+ [NotEnumerable, Unforgeable, Custom] any[]? collectionEntries(object obj);
[NotEnumerable, Unforgeable, Custom] any[] getInternalProperties(any obj);
- [NotEnumerable, Unforgeable, Custom] EventListener[] getEventListeners(EventTarget target);
+ [NotEnumerable, Unforgeable, Custom] any[] getEventListeners(EventTarget target);
[NotEnumerable, Unforgeable, Custom] any eval(DOMString text);
[NotEnumerable, Unforgeable, Custom] any evaluateWithExceptionDetails(DOMString text);
[NotEnumerable, Unforgeable, Custom] void debugFunction(any fn);
[NotEnumerable, Unforgeable, Custom] void undebugFunction(any fn);
[NotEnumerable, Unforgeable, Custom] void monitorFunction(any fn);
[NotEnumerable, Unforgeable, Custom] void unmonitorFunction(any fn);
- [NotEnumerable, Unforgeable, Custom] any callFunction(any fn, any receiver, any[] argv);
- [NotEnumerable, Unforgeable, Custom] any suppressWarningsAndCallFunction(any fn, any receiver, any[] argv);
+ [NotEnumerable, Unforgeable, Custom] any callFunction(Function fn, any receiver, optional any[] argv);
+ [NotEnumerable, Unforgeable, Custom] any suppressWarningsAndCallFunction(Function fn, any receiver, optional any[] argv);
+ [NotEnumerable, Unforgeable, Custom] void setNonEnumProperty(object obj, DOMString key, any value);
// Only declarative scope (local, with and catch) is accepted. Returns undefined.
- [NotEnumerable, Unforgeable, Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
+ [NotEnumerable, Unforgeable, Custom] any setFunctionVariableValue(Function functionObject, long scopeIndex, DOMString variableName, any newValue);
};
diff --git a/core/inspector/InspectorInstrumentation.idl b/core/inspector/InspectorInstrumentation.idl
index d1d5b3b..1970ed8 100644
--- a/core/inspector/InspectorInstrumentation.idl
+++ b/core/inspector/InspectorInstrumentation.idl
@@ -286,7 +286,7 @@
[Resource]
void markResourceAsCached(Page*, unsigned long identifier);
- [Timeline, Resource, Console] // Console should come AFTER Resource notification, front-end relies on this.
+ [Timeline, Resource]
void didReceiveResourceResponse([Keep] LocalFrame*, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
[Inline=Forward]
@@ -340,7 +340,7 @@
[Canvas, Page]
void frameDetachedFromParent([Keep] LocalFrame*);
- [Console, Resource, DOM, Canvas, Page, PageDebugger]
+ [Resource, DOM, Canvas, Page, PageDebugger]
void didCommitLoad([Keep] LocalFrame*, DocumentLoader*);
[DOM, Inline=FastReturn]
@@ -392,14 +392,14 @@
void didDispatchDOMStorageEvent(Page* page, const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin);
[Worker]
- void didStartWorkerGlobalScope(ExecutionContext*, WorkerGlobalScopeProxy* proxy, const KURL& url);
+ void didStartWorker(ExecutionContext*, WorkerInspectorProxy* proxy, const KURL& url);
+
+ [Worker]
+ void workerTerminated(ExecutionContext*, WorkerInspectorProxy* proxy);
[WorkerRuntime]
void willEvaluateWorkerScript([Keep] WorkerGlobalScope* context, int workerThreadStartMode);
- [Worker]
- void workerGlobalScopeTerminated(ExecutionContext*, WorkerGlobalScopeProxy* proxy);
-
[Profiler, Timeline]
void willProcessTask(WorkerGlobalScope* context);
@@ -480,20 +480,13 @@
class ConsoleMessage;
- // Use the same implementation as above as a similar method dispatched on Page.
- [Console]
+ [Console, Debugger]
void addMessageToConsole(ExecutionContext* context, ConsoleMessage* consoleMessage);
- [Console, Debugger]
- void addConsoleAPIMessageToConsole(ExecutionContext* context, MessageType type, MessageLevel level, const String& message, ScriptState* state, PassRefPtrWillBeRawPtr<ScriptArguments> arguments, unsigned long requestIdentifier = 0);
-
- [Console]
- void consoleCount(ExecutionContext* context, ScriptState* state, PassRefPtrWillBeRawPtr<ScriptArguments> arguments);
-
- [Timeline, Console]
+ [Timeline]
void consoleTime([Keep] ExecutionContext* context, const String& title);
- [Console, Timeline]
+ [Timeline]
void consoleTimeEnd([Keep] ExecutionContext* context, const String& title, ScriptState* state);
[Timeline, Inline=FastReturn]
@@ -511,9 +504,8 @@
[Profiler, Inline=FastReturn]
void consoleProfileEnd(ExecutionContext* context, const String& title);
- //FIXME: remove when we move console message storage from InspectorConsoleAgent to FrameConsole
[Console]
- void adoptWorkerConsoleMessages(ExecutionContext* context, WorkerGlobalScopeProxy* proxy);
+ void consoleMessagesCleared(ExecutionContext* context);
}
interface InspectorOverrides {
@@ -522,6 +514,9 @@
[Worker, Inline=FastReturn]
bool shouldPauseDedicatedWorkerOnStart(ExecutionContext* context);
+
+ [Resource, Inline=FastReturn]
+ bool shouldForceCORSPreflight(Document*);
}
diff --git a/core/page/EventSource.idl b/core/page/EventSource.idl
index 685c569..d96ca6d 100644
--- a/core/page/EventSource.idl
+++ b/core/page/EventSource.idl
@@ -32,7 +32,7 @@
[
WillBeGarbageCollected,
ActiveDOMObject,
- Constructor(DOMString url, optional Dictionary eventSourceInit),
+ Constructor(DOMString url, optional EventSourceInit eventSourceInit),
ConstructorCallWith=ExecutionContext,
Exposed=(Window,Worker),
RaisesException=Constructor,
diff --git a/core/page/EventSourceInit.idl b/core/page/EventSourceInit.idl
new file mode 100644
index 0000000..39c9157
--- /dev/null
+++ b/core/page/EventSourceInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ GarbageCollected
+] dictionary EventSourceInit {
+ boolean withCredentials = false;
+};
diff --git a/core/page/PagePopupController.idl b/core/page/PagePopupController.idl
index e2c88b2..6d36d2b 100644
--- a/core/page/PagePopupController.idl
+++ b/core/page/PagePopupController.idl
@@ -39,5 +39,6 @@
DOMString localizeNumberString(DOMString numberString);
DOMString formatMonth(long year, long zeroBaseMonth);
DOMString formatShortMonth(long year, long zeroBaseMonth);
+ DOMString formatWeek(long year, long weekNumber, DOMString localizedStartDate);
void histogramEnumeration(DOMString name, long sample, long boundaryValue);
};
diff --git a/core/streams/ReadableStream.idl b/core/streams/ReadableStream.idl
index 927fa94..9d299d2 100644
--- a/core/streams/ReadableStream.idl
+++ b/core/streams/ReadableStream.idl
@@ -2,8 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+enum ReadableStreamState {
+ "readable",
+ "waiting",
+ "closed",
+ "errored"
+};
+
[
RuntimeEnabled=Stream,
GarbageCollected
] interface ReadableStream {
+ [CallWith=ScriptState, RaisesException] any read();
+ [CallWith=ScriptState] Promise wait();
+ [ImplementedAs=stateString] readonly attribute ReadableStreamState state;
+
+ [CallWith=ScriptState] Promise cancel(any reason);
+
+ [CallWith=ScriptState] readonly attribute Promise closed;
};
diff --git a/core/svg/SVGAnimatedAngle.idl b/core/svg/SVGAnimatedAngle.idl
index 7fe115c..ae8022d 100644
--- a/core/svg/SVGAnimatedAngle.idl
+++ b/core/svg/SVGAnimatedAngle.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedAngle {
readonly attribute SVGAngle baseVal;
diff --git a/core/svg/SVGAnimatedBoolean.idl b/core/svg/SVGAnimatedBoolean.idl
index daeb710..453172a 100644
--- a/core/svg/SVGAnimatedBoolean.idl
+++ b/core/svg/SVGAnimatedBoolean.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
TypeChecking=Interface,
] interface SVGAnimatedBoolean {
diff --git a/core/svg/SVGAnimatedEnumeration.idl b/core/svg/SVGAnimatedEnumeration.idl
index 8a4f2d9..f67a59f 100644
--- a/core/svg/SVGAnimatedEnumeration.idl
+++ b/core/svg/SVGAnimatedEnumeration.idl
@@ -25,6 +25,7 @@
[
ImplementedAs=SVGAnimatedEnumerationBase,
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
TypeChecking=Interface,
] interface SVGAnimatedEnumeration {
diff --git a/core/svg/SVGAnimatedInteger.idl b/core/svg/SVGAnimatedInteger.idl
index 87c2d7f..143c8e3 100644
--- a/core/svg/SVGAnimatedInteger.idl
+++ b/core/svg/SVGAnimatedInteger.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
TypeChecking=Interface,
] interface SVGAnimatedInteger {
diff --git a/core/svg/SVGAnimatedLength.idl b/core/svg/SVGAnimatedLength.idl
index c741a20..76117af 100644
--- a/core/svg/SVGAnimatedLength.idl
+++ b/core/svg/SVGAnimatedLength.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedLength {
readonly attribute SVGLength baseVal;
diff --git a/core/svg/SVGAnimatedLengthList.idl b/core/svg/SVGAnimatedLengthList.idl
index ec507a3..b7ed587 100644
--- a/core/svg/SVGAnimatedLengthList.idl
+++ b/core/svg/SVGAnimatedLengthList.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedLengthList {
readonly attribute SVGLengthList baseVal;
diff --git a/core/svg/SVGAnimatedNumber.idl b/core/svg/SVGAnimatedNumber.idl
index f941bdf..2468fac 100644
--- a/core/svg/SVGAnimatedNumber.idl
+++ b/core/svg/SVGAnimatedNumber.idl
@@ -25,6 +25,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
TypeChecking=Interface,
] interface SVGAnimatedNumber {
diff --git a/core/svg/SVGAnimatedNumberList.idl b/core/svg/SVGAnimatedNumberList.idl
index 355e490..cb3210a 100644
--- a/core/svg/SVGAnimatedNumberList.idl
+++ b/core/svg/SVGAnimatedNumberList.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedNumberList {
readonly attribute SVGNumberList baseVal;
diff --git a/core/svg/SVGAnimatedPreserveAspectRatio.idl b/core/svg/SVGAnimatedPreserveAspectRatio.idl
index dbcb42d..c2eb443 100644
--- a/core/svg/SVGAnimatedPreserveAspectRatio.idl
+++ b/core/svg/SVGAnimatedPreserveAspectRatio.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedPreserveAspectRatio {
readonly attribute SVGPreserveAspectRatio baseVal;
diff --git a/core/svg/SVGAnimatedRect.idl b/core/svg/SVGAnimatedRect.idl
index 33a7123..4802de5 100644
--- a/core/svg/SVGAnimatedRect.idl
+++ b/core/svg/SVGAnimatedRect.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedRect {
readonly attribute SVGRect baseVal;
diff --git a/core/svg/SVGAnimatedString.idl b/core/svg/SVGAnimatedString.idl
index dec2f05..b4e6361 100644
--- a/core/svg/SVGAnimatedString.idl
+++ b/core/svg/SVGAnimatedString.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedString {
[RaisesException=Setter] attribute DOMString baseVal;
diff --git a/core/svg/SVGAnimatedTransformList.idl b/core/svg/SVGAnimatedTransformList.idl
index 7a56c32..024a4fc 100644
--- a/core/svg/SVGAnimatedTransformList.idl
+++ b/core/svg/SVGAnimatedTransformList.idl
@@ -24,6 +24,7 @@
*/
[
+ NotScriptWrappable,
SetWrapperReferenceTo(SVGElement contextElement),
] interface SVGAnimatedTransformList {
readonly attribute SVGTransformList baseVal;
diff --git a/core/svg/SVGRenderingIntent.idl b/core/svg/SVGRenderingIntent.idl
index 2cdc2f4..1c47a29 100644
--- a/core/svg/SVGRenderingIntent.idl
+++ b/core/svg/SVGRenderingIntent.idl
@@ -25,6 +25,7 @@
[
DependentLifetime,
+ WillBeGarbageCollected
] interface SVGRenderingIntent {
// Rendering Intent Types
const unsigned short RENDERING_INTENT_UNKNOWN = 0;
diff --git a/core/svg/SVGUnitTypes.idl b/core/svg/SVGUnitTypes.idl
index 95c2a49..651d740 100644
--- a/core/svg/SVGUnitTypes.idl
+++ b/core/svg/SVGUnitTypes.idl
@@ -25,6 +25,7 @@
[
DependentLifetime,
+ WillBeGarbageCollected
] interface SVGUnitTypes {
// Unit Types
const unsigned short SVG_UNIT_TYPE_UNKNOWN = 0;
diff --git a/core/testing/DictionaryTest.idl b/core/testing/DictionaryTest.idl
new file mode 100644
index 0000000..d347e99
--- /dev/null
+++ b/core/testing/DictionaryTest.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ GarbageCollected
+] interface DictionaryTest {
+ void set(optional InternalDictionary testingDictionary);
+ InternalDictionary get();
+};
diff --git a/core/testing/GCObservation.idl b/core/testing/GCObservation.idl
index 378b055..ba754c0 100644
--- a/core/testing/GCObservation.idl
+++ b/core/testing/GCObservation.idl
@@ -29,7 +29,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
] interface GCObservation {
// Technically, this is true if the object was "near death"; the
// object may have been kept alive through a weak handle. Having
diff --git a/core/testing/InternalDictionary.idl b/core/testing/InternalDictionary.idl
new file mode 100644
index 0000000..d0c4e60
--- /dev/null
+++ b/core/testing/InternalDictionary.idl
@@ -0,0 +1,27 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+enum InternalEnum { "foo", "bar", "baz" };
+
+[
+ GarbageCollected
+] dictionary InternalDictionary {
+ long longMember;
+ long longMemberWithDefault = 42;
+ long? longOrNullMember;
+ long? longOrNullMemberWithDefault = null;
+ boolean booleanMember;
+ double doubleMember;
+ DOMString stringMember;
+ DOMString stringMemberWithDefault = "defaultStringValue";
+ sequence<DOMString> stringSequenceMember;
+ sequence<DOMString>? stringSequenceOrNullMember;
+ InternalEnum enumMember;
+ InternalEnum enumMemberWithDefault = "foo";
+ InternalEnum? enumOrNullMember;
+ Element elementMember;
+ Element? elementOrNullMember;
+ object objectMember;
+ object? objectOrNullMemberWithDefault = null;
+};
diff --git a/core/testing/InternalProfilers.idl b/core/testing/InternalProfilers.idl
index c73eb1a..8387baf 100644
--- a/core/testing/InternalProfilers.idl
+++ b/core/testing/InternalProfilers.idl
@@ -29,7 +29,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
] interface InternalProfilers {
void startHeapProfiling(DOMString prefix);
void stopHeapProfiling();
diff --git a/core/testing/InternalSettings.idl b/core/testing/InternalSettings.idl
index dabbbb4..b04e925 100644
--- a/core/testing/InternalSettings.idl
+++ b/core/testing/InternalSettings.idl
@@ -45,6 +45,10 @@
[RaisesException] void setImagesEnabled(boolean enabled);
[RaisesException] void setDefaultVideoPosterURL(DOMString poster);
[RaisesException] void setViewportEnabled(boolean enabled);
+ [RaisesException] void setAvailablePointerTypes(DOMString pointers);
+ [RaisesException] void setPrimaryPointerType(DOMString pointer);
+ [RaisesException] void setAvailableHoverTypes(DOMString types);
+ [RaisesException] void setPrimaryHoverType(DOMString type);
// FIXME: This is a temporary flag and should be removed once squashing is
// ready (crbug.com/261605).
diff --git a/core/testing/Internals.idl b/core/testing/Internals.idl
index 675dfbc..1535447 100644
--- a/core/testing/Internals.idl
+++ b/core/testing/Internals.idl
@@ -26,7 +26,8 @@
[
DoNotCheckConstants,
- WillBeGarbageCollected,
+ GarbageCollected,
+ Iterable,
] interface Internals {
DOMString address(Node node);
@@ -36,12 +37,6 @@
boolean isPreloaded(DOMString url);
boolean isLoadingFromMemoryCache(DOMString url);
- void crash();
-
- void setStyleResolverStatsEnabled(boolean enabled);
- [RaisesException] DOMString styleResolverStatsReport();
- [RaisesException] DOMString styleResolverStatsTotalsReport();
-
[TypeChecking=Interface] boolean isSharingStyle(Element element1, Element element2);
[TypeChecking=Interface] CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
@@ -56,7 +51,6 @@
[RaisesException] boolean hasContentElement(Node root);
[RaisesException, TypeChecking=Interface] unsigned long countElementShadow(Node Root);
[TypeChecking=Interface] DOMString shadowPseudoId(Element element);
- [TypeChecking=Interface] void setShadowPseudoId(Element element, DOMString id);
[RaisesException, TypeChecking=Interface] boolean isValidContentSelect(Element contentElement);
[TypeChecking=Interface] Node treeScopeRootNode(Node node);
[TypeChecking=Interface] Node parentTreeScope(Node node);
@@ -81,6 +75,7 @@
DOMString visiblePlaceholder(Element element);
[TypeChecking=Interface] void selectColorInColorChooser(Element element, DOMString colorValue);
+ [TypeChecking=Interface] void endColorChooser(Element element);
// If the argument is omitted, the top-level document is used.
boolean hasAutofocusRequest(optional Document document);
@@ -89,8 +84,6 @@
[RaisesException] void setEnableMockPagePopup(boolean enabled);
readonly attribute PagePopupController pagePopupController;
- [RaisesException] ClientRect unscaledViewportRect();
-
[RaisesException] ClientRect absoluteCaretBounds();
[TypeChecking=Interface] ClientRect boundingBox(Element element);
@@ -124,9 +117,9 @@
[TypeChecking=Interface] unsigned long lengthFromRange(Element scope, Range range);
[TypeChecking=Interface] DOMString rangeAsText(Range range);
- [RaisesException, TypeChecking=Interface] WebKitPoint touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
+ [RaisesException, TypeChecking=Interface] DOMPoint touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
[RaisesException, TypeChecking=Interface] Node touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
- [RaisesException, TypeChecking=Interface] WebKitPoint touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
+ [RaisesException, TypeChecking=Interface] DOMPoint touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
[RaisesException, TypeChecking=Interface] Node touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
[RaisesException, TypeChecking=Interface] ClientRect bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document document);
@@ -147,9 +140,6 @@
unsigned long topPadding, unsigned long rightPadding, unsigned long bottomPadding, unsigned long leftPadding,
boolean ignoreClipping, boolean allowChildFrameContent);
- void emitInspectorDidBeginFrame(optional long frameId);
- void emitInspectorDidCancelFrame();
-
[TypeChecking=Interface] boolean hasSpellingMarker(Document document, long from, long length);
[TypeChecking=Interface] boolean hasGrammarMarker(Document document, long from, long length);
void setContinuousSpellCheckingEnabled(boolean enabled);
@@ -206,6 +196,7 @@
void mediaPlayerRequestFullscreen(HTMLMediaElement mediaElement);
double effectiveMediaVolume(HTMLMediaElement mediaElement);
+ void mediaPlayerRemoteRouteAvailabilityChanged(HTMLMediaElement mediaElement, boolean available);
void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme);
void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(DOMString scheme);
@@ -240,8 +231,6 @@
[TypeChecking=Interface] DOMString markerTextForListItem(Element element);
- [TypeChecking=Interface] DOMString baseURL(Document document);
-
SerializedScriptValue deserializeBuffer(ArrayBuffer buffer);
ArrayBuffer serializeObject(SerializedScriptValue obj);
@@ -288,4 +277,9 @@
DOMString serializeNavigationMarkup();
void hideAllTransitionElements();
+
+ [RaisesException, TypeChecking=Interface] void forcePluginPlaceholder(HTMLElement plugin, DOMString htmlSource);
+ [RaisesException, TypeChecking=Interface] void forcePluginPlaceholder(HTMLElement plugin, Dictionary options);
+
+ DictionaryTest dictionaryTest();
};
diff --git a/core/testing/LayerRect.idl b/core/testing/LayerRect.idl
index effc2e6..1bf1154 100644
--- a/core/testing/LayerRect.idl
+++ b/core/testing/LayerRect.idl
@@ -29,7 +29,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
] interface LayerRect {
/* The node that most closely represents the layer in which the rect
occurs. When a layer doesn't correspond directly to a node (eg.
diff --git a/core/testing/LayerRectList.idl b/core/testing/LayerRectList.idl
index ffe74d3..566be6e 100644
--- a/core/testing/LayerRectList.idl
+++ b/core/testing/LayerRectList.idl
@@ -29,7 +29,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
] interface LayerRectList {
readonly attribute unsigned long length;
getter LayerRect item(unsigned long index);
diff --git a/core/testing/PartialPrivateScriptTest.idl b/core/testing/PartialPrivateScriptTest.idl
index b19d17f..5175774 100644
--- a/core/testing/PartialPrivateScriptTest.idl
+++ b/core/testing/PartialPrivateScriptTest.idl
@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-partial interface PrivateScriptTest {
+[
+ NoImplHeader
+] partial interface PrivateScriptTest {
[ImplementedInPrivateScript] short addIntegerInPartial(short value1, short value2);
[ImplementedInPrivateScript] short addInteger2InPartial(short value1, short value2);
[ImplementedInPrivateScript] attribute DOMString stringAttributeInPartial;
diff --git a/core/testing/PrivateScriptTest.idl b/core/testing/PrivateScriptTest.idl
index 20fca89..769aa5f 100644
--- a/core/testing/PrivateScriptTest.idl
+++ b/core/testing/PrivateScriptTest.idl
@@ -35,11 +35,12 @@
[ImplementedInPrivateScript] void voidMethodThrowsRangeError();
[ImplementedInPrivateScript] void voidMethodThrowsSyntaxError();
[ImplementedInPrivateScript] void voidMethodThrowsReferenceError();
- [ImplementedInPrivateScript] void voidMethodWithStackOverflow();
+ [ImplementedInPrivateScript] void voidMethodThrowsStackOverflowError();
[ImplementedInPrivateScript, OnlyExposedToPrivateScript] short addIntegerForPrivateScriptOnly(short value1, short value2);
[ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString stringAttributeForPrivateScriptOnly;
[ImplementedInPrivateScript] short addIntegerImplementedInCPP(short value1, short value2);
[OnlyExposedToPrivateScript] short addIntegerImplementedInCPPForPrivateScriptOnly(short value1, short value2);
[ImplementedInPrivateScript] attribute DOMString stringAttributeImplementedInCPP;
[OnlyExposedToPrivateScript] attribute DOMString stringAttributeImplementedInCPPForPrivateScriptOnly;
+ [ImplementedInPrivateScript] void dispatchDocumentOnload(Document document);
};
diff --git a/core/testing/TypeConversions.idl b/core/testing/TypeConversions.idl
index ffaa21e..ba3e99a 100644
--- a/core/testing/TypeConversions.idl
+++ b/core/testing/TypeConversions.idl
@@ -24,7 +24,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
] interface TypeConversions {
attribute long testLong;
[EnforceRange, ImplementedAs=testLong] attribute long testEnforceRangeLong;
diff --git a/core/timing/PerformanceEntry.idl b/core/timing/PerformanceEntry.idl
index 06d8222..8e382cd 100644
--- a/core/timing/PerformanceEntry.idl
+++ b/core/timing/PerformanceEntry.idl
@@ -31,7 +31,6 @@
// See: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html
[
WillBeGarbageCollected,
- Custom=Wrap,
] interface PerformanceEntry {
readonly attribute DOMString name;
readonly attribute DOMString entryType;
diff --git a/core/xml/DocumentXMLTreeViewer.idl b/core/xml/DocumentXMLTreeViewer.idl
new file mode 100644
index 0000000..150d440
--- /dev/null
+++ b/core/xml/DocumentXMLTreeViewer.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ NoImplHeader
+] partial interface Document {
+ [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void transformDocumentToTreeView(DOMString noStyleMessage);
+};
diff --git a/core/xml/XMLHttpRequest.idl b/core/xml/XMLHttpRequest.idl
index 6147be4..4facb56 100644
--- a/core/xml/XMLHttpRequest.idl
+++ b/core/xml/XMLHttpRequest.idl
@@ -33,7 +33,8 @@
"document",
"json",
"text",
- "legacystream"
+ "legacystream",
+ "stream"
};
[
@@ -88,5 +89,5 @@
readonly attribute DOMString statusText;
// Extension
- void overrideMimeType(DOMString override);
+ [RaisesException] void overrideMimeType(DOMString override);
};
diff --git a/core/xml/XMLHttpRequestProgressEvent.idl b/core/xml/XMLHttpRequestProgressEvent.idl
index a28d64b..41bed63 100644
--- a/core/xml/XMLHttpRequestProgressEvent.idl
+++ b/core/xml/XMLHttpRequestProgressEvent.idl
@@ -25,7 +25,7 @@
// We should also inherit from LSProgressEvent when the idl is added.
interface XMLHttpRequestProgressEvent : ProgressEvent {
- [MeasureAs=XHRProgressEventPosition] readonly attribute unsigned long long position;
- [MeasureAs=XHRProgressEventTotalSize] readonly attribute unsigned long long totalSize;
+ [DeprecateAs=XHRProgressEventPosition] readonly attribute unsigned long long position;
+ [DeprecateAs=XHRProgressEventTotalSize] readonly attribute unsigned long long totalSize;
};
diff --git a/core/xml/XSLTProcessor.idl b/core/xml/XSLTProcessor.idl
index dc51a60..f8d3b1d 100644
--- a/core/xml/XSLTProcessor.idl
+++ b/core/xml/XSLTProcessor.idl
@@ -33,6 +33,7 @@
[
WillBeGarbageCollected,
Constructor,
+ ConstructorCallWith=Document,
RuntimeEnabled=XSLT,
MeasureAs=XSLTProcessor
] interface XSLTProcessor {
diff --git a/modules/README b/modules/README
index 1a601a7..418d1e5 100644
--- a/modules/README
+++ b/modules/README
@@ -6,4 +6,4 @@
The current version corresponds to:
URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 182210
+Current revision: 190578
diff --git a/modules/credentialmanager/CredentialsContainer.idl b/modules/credentialmanager/CredentialsContainer.idl
index 64ecde0..43497bc 100644
--- a/modules/credentialmanager/CredentialsContainer.idl
+++ b/modules/credentialmanager/CredentialsContainer.idl
@@ -7,7 +7,7 @@
GarbageCollected
] interface CredentialsContainer {
[CallWith=ScriptState] Promise request(optional Dictionary options);
- [CallWith=ScriptState] Promise notifySignedIn(optional Credential credential);
- [CallWith=ScriptState] Promise notifyFailedSignIn(optional Credential credential);
+ [CallWith=ScriptState] Promise notifySignedIn(Credential credential);
+ [CallWith=ScriptState] Promise notifyFailedSignIn(Credential credential);
[CallWith=ScriptState] Promise notifySignedOut();
};
diff --git a/modules/device_orientation/DeviceAcceleration.idl b/modules/device_orientation/DeviceAcceleration.idl
index 6ad701c..827bc46 100644
--- a/modules/device_orientation/DeviceAcceleration.idl
+++ b/modules/device_orientation/DeviceAcceleration.idl
@@ -24,7 +24,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
NoInterfaceObject
] interface DeviceAcceleration {
readonly attribute double? x;
diff --git a/modules/device_orientation/DeviceRotationRate.idl b/modules/device_orientation/DeviceRotationRate.idl
index 71d299f..117c8b6 100644
--- a/modules/device_orientation/DeviceRotationRate.idl
+++ b/modules/device_orientation/DeviceRotationRate.idl
@@ -24,7 +24,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
NoInterfaceObject
] interface DeviceRotationRate {
readonly attribute double? alpha;
diff --git a/modules/encoding/TextDecodeOptions.idl b/modules/encoding/TextDecodeOptions.idl
new file mode 100644
index 0000000..a4e0974
--- /dev/null
+++ b/modules/encoding/TextDecodeOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://encoding.spec.whatwg.org/#textdecoder
+
+[
+ GarbageCollected
+] dictionary TextDecodeOptions {
+ boolean stream = false;
+};
diff --git a/modules/encoding/TextDecoder.idl b/modules/encoding/TextDecoder.idl
index af0ffac..977a865 100644
--- a/modules/encoding/TextDecoder.idl
+++ b/modules/encoding/TextDecoder.idl
@@ -31,7 +31,7 @@
[
RuntimeEnabled=EncodingAPI,
Exposed=(Window,Worker),
- Constructor(optional DOMString label = "utf-8", optional Dictionary options),
+ Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
RaisesException=Constructor,
GarbageCollected,
MeasureAs=TextDecoderConstructor
@@ -39,5 +39,5 @@
readonly attribute DOMString encoding;
readonly attribute boolean fatal;
readonly attribute boolean ignoreBOM;
- [RaisesException, MeasureAs=TextDecoderDecode] DOMString decode(optional ArrayBufferView input, optional Dictionary options);
+ [RaisesException, MeasureAs=TextDecoderDecode] DOMString decode(optional ArrayBufferView input, optional TextDecodeOptions options);
};
diff --git a/modules/encoding/TextDecoderOptions.idl b/modules/encoding/TextDecoderOptions.idl
new file mode 100644
index 0000000..c222515
--- /dev/null
+++ b/modules/encoding/TextDecoderOptions.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://encoding.spec.whatwg.org/#textdecoder
+
+[
+ GarbageCollected
+] dictionary TextDecoderOptions {
+ boolean fatal = false;
+ boolean ignoreBOM = false;
+};
diff --git a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
index ed94199..b275832 100644
--- a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
+++ b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
@@ -13,6 +13,6 @@
[RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitneedkey;
[RuntimeEnabled=EncryptedMedia] readonly attribute MediaKeys mediaKeys;
- [RuntimeEnabled=EncryptedMedia, RaisesException, TypeChecking=Interface] void setMediaKeys(MediaKeys? mediaKeys);
+ [RuntimeEnabled=EncryptedMedia, TypeChecking=Interface, CallWith=ScriptState] Promise setMediaKeys(MediaKeys? mediaKeys);
[RuntimeEnabled=EncryptedMedia] attribute EventHandler onneedkey;
};
diff --git a/modules/encryptedmedia/MediaKeySession.idl b/modules/encryptedmedia/MediaKeySession.idl
index 9126d3b..acf3177 100644
--- a/modules/encryptedmedia/MediaKeySession.idl
+++ b/modules/encryptedmedia/MediaKeySession.idl
@@ -37,6 +37,10 @@
readonly attribute DOMString sessionId;
[CallWith=ScriptState] readonly attribute Promise closed;
+ // session initialization
+ [CallWith=ScriptState] Promise generateRequest(DOMString initDataType, ArrayBuffer initData);
+ [CallWith=ScriptState] Promise generateRequest(DOMString initDataType, ArrayBufferView initData);
+
// session operations
[CallWith=ScriptState] Promise update(ArrayBuffer response);
[CallWith=ScriptState] Promise update(ArrayBufferView response);
diff --git a/modules/encryptedmedia/MediaKeys.idl b/modules/encryptedmedia/MediaKeys.idl
index 05dded4..14a542d 100644
--- a/modules/encryptedmedia/MediaKeys.idl
+++ b/modules/encryptedmedia/MediaKeys.idl
@@ -35,9 +35,9 @@
] interface MediaKeys {
readonly attribute DOMString keySystem;
+ [CallWith=ScriptState] MediaKeySession createSession(optional SessionType sessionType = "temporary");
+
[CallWith=ScriptState] static Promise create(DOMString keySystem);
- [CallWith=ScriptState] Promise createSession(DOMString initDataType, ArrayBuffer initData, optional SessionType sessionType = "temporary");
- [CallWith=ScriptState] Promise createSession(DOMString initDataType, ArrayBufferView initData, optional SessionType sessionType = "temporary");
static boolean isTypeSupported(DOMString keySystem, optional DOMString contentType = null);
};
diff --git a/modules/geofencing/CircularRegion.idl b/modules/geofencing/CircularGeofencingRegion.idl
similarity index 88%
rename from modules/geofencing/CircularRegion.idl
rename to modules/geofencing/CircularGeofencingRegion.idl
index 19278fd..1ddf454 100644
--- a/modules/geofencing/CircularRegion.idl
+++ b/modules/geofencing/CircularGeofencingRegion.idl
@@ -7,7 +7,7 @@
Exposed=(Window,Worker),
GarbageCollected,
Constructor(Dictionary init)
-] interface CircularRegion : GeofencingRegion {
+] interface CircularGeofencingRegion : GeofencingRegion {
const double MIN_RADIUS = 1.0;
const double MAX_RADIUS = 100.0;
diff --git a/modules/geofencing/GeofencingRegion.idl b/modules/geofencing/GeofencingRegion.idl
index 4e22058..32d3d3c 100644
--- a/modules/geofencing/GeofencingRegion.idl
+++ b/modules/geofencing/GeofencingRegion.idl
@@ -4,6 +4,7 @@
[
RuntimeEnabled=Geofencing,
+ SpecialWrapFor=CircularGeofencingRegion,
NoInterfaceObject,
GarbageCollected,
] interface GeofencingRegion {
diff --git a/modules/geofencing/WorkerNavigatorGeofencing.idl b/modules/geofencing/WorkerNavigatorGeofencing.idl
new file mode 100644
index 0000000..bfcbe18
--- /dev/null
+++ b/modules/geofencing/WorkerNavigatorGeofencing.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+ RuntimeEnabled=Geofencing,
+ Exposed=Worker,
+] partial interface WorkerNavigator {
+ readonly attribute Geofencing geofencing;
+};
diff --git a/modules/indexeddb/IDBDatabase.idl b/modules/indexeddb/IDBDatabase.idl
index bb9c038..36ab560 100644
--- a/modules/indexeddb/IDBDatabase.idl
+++ b/modules/indexeddb/IDBDatabase.idl
@@ -43,9 +43,9 @@
[RaisesException] IDBObjectStore createObjectStore(DOMString name, optional Dictionary options);
[RaisesException] void deleteObjectStore(DOMString name);
// FIXME: should be union type http://crbug.com/240176
- [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMString storeName, optional IDBTransactionMode mode = "readonly");
- [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(sequence<DOMString> storeNames, optional IDBTransactionMode mode = "readonly");
- [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMStringList storeNames, optional IDBTransactionMode mode = "readonly");
+ [CallWith=ScriptState, RaisesException] IDBTransaction transaction(DOMString storeName, optional IDBTransactionMode mode = "readonly");
+ [CallWith=ScriptState, RaisesException] IDBTransaction transaction(sequence<DOMString> storeNames, optional IDBTransactionMode mode = "readonly");
+ [CallWith=ScriptState, RaisesException] IDBTransaction transaction(DOMStringList storeNames, optional IDBTransactionMode mode = "readonly");
void close();
attribute EventHandler onabort;
attribute EventHandler onclose;
diff --git a/modules/indexeddb/IDBIndexParameters.idl b/modules/indexeddb/IDBIndexParameters.idl
new file mode 100644
index 0000000..199d45c
--- /dev/null
+++ b/modules/indexeddb/IDBIndexParameters.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#options-object-concept
+
+[
+ GarbageCollected
+] dictionary IDBIndexParameters {
+ boolean unique = false;
+ boolean multiEntry = false;
+};
diff --git a/modules/indexeddb/IDBObjectStore.idl b/modules/indexeddb/IDBObjectStore.idl
index a22fc74..2afdfe4 100644
--- a/modules/indexeddb/IDBObjectStore.idl
+++ b/modules/indexeddb/IDBObjectStore.idl
@@ -50,8 +50,8 @@
[CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional DOMString direction = "next");
[CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
// FIXME: should be union type http://crbug.com/240176
- [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, DOMString keyPath, optional Dictionary options);
- [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, sequence<DOMString> keyPath, optional Dictionary options);
+ [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, DOMString keyPath, optional IDBIndexParameters options);
+ [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, sequence<DOMString> keyPath, optional IDBIndexParameters options);
[RaisesException] IDBIndex index(DOMString name);
[RaisesException] void deleteIndex(DOMString name);
[CallWith=ScriptState, RaisesException] IDBRequest count([Default=Undefined] optional any key);
diff --git a/modules/mediasource/MediaSource.idl b/modules/mediasource/MediaSource.idl
index 0a946ba..1863acb 100644
--- a/modules/mediasource/MediaSource.idl
+++ b/modules/mediasource/MediaSource.idl
@@ -40,7 +40,7 @@
Constructor,
ConstructorCallWith=ExecutionContext,
RuntimeEnabled=MediaSource,
- TypeChecking=Interface|Unrestricted,
+ TypeChecking=(Interface,Unrestricted),
] interface MediaSource : EventTarget {
// All the source buffers created by this object.
readonly attribute SourceBufferList sourceBuffers;
diff --git a/modules/mediasource/SourceBuffer.idl b/modules/mediasource/SourceBuffer.idl
index a29f0fa..321daf7 100644
--- a/modules/mediasource/SourceBuffer.idl
+++ b/modules/mediasource/SourceBuffer.idl
@@ -39,7 +39,7 @@
ActiveDOMObject,
NoInterfaceObject,
RuntimeEnabled=MediaSource,
- TypeChecking=Interface|Unrestricted,
+ TypeChecking=(Interface,Unrestricted),
] interface SourceBuffer : EventTarget {
// Gets or sets the AppendMode.
diff --git a/modules/mediastream/MediaStream.idl b/modules/mediastream/MediaStream.idl
index 171b878..14cf0f5 100644
--- a/modules/mediastream/MediaStream.idl
+++ b/modules/mediastream/MediaStream.idl
@@ -33,7 +33,7 @@
NoInterfaceObject,
] interface MediaStream : EventTarget {
// DEPRECATED
- readonly attribute DOMString label;
+ [MeasureAs=MediaStreamLabel] readonly attribute DOMString label;
readonly attribute DOMString id;
@@ -45,11 +45,11 @@
[RaisesException] void removeTrack(MediaStreamTrack track);
MediaStreamTrack getTrackById(DOMString trackId);
[CallWith=ExecutionContext] MediaStream clone();
-
- readonly attribute boolean ended;
+ // DEPRECATED
+ [MeasureAs=MediaStreamEnded] readonly attribute boolean ended;
// DEPRECATED
- void stop();
+ [MeasureAs=MediaStreamStop] void stop();
attribute EventHandler onended;
attribute EventHandler onaddtrack;
diff --git a/modules/netinfo/NetworkInformation.idl b/modules/netinfo/NetworkInformation.idl
index 8a4f848..166c2b5 100644
--- a/modules/netinfo/NetworkInformation.idl
+++ b/modules/netinfo/NetworkInformation.idl
@@ -15,7 +15,7 @@
[
RuntimeEnabled=NetworkInformation,
Exposed=(Window,Worker),
- WillBeGarbageCollected,
+ GarbageCollected,
ActiveDOMObject
] interface NetworkInformation : EventTarget {
readonly attribute ConnectionType type;
diff --git a/modules/notifications/Notification.idl b/modules/notifications/Notification.idl
index 51a26d9..ebf279d 100644
--- a/modules/notifications/Notification.idl
+++ b/modules/notifications/Notification.idl
@@ -32,12 +32,13 @@
[
GarbageCollected,
ActiveDOMObject,
- Constructor(DOMString title, [Default=Undefined] optional Dictionary options),
+ Constructor(DOMString title, optional NotificationOptions options),
ConstructorCallWith=ExecutionContext,
+ MeasureAs=NotificationCreated,
RuntimeEnabled=Notifications,
] interface Notification : EventTarget {
- [CallWith=ExecutionContext] static readonly attribute DOMString permission;
- [CallWith=ExecutionContext] static void requestPermission(optional NotificationPermissionCallback callback);
+ [CallWith=ExecutionContext, MeasureAs=NotificationPermission] static readonly attribute DOMString permission;
+ [CallWith=ExecutionContext, MeasureAs=NotificationPermissionRequested] static void requestPermission(optional NotificationPermissionCallback callback);
// FIXME: Implement the Notification.get() method.
@@ -53,5 +54,5 @@
readonly attribute DOMString tag;
readonly attribute DOMString icon;
- void close();
+ [MeasureAs=NotificationClosed] void close();
};
diff --git a/modules/notifications/NotificationOptions.idl b/modules/notifications/NotificationOptions.idl
new file mode 100644
index 0000000..8230322
--- /dev/null
+++ b/modules/notifications/NotificationOptions.idl
@@ -0,0 +1,21 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://notifications.spec.whatwg.org/#api
+
+enum NotificationDirection {
+ "auto",
+ "ltr",
+ "rtl"
+};
+
+[
+ GarbageCollected
+] dictionary NotificationOptions {
+ NotificationDirection dir = "auto";
+ DOMString lang = "";
+ DOMString body = "";
+ DOMString tag = "";
+ DOMString icon;
+};
diff --git a/modules/performance/SharedWorkerPerformance.idl b/modules/performance/SharedWorkerPerformance.idl
index ef8b36b..cef9493 100644
--- a/modules/performance/SharedWorkerPerformance.idl
+++ b/modules/performance/SharedWorkerPerformance.idl
@@ -27,9 +27,7 @@
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-[
- RuntimeEnabled=HighResolutionTimeInWorkers,
-] partial interface SharedWorker {
+partial interface SharedWorker {
// See https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/HighResolutionTime2/Overview.html for details.
[CallWith=ExecutionContext] readonly attribute double workerStart;
};
diff --git a/modules/performance/WorkerGlobalScopePerformance.idl b/modules/performance/WorkerGlobalScopePerformance.idl
index 0bbe715..559003a 100644
--- a/modules/performance/WorkerGlobalScopePerformance.idl
+++ b/modules/performance/WorkerGlobalScopePerformance.idl
@@ -28,8 +28,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-[
- RuntimeEnabled=HighResolutionTimeInWorkers,
-] partial interface WorkerGlobalScope {
+partial interface WorkerGlobalScope {
readonly attribute WorkerPerformance performance;
};
diff --git a/modules/presentation/NavigatorPresentation.idl b/modules/presentation/NavigatorPresentation.idl
new file mode 100644
index 0000000..4cf7e1e
--- /dev/null
+++ b/modules/presentation/NavigatorPresentation.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://webscreens.github.io/presentation-api/#presentation-extension-to-navigator
+
+[
+ RuntimeEnabled=Presentation
+] partial interface Navigator {
+ readonly attribute Presentation presentation;
+};
diff --git a/modules/presentation/Presentation.idl b/modules/presentation/Presentation.idl
new file mode 100644
index 0000000..1546a1d
--- /dev/null
+++ b/modules/presentation/Presentation.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://webscreens.github.io/presentation-api/#presentation-interface
+
+[
+ GarbageCollected,
+ RuntimeEnabled=Presentation
+] interface Presentation : EventTarget {
+ attribute EventHandler onavailablechange;
+};
diff --git a/modules/serviceworkers/Body.idl b/modules/serviceworkers/Body.idl
new file mode 100644
index 0000000..bb06579
--- /dev/null
+++ b/modules/serviceworkers/Body.idl
@@ -0,0 +1,21 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://fetch.spec.whatwg.org/#body
+[
+ RuntimeEnabled=ServiceWorker,
+ Exposed=ServiceWorker,
+ NoInterfaceObject,
+ ActiveDOMObject,
+ GarbageCollected,
+] interface Body {
+ readonly attribute boolean bodyUsed;
+ [CallWith=ScriptState] Promise arrayBuffer();
+ [CallWith=ScriptState] Promise blob();
+ [CallWith=ScriptState] Promise json();
+ [CallWith=ScriptState] Promise text();
+
+ // Still to be implemented.
+ // [CallWith=ScriptState] Promise formData();
+};
diff --git a/modules/serviceworkers/Cache.idl b/modules/serviceworkers/Cache.idl
index 5f44e41..6da74e9 100644
--- a/modules/serviceworkers/Cache.idl
+++ b/modules/serviceworkers/Cache.idl
@@ -4,32 +4,20 @@
// See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache
-// FIXME: Blink doesn't support dictionary definitions. For now, we can use the
-// Dictionary interface. See http://crbug.com/321462
-
-// dictionary QueryParams {
-// boolean ignoreSearch;
-// boolean ignoreMethod;
-// boolean ignoreVary;
-// boolean prefixMatch;
-// DOMString cacheName;
-// };
-
[
- WillBeGarbageCollected,
- NoInterfaceObject,
+ GarbageCollected,
Exposed=ServiceWorker,
- RuntimeEnabled=ServiceWorker,
+ RuntimeEnabled=ServiceWorkerOnFetch,
] interface Cache {
// FIXME: Blink doesn't support union types, we use overrides instead. See http://crbug.com/240176
- // [CallWith=ScriptState] Promise match((Request or ScalarValueString) request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise match(Request request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise match(ScalarValueString request, optional Dictionary queryParams);
+ // [CallWith=ScriptState] Promise match((Request or ScalarValueString) request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise match(Request request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise match(ScalarValueString request, optional QueryParams queryParams);
- // [CallWith=ScriptState] Promise matchAll((Request or ScalarValueString) request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise matchAll(Request request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise matchAll(ScalarValueString request, optional Dictionary queryParams);
+ // [CallWith=ScriptState] Promise matchAll((Request or ScalarValueString) request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise matchAll(Request request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise matchAll(ScalarValueString request, optional QueryParams queryParams);
// [CallWith=ScriptState] Promise add((Request or ScalarValueString) request);
[CallWith=ScriptState] Promise add(Request request);
@@ -44,11 +32,11 @@
[CallWith=ScriptState] Promise put(Request request, Response response);
[CallWith=ScriptState] Promise put(ScalarValueString request, Response response);
- // [CallWith=ScriptState] Promise delete((Request or ScalarValueString) request, optional Dictionary queryParams);
- [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(Request request, optional Dictionary queryParams);
- [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(ScalarValueString request, optional Dictionary queryParams);
+ // [CallWith=ScriptState] Promise delete((Request or ScalarValueString) request, optional QueryParams queryParams);
+ [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(Request request, optional QueryParams queryParams);
+ [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(ScalarValueString request, optional QueryParams queryParams);
- // [CallWith=ScriptState] Promise keys(optional (Request or ScalarValueString) request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise keys(optional Request request, optional Dictionary queryParams);
- [CallWith=ScriptState] Promise keys(ScalarValueString request, optional Dictionary queryParams);
+ // [CallWith=ScriptState] Promise keys(optional (Request or ScalarValueString) request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise keys(optional Request request, optional QueryParams queryParams);
+ [CallWith=ScriptState] Promise keys(ScalarValueString request, optional QueryParams queryParams);
};
diff --git a/modules/serviceworkers/CacheStorage.idl b/modules/serviceworkers/CacheStorage.idl
index 35b5393..c36ce34 100644
--- a/modules/serviceworkers/CacheStorage.idl
+++ b/modules/serviceworkers/CacheStorage.idl
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+// See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-storage
[
- WillBeGarbageCollected,
- NoInterfaceObject,
+ GarbageCollected,
Exposed=ServiceWorker,
- RuntimeEnabled=ServiceWorker,
+ RuntimeEnabled=ServiceWorkerOnFetch,
] interface CacheStorage {
[CallWith=ScriptState] Promise get(ScalarValueString cacheName);
[CallWith=ScriptState] Promise has(ScalarValueString cacheName);
diff --git a/modules/serviceworkers/InstallPhaseEvent.idl b/modules/serviceworkers/ExtendableEvent.idl
similarity index 95%
rename from modules/serviceworkers/InstallPhaseEvent.idl
rename to modules/serviceworkers/ExtendableEvent.idl
index 9f2637f..c6a2b5f 100644
--- a/modules/serviceworkers/InstallPhaseEvent.idl
+++ b/modules/serviceworkers/ExtendableEvent.idl
@@ -28,10 +28,10 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#install-phase-event-interface
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#extendable-event-interface
[
RuntimeEnabled=ServiceWorker,
Exposed=ServiceWorker,
-] interface InstallPhaseEvent : Event {
+] interface ExtendableEvent : Event {
[CallWith=ScriptState] void waitUntil(any value);
};
diff --git a/modules/serviceworkers/FetchBodyStream.idl b/modules/serviceworkers/FetchBodyStream.idl
deleted file mode 100644
index 7c1c3fb..0000000
--- a/modules/serviceworkers/FetchBodyStream.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// http://fetch.spec.whatwg.org/#fetchbodystream
-[
- RuntimeEnabled=ServiceWorker,
- Exposed=ServiceWorker,
- NoInterfaceObject,
- ActiveDOMObject,
- WillBeGarbageCollected,
-] interface FetchBodyStream {
- [CallWith=ScriptState] Promise asArrayBuffer();
- [CallWith=ScriptState] Promise asBlob();
- [CallWith=ScriptState] Promise asJSON();
- [CallWith=ScriptState] Promise asText();
-
- // Still to be implemented.
- // [CallWith=ScriptState] Promise asFormData();
-};
-
diff --git a/modules/serviceworkers/FetchEvent.idl b/modules/serviceworkers/FetchEvent.idl
index d425143..88bf9e1 100644
--- a/modules/serviceworkers/FetchEvent.idl
+++ b/modules/serviceworkers/FetchEvent.idl
@@ -4,11 +4,11 @@
// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
[
- RuntimeEnabled=ServiceWorker,
+ RuntimeEnabled=ServiceWorkerOnFetch,
Exposed=ServiceWorker
] interface FetchEvent : Event {
readonly attribute Request request;
readonly attribute boolean isReload;
- [CallWith=ScriptState] void respondWith(any value);
+ [CallWith=ScriptState, RaisesException] void respondWith(any value);
};
diff --git a/modules/serviceworkers/Headers.idl b/modules/serviceworkers/Headers.idl
index efcbc3b..1b29e74 100644
--- a/modules/serviceworkers/Headers.idl
+++ b/modules/serviceworkers/Headers.idl
@@ -3,14 +3,15 @@
// found in the LICENSE file.
// http://fetch.spec.whatwg.org/#headers-class
+typedef Dictionary OpenEndedDictionary;
[
Constructor,
Constructor(Headers input),
- Constructor(Dictionary input),
+ Constructor(OpenEndedDictionary input),
RuntimeEnabled=ServiceWorker,
Exposed=ServiceWorker,
RaisesException=Constructor,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface Headers {
[RaisesException] void append(ByteString name, ByteString value);
[ImplementedAs=remove, RaisesException] void delete(ByteString key);
diff --git a/modules/serviceworkers/InstallEvent.idl b/modules/serviceworkers/InstallEvent.idl
index b014697..bdc33db 100644
--- a/modules/serviceworkers/InstallEvent.idl
+++ b/modules/serviceworkers/InstallEvent.idl
@@ -32,7 +32,7 @@
[
RuntimeEnabled=ServiceWorker,
Exposed=ServiceWorker,
-] interface InstallEvent : InstallPhaseEvent {
+] interface InstallEvent : ExtendableEvent {
void replace();
[CallWith=ScriptState] Promise reloadAll();
};
diff --git a/modules/serviceworkers/QueryParams.idl b/modules/serviceworkers/QueryParams.idl
new file mode 100644
index 0000000..817aa4b
--- /dev/null
+++ b/modules/serviceworkers/QueryParams.idl
@@ -0,0 +1,15 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache
+[
+ GarbageCollected
+] dictionary QueryParams {
+ // FIXME: Specify defaults. https://github.com/slightlyoff/ServiceWorker/issues/466
+ boolean ignoreSearch;
+ boolean ignoreMethod;
+ boolean ignoreVary;
+ boolean prefixMatch;
+ DOMString cacheName;
+};
diff --git a/modules/serviceworkers/RegistrationOptionList.idl b/modules/serviceworkers/RegistrationOptionList.idl
new file mode 100644
index 0000000..07d8216
--- /dev/null
+++ b/modules/serviceworkers/RegistrationOptionList.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#registration-option-list-dictionary
+[
+ GarbageCollected
+] dictionary RegistrationOptionList {
+ ScalarValueString scope = "/";
+};
diff --git a/modules/serviceworkers/Request.idl b/modules/serviceworkers/Request.idl
index 3d1b402..3716a5e 100644
--- a/modules/serviceworkers/Request.idl
+++ b/modules/serviceworkers/Request.idl
@@ -14,7 +14,7 @@
RuntimeEnabled=ServiceWorker,
Exposed=ServiceWorker,
RaisesException=Constructor,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface Request {
readonly attribute ByteString method;
readonly attribute ScalarValueString url;
@@ -24,7 +24,10 @@
readonly attribute RequestMode mode;
readonly attribute RequestCredentials credentials;
+ Request clone();
+
// FIXME: Implement the following:
- // readonly attribute FetchBodyStream body;
// readonly attribute RequestContext context;
};
+
+Request implements Body;
diff --git a/modules/serviceworkers/Response.idl b/modules/serviceworkers/Response.idl
index 28df198..d3cd258 100644
--- a/modules/serviceworkers/Response.idl
+++ b/modules/serviceworkers/Response.idl
@@ -7,14 +7,16 @@
enum ResponseType { "basic", "cors", "default", "error", "opaque" };
[
- // FIXME: Add ctors for ArrayBuffer, ArrayBufferView, FormData,
- // and URLSearchParams response bodies.
+ // FIXME: Add ctors for FormData and URLSearchParams response bodies.
Constructor(ScalarValueString body, optional Dictionary responseInitDict),
Constructor(Blob? body, optional Dictionary responseInitDict),
+ Constructor(ArrayBuffer input, optional Dictionary requestInitDict),
+ Constructor(ArrayBufferView input, optional Dictionary requestInitDict),
+ ConstructorCallWith=ExecutionContext,
RuntimeEnabled=ServiceWorker,
Exposed=ServiceWorker,
RaisesException=Constructor,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface Response {
// FIXME: Implement redirect().
readonly attribute ResponseType type;
@@ -22,5 +24,8 @@
readonly attribute unsigned short status;
readonly attribute ByteString statusText;
readonly attribute Headers headers;
- [CallWith=ExecutionContext] readonly attribute FetchBodyStream body;
+
+ Response clone();
};
+
+Response implements Body;
diff --git a/modules/serviceworkers/ServiceWorker.idl b/modules/serviceworkers/ServiceWorker.idl
index 69171df..ec8d558 100644
--- a/modules/serviceworkers/ServiceWorker.idl
+++ b/modules/serviceworkers/ServiceWorker.idl
@@ -47,6 +47,8 @@
// FIXME: Should inherit this from Worker.
[Custom, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+ [RaisesException] void terminate();
+
readonly attribute ScalarValueString scriptURL;
readonly attribute ServiceWorkerState state;
diff --git a/modules/serviceworkers/ServiceWorkerClient.idl b/modules/serviceworkers/ServiceWorkerClient.idl
index 01a92cf..a0439a7 100644
--- a/modules/serviceworkers/ServiceWorkerClient.idl
+++ b/modules/serviceworkers/ServiceWorkerClient.idl
@@ -6,7 +6,7 @@
[
Exposed=ServiceWorker,
RuntimeEnabled=ServiceWorker,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface ServiceWorkerClient {
readonly attribute unsigned long id;
diff --git a/modules/serviceworkers/ServiceWorkerClientQueryParams.idl b/modules/serviceworkers/ServiceWorkerClientQueryParams.idl
new file mode 100644
index 0000000..a37df36
--- /dev/null
+++ b/modules/serviceworkers/ServiceWorkerClientQueryParams.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#serviceworker-client-query-params-dictionary
+[
+ GarbageCollected
+] dictionary ServiceWorkerClientQueryParams {
+ // FIXME: Specify defaults. https://github.com/slightlyoff/ServiceWorker/issues/466
+ boolean includeUncontrolled;
+};
diff --git a/modules/serviceworkers/ServiceWorkerClients.idl b/modules/serviceworkers/ServiceWorkerClients.idl
index a484d6e..e7b555b 100644
--- a/modules/serviceworkers/ServiceWorkerClients.idl
+++ b/modules/serviceworkers/ServiceWorkerClients.idl
@@ -6,7 +6,7 @@
[
Exposed=ServiceWorker,
RuntimeEnabled=ServiceWorker,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface ServiceWorkerClients {
- [CallWith=ScriptState] Promise getServiced();
+ [CallWith=ScriptState] Promise getAll(optional ServiceWorkerClientQueryParams options);
};
diff --git a/modules/serviceworkers/ServiceWorkerContainer.idl b/modules/serviceworkers/ServiceWorkerContainer.idl
index df0017e..2dc7f45 100644
--- a/modules/serviceworkers/ServiceWorkerContainer.idl
+++ b/modules/serviceworkers/ServiceWorkerContainer.idl
@@ -31,15 +31,11 @@
// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-interface
[
RuntimeEnabled=ServiceWorker,
- WillBeGarbageCollected
+ GarbageCollected
] interface ServiceWorkerContainer {
- [Unforgeable] readonly attribute ServiceWorker? installing;
- [Unforgeable] readonly attribute ServiceWorker? waiting;
- [Unforgeable] readonly attribute ServiceWorker? active;
[Unforgeable] readonly attribute ServiceWorker? controller;
-
[CallWith=ScriptState] readonly attribute Promise ready;
- [CallWith=ScriptState, ImplementedAs=registerServiceWorker] Promise register(ScalarValueString url, optional Dictionary options);
- [CallWith=ScriptState, ImplementedAs=unregisterServiceWorker] Promise unregister(optional ScalarValueString scope = "/");
+ [CallWith=ScriptState, ImplementedAs=registerServiceWorker] Promise register(ScalarValueString url, optional RegistrationOptionList options);
+ [CallWith=ScriptState] Promise getRegistration(optional ScalarValueString documentURL = "");
};
diff --git a/modules/serviceworkers/ServiceWorkerGlobalScope.idl b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
index be99abc..10d9a9b 100644
--- a/modules/serviceworkers/ServiceWorkerGlobalScope.idl
+++ b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
@@ -37,15 +37,16 @@
readonly attribute ServiceWorkerClients clients;
[CallWith=ExecutionContext, Unforgeable] readonly attribute ScalarValueString scope;
- // FIXME: Rename this once it's ready for testing.
- [CallWith=ExecutionContext, Unforgeable, ImplementedAs=caches] readonly attribute CacheStorage nativeCaches;
+ [CallWith=ExecutionContext, Unforgeable, RuntimeEnabled=ServiceWorkerOnFetch] readonly attribute CacheStorage caches;
[CallWith=ScriptState] Promise fetch(DOMString request, optional Dictionary requestInitDict);
[CallWith=ScriptState] Promise fetch(Request request, optional Dictionary requestInitDict);
+ [RaisesException] void close();
+
attribute EventHandler onactivate;
- attribute EventHandler onfetch;
+ [RuntimeEnabled=ServiceWorkerOnFetch] attribute EventHandler onfetch;
attribute EventHandler oninstall;
attribute EventHandler onmessage;
- attribute EventHandler onsync;
+ [RuntimeEnabled=BackgroundSync] attribute EventHandler onsync;
};
diff --git a/modules/serviceworkers/ServiceWorkerRegistration.idl b/modules/serviceworkers/ServiceWorkerRegistration.idl
index 869808d..13ace48 100644
--- a/modules/serviceworkers/ServiceWorkerRegistration.idl
+++ b/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -6,7 +6,7 @@
[
ActiveDOMObject,
RuntimeEnabled=ServiceWorker,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface ServiceWorkerRegistration : EventTarget {
[Unforgeable] readonly attribute ServiceWorker? installing;
[Unforgeable] readonly attribute ServiceWorker? waiting;
diff --git a/modules/speech/SpeechSynthesis.idl b/modules/speech/SpeechSynthesis.idl
index 7822292..98b53de 100644
--- a/modules/speech/SpeechSynthesis.idl
+++ b/modules/speech/SpeechSynthesis.idl
@@ -25,8 +25,7 @@
[
GarbageCollected,
- NoInterfaceObject,
- RuntimeEnabled=SpeechSynthesis
+ NoInterfaceObject
] interface SpeechSynthesis : EventTarget {
readonly attribute boolean pending;
readonly attribute boolean speaking;
diff --git a/modules/speech/SpeechSynthesisEvent.idl b/modules/speech/SpeechSynthesisEvent.idl
index e438411..d0456ed 100644
--- a/modules/speech/SpeechSynthesisEvent.idl
+++ b/modules/speech/SpeechSynthesisEvent.idl
@@ -23,9 +23,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-[
- RuntimeEnabled=SpeechSynthesis
-] interface SpeechSynthesisEvent : Event {
+interface SpeechSynthesisEvent : Event {
readonly attribute unsigned long charIndex;
readonly attribute float elapsedTime;
readonly attribute DOMString name;
diff --git a/modules/speech/SpeechSynthesisUtterance.idl b/modules/speech/SpeechSynthesisUtterance.idl
index 490a03a..b4a36ed 100644
--- a/modules/speech/SpeechSynthesisUtterance.idl
+++ b/modules/speech/SpeechSynthesisUtterance.idl
@@ -26,8 +26,7 @@
[
GarbageCollected,
Constructor(optional DOMString text = null),
- ConstructorCallWith=ExecutionContext,
- RuntimeEnabled=SpeechSynthesis,
+ ConstructorCallWith=ExecutionContext
] interface SpeechSynthesisUtterance : EventTarget {
attribute DOMString text;
attribute DOMString lang;
diff --git a/modules/speech/SpeechSynthesisVoice.idl b/modules/speech/SpeechSynthesisVoice.idl
index 05d36a5..ea323b0 100644
--- a/modules/speech/SpeechSynthesisVoice.idl
+++ b/modules/speech/SpeechSynthesisVoice.idl
@@ -25,8 +25,7 @@
[
GarbageCollected,
- NoInterfaceObject,
- RuntimeEnabled=SpeechSynthesis
+ NoInterfaceObject
] interface SpeechSynthesisVoice {
readonly attribute DOMString voiceURI;
readonly attribute DOMString name;
diff --git a/modules/speech/WindowSpeechSynthesis.idl b/modules/speech/WindowSpeechSynthesis.idl
index 1200a2e..a22453a 100644
--- a/modules/speech/WindowSpeechSynthesis.idl
+++ b/modules/speech/WindowSpeechSynthesis.idl
@@ -25,7 +25,6 @@
[
ImplementedAs=DOMWindowSpeechSynthesis,
- RuntimeEnabled=SpeechSynthesis,
] partial interface Window {
readonly attribute SpeechSynthesis speechSynthesis;
};
diff --git a/modules/webaudio/AudioBuffer.idl b/modules/webaudio/AudioBuffer.idl
index 7ec7c60..d94eaf8 100644
--- a/modules/webaudio/AudioBuffer.idl
+++ b/modules/webaudio/AudioBuffer.idl
@@ -27,7 +27,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
Conditional=WEB_AUDIO
] interface AudioBuffer {
readonly attribute long length; // in sample-frames
diff --git a/modules/webaudio/AudioContext.idl b/modules/webaudio/AudioContext.idl
index 0f6518e..cc74984 100644
--- a/modules/webaudio/AudioContext.idl
+++ b/modules/webaudio/AudioContext.idl
@@ -24,7 +24,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
ActiveDOMObject,
Conditional=WEB_AUDIO,
Constructor,
diff --git a/modules/webaudio/AudioListener.idl b/modules/webaudio/AudioListener.idl
index b9668f5..6f4645c 100644
--- a/modules/webaudio/AudioListener.idl
+++ b/modules/webaudio/AudioListener.idl
@@ -27,7 +27,7 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
Conditional=WEB_AUDIO
] interface AudioListener {
attribute float dopplerFactor; // same as OpenAL (default 1.0)
diff --git a/modules/webaudio/AudioNode.idl b/modules/webaudio/AudioNode.idl
index 4ed4d40..41396a3 100644
--- a/modules/webaudio/AudioNode.idl
+++ b/modules/webaudio/AudioNode.idl
@@ -38,7 +38,7 @@
[
Conditional=WEB_AUDIO,
Custom=Wrap,
- WillBeGarbageCollected,
+ GarbageCollected,
] interface AudioNode : EventTarget {
// FIXME: AudioNode argument should not be nullable
[RaisesException] void connect(AudioNode? destination, [Default=Undefined] optional unsigned long output, [Default=Undefined] optional unsigned long input);
diff --git a/modules/webaudio/AudioParam.idl b/modules/webaudio/AudioParam.idl
index e612201..ce6ec86 100644
--- a/modules/webaudio/AudioParam.idl
+++ b/modules/webaudio/AudioParam.idl
@@ -27,27 +27,27 @@
*/
[
- WillBeGarbageCollected,
+ GarbageCollected,
Conditional=WEB_AUDIO
] interface AudioParam {
attribute float value;
readonly attribute float defaultValue;
// Parameter automation.
- void setValueAtTime(float value, double time);
- void linearRampToValueAtTime(float value, double time);
+ [RaisesException] void setValueAtTime(float value, double time);
+ [RaisesException] void linearRampToValueAtTime(float value, double time);
[RaisesException] void exponentialRampToValueAtTime(float value, double time);
// Exponentially approach the target with a rate having the given time constant.
- void setTargetAtTime(float target, double time, double timeConstant);
+ [RaisesException] void setTargetAtTime(float target, double time, double timeConstant);
// Sets an array of arbitrary parameter values starting at time for the given duration.
// The number of values will be scaled to fit into the desired duration.
// FIXMEDART(ager): Auto-generate this custom method when the info about
// retaining typed arrays is in the IDL.
- [DartCustom] void setValueCurveAtTime(Float32Array values, double time, double duration);
+ [RaisesException, DartCustom] void setValueCurveAtTime(Float32Array values, double time, double duration);
// Cancels all scheduled parameter changes with times greater than or equal to startTime.
- void cancelScheduledValues(double startTime);
+ [RaisesException] void cancelScheduledValues(double startTime);
};
diff --git a/modules/webaudio/OfflineAudioContext.idl b/modules/webaudio/OfflineAudioContext.idl
index 5d5ec0c..5f5f8ac 100644
--- a/modules/webaudio/OfflineAudioContext.idl
+++ b/modules/webaudio/OfflineAudioContext.idl
@@ -23,7 +23,6 @@
*/
[
- WillBeGarbageCollected,
Conditional=WEB_AUDIO,
Constructor(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate),
ConstructorCallWith=ExecutionContext,
diff --git a/modules/webaudio/PeriodicWave.idl b/modules/webaudio/PeriodicWave.idl
index 3dccbc7..46a5474 100644
--- a/modules/webaudio/PeriodicWave.idl
+++ b/modules/webaudio/PeriodicWave.idl
@@ -24,7 +24,7 @@
// PeriodicWave represents a periodic audio waveform given by its Fourier coefficients.
[
- WillBeGarbageCollected,
+ GarbageCollected,
Conditional=WEB_AUDIO
] interface PeriodicWave {
diff --git a/modules/webdatabase/DatabaseCallback.idl b/modules/webdatabase/DatabaseCallback.idl
index 807bd3f..dc1987d 100644
--- a/modules/webdatabase/DatabaseCallback.idl
+++ b/modules/webdatabase/DatabaseCallback.idl
@@ -28,5 +28,4 @@
callback interface DatabaseCallback {
boolean handleEvent(Database database);
- boolean handleEvent(DatabaseSync database);
};
diff --git a/modules/webdatabase/DatabaseSync.idl b/modules/webdatabase/DatabaseSync.idl
deleted file mode 100644
index a558400..0000000
--- a/modules/webdatabase/DatabaseSync.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
- WillBeGarbageCollected,
- NoInterfaceObject
-] interface DatabaseSync {
- readonly attribute DOMString version;
- readonly attribute DOMString lastErrorMessage;
- [RaisesException] void changeVersion(DOMString oldVersion, DOMString newVersion, optional SQLTransactionSyncCallback callback);
- [RaisesException] void transaction(SQLTransactionSyncCallback callback);
- [RaisesException] void readTransaction(SQLTransactionSyncCallback callback);
-};
-
diff --git a/modules/webdatabase/SQLTransactionSync.idl b/modules/webdatabase/SQLTransactionSync.idl
deleted file mode 100644
index 7cbb0e6..0000000
--- a/modules/webdatabase/SQLTransactionSync.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
- WillBeGarbageCollected,
- NoInterfaceObject,
-] interface SQLTransactionSync {
- [RaisesException, Custom] SQLResultSet executeSql(DOMString sqlStatement, object[] arguments);
-};
diff --git a/modules/webdatabase/SQLTransactionSyncCallback.idl b/modules/webdatabase/SQLTransactionSyncCallback.idl
deleted file mode 100644
index 08bd0b3..0000000
--- a/modules/webdatabase/SQLTransactionSyncCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-callback interface SQLTransactionSyncCallback {
- boolean handleEvent(SQLTransactionSync transaction);
-};
diff --git a/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl b/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl
deleted file mode 100644
index 3e6fcfb..0000000
--- a/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-[
- RuntimeEnabled=Database,
-] partial interface WorkerGlobalScope {
- [RaisesException, DeprecateAs=OpenWebDatabaseInWorker] Database openDatabase(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
-
- [RaisesException, DeprecateAs=OpenWebDatabaseSyncInWorker] DatabaseSync openDatabaseSync(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
-};
diff --git a/modules/webmidi/MIDIAccess.idl b/modules/webmidi/MIDIAccess.idl
index 5ffcfac..19c18c6 100644
--- a/modules/webmidi/MIDIAccess.idl
+++ b/modules/webmidi/MIDIAccess.idl
@@ -32,8 +32,8 @@
NoInterfaceObject,
ActiveDOMObject
] interface MIDIAccess : EventTarget {
- sequence<MIDIInput> inputs();
- sequence<MIDIOutput> outputs();
+ readonly attribute MIDIInputMap inputs;
+ readonly attribute MIDIOutputMap outputs;
readonly attribute boolean sysexEnabled;
diff --git a/modules/webmidi/MIDIInputMap.idl b/modules/webmidi/MIDIInputMap.idl
new file mode 100644
index 0000000..e165c99
--- /dev/null
+++ b/modules/webmidi/MIDIInputMap.idl
@@ -0,0 +1,22 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// FIXME: Implement forEach.
+// callback ForEachCallback = void(DOMString id, MIDIInput port);
+
+[
+ Iterable,
+ NoInterfaceObject,
+ GarbageCollected,
+] interface MIDIInputMap {
+ readonly attribute unsigned long size;
+ Iterator keys();
+ Iterator entries();
+ Iterator values();
+ // This function returns undefined if |!this->has(id)|.
+ [ImplementedAs=getForBinding, CallWith=ScriptState] any get(DOMString id);
+ boolean has(DOMString key);
+ // FIXME: Implement forEach.
+ // void forEach (ForEachCallback callback);
+};
diff --git a/modules/webmidi/MIDIOptions.idl b/modules/webmidi/MIDIOptions.idl
new file mode 100644
index 0000000..447e6cd
--- /dev/null
+++ b/modules/webmidi/MIDIOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://www.w3.org/TR/webmidi/#midioptions-dictionary
+
+[
+ GarbageCollected
+] dictionary MIDIOptions {
+ boolean sysex;
+};
diff --git a/modules/webmidi/MIDIOutputMap.idl b/modules/webmidi/MIDIOutputMap.idl
new file mode 100644
index 0000000..eec7a88
--- /dev/null
+++ b/modules/webmidi/MIDIOutputMap.idl
@@ -0,0 +1,22 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// FIXME: Implement forEach.
+// callback ForEachCallback = void(DOMString id, MIDIOutput port);
+
+[
+ Iterable,
+ NoInterfaceObject,
+ GarbageCollected,
+] interface MIDIOutputMap {
+ readonly attribute unsigned long size;
+ Iterator keys();
+ Iterator entries();
+ Iterator values();
+ // This function returns undefined if |!this->has(id)|.
+ [ImplementedAs=getForBinding, CallWith=ScriptState] any get(DOMString id);
+ boolean has(DOMString key);
+ // FIXME: Implement forEach.
+ // void forEach (ForEachCallback callback);
+};
diff --git a/modules/webmidi/NavigatorWebMIDI.idl b/modules/webmidi/NavigatorWebMIDI.idl
index d391e29..ba26473 100644
--- a/modules/webmidi/NavigatorWebMIDI.idl
+++ b/modules/webmidi/NavigatorWebMIDI.idl
@@ -32,5 +32,5 @@
RuntimeEnabled=WebMIDI,
] partial interface Navigator {
// FIXMEDART: Remove the DartSuppress once Dart support Blink Promises.
- [CallWith=ScriptState, DartSuppress] Promise requestMIDIAccess(optional Dictionary options);
+ [CallWith=ScriptState, DartSuppress] Promise requestMIDIAccess(optional MIDIOptions options);
};