Roll 50: Copied IDLs, PYTHON scripts from WebKit removed deleted files in WebCore

TBR=jacobr@google.com

Review-Url: https://codereview.chromium.org//2786203002 .
diff --git a/bindings/IDLExtendedAttributes.txt b/bindings/IDLExtendedAttributes.txt
index c88d15d..58e04ee 100644
--- a/bindings/IDLExtendedAttributes.txt
+++ b/bindings/IDLExtendedAttributes.txt
@@ -5,7 +5,7 @@
 # If you would like to add a new extended attribute or value, please:
 #     (1) add the extended attribute or value to this file
 #     (2) add an explanation to the Blink IDL extended attributes document:
-#         http://www.chromium.org/blink/webidl/blink-idl-extended-attributes
+#         idl-extended-attributes.md (in this directory)
 #     (3) add appropriate test cases to run-bindings-tests
 #
 # The syntax of this file is as follows:
@@ -16,9 +16,7 @@
 #     - "Attr=X|Y|Z" means that Attr takes a required value, and the valid
 #       values are X, Y, and Z, and combinations thereof;
 #       e.g. [Attr=X], [Attr=Y], [Attr=X|Z].
-#       The separator must be | or &, so [Attr=X&Z] is also valid; the
-#       separator makes a difference for Conditional, but otherwise is simply
-#       a style convention.
+#       The separator must be | or &, so [Attr=X&Z] is also valid.
 #     - "Attr=|X|Y|Z" means that Attr takes an optional value, whose valid
 #       values (if present) are X, Y, and Z, and combinations thereof; e.g.
 #       [Attr], [Attr=X], [Attr=Y], [Attr=X|Z], [Attr=X|Y|Z], [Attr=X&Z].
@@ -33,12 +31,10 @@
 #       arbitrary, but that "X" is standard, e.g. [Attr=X], [Attr=Foo].
 #
 
-ActiveDOMObject
 CachedAttribute=*
 CallWith=ExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
-CheckSecurity=Frame|Node|Window
+CheckSecurity=Receiver|ReturnValue
 Clamp
-Conditional=*
 Constructor
 # FIXME: remove [ConstructorCallWith=Document], as can instead use
 # [ConstructorCallWith=ExecutionContext] + toDocument(executionContext)
@@ -71,13 +67,11 @@
 DoNotCheckConstants
 DoNotCheckSecurity=|Setter
 DoNotCheckSignature
-DoNotExposeJSAccessors
 EnforceRange
-ExposeJSAccessors
 Exposed=*
+FlexibleArrayBufferView
 GarbageCollected
 Global=|*
-Immutable
 ImplementedAs=*
 ImplementedInPrivateScript
 Iterable
@@ -94,6 +88,7 @@
 NoInterfaceObject
 NotEnumerable
 OnlyExposedToPrivateScript
+OriginTrialEnabled=*
 OverrideBuiltins
 PartialInterfaceImplementedAs=*
 PermissiveDictionaryConversion
@@ -116,9 +111,7 @@
 SetWrapperReferenceTo=*
 SetterCallWith=ExecutionContext|ScriptArguments|ActiveWindow|FirstWindow
 TreatNullAs=NullString|EmptyString
-TreatReturnedNullStringAs=Null|Undefined
 TreatUndefinedAs=NullString
-TypeChecking=Interface
 URL
 Unforgeable
 Unscopeable
diff --git a/bindings/README b/bindings/README
deleted file mode 100644
index 630832e..0000000
--- a/bindings/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This directory contains a copy of WebKit/WebCore IDL files.
-See the attached LICENSE-* files in this directory.
-
-Please do not modify the files here.  They are periodically copied
-using the script: $DART_ROOT/sdk/lib/html/scripts/idlsync.py
-
-The current version corresponds to:
-URL: https://src.chromium.org/blink/branches/dart/2454_1
-Current revision: 202759
diff --git a/bindings/dart/gyp/scripts/build_dart_snapshot.py b/bindings/dart/gyp/scripts/build_dart_snapshot.py
index 4efc717..e9e677c 100755
--- a/bindings/dart/gyp/scripts/build_dart_snapshot.py
+++ b/bindings/dart/gyp/scripts/build_dart_snapshot.py
@@ -78,8 +78,9 @@
         'python',
         path(dartPath, 'runtime', 'tools', 'create_snapshot_bin.py'),
         '--executable=%s' % path(genSnapshotBinPath),
+        '--snapshot_kind=core',
         '--vm_output_bin=%s' % binaryVmIsolateSnapshotFile,
-        '--output_bin=%s' % binaryIsolateSnapshotFile,
+        '--isolate_output_bin=%s' % binaryIsolateSnapshotFile,
         '--script=%s' % snapshotScriptName,
     ]
     command.extend(['--url_mapping=dart:%s,%s' % lib for lib in snapshottedLibs])
diff --git a/bindings/scripts/aggregate_generated_bindings.py b/bindings/scripts/aggregate_generated_bindings.py
index 05e9ffd..4b71743 100755
--- a/bindings/scripts/aggregate_generated_bindings.py
+++ b/bindings/scripts/aggregate_generated_bindings.py
@@ -55,20 +55,6 @@
 
 from utilities import should_generate_impl_file_from_idl, get_file_contents, idl_filename_to_component, 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'[^\]]*'
-    r'\]\s*'
-    r'((callback|partial)\s+)?'
-    r'interface\s+'
-    r'\w+\s*'
-    r'(:\s*\w+\s*)?'
-    r'{',
-    re.MULTILINE)
-
 COPYRIGHT_TEMPLATE = """/*
  * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
  *
@@ -100,17 +86,8 @@
 """
 
 
-def extract_conditional(idl_contents):
-    """Find [Conditional] interface extended attribute."""
-
-    match = CONDITIONAL_PATTERN.search(idl_contents)
-    if not match:
-        return None
-    return match.group(1)
-
-
 def extract_meta_data(file_paths):
-    """Extracts conditional and interface name from each IDL file."""
+    """Extracts interface name from each IDL file."""
     meta_data_list = []
 
     for file_path in file_paths:
@@ -129,7 +106,6 @@
         interface_name = idl_filename_to_interface_name(file_path)
 
         meta_data = {
-            'conditional': extract_conditional(idl_file_contents),
             'name': interface_name,
         }
         meta_data_list.append(meta_data)
@@ -142,18 +118,9 @@
     output = [COPYRIGHT_TEMPLATE,
               '#define NO_IMPLICIT_ATOMICSTRING\n\n']
 
-    # List all includes segmented by if and endif.
-    prev_conditional = None
-    files_meta_data_this_partition.sort(key=lambda e: e['conditional'])
+    # List all includes.
+    files_meta_data_this_partition.sort()
     for meta_data in files_meta_data_this_partition:
-        conditional = meta_data['conditional']
-        if prev_conditional != conditional:
-            if prev_conditional:
-                output.append('#endif\n')
-            if conditional:
-                output.append('\n#if ENABLE(%s)\n' % conditional)
-        prev_conditional = conditional
-
         if aggregate_partial_interfaces:
             cpp_filename = 'V8%sPartial.cpp' % meta_data['name']
         else:
@@ -162,9 +129,6 @@
         output.append('#include "bindings/%s/v8/%s"\n' %
                       (component_dir, cpp_filename))
 
-    if prev_conditional:
-        output.append('#endif\n')
-
     return ''.join(output)
 
 
@@ -185,7 +149,8 @@
     in_out_break_index = args.index('--')
     output_file_names = args[in_out_break_index + 1:]
 
-    idl_file_names = read_idl_files_list_from_file(input_file_name)
+    idl_file_names = read_idl_files_list_from_file(input_file_name,
+                                                   is_gyp_format=True)
     components = set([idl_filename_to_component(filename)
                       for filename in idl_file_names])
     if len(components) != 1:
diff --git a/bindings/scripts/code_generator_v8.py b/bindings/scripts/code_generator_v8.py
index 4169c23..381d321 100644
--- a/bindings/scripts/code_generator_v8.py
+++ b/bindings/scripts/code_generator_v8.py
@@ -79,16 +79,26 @@
 import v8_interface
 import v8_types
 import v8_union
-from v8_utilities import capitalize, cpp_name, conditional_string, v8_class_name
+from v8_utilities import capitalize, cpp_name, v8_class_name
 from utilities import KNOWN_COMPONENTS, idl_filename_to_component, is_valid_component_dependency, is_testing_target
 
 
+def normalize_and_sort_includes(include_paths):
+    normalized_include_paths = []
+    for include_path in include_paths:
+        match = re.search(r'/gen/blink/(.*)$', posixpath.abspath(include_path))
+        if match:
+            include_path = match.group(1)
+        normalized_include_paths.append(include_path)
+    return sorted(normalized_include_paths)
+
+
 def render_template(include_paths, header_template, cpp_template,
                     template_context, component=None):
     template_context['code_generator'] = module_pyname
 
     # Add includes for any dependencies
-    template_context['header_includes'] = sorted(
+    template_context['header_includes'] = normalize_and_sort_includes(
         template_context['header_includes'])
 
     for include_path in include_paths:
@@ -97,7 +107,7 @@
             assert is_valid_component_dependency(component, dependency)
         includes.add(include_path)
 
-    template_context['cpp_includes'] = sorted(includes)
+    template_context['cpp_includes'] = normalize_and_sort_includes(includes)
 
     header_text = header_template.render(template_context)
     cpp_text = cpp_template.render(template_context)
@@ -245,10 +255,9 @@
             header_template_filename = 'interface.h'
             cpp_template_filename = 'interface.cpp'
             interface_context = v8_interface.interface_context
-        header_template = self.jinja_env.get_template(header_template_filename)
-        cpp_template = self.jinja_env.get_template(cpp_template_filename)
 
         template_context = interface_context(interface)
+        includes.update(interface_info.get('cpp_includes', {}).get(component, set()))
         if not interface.is_partial and not is_testing_target(full_path):
             template_context['header_includes'].add(self.info_provider.include_path_for_export)
             template_context['exported'] = self.info_provider.specifier_for_export
@@ -257,6 +266,9 @@
             template_context['header_includes'].add('core/dom/DOMTypedArray.h')
         elif interface_info['include_path']:
             template_context['header_includes'].add(interface_info['include_path'])
+
+        header_template = self.jinja_env.get_template(header_template_filename)
+        cpp_template = self.jinja_env.get_template(cpp_template_filename)
         header_text, cpp_text = render_template(
             include_paths, header_template, cpp_template, template_context,
             component)
@@ -370,7 +382,7 @@
             additional_header_includes.append(
                 'bindings/core/v8/UnionTypesCore.h')
 
-        template_context['header_includes'] = sorted(
+        template_context['header_includes'] = normalize_and_sort_includes(
             template_context['header_includes'] + additional_header_includes)
 
         header_text = header_template.render(template_context)
@@ -396,7 +408,6 @@
         trim_blocks=True)
     jinja_env.filters.update({
         'blink_capitalize': capitalize,
-        'conditional': conditional_if_endif,
         'exposed': exposed_if,
         'runtime_enabled': runtime_enabled_if,
         })
@@ -411,21 +422,11 @@
             '%s}\n' % indent)
 
 
-# [Conditional]
-def conditional_if_endif(code, conditional_string):
-    # Jinja2 filter to generate if/endif directive blocks
-    if not conditional_string:
-        return code
-    return ('#if %s\n' % conditional_string +
-            code +
-            '#endif // %s\n' % conditional_string)
-
-
 # [Exposed]
 def exposed_if(code, exposed_test):
     if not exposed_test:
         return code
-    return generate_indented_conditional(code, 'context && (%s)' % exposed_test)
+    return generate_indented_conditional(code, 'executionContext && (%s)' % exposed_test)
 
 
 # [RuntimeEnabled]
diff --git a/bindings/scripts/collect_idls_into_json.py b/bindings/scripts/collect_idls_into_json.py
new file mode 100644
index 0000000..a03026f
--- /dev/null
+++ b/bindings/scripts/collect_idls_into_json.py
@@ -0,0 +1,432 @@
+#!/usr/bin/env python
+# Copyright 2015 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.
+
+"""Usage: collect_idls_into_json.py path_file.txt json_file.json
+This script collects and organizes interface information and that information dumps into json file.
+"""
+
+import json
+import os
+import sys
+import utilities
+
+
+from blink_idl_parser import parse_file, BlinkIDLParser
+
+_INTERFACE = 'Interface'
+_IMPLEMENT = 'Implements'
+_PARTIAL = 'Partial'
+_NAME = 'Name'
+_TYPE = 'Type'
+_UNIONTYPE = 'UnionType'
+_ARRAY = 'Array'
+_ANY = 'Any'
+_SEQUENCE = 'Sequence'
+_PROP_VALUE = 'VALUE'
+_VALUE = 'Value'
+_PARENT = 'Parent'
+_FILEPATH = 'FilePath'
+_PROP_FILENAME = 'FILENAME'
+_PROP_READONLY = 'READONLY'
+_READONLY = 'Readonly'
+_PROP_STATIC = 'STATIC'
+_STATIC = 'Static'
+_CONSTS = 'Consts'
+_CONST = 'Const'
+_ATTRIBUTES = 'Attributes'
+_ATTRIBUTE = 'Attribute'
+_OPERATIONS = 'Operations'
+_OPERATION = 'Operation'
+_PROP_GETTER = 'GETTER'
+_NAMED_GETTER = '__getter__'
+_PROP_SETTER = 'SETTER'
+_NAMED_SETTER = '__setter__'
+_PROP_DELETER = 'DELETER'
+_NAMED_DELETER = '__deleter__'
+_ARGUMENTS = 'Arguments'
+_ARGUMENT = 'Argument'
+_EXTATTRIBUTES = 'ExtAttributes'
+_EXTATTRIBUTE = 'ExtAttribute'
+_INHERIT = 'Inherit'
+_PROP_REFERENCE = 'REFERENCE'
+_PARTIAL_FILEPATH = 'Partial_FilePaths'
+_MEMBERS = [_CONSTS, _ATTRIBUTES, _OPERATIONS]
+
+
+def get_definitions(paths):
+    """Returns a generator of IDL node.
+    Args:
+      paths: list of IDL file path
+    Returns:
+      a generator which yields IDL node objects
+    """
+    parser = BlinkIDLParser()
+    for path in paths:
+        definitions = parse_file(parser, path)
+        for definition in definitions.GetChildren():
+            yield definition
+
+
+def is_implements(definition):
+    """Returns True if class of |definition| is Implements, otherwise False.
+    Args:
+      definition: IDL node
+    Returns:
+      True if class of |definition| is Implements, otherwise False.
+    """
+    return definition.GetClass() == _IMPLEMENT
+
+
+def is_partial(definition):
+    """Returns True if |definition| is 'partial interface' class, otherwise False.
+    Args:
+      definition: IDL node
+    Return:
+      True if |definition| is 'partial interface' class, otherwise False.
+    """
+    return definition.GetClass() == _INTERFACE and definition.GetProperty(_PARTIAL)
+
+
+def get_filepath(interface_node):
+    """Returns relative path to the IDL in which |interface_node| is defined.
+    Args:
+      interface_node: IDL interface
+    Returns:
+      str which is |interface_node|'s file path
+    """
+    filename = interface_node.GetProperty(_PROP_FILENAME)
+    return os.path.relpath(filename)
+
+
+def get_const_node_list(interface_node):
+    """Returns a list of Const node.
+    Args:
+      interface_node: interface node
+    Returns:
+      A list of const node
+    """
+    return interface_node.GetListOf(_CONST)
+
+
+def get_const_type(const_node):
+    """Returns const's type.
+    Args:
+      const_node: const node
+    Returns:
+      str which is constant type.
+    """
+    return const_node.GetChildren()[0].GetName()
+
+
+def get_const_value(const_node):
+    """Returns const's value.
+    This function only supports primitive types.
+
+    Args:
+      const_node: const node
+    Returns:
+      str which is name of constant's value.
+    """
+    if const_node.GetChildren()[1].GetName():
+        return const_node.GetChildren()[1].GetName()
+    else:
+        for const_child in const_node.GetChildren():
+            if const_child.GetClass() == _VALUE and not const_child.GetName():
+                return const_child.GetProperty(_PROP_VALUE)
+        raise Exception('Constant value is empty')
+
+
+def const_node_to_dict(const_node):
+    """Returns dictionary of const's information.
+    Args:
+      const_node: const node
+    Returns:
+      dictionary of const's information
+    """
+    return {
+        _NAME: const_node.GetName(),
+        _TYPE: get_const_type(const_node),
+        _VALUE: get_const_value(const_node),
+        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(const_node)],
+    }
+
+
+def get_attribute_node_list(interface_node):
+    """Returns list of Attribute if the interface have one.
+    Args:
+      interface_node: interface node
+    Returns:
+      list of attribute node
+    """
+    return interface_node.GetListOf(_ATTRIBUTE)
+
+
+def get_attribute_type(attribute_node):
+    """Returns type of attribute.
+    Args:
+      attribute_node: attribute node
+    Returns:
+      name of attribute's type
+    """
+    attr_type = attribute_node.GetOneOf(_TYPE).GetChildren()[0]
+    type_list = []
+    if attr_type.GetClass() == _UNIONTYPE:
+        union_member_list = attr_type.GetListOf(_TYPE)
+        for union_member in union_member_list:
+            for type_component in union_member.GetChildren():
+                if type_component.GetClass() == _ARRAY:
+                    type_list[-1] += '[]'
+                elif type_component.GetClass() == _SEQUENCE:
+                    for seq_type in type_component.GetOneOf(_TYPE).GetChildren():
+                        type_list.append('<' + seq_type.GetName() + '>')
+                else:
+                    type_list.append(type_component.GetName())
+        return type_list
+    elif attr_type.GetClass() == _SEQUENCE:
+        union_member_types = []
+        if attr_type.GetOneOf(_TYPE).GetChildren()[0].GetClass() == _UNIONTYPE:
+            for union_member in attr_type.GetOneOf(_TYPE).GetOneOf(_UNIONTYPE).GetListOf(_TYPE):
+                if len(union_member.GetChildren()) != 1:
+                    raise Exception('Complex type in a union in a sequence is not yet supported')
+                type_component = union_member.GetChildren()[0]
+                union_member_types.append(type_component.GetName())
+            return '<' + str(union_member_types) + '>'
+        else:
+            for type_component in attr_type.GetOneOf(_TYPE).GetChildren():
+                if type_component.GetClass() == _SEQUENCE:
+                    raise Exception('Sequence in another sequence is not yet supported')
+                else:
+                    if type_component.GetClass() == _ARRAY:
+                        type_list[-1] += []
+                    else:
+                        type_list.append(type_component.GetName())
+            return '<' + type_list[0] + '>'
+    elif attr_type.GetClass() == _ANY:
+        return _ANY
+    else:
+        for type_component in attribute_node.GetOneOf(_TYPE).GetChildren():
+            if type_component.GetClass() == _ARRAY:
+                type_list[-1] += '[]'
+            else:
+                type_list.append(type_component.GetName())
+        return type_list[0]
+
+
+get_operation_type = get_attribute_type
+get_argument_type = get_attribute_type
+
+
+def attribute_node_to_dict(attribute_node):
+    """Returns dictioary of attribute's information.
+    Args:
+      attribute_node: attribute node
+    Returns:
+      dictionary of attribute's information
+    """
+    return {
+        _NAME: attribute_node.GetName(),
+        _TYPE: get_attribute_type(attribute_node),
+        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(attribute_node)],
+        _READONLY: attribute_node.GetProperty(_PROP_READONLY, default=False),
+        _STATIC: attribute_node.GetProperty(_PROP_STATIC, default=False),
+    }
+
+
+def get_operation_node_list(interface_node):
+    """Returns operations node list.
+    Args:
+      interface_node: interface node
+    Returns:
+      list of oparation node
+    """
+    return interface_node.GetListOf(_OPERATION)
+
+
+def get_argument_node_list(operation_node):
+    """Returns list of argument.
+    Args:
+      operation_node: operation node
+    Returns:
+      list of argument node
+    """
+    return operation_node.GetOneOf(_ARGUMENTS).GetListOf(_ARGUMENT)
+
+
+def argument_node_to_dict(argument_node):
+    """Returns dictionary of argument's information.
+    Args:
+      argument_node: argument node
+    Returns:
+      dictionary of argument's information
+    """
+    return {
+        _NAME: argument_node.GetName(),
+        _TYPE: get_argument_type(argument_node),
+    }
+
+
+def get_operation_name(operation_node):
+    """Returns openration's name.
+    Args:
+      operation_node: operation node
+    Returns:
+      name of operation
+    """
+    if operation_node.GetProperty(_PROP_GETTER):
+        return _NAMED_GETTER
+    elif operation_node.GetProperty(_PROP_SETTER):
+        return _NAMED_SETTER
+    elif operation_node.GetProperty(_PROP_DELETER):
+        return _NAMED_DELETER
+    else:
+        return operation_node.GetName()
+
+
+def operation_node_to_dict(operation_node):
+    """Returns dictionary of operation's information.
+    Args:
+      operation_node: operation node
+    Returns:
+      dictionary of operation's informantion
+    """
+    return {
+        _NAME: get_operation_name(operation_node),
+        _ARGUMENTS: [argument_node_to_dict(argument) for argument in get_argument_node_list(operation_node) if argument_node_to_dict(argument)],
+        _TYPE: get_operation_type(operation_node),
+        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(operation_node)],
+        _STATIC: operation_node.GetProperty(_PROP_STATIC, default=False),
+    }
+
+
+def get_extattribute_node_list(node):
+    """Returns list of ExtAttribute.
+    Args:
+      node: IDL node
+    Returns:
+      list of ExtAttrbute
+    """
+    if node.GetOneOf(_EXTATTRIBUTES):
+        return node.GetOneOf(_EXTATTRIBUTES).GetListOf(_EXTATTRIBUTE)
+    else:
+        return []
+
+
+def extattr_node_to_dict(extattr):
+    """Returns dictionary of ExtAttribute's information.
+    Args:
+      extattr: ExtAttribute node
+    Returns:
+      dictionary of ExtAttribute's information
+    """
+    return {
+        _NAME: extattr.GetName(),
+    }
+
+
+def inherit_node_to_dict(interface_node):
+    """Returns a dictionary of inheritance information.
+    Args:
+      interface_node: interface node
+    Returns:
+      A dictioanry of inheritance information.
+    """
+    inherit = interface_node.GetOneOf(_INHERIT)
+    if inherit:
+        return {_PARENT: inherit.GetName()}
+    else:
+        return {_PARENT: None}
+
+
+def interface_node_to_dict(interface_node):
+    """Returns a dictioary of interface information.
+    Args:
+      interface_node: interface node
+    Returns:
+      A dictionary of the interface information.
+    """
+    return {
+        _NAME: interface_node.GetName(),
+        _FILEPATH: get_filepath(interface_node),
+        _CONSTS: [const_node_to_dict(const) for const in get_const_node_list(interface_node)],
+        _ATTRIBUTES: [attribute_node_to_dict(attr) for attr in get_attribute_node_list(interface_node) if attr],
+        _OPERATIONS: [operation_node_to_dict(operation) for operation in get_operation_node_list(interface_node) if operation],
+        _EXTATTRIBUTES: [extattr_node_to_dict(extattr) for extattr in get_extattribute_node_list(interface_node)],
+        _INHERIT: inherit_node_to_dict(interface_node)
+    }
+
+
+def merge_partial_dicts(interfaces_dict, partials_dict):
+    """Merges partial interface into non-partial interface.
+    Args:
+      interfaces_dict: A dict of the non-partial interfaces.
+      partial_dict: A dict of partial interfaces.
+    Returns:
+      A merged dictionary of |interface_dict| with |partial_dict|.
+    """
+    for interface_name, partial in partials_dict.iteritems():
+        interface = interfaces_dict.get(interface_name)
+        if not interface:
+            raise Exception('There is a partial interface, but the corresponding non-partial interface was not found.')
+        for member in _MEMBERS:
+            interface[member].extend(partial.get(member))
+            interface.setdefault(_PARTIAL_FILEPATH, []).append(partial[_FILEPATH])
+    return interfaces_dict
+
+
+def merge_implement_nodes(interfaces_dict, implement_node_list):
+    """Combines a dict of interface information with referenced interface information.
+    Args:
+      interfaces_dict: dict of interface information
+      implement_nodes: list of implemented interface node
+    Returns:
+      A dict of interface information combined with implements nodes.
+    """
+    for implement in implement_node_list:
+        reference = implement.GetProperty(_PROP_REFERENCE)
+        implement = implement.GetName()
+        if reference not in interfaces_dict.keys() or implement not in interfaces_dict.keys():
+            raise Exception('There is not corresponding implement or reference interface.')
+        for member in _MEMBERS:
+            interfaces_dict[implement][member].extend(interfaces_dict[reference].get(member))
+    return interfaces_dict
+
+
+def export_to_jsonfile(dictionary, json_file):
+    """Writes a Python dict into a JSON file.
+    Args:
+      dictioary: interface dictionary
+      json_file: json file for output
+    """
+    with open(json_file, 'w') as f:
+        json.dump(dictionary, f, sort_keys=True)
+
+
+def usage():
+    sys.stdout.write('Usage: collect_idls_into_json.py <path_file.txt> <output_file.json>\n')
+
+
+def main(args):
+    if len(args) != 2:
+        usage()
+        exit(1)
+    path_file = args[0]
+    json_file = args[1]
+    path_list = utilities.read_file_to_list(path_file)
+    implement_node_list = [definition
+                           for definition in get_definitions(path_list)
+                           if is_implements(definition)]
+    interfaces_dict = {definition.GetName(): interface_node_to_dict(definition)
+                       for definition in get_definitions(path_list)
+                       if not is_partial(definition)}
+    partials_dict = {definition.GetName(): interface_node_to_dict(definition)
+                     for definition in get_definitions(path_list)
+                     if is_partial(definition)}
+    dictionary = merge_partial_dicts(interfaces_dict, partials_dict)
+    interfaces_dict = merge_implement_nodes(interfaces_dict, implement_node_list)
+    export_to_jsonfile(dictionary, json_file)
+
+
+if __name__ == '__main__':
+    main(sys.argv[1:])
diff --git a/bindings/scripts/compute_interfaces_info_individual.py b/bindings/scripts/compute_interfaces_info_individual.py
index b052e14..26af9fe 100755
--- a/bindings/scripts/compute_interfaces_info_individual.py
+++ b/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,12 +47,14 @@
 import posixpath
 import sys
 
+from idl_compiler import idl_filename_to_interface_name
 from idl_definitions import Visitor
 from idl_reader import IdlReader
-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
+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, merge_dict_recursively
 
 module_path = os.path.dirname(__file__)
 source_path = os.path.normpath(os.path.join(module_path, os.pardir, os.pardir))
+gen_path = os.path.join('gen', 'blink')
 
 
 class IdlBadFilenameError(Exception):
@@ -84,9 +86,9 @@
 # Computations
 ################################################################################
 
-def relative_dir_posix(idl_filename):
+def relative_dir_posix(idl_filename, base_path):
     """Returns relative path to the directory of idl_file in POSIX format."""
-    relative_path_local = os.path.relpath(idl_filename, source_path)
+    relative_path_local = os.path.relpath(idl_filename, base_path)
     relative_dir_local = os.path.dirname(relative_path_local)
     return relative_dir_local.replace(os.path.sep, posixpath.sep)
 
@@ -97,11 +99,13 @@
     POSIX format is used for consistency of output, so reference tests are
     platform-independent.
     """
-    relative_dir = relative_dir_posix(idl_filename)
+    if idl_filename.startswith(gen_path):
+        relative_dir = relative_dir_posix(idl_filename, gen_path)
+    else:
+        relative_dir = relative_dir_posix(idl_filename, source_path)
 
     # 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
+    cpp_class_name = implemented_as or idl_filename_to_interface_name(idl_filename)
 
     return posixpath.join(relative_dir, cpp_class_name + '.h')
 
@@ -130,6 +134,13 @@
                       if 'PutForwards' in attribute.extended_attributes))
 
 
+def get_unforgeable_attributes_from_definition(definition):
+    if 'Unforgeable' in definition.extended_attributes:
+        return sorted(definition.attributes)
+    return sorted(attribute for attribute in definition.attributes
+                  if 'Unforgeable' in attribute.extended_attributes)
+
+
 def collect_union_types_from_definitions(definitions):
     """Traverse definitions and collect all union types."""
     class UnionTypeCollector(Visitor):
@@ -172,6 +183,34 @@
     def collect_info(self, idl_filename):
         """Reads an idl file and collects information which is required by the
         binding code generation."""
+        def collect_unforgeable_attributes(definition, idl_filename):
+            """Collects [Unforgeable] attributes so that we can define them on
+            sub-interfaces later.  The resulting structure is as follows.
+                interfaces_info[interface_name] = {
+                    'unforgeable_attributes': {
+                        'core': [IdlAttribute, ...],
+                        'modules': [IdlAttribute, ...],
+                    },
+                    ...
+                }
+            """
+            interface_info = {}
+            unforgeable_attributes = get_unforgeable_attributes_from_definition(definition)
+            if not unforgeable_attributes:
+                return interface_info
+
+            if definition.is_partial:
+                interface_basename = idl_filename_to_interface_name(idl_filename)
+                # TODO(yukishiino): [PartialInterfaceImplementedAs] is treated
+                # in interface_dependency_resolver.transfer_extended_attributes.
+                # Come up with a better way to keep them consistent.
+                for attr in unforgeable_attributes:
+                    attr.extended_attributes['PartialInterfaceImplementedAs'] = definition.extended_attributes.get('ImplementedAs', interface_basename)
+            component = idl_filename_to_component(idl_filename)
+            interface_info['unforgeable_attributes'] = {}
+            interface_info['unforgeable_attributes'][component] = unforgeable_attributes
+            return interface_info
+
         definitions = self.reader.read_idl_file(idl_filename)
 
         this_union_types = collect_union_types_from_definitions(definitions)
@@ -208,6 +247,15 @@
         else:
             return
 
+        if definition.name not in self.interfaces_info:
+            self.interfaces_info[definition.name] = {}
+
+        # Remember [Unforgeable] attributes.
+        if definitions.interfaces:
+            merge_dict_recursively(self.interfaces_info[definition.name],
+                                   collect_unforgeable_attributes(definition, idl_filename))
+
+        component = idl_filename_to_component(idl_filename)
         extended_attributes = definition.extended_attributes
         implemented_as = extended_attributes.get('ImplementedAs')
         full_path = os.path.realpath(idl_filename)
@@ -219,10 +267,22 @@
             if this_include_path:
                 partial_include_paths.append(this_include_path)
             if this_union_types:
-                component = idl_filename_to_component(idl_filename)
                 partial_include_paths.append(
                     'bindings/%s/v8/UnionTypes%s.h' % (component, component.capitalize()))
             self.add_paths_to_partials_dict(definition.name, full_path, partial_include_paths)
+            # Collects C++ header paths which should be included from generated
+            # .cpp files.  The resulting structure is as follows.
+            #   interfaces_info[interface_name] = {
+            #       'cpp_includes': {
+            #           'core': set(['core/foo/Foo.h', ...]),
+            #           'modules': set(['modules/bar/Bar.h', ...]),
+            #       },
+            #       ...
+            #   }
+            if this_include_path:
+                merge_dict_recursively(
+                    self.interfaces_info[definition.name],
+                    {'cpp_includes': {component: set([this_include_path])}})
             return
 
         # 'implements' statements can be included in either the file for the
@@ -244,9 +304,9 @@
             # 'implements': http://crbug.com/360435
             'is_legacy_treat_as_partial_interface': 'LegacyTreatAsPartialInterface' in extended_attributes,
             'parent': definition.parent,
-            'relative_dir': relative_dir_posix(idl_filename),
+            'relative_dir': relative_dir_posix(idl_filename, source_path),
         })
-        self.interfaces_info[definition.name] = interface_info
+        merge_dict_recursively(self.interfaces_info[definition.name], interface_info)
 
     def get_info_as_dict(self):
         """Returns info packaged as a dict."""
diff --git a/bindings/scripts/compute_interfaces_info_overall.py b/bindings/scripts/compute_interfaces_info_overall.py
index 928a911..f038b76 100755
--- a/bindings/scripts/compute_interfaces_info_overall.py
+++ b/bindings/scripts/compute_interfaces_info_overall.py
@@ -86,13 +86,10 @@
 import optparse
 import sys
 
-from utilities import idl_filename_to_component, read_pickle_files, write_pickle_file
+from utilities import idl_filename_to_component, read_pickle_files, write_pickle_file, merge_dict_recursively
 
 INHERITED_EXTENDED_ATTRIBUTES = set([
-    'ActiveDOMObject',
     'DependentLifetime',
-    'DoNotExposeJSAccessors',
-    'ExposeJSAccessors',
     'GarbageCollected',
     'WillBeGarbageCollected',
 ])
@@ -208,8 +205,7 @@
     Information is stored in global interfaces_info.
     """
     for info in info_individuals:
-        # No overlap between interface names, so ok to use dict.update
-        interfaces_info.update(info['interfaces_info'])
+        merge_dict_recursively(interfaces_info, info['interfaces_info'])
         # Interfaces in one component may have partial interfaces in
         # another component. This is ok (not a layering violation), since
         # partial interfaces are used to *extend* interfaces.
@@ -315,7 +311,6 @@
         del interface_info['extended_attributes']
         del interface_info['has_union_types']
         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__.
diff --git a/bindings/scripts/generate_event_interfaces.py b/bindings/scripts/generate_event_interfaces.py
index e6ed37e..6a2cc6a 100755
--- a/bindings/scripts/generate_event_interfaces.py
+++ b/bindings/scripts/generate_event_interfaces.py
@@ -48,7 +48,6 @@
 from utilities import get_file_contents, read_file_to_list, write_file, get_interface_extended_attributes_from_idl
 
 EXPORTED_EXTENDED_ATTRIBUTES = (
-    'Conditional',
     'ImplementedAs',
     'RuntimeEnabled',
 )
diff --git a/bindings/scripts/generate_global_constructors.py b/bindings/scripts/generate_global_constructors.py
index 5ad7ff6..6965f9a 100755
--- a/bindings/scripts/generate_global_constructors.py
+++ b/bindings/scripts/generate_global_constructors.py
@@ -105,7 +105,7 @@
 def generate_global_constructors_list(interface_name, extended_attributes):
     extended_attributes_list = [
             name + '=' + extended_attributes[name]
-            for name in 'Conditional', 'RuntimeEnabled'
+            for name in 'RuntimeEnabled', 'OriginTrialEnabled'
             if name in extended_attributes]
     if extended_attributes_list:
         extended_string = '[%s] ' % ', '.join(extended_attributes_list)
diff --git a/bindings/scripts/generate_idl_diff.py b/bindings/scripts/generate_idl_diff.py
new file mode 100644
index 0000000..ae98695
--- /dev/null
+++ b/bindings/scripts/generate_idl_diff.py
@@ -0,0 +1,184 @@
+#!/usr/bin/env python
+# Copyright 2015 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_idl_diff.py is a script that generates a diff of two given IDL files.
+Usage: generate_idl_diff.py old_file.json new_file.json diff_file.json
+    old_file.json: An input json file including idl data of old Chrome version
+    new_file.json: An input json file including idl data of new Chrome version
+    diff_file.json: An output json file expressing a diff between old_file.json
+        and new_file.json
+"""
+
+import json
+import os
+import sys
+
+
+"""Data structure of input files of this script.
+The format of the json files is as follows. Each json file contains multiple
+"interface"s. Each "interface" contains 'ExtAttributes', 'Consts', 'Attributes'
+and 'Operations'. Each item in them are called a "member".
+    {'InterfaceName': {
+            'ExtAttributes': [{'Name': '...'},
+                               ...,
+                             ],
+            'Consts': [{'Type': '...',
+                        'Name': '...',
+                        'Value': '...'
+                       },
+                       ...,
+                      ],
+            'Attributes': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes':[{'Name': '...'},
+                                              ...,
+                                            ]
+                           },
+                           ...,
+                          ],
+            'Operations': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes': [{'Name': '...'},
+                                               ...,
+                                             ]
+                            'Arguments': [{'Type': '...',
+                                           'Name': '...'},
+                                           ...,
+                                         ]
+                           },
+                           ...,
+                          ],
+            'Name': '...'
+        },
+        ...,
+    }
+"""
+
+
+EXTATTRIBUTES_AND_MEMBER_TYPES = ['ExtAttributes', 'Consts', 'Attributes', 'Operations']
+DIFF_INSENSITIVE_FIELDS = ['Name']
+DIFF_TAG = 'diff_tag'
+DIFF_TAG_ADDED = 'added'
+DIFF_TAG_DELETED = 'deleted'
+
+
+def load_json_file(filepath):
+    """Load a json file into a dictionary.
+    Args:
+        filepath: A json file path of a json file that we want to load
+    Returns:
+        An "interfaces" object loaded from the json file
+    """
+    with open(filepath, 'r') as f:
+        return json.load(f)
+
+
+def members_diff(old_interface, new_interface):
+    """Create a diff between two "interface" objects by adding annotations to
+    "member" objects that are not common in them.
+    Args:
+        old_interface: An "interface" object
+        new_interface: An "interface" object
+    Returns:
+        (annotated, is_changed) where
+        annotated: An annotated "interface" object
+        is_changed: True if two interfaces are not identical, otherwise False
+    """
+    annotated = {}
+    is_changed = False
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        annotated_members = []
+        unannotated_members = []
+        for member in new_interface[member_type]:
+            if member in old_interface[member_type]:
+                unannotated_members.append(member)
+                old_interface[member_type].remove(member)
+            else:
+                is_changed = True
+                member[DIFF_TAG] = DIFF_TAG_ADDED
+                annotated_members.append(member)
+        annotated[member_type] = annotated_members
+        annotated[member_type].extend(unannotated_members)
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        for member in old_interface[member_type]:
+            is_changed = True
+            member[DIFF_TAG] = DIFF_TAG_DELETED
+        annotated[member_type].extend(old_interface[member_type])
+    for field in DIFF_INSENSITIVE_FIELDS:
+        annotated[field] = old_interface[field]
+    return (annotated, is_changed)
+
+
+def annotate_all_members(interface, diff_tag):
+    """Add annotations to all "member" objects of |interface|.
+    Args:
+        interface: An "interface" object whose members should be annotated with
+            |diff_tag|.
+        diff_tag: DIFF_TAG_ADDED or DIFF_TAG_DELETED
+    Returns:
+        Annotated "interface" object
+    """
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        for member in interface[member_type]:
+            member[DIFF_TAG] = diff_tag
+    return interface
+
+
+def interfaces_diff(old_interfaces, new_interfaces):
+    """Compare two "interfaces" objects and create a diff between them by
+    adding annotations (DIFF_TAG_ADDED or DIFF_TAG_DELETED) to each member
+    and/or interface.
+    Args:
+        old_interfaces: An "interfaces" object
+        new_interfaces: An "interfaces" object
+    Returns:
+        An "interfaces" object representing diff between |old_interfaces| and
+        |new_interfaces|
+    """
+    annotated = {}
+    for interface_name, interface in new_interfaces.items():
+        if interface_name in old_interfaces:
+            annotated_interface, is_changed = members_diff(old_interfaces[interface_name], interface)
+            if is_changed:
+                annotated[interface_name] = annotated_interface
+            del old_interfaces[interface_name]
+        else:
+            interface = annotate_all_members(interface, DIFF_TAG_ADDED)
+            interface[DIFF_TAG] = DIFF_TAG_ADDED
+            annotated[interface_name] = interface
+    for interface_name, interface in old_interfaces.items():
+        interface = annotate_all_members(interface, DIFF_TAG_DELETED)
+        interface[DIFF_TAG] = DIFF_TAG_DELETED
+    annotated.update(old_interfaces)
+    return annotated
+
+
+def write_diff(diff, filepath):
+    """Write a diff dictionary to a json file.
+    Args:
+        diff: An "interfaces" object that represents a diff
+        filepath: An output file path
+    """
+    with open(filepath, 'w') as f:
+        json.dump(diff, f, indent=4)
+
+
+def main(argv):
+    if len(argv) != 3:
+        sys.stdout.write(
+            'Usage: make_diff.py <old_file.json> <new_file.json> '
+            '<diff_file.json>\n')
+        exit(1)
+    old_json_file = argv[0]
+    new_json_file = argv[1]
+    output_file = argv[2]
+    old_interfaces = load_json_file(old_json_file)
+    new_interfaces = load_json_file(new_json_file)
+    diff = interfaces_diff(old_interfaces, new_interfaces)
+    write_diff(diff, output_file)
+
+
+if __name__ == '__main__':
+    main(sys.argv[1:])
diff --git a/bindings/scripts/generate_idl_diff_test.py b/bindings/scripts/generate_idl_diff_test.py
new file mode 100644
index 0000000..c301dce
--- /dev/null
+++ b/bindings/scripts/generate_idl_diff_test.py
@@ -0,0 +1,106 @@
+#!/usr/bin/env python
+# Copyright 2015 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.
+
+import generate_idl_diff
+import os
+import sys
+import unittest
+
+from generate_idl_diff import DIFF_TAG
+from generate_idl_diff import DIFF_TAG_DELETED
+from generate_idl_diff import DIFF_TAG_ADDED
+
+
+testdata_path = os.path.join(
+    os.path.dirname(os.path.realpath(__file__)), 'testdata')
+old_data_path = os.path.join(testdata_path, 'old_chrome.json')
+new_data_path = os.path.join(testdata_path, 'new_chrome.json')
+
+
+class TestGenerateIDLDiff(unittest.TestCase):
+
+    def setUp(self):
+        old = generate_idl_diff.load_json_file('old_chrome.json')
+        new = generate_idl_diff.load_json_file('new_chrome.json')
+        self.diff = generate_idl_diff.interfaces_diff(old, new)
+
+    def test_deleted_interface(self):
+        self.assertTrue('AnimationEffectReadOnly' in self.diff)
+        deleted_interface = self.diff.get('AnimationEffectReadOnly')
+        self.assertIsNotNone(deleted_interface)
+        self.assertEqual(deleted_interface.get(DIFF_TAG), DIFF_TAG_DELETED)
+
+    def test_added_interface(self):
+        self.assertTrue('AnimationEvent' in self.diff)
+        added_interface = self.diff.get('AnimationEvent')
+        self.assertIsNotNone(added_interface)
+        self.assertEqual(added_interface.get(DIFF_TAG), DIFF_TAG_ADDED)
+
+    def test_changed_interface(self):
+        self.assertTrue('ANGLEInstancedArrays' in self.diff)
+        changed_interface = self.diff.get('ANGLEInstancedArrays')
+        self.assertIsNotNone(changed_interface)
+        self.assertIsNone(changed_interface.get(DIFF_TAG))
+
+    def test_unchanged_interface(self):
+        self.assertFalse('AbstractWorker' in self.diff)
+
+    def test_unchanged_consts(self):
+        changed_interface = self.diff['ANGLEInstancedArrays']
+        members = changed_interface['Consts']
+        for member in members:
+            self.assertEqual(member['Name'], 'VERTEX_ATTRIB_ARRAY_DIVISOR')
+            self.assertEqual(member['Type'], 'unsigned long')
+            self.assertEqual(member['Value'], '0x88FE')
+
+    def test_changed_attribute(self):
+        changed_interface = self.diff['ANGLEInstancedArrays']
+        members = changed_interface['Attributes']
+        for member in members:
+            if member.get(DIFF_TAG) == DIFF_TAG_DELETED:
+                deleted = member
+            elif member.get(DIFF_TAG) == DIFF_TAG_ADDED:
+                added = member
+            else:
+                unchanged = member
+        self.assertEqual(deleted['Name'], 'animVal')
+        self.assertEqual(deleted['Type'], 'SVGAngle')
+        self.assertEqual(deleted['ExtAttributes'], [])
+        self.assertEqual(added['Name'], 'computedTiming')
+        self.assertEqual(added['Type'], 'ComputedTimingProperties')
+        self.assertEqual(added['ExtAttributes'], [{"Name": "maxChannelCount"}])
+        self.assertEqual(unchanged['Name'], 'timing')
+        self.assertEqual(unchanged['Type'], 'AnimationEffectTiming')
+        self.assertEqual(unchanged['ExtAttributes'], [])
+
+    def test_changed_operation(self):
+        changed_interface = self.diff['ANGLEInstancedArrays']
+        members = changed_interface['Operations']
+        deleted_arguments = [{"Type": "long", "Name": "primcount"}]
+        added_arguments = [{"Type": "unsigned long", "Name": "mode"}]
+        unchanged_arguments = [{"Type": "unsigned long", "Name": "mode"}]
+        for member in members:
+            if member.get(DIFF_TAG) == DIFF_TAG_DELETED:
+                deleted = member
+            elif member.get(DIFF_TAG) == DIFF_TAG_ADDED:
+                added = member
+            else:
+                unchanged = member
+        self.assertEqual(deleted['Name'], 'drawElementsInstancedANGLE')
+        self.assertEqual(deleted['Type'], 'void')
+        self.assertEqual(deleted['ExtAttributes'], [])
+        self.assertEqual(deleted['Arguments'], deleted_arguments)
+        self.assertEqual(added['Name'], 'drawElementsInstancedANGLE')
+        self.assertEqual(added['Type'], 'void')
+        self.assertEqual(added['ExtAttributes'], [])
+        self.assertEqual(added['Arguments'], added_arguments)
+        self.assertEqual(unchanged['Name'], 'drawArraysInstancedANGLE')
+        self.assertEqual(unchanged['Type'], 'void')
+        self.assertEqual(unchanged['ExtAttributes'], [])
+        self.assertEqual(unchanged['Arguments'], unchanged_arguments)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/bindings/scripts/generate_init_partial_interfaces.py b/bindings/scripts/generate_init_partial_interfaces.py
index 25a97f8..a604e57 100755
--- a/bindings/scripts/generate_init_partial_interfaces.py
+++ b/bindings/scripts/generate_init_partial_interfaces.py
@@ -23,8 +23,6 @@
 """
 
 _INIT_PARTIAL_INTERFACE = """%s
-#include "config.h"
-
 %s
 
 namespace blink {
@@ -42,6 +40,7 @@
     usage = 'Usage: %prog [options]'
     parser = OptionParser(usage=usage)
     parser.add_option('--idl-files-list', help="a text file containing the IDL file paths, so the command line doesn't exceed OS length limits.")
+    parser.add_option('--gyp-format-list', default=False, action='store_true', help="if specified, idl-files-list is newline separated. When unspecified, it's formatted as a Posix command line.")
     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')
     parser.add_option('--output')
 
@@ -59,7 +58,7 @@
 def main():
     options = parse_options()
 
-    idl_file_names = read_idl_files_list_from_file(options.idl_files_list)
+    idl_file_names = read_idl_files_list_from_file(options.idl_files_list, is_gyp_format=options.gyp_format_list)
 
     meta_data_list = extract_meta_data(idl_file_names)
     interface_names = ['V8%sPartial' % meta_data['name']
diff --git a/bindings/scripts/idl_compiler.py b/bindings/scripts/idl_compiler.py
index 7734def..baf2686 100755
--- a/bindings/scripts/idl_compiler.py
+++ b/bindings/scripts/idl_compiler.py
@@ -165,7 +165,8 @@
         info_provider=info_provider,
         only_if_changed=options.write_file_only_if_changed)
 
-    idl_filenames = read_idl_files_list_from_file(input_filename)
+    idl_filenames = read_idl_files_list_from_file(input_filename,
+                                                  is_gyp_format=True)
     for idl_filename in idl_filenames:
         idl_compiler.compile_file(idl_filename)
 
diff --git a/bindings/scripts/idl_definitions.py b/bindings/scripts/idl_definitions.py
index 59c0475..16a8290 100644
--- a/bindings/scripts/idl_definitions.py
+++ b/bindings/scripts/idl_definitions.py
@@ -286,6 +286,7 @@
         self.serializer = None
         self.stringifier = None
         self.iterable = None
+        self.has_indexed_elements = False
         self.maplike = None
         self.setlike = None
         self.original_interface = None
@@ -301,11 +302,17 @@
         self.name = node.GetName()
         self.idl_type = IdlType(self.name)
 
+        has_indexed_property_getter = False
+        has_integer_typed_length = False
+
         children = node.GetChildren()
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Attribute':
-                self.attributes.append(IdlAttribute(idl_name, child))
+                attr = IdlAttribute(idl_name, child)
+                if attr.idl_type.is_integer_type and attr.name == 'length':
+                    has_integer_typed_length = True
+                self.attributes.append(attr)
             elif child_class == 'Const':
                 self.constants.append(IdlConstant(idl_name, child))
             elif child_class == 'ExtAttributes':
@@ -315,7 +322,10 @@
                 clear_constructor_attributes(extended_attributes)
                 self.extended_attributes = extended_attributes
             elif child_class == 'Operation':
-                self.operations.append(IdlOperation(idl_name, child))
+                op = IdlOperation(idl_name, child)
+                if 'getter' in op.specials and str(op.arguments[0].idl_type) == 'unsigned long':
+                    has_indexed_property_getter = True
+                self.operations.append(op)
             elif child_class == 'Inherit':
                 self.parent = child.GetName()
             elif child_class == 'Serializer':
@@ -336,6 +346,9 @@
         if len(filter(None, [self.iterable, self.maplike, self.setlike])) > 1:
             raise ValueError('Interface can only have one of iterable<>, maplike<> and setlike<>.')
 
+        if has_integer_typed_length and has_indexed_property_getter:
+            self.has_indexed_elements = True
+
     def accept(self, visitor):
         visitor.visit_interface(self)
         for attribute in self.attributes:
@@ -402,7 +415,11 @@
             elif child_class == 'Const':
                 self.constants.append(IdlConstant(idl_name, child))
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.constructors, self.custom_constructors = (
+                    extended_attributes_to_constructors(idl_name, extended_attributes))
+                clear_constructor_attributes(extended_attributes)
+                self.extended_attributes = extended_attributes
             elif child_class == 'ExceptionOperation':
                 self.operations.append(IdlOperation.from_exception_operation_node(idl_name, child))
             else:
diff --git a/bindings/scripts/interface_dependency_resolver.py b/bindings/scripts/interface_dependency_resolver.py
index 79b28ea..2fa6409 100644
--- a/bindings/scripts/interface_dependency_resolver.py
+++ b/bindings/scripts/interface_dependency_resolver.py
@@ -37,7 +37,7 @@
 """
 
 import os.path
-from utilities import idl_filename_to_component, is_valid_component_dependency
+from utilities import idl_filename_to_component, is_valid_component_dependency, merge_dict_recursively
 
 # The following extended attributes can be applied to a dependency interface,
 # and are then applied to the individual members when merging.
@@ -45,9 +45,7 @@
 # which changes the semantics and yields different code than the same extended
 # attribute on the main interface.
 DEPENDENCY_EXTENDED_ATTRIBUTES = frozenset([
-    'Conditional',
     'RuntimeEnabled',
-    'TypeChecking',
 ])
 
 
@@ -119,6 +117,8 @@
             interface_info['dependencies_other_component_full_paths'],
             self.reader)
 
+        inherit_unforgeable_attributes(resolved_definitions, self.interfaces_info)
+
         for referenced_interface_name in interface_info['referenced_interfaces']:
             referenced_definitions = self.reader.read_idl_definitions(
                 self.interfaces_info[referenced_interface_name]['full_path'])
@@ -305,3 +305,42 @@
         update_attributes(constant.extended_attributes, merged_extended_attributes)
     for operation in dependency_interface.operations:
         update_attributes(operation.extended_attributes, merged_extended_attributes)
+
+
+def inherit_unforgeable_attributes(resolved_definitions, interfaces_info):
+    """Inherits [Unforgeable] attributes and updates the arguments accordingly.
+
+    For each interface in |resolved_definitions|, collects all [Unforgeable]
+    attributes in ancestor interfaces in the same component and adds them to
+    the interface.  'referenced_interfaces' and 'cpp_includes' in
+    |interfaces_info| are updated accordingly.
+    """
+    def collect_unforgeable_attributes_in_ancestors(interface_name, component):
+        if not interface_name:
+            # unforgeable_attributes, referenced_interfaces, cpp_includes
+            return [], [], set()
+        interface = interfaces_info[interface_name]
+        unforgeable_attributes, referenced_interfaces, cpp_includes = collect_unforgeable_attributes_in_ancestors(interface.get('parent'), component)
+        this_unforgeable = interface.get('unforgeable_attributes', {}).get(component, [])
+        unforgeable_attributes.extend(this_unforgeable)
+        this_referenced = [attr.idl_type.base_type for attr in this_unforgeable
+                           if attr.idl_type.base_type in
+                           interface.get('referenced_interfaces', [])]
+        referenced_interfaces.extend(this_referenced)
+        cpp_includes.update(interface.get('cpp_includes', {}).get(component, {}))
+        return unforgeable_attributes, referenced_interfaces, cpp_includes
+
+    for component, definitions in resolved_definitions.iteritems():
+        for interface_name, interface in definitions.interfaces.iteritems():
+            interface_info = interfaces_info[interface_name]
+            inherited_unforgeable_attributes, referenced_interfaces, cpp_includes = collect_unforgeable_attributes_in_ancestors(interface_info.get('parent'), component)
+            # This loop may process the same interface many times, so it's
+            # possible that we're adding the same attributes twice or more.
+            # So check if there is a duplicate.
+            for attr in inherited_unforgeable_attributes:
+                if attr not in interface.attributes:
+                    interface.attributes.append(attr)
+            referenced_interfaces.extend(interface_info.get('referenced_interfaces', []))
+            interface_info['referenced_interfaces'] = sorted(set(referenced_interfaces))
+            merge_dict_recursively(interface_info,
+                                   {'cpp_includes': {component: cpp_includes}})
diff --git a/bindings/scripts/print_idl_diff.py b/bindings/scripts/print_idl_diff.py
new file mode 100644
index 0000000..9a8deea
--- /dev/null
+++ b/bindings/scripts/print_idl_diff.py
@@ -0,0 +1,433 @@
+#!/usr/bin/env python
+# Copyright 2015 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.
+
+"""Print a diff generated by generate_idl_diff.py.
+Before printing, sort the diff in the alphabetical order or the order of
+diffing tags.
+Usage: print_idl_diff.py diff_file.json order
+    diff.json:
+        Output of generate_idl_diff.py. The json file contains a dictionary
+        that represents a diff between two different Chromium versions. The
+        structure of the dictionary is like below.
+    order:
+        Specify how to sort. Either by "ALPHABET" or "TAG".
+"""
+
+from collections import OrderedDict
+import json
+import sys
+
+from generate_idl_diff import load_json_file
+from generate_idl_diff import EXTATTRIBUTES_AND_MEMBER_TYPES
+from generate_idl_diff import DIFF_TAG
+from generate_idl_diff import DIFF_TAG_ADDED
+from generate_idl_diff import DIFF_TAG_DELETED
+
+
+"""Refer to the explanation of generate_idl_diff.py's input files.
+The deffference between the input structure of generate_idl_diff.py and
+that of print_diff.py is whether diffing tags are included or not.
+    {'Interface': {
+            'diff_tag': 'deleted'
+            'ExtAttributes': [{'Name': '...'
+                               'diff_tag': 'deleted'},
+                               ...,
+                             ],
+            'Consts': [{'Type': '...',
+                        'Name': '...',
+                        'Value': '...'
+                        'diff_tag': 'deleted'},
+                        ...,
+                      ],
+            'Attributes': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes':[{'Name': '...'},
+                                              ...,
+                                            ]
+                            'diff_tag': 'deleted'},
+                            ...,
+                          ],
+            'Operations': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes':[{'Name': '...'},
+                                              ...,
+                                            ],
+                            'Arguments': [{'Type': '...',
+                                           'Name': '...'},
+                                           ...,
+                                         ]
+                            'diff_tag': 'deleted'},
+                            ...,
+                          ],
+            'Name': '...'
+        },
+        {
+            'ExtAttributes': [{'Name': '...'},
+                               ...,
+                             ],
+            'Consts': [{'Type': '...',
+                        'Name': '...',
+                        'Value': '...'
+                        'diff_tag': 'added'},
+                        ...,
+                      ],
+            'Attributes': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes':[{'Name': '...'},
+                                              ...,
+                                            ]},
+                            ...,
+                          ],
+            'Operations': [{'Type': '...',
+                            'Name': '...',
+                            'ExtAttributes':[{'Name': '...'},
+                                              ...,
+                                            ],
+                            'Arguments': [{'Type': '...',
+                                           'Name': '...'},
+                                           ...,
+                                         ]
+                            'diff_tag': 'deleted'},
+                            ...,
+                           ],
+            'Name': '...'
+        },
+        ...,
+    }
+"""
+
+
+class Colorize(object):
+    """This class outputs a colored text to sys.stdout.
+    TODO(bashi): This class doesn't work on Windows. Provide a way to suppress
+    escape sequences.
+    """
+
+    BLACK = 30
+    RED = 31
+    GREEN = 32
+    YELLOW = 33
+    COLORS = (BLACK, RED, GREEN, YELLOW)
+
+    def __init__(self, out):
+        self.out = out
+
+    def reset_color(self):
+        """Reset text's color to default.
+        """
+        self.out.write('\033[0m')
+
+    def change_color(self, color):
+        """Change text's color by specifing arguments.
+            Args:
+                color: A new color to change. It should be one of |COLORS|.
+        """
+        if color in self.COLORS:
+            self.out.write('\033[' + str(color) + 'm')
+        else:
+            raise Exception('Unsupported color.')
+
+    def writeln(self, string):
+        """Print text with a line-break.
+        """
+        self.out.write(string + '\n')
+
+    def write(self, string):
+        """Print text without a line-break.
+        """
+        self.out.write(string)
+
+
+def sort_member_types(interface):
+    """Sort the members in the order of EXTATTRIBUTES_AND_MEMBER_TYPES.
+    Args:
+        interface: An "interface" object
+    Returns:
+        A sorted "interface" object
+    """
+    sorted_interface = OrderedDict()
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        sorted_interface[member_type] = interface.get(member_type)
+    sorted_interface[DIFF_TAG] = interface.get(DIFF_TAG)
+    return sorted_interface
+
+
+def group_by_tag(interface_or_member_list):
+    """Group members of |interface_or_member_list| by tags.
+    Args:
+        interface_or_member_list: A list of interface names or a list of "members"
+    Returns:
+        A tuple of (removed, added, unchanged) where
+        removed: A list of removed members
+        added: A list of added members
+        unspecified: A list of other members
+    """
+    removed = []
+    added = []
+    unspecified = []
+    for interface_or_member in interface_or_member_list:
+        if DIFF_TAG in interface_or_member:
+            if interface_or_member[DIFF_TAG] == DIFF_TAG_DELETED:
+                removed.append(interface_or_member)
+            elif interface_or_member[DIFF_TAG] == DIFF_TAG_ADDED:
+                added.append(interface_or_member)
+        else:
+            unspecified.append(interface_or_member)
+    return (removed, added, unspecified)
+
+
+def sort_interface_names_by_tags(interfaces):
+    """Sort interface names as follows.
+    [names of deleted "interface"s
+    -> names of added "interface"s
+    -> names of other "interface"s]
+    Args:
+        interfaces: "interface" objects.
+    Returns:
+        A list of sorted interface names
+    """
+    interface_list = interfaces.values()
+    removed, added, unspecified = group_by_tag(interface_list)
+    removed = map(lambda interface: interface['Name'], removed)
+    added = map(lambda interface: interface['Name'], added)
+    unspecified = map(lambda interface: interface['Name'], unspecified)
+    sorted_interface_names = removed + added + unspecified
+    return sorted_interface_names
+
+
+def sort_members_by_tags(interface):
+    """Sort members of a given interface in the order of diffing tags.
+    Args:
+        An "interface" object
+    Returns:
+        A sorted "interface" object
+    """
+    sorted_interface = OrderedDict()
+    if DIFF_TAG in interface:
+        return interface
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        member_list = interface[member_type]
+        removed, added, unspecified = group_by_tag(member_list)
+        sorted_interface[member_type] = removed + added + unspecified
+    return sorted_interface
+
+
+def sort_diff_by_tags(interfaces):
+    """Sort an "interfaces" object in the order of diffing tags.
+    Args:
+        An "interfaces" object loaded by load_json_data().
+    Returns:
+        A sorted "interfaces" object
+    """
+    sorted_interfaces = OrderedDict()
+    sorted_interface_names = sort_interface_names_by_tags(interfaces)
+    for interface_name in sorted_interface_names:
+        interface = sort_members_by_tags(interfaces[interface_name])
+        sorted_interfaces[interface_name] = sort_member_types(interface)
+    return sorted_interfaces
+
+
+def sort_members_in_alphabetical_order(interface):
+    """Sort a "members" object in the alphabetical order.
+    Args:
+        An "interface" object
+    Returns:
+        A sorted "interface" object
+    """
+    sorted_interface = OrderedDict()
+    for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
+        sorted_members = sorted(interface[member_type],
+                                key=lambda member: member['Name'])
+        sorted_interface[member_type] = sorted_members
+    return sorted_interface
+
+
+def sort_diff_in_alphabetical_order(interfaces):
+    """Sort an "interfaces" object in the alphabetical order.
+    Args:
+        An "interfaces" object.
+    Returns:
+        A sorted "interfaces" object
+    """
+    sorted_interfaces = OrderedDict()
+    for interface_name in sorted(interfaces.keys()):
+        interface = interfaces[interface_name]
+        sorted_interface = sort_members_in_alphabetical_order(interface)
+        sorted_interface[DIFF_TAG] = interface.get(DIFF_TAG)
+        sorted_interfaces[interface_name] = sorted_interface
+    return sorted_interfaces
+
+
+def print_member_with_color(member, out):
+    """Print the "member" with a colored text. '+' is added to an added
+    "member". '-' is added to a removed "member".
+    Args:
+        member: A "member" object
+    """
+    if DIFF_TAG in member:
+        if member[DIFF_TAG] == DIFF_TAG_DELETED:
+            out.change_color(Colorize.RED)
+            out.write('- ')
+        elif member[DIFF_TAG] == DIFF_TAG_ADDED:
+            out.change_color(Colorize.GREEN)
+            out.write('+ ')
+    else:
+        out.change_color(Colorize.BLACK)
+        out.write('  ')
+
+
+def print_extattributes(extattributes, out):
+    """Print extattributes in an "interface" object.
+    Args:
+        A list of "ExtAttributes" in the "interface" object
+    """
+    for extattribute in extattributes:
+        out.write('    ')
+        print_member_with_color(extattribute, out)
+        out.writeln(extattribute['Name'])
+
+
+def print_consts(consts, out):
+    """Print consts in an "interface" object.
+    Args:
+        A list of "Consts" of the "interface" object
+    """
+    for const in consts:
+        out.write('    ')
+        print_member_with_color(const, out)
+        out.write(str(const['Type']))
+        out.write(' ')
+        out.write(const['Name'])
+        out.write(' ')
+        out.writeln(const['Value'])
+
+
+def print_items(items, callback, out):
+    """Calls |callback| for each item in |items|, printing commas between
+    |callback| calls.
+    Args:
+        items: extattributes or arguments
+    """
+    count = 0
+    for item in items:
+        callback(item)
+        count += 1
+        if count < len(items):
+            out.write(', ')
+
+
+def print_extattributes_in_member(extattributes, out):
+    """Print extattributes in a "member" object.
+    Args:
+        A list of "ExtAttributes" in the "member" object
+    """
+    def callback(extattribute):
+        out.write(extattribute['Name'])
+
+    out.write('[')
+    print_items(extattributes, callback, out)
+    out.write(']')
+
+
+def print_attributes(attributes, out):
+    """Print attributes in an "interface" object.
+    Args:
+        A list of "Attributes" in the "interface" object
+    """
+    for attribute in attributes:
+        out.write('    ')
+        print_member_with_color(attribute, out)
+        if attribute['ExtAttributes']:
+            print_extattributes_in_member(attribute['ExtAttributes'], out)
+        out.write(str(attribute['Type']))
+        out.write(' ')
+        out.writeln(attribute['Name'])
+
+
+def print_arguments(arguments, out):
+    """Print arguments in a "members" object named "Operations".
+    Args: A list of "Arguments"
+    """
+    def callback(argument):
+        out.write(argument['Name'])
+
+    out.write('(')
+    print_items(arguments, callback, out)
+    out.writeln(')')
+
+
+def print_operations(operations, out):
+    """Print operations in a "member" object.
+    Args:
+        A list of "Operations"
+    """
+    for operation in operations:
+        out.write('    ')
+        print_member_with_color(operation, out)
+        if operation['ExtAttributes']:
+            print_extattributes_in_member(operation['ExtAttributes'], out)
+        out.write(str(operation['Type']))
+        out.write(' ')
+        if operation['Arguments']:
+            out.write(operation['Name'])
+            print_arguments(operation['Arguments'], out)
+        else:
+            out.writeln(operation['Name'])
+
+
+def print_diff(diff, out):
+    """Print the diff on a shell.
+    Args:
+        A sorted diff
+    """
+    for interface_name, interface in diff.iteritems():
+        print_member_with_color(interface, out)
+        out.change_color(Colorize.YELLOW)
+        out.write('[[')
+        out.write(interface_name)
+        out.writeln(']]')
+        out.reset_color()
+        for member_name, member in interface.iteritems():
+            if member_name == 'ExtAttributes':
+                out.writeln('ExtAttributes')
+                print_extattributes(member, out)
+            elif member_name == 'Consts':
+                out.writeln('  Consts')
+                print_consts(member, out)
+            elif member_name == 'Attributes':
+                out.writeln('  Attributes')
+                print_attributes(member, out)
+            elif member_name == 'Operations':
+                out.writeln('  Operations')
+                print_operations(member, out)
+            out.reset_color()
+
+
+def print_usage():
+    """Show usage."""
+    sys.stdout.write('Usage: print_diff.py <diff_file.json> <"TAG"|"ALPHABET">\n')
+
+
+def main(argv):
+    if len(argv) != 2:
+        print_usage()
+        exit(1)
+    json_data = argv[0]
+    order = argv[1]
+    diff = load_json_file(json_data)
+    if order == 'TAG':
+        sort_func = sort_diff_by_tags
+    elif order == 'ALPHABET':
+        sort_func = sort_diff_in_alphabetical_order
+    else:
+        print_usage()
+        exit(1)
+    sorted_diff = sort_func(diff)
+    out = Colorize(sys.stdout)
+    print_diff(sorted_diff, out)
+
+
+if __name__ == '__main__':
+    main(sys.argv[1:])
diff --git a/bindings/scripts/test_collect_idls_into_json.py b/bindings/scripts/test_collect_idls_into_json.py
new file mode 100644
index 0000000..49d6e55
--- /dev/null
+++ b/bindings/scripts/test_collect_idls_into_json.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+
+import unittest
+import collect_idls_into_json
+import utilities
+
+from blink_idl_parser import parse_file, BlinkIDLParser
+
+_FILE = 'Source/bindings/scripts/testdata/test_filepath.txt'
+_KEY_SET = set(['Operations', 'Name', 'FilePath', 'Inherit', 'Consts', 'ExtAttributes', 'Attributes'])
+_PARTIAL = {'Node': {'Operations': [], 'Name': 'Node', 'FilePath': 'Source/core/timing/WorkerGlobalScopePerformance.idl', 'Inherit': [], 'Consts': [], 'ExtAttributes': [], 'Attributes': [{'Static': False, 'Readonly': True, 'Type': 'WorkerPerformance', 'Name': 'performance', 'ExtAttributes': []}]}}
+
+
+class TestFunctions(unittest.TestCase):
+    def setUp(self):
+        parser = BlinkIDLParser()
+        path = utilities.read_file_to_list(_FILE)[0]
+        definitions = parse_file(parser, path)
+        self.definition = definitions.GetChildren()[0]
+
+    def test_get_definitions(self):
+        pathfile = utilities.read_file_to_list(_FILE)
+        for actual in collect_idls_into_json.get_definitions(pathfile):
+            self.assertEqual(actual.GetName(), self.definition.GetName())
+
+    def test_is_non_partial(self):
+        if self.definition.GetClass() == 'Interface' and not self.definition.GetProperty('Partial'):
+            self.assertTrue(collect_idls_into_json.is_non_partial(self.definition))
+        else:
+            self.assertFalse(collect_idls_into_json.is_non_partial(self.definition))
+
+    def test_is_partial(self):
+        if self.definition.GetClass() == 'Interface' and self.definition.GetProperty('Partial'):
+            self.assertTrue(collect_idls_into_json.is_partial(self.definition))
+        else:
+            self.assertFalse(collect_idls_into_json.is_partial(self.definition))
+
+    def test_get_filepaths(self):
+        filepath = collect_idls_into_json.get_filepath(self.definition)
+        self.assertTrue(filepath.startswith('Source'))
+        self.assertTrue(filepath.endswith('.idl'))
+
+    def test_const_node_to_dict(self):
+        const_member = set(['Name', 'Type', 'Value', 'ExtAttributes'])
+        for const in collect_idls_into_json.get_const_node_list(self.definition):
+            if const:
+                self.assertEqual(const.GetClass(), 'Const')
+                self.assertEqual(collect_idls_into_json.get_const_type(const), 'unsigned short')
+                self.assertEqual(collect_idls_into_json.get_const_value(const), '1')
+                self.assertTrue(const_member.issuperset(collect_idls_into_json.const_node_to_dict(const).keys()))
+            else:
+                self.assertEqual(const, None)
+
+    def test_attribute_node_to_dict(self):
+        attribute_member = set(['Name', 'Type', 'ExtAttributes', 'Readonly', 'Static'])
+        for attribute in collect_idls_into_json.get_attribute_node_list(self.definition):
+            if attribute:
+                self.assertEqual(attribute.GetClass(), 'Attribute')
+                self.assertEqual(attribute.GetName(), 'parentNode')
+                self.assertEqual(collect_idls_into_json.get_attribute_type(attribute), 'Node')
+                self.assertTrue(attribute_member.issuperset(collect_idls_into_json.attribute_node_to_dict(attribute).keys()))
+            else:
+                self.assertEqual(attribute, None)
+
+    def test_operation_node_to_dict(self):
+        operate_member = set(['Static', 'ExtAttributes', 'Type', 'Name', 'Arguments'])
+        argument_member = set(['Name', 'Type'])
+        for operation in collect_idls_into_json.get_operation_node_list(self.definition):
+            if operation:
+                self.assertEqual(operation.GetClass(), 'Operation')
+                self.assertEqual(operation.GetName(), 'appendChild')
+                self.assertEqual(collect_idls_into_json.get_operation_type(operation), 'Node')
+                self.assertTrue(operate_member.issuperset(collect_idls_into_json.operation_node_to_dict(operation).keys()))
+                for argument in collect_idls_into_json.get_argument_node_list(operation):
+                    if argument:
+                        self.assertEqual(argument.GetClass(), 'Argument')
+                        self.assertEqual(argument.GetName(), 'newChild')
+                        self.assertEqual(collect_idls_into_json.get_argument_type(argument), 'Node')
+                        self.assertTrue(argument_member.issuperset(collect_idls_into_json.argument_node_to_dict(argument).keys()))
+                    else:
+                        self.assertEqual(argument, None)
+            else:
+                self.assertEqual(operation, None)
+
+    def test_extattribute_node_to_dict(self):
+        for extattr in collect_idls_into_json.get_extattribute_node_list(self.definition):
+            if extattr:
+                self.assertEqual(extattr.GetClass(), 'ExtAttribute')
+                self.assertEqual(extattr.GetName(), 'CustomToV8')
+                self.assertEqual(collect_idls_into_json.extattr_node_to_dict(extattr).keys(), ['Name'])
+                self.assertEqual(collect_idls_into_json.extattr_node_to_dict(extattr).values(), ['CustomToV8'])
+            else:
+                self.assertEqual(extattr, None)
+
+    def test_inherit_node_to_dict(self):
+        inherit = collect_idls_into_json.inherit_node_to_dict(self.definition)
+        if inherit:
+            self.assertEqual(inherit.keys(), ['Parent'])
+            self.assertEqual(inherit.values(), ['EventTarget'])
+        else:
+            self.assertEqual(inherit, [])
+
+    def test_interface_node_to_dict(self):
+        self.assertTrue(_KEY_SET.issuperset(collect_idls_into_json.interface_node_to_dict(self.definition)))
+
+    def test_merge_partial_dicts(self):
+        key_name = self.definition.GetName()
+        self.assertEqual(collect_idls_into_json.merge_partial_dicts({key_name: collect_idls_into_json.interface_node_to_dict(self.definition)}, _PARTIAL)[key_name]['Partial_FilePaths'], ['Source/core/timing/WorkerGlobalScopePerformance.idl'])
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/bindings/scripts/testdata/test_interface.idl b/bindings/scripts/testdata/test_interface.idl
new file mode 100644
index 0000000..74ff3ba
--- /dev/null
+++ b/bindings/scripts/testdata/test_interface.idl
@@ -0,0 +1,9 @@
+[
+    CustomToV8
+ ] interface Node : EventTarget {
+    [Reflect]const unsigned short ELEMENT_NODE = 1;
+    [Clamp]attribute Node parentNode;
+    [Custom] Node appendChild(Node newChild);
+};
+
+
diff --git a/bindings/scripts/utilities.py b/bindings/scripts/utilities.py
index 8bd8555..2370887 100644
--- a/bindings/scripts/utilities.py
+++ b/bindings/scripts/utilities.py
@@ -10,6 +10,7 @@
 import os
 import cPickle as pickle
 import re
+import shlex
 import string
 import subprocess
 
@@ -182,6 +183,26 @@
         return pickle.load(interface_info_file)
 
 
+def merge_dict_recursively(target, diff):
+    """Merges two dicts into one.
+    |target| will be updated with |diff|.  Part of |diff| may be re-used in
+    |target|.
+    """
+    for key, value in diff.iteritems():
+        if key not in target:
+            target[key] = value
+        elif type(value) == dict:
+            merge_dict_recursively(target[key], value)
+        elif type(value) == list:
+            target[key].extend(value)
+        elif type(value) == set:
+            target[key].update(value)
+        else:
+            # Testing IDLs want to overwrite the values.  Production code
+            # doesn't need any overwriting.
+            target[key] = value
+
+
 def create_component_info_provider_core(info_dir):
     interfaces_info = load_interfaces_info_overall_pickle(info_dir)
     with open(os.path.join(info_dir, 'core', 'ComponentInfoCore.pickle')) as component_info_file:
@@ -238,11 +259,19 @@
     return idl_file_names
 
 
-def read_idl_files_list_from_file(filename):
-    """Similar to read_file_to_list, but also resolves cygpath."""
+def read_idl_files_list_from_file(filename, is_gyp_format):
+    """Similar to read_file_to_list, but also resolves cygpath.
+
+    If is_gyp_format is True, the file is treated as a newline-separated list
+    with no quoting or escaping. When False, the file is interpreted as a
+    Posix-style quoted and space-separated list."""
     with open(filename) as input_file:
-        file_names = sorted([os.path.realpath(line.rstrip('\n'))
-                             for line in input_file])
+        if is_gyp_format:
+            file_names = sorted([os.path.realpath(line.rstrip('\n'))
+                                 for line in input_file])
+        else:
+            file_names = sorted(shlex.split(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
diff --git a/bindings/scripts/v8_attributes.py b/bindings/scripts/v8_attributes.py
index b1f72a0..2987967 100644
--- a/bindings/scripts/v8_attributes.py
+++ b/bindings/scripts/v8_attributes.py
@@ -55,16 +55,18 @@
 
     # [CheckSecurity]
     is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
-    is_check_security_for_frame = (
-        has_extended_attribute_value(interface, 'CheckSecurity', 'Frame') and
+    is_check_security_for_receiver = (
+        has_extended_attribute_value(interface, 'CheckSecurity', 'Receiver') and
         not is_do_not_check_security)
-    is_check_security_for_node = (
-        has_extended_attribute_value(attribute, 'CheckSecurity', 'Node'))
-    is_check_security_for_window = (
-        has_extended_attribute_value(interface, 'CheckSecurity', 'Window') and
-        not is_do_not_check_security)
-    if is_check_security_for_frame or is_check_security_for_node or is_check_security_for_window:
+    is_check_security_for_return_value = (
+        has_extended_attribute_value(attribute, 'CheckSecurity', 'ReturnValue'))
+    if is_check_security_for_receiver or is_check_security_for_return_value:
         includes.add('bindings/core/v8/BindingSecurity.h')
+    # [Constructor]
+    # TODO(yukishiino): Constructors are much like methods although constructors
+    # are not methods.  Constructors must be data-type properties, and we can
+    # support them as a kind of methods.
+    constructor_type = idl_type.constructor_type_name if is_constructor_attribute(attribute) else None
     # [CustomElementCallbacks], [Reflect]
     is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
     is_reflect = 'Reflect' in extended_attributes
@@ -92,6 +94,13 @@
     if cached_attribute_validation_method or keep_alive_for_gc:
         includes.add('bindings/core/v8/V8HiddenValue.h')
 
+    if 'RuntimeEnabled' in extended_attributes:
+        includes.add('platform/RuntimeEnabledFeatures.h')
+
+    if 'OriginTrialEnabled' in extended_attributes:
+        includes.add('core/inspector/ConsoleMessage.h')
+        includes.add('core/origin_trials/OriginTrials.h')
+
     context = {
         'access_control_list': access_control_list(interface, attribute),
         'activity_logging_world_list_for_getter': v8_utilities.activity_logging_world_list(attribute, 'Getter'),  # [ActivityLogging]
@@ -99,9 +108,7 @@
         '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': cached_attribute_validation_method,
-        'conditional_string': v8_utilities.conditional_string(attribute),
-        'constructor_type': idl_type.constructor_type_name
-                            if is_constructor_attribute(attribute) else None,
+        'constructor_type': constructor_type,
         'cpp_name': cpp_name(attribute),
         'cpp_type': idl_type.cpp_type,
         'cpp_type_initializer': idl_type.cpp_type_initializer,
@@ -113,13 +120,14 @@
         'has_custom_setter': has_custom_setter(attribute),
         'has_setter': has_setter(attribute),
         'idl_type': str(idl_type),  # need trailing [] on array for Dictionary::ConversionContext::setConversionType
+        'is_origin_trial_enabled': v8_utilities.origin_trial_enabled_function(attribute) or v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
         'is_call_with_execution_context': has_extended_attribute_value(attribute, 'CallWith', 'ExecutionContext'),
         'is_call_with_script_state': has_extended_attribute_value(attribute, 'CallWith', 'ScriptState'),
-        '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_check_security_for_receiver': is_check_security_for_receiver,
+        'is_check_security_for_return_value': is_check_security_for_return_value,
         'is_custom_element_callbacks': is_custom_element_callbacks,
-        'is_expose_js_accessors': is_expose_js_accessors(interface, attribute),
+        # TODO(yukishiino): Make all DOM attributes accessor-type properties.
+        'is_data_type_property': constructor_type or interface.name == 'Window' or interface.name == 'Location',
         'is_getter_raises_exception':  # [RaisesException]
             'RaisesException' in extended_attributes and
             extended_attributes['RaisesException'] in (None, 'Getter'),
@@ -141,6 +149,9 @@
         'on_instance': v8_utilities.on_instance(interface, attribute),
         'on_interface': v8_utilities.on_interface(interface, attribute),
         'on_prototype': v8_utilities.on_prototype(interface, attribute),
+        'origin_trial_enabled': v8_utilities.origin_trial_enabled_function(attribute),  # [OriginTrialEnabled]
+        'origin_trial_enabled_per_interface': v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
+        'origin_trial_name': extended_attributes.get('OriginTrialEnabled'),  # [OriginTrialEnabled]
         'use_output_parameter_for_result': idl_type.use_output_parameter_for_result,
         'measure_as': v8_utilities.measure_as(attribute, interface),  # [MeasureAs]
         'name': attribute.name,
@@ -337,7 +348,7 @@
     is_setter_raises_exception = (
         'RaisesException' in extended_attributes and
         extended_attributes['RaisesException'] in [None, 'Setter'])
-    # [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
+    # [LegacyInterfaceTypeChecking]
     has_type_checking_interface = (
         not is_legacy_interface_type_checking(interface, attribute) and
         idl_type.is_wrapper_type)
@@ -489,43 +500,6 @@
             extended_attributes['Custom'] in [None, 'Setter'])
 
 
-# [ExposeJSAccessors]
-def is_expose_js_accessors(interface, attribute):
-    # Default behavior
-    is_accessor = True
-
-    if ('ExposeJSAccessors' in interface.extended_attributes and
-            'DoNotExposeJSAccessors' in interface.extended_attributes):
-        raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time in an interface: ' + interface.name)
-    if 'ExposeJSAccessors' in interface.extended_attributes:
-        is_accessor = True
-    if 'DoNotExposeJSAccessors' in interface.extended_attributes:
-        is_accessor = False
-
-    # Note that ExposeJSAccessors and DoNotExposeJSAccessors are more powerful
-    # than 'static', [Unforgeable] and [OverrideBuiltins].
-    if ('ExposeJSAccessors' in attribute.extended_attributes and
-            'DoNotExposeJSAccessors' in attribute.extended_attributes):
-        raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time on an attribute: ' + attribute.name + ' in an interface: ' + interface.name)
-    if 'ExposeJSAccessors' in attribute.extended_attributes:
-        return True
-    if 'DoNotExposeJSAccessors' in attribute.extended_attributes:
-        return False
-
-    # These attributes must not be accessors on prototype chains.
-    if (is_constructor_attribute(attribute) or
-            attribute.is_static or
-            is_unforgeable(interface, attribute) or
-            'OverrideBuiltins' in interface.extended_attributes):
-        return False
-
-    # The members of Window interface must be placed on the instance object.
-    if interface.name == 'Window':
-        return False
-
-    return is_accessor
-
-
 ################################################################################
 # Constructors
 ################################################################################
@@ -541,7 +515,7 @@
 
 
 def update_constructor_attribute_context(interface, attribute, context):
-    context['needs_constructor_getter_callback'] = context['measure_as'] or context['deprecate_as']
+    context['needs_constructor_getter_callback'] = context['measure_as'] or context['deprecate_as'] or context['origin_trial_name']
     # When the attribute name is the same as the interface name, do not generate
     # callback functions for each attribute and use
     # {{cpp_class}}ConstructorAttributeSetterCallback.  Otherwise, generate
diff --git a/bindings/scripts/v8_callback_interface.py b/bindings/scripts/v8_callback_interface.py
index 8ceeb9a..682cb55 100644
--- a/bindings/scripts/v8_callback_interface.py
+++ b/bindings/scripts/v8_callback_interface.py
@@ -63,7 +63,8 @@
         return 'void'
     # Callbacks use raw pointers, so raw_type=True
     raw_cpp_type = idl_type.cpp_type_args(raw_type=True)
-    if raw_cpp_type.startswith(('Vector', 'HeapVector', 'WillBeHeapVector')):
+    # Pass containers and dictionaries to callback method by const reference rather than by value
+    if raw_cpp_type.startswith(('Vector', 'HeapVector', 'WillBeHeapVector')) or idl_type.is_dictionary:
         return 'const %s&' % raw_cpp_type
     return raw_cpp_type
 
@@ -74,7 +75,6 @@
     includes.clear()
     includes.update(CALLBACK_INTERFACE_CPP_INCLUDES)
     return {
-        'conditional_string': v8_utilities.conditional_string(callback_interface),
         'cpp_class': callback_interface.name,
         'v8_class': v8_utilities.v8_class_name(callback_interface),
         'header_includes': set(CALLBACK_INTERFACE_H_INCLUDES),
diff --git a/bindings/scripts/v8_dictionary.py b/bindings/scripts/v8_dictionary.py
index 36129b5..dde7e1c 100644
--- a/bindings/scripts/v8_dictionary.py
+++ b/bindings/scripts/v8_dictionary.py
@@ -60,6 +60,9 @@
         'members': [member_context(dictionary, member)
                     for member in sorted(dictionary.members,
                                          key=operator.attrgetter('name'))],
+        'required_member_names': sorted([member.name
+                                         for member in dictionary.members
+                                         if member.is_required]),
         'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in dictionary.extended_attributes,
         'v8_class': v8_types.v8_type(cpp_class),
         'v8_original_class': v8_types.v8_type(dictionary.name),
@@ -99,6 +102,7 @@
 
     cpp_default_value, v8_default_value = default_values()
     cpp_name = v8_utilities.cpp_name(member)
+    is_deprecated_dictionary = unwrapped_idl_type.name == 'Dictionary'
 
     return {
         'cpp_default_value': cpp_default_value,
@@ -113,11 +117,12 @@
         'enum_values': unwrapped_idl_type.enum_values,
         'has_method_name': has_method_name_for_dictionary_member(member),
         'idl_type': idl_type.base_type,
-        'is_interface_type': idl_type.is_interface_type and not idl_type.is_dictionary,
+        'is_interface_type': idl_type.is_interface_type and not (idl_type.is_dictionary_type or is_deprecated_dictionary),
         'is_nullable': idl_type.is_nullable,
-        'is_object': unwrapped_idl_type.name == 'Object',
+        'is_object': unwrapped_idl_type.name == 'Object' or is_deprecated_dictionary,
         'is_required': member.is_required,
         'name': member.name,
+        'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(member),  # [RuntimeEnabled]
         'setter_name': setter_name_for_dictionary_member(member),
         'null_setter_name': null_setter_name_for_dictionary_member(member),
         'v8_default_value': v8_default_value,
@@ -177,6 +182,8 @@
             return '!m_%s.isNull()' % cpp_name
         elif idl_type.name in ['Any', 'Object']:
             return '!(m_{0}.isEmpty() || m_{0}.isNull() || m_{0}.isUndefined())'.format(cpp_name)
+        elif idl_type.name == 'Dictionary':
+            return '!m_%s.isUndefinedOrNull()' % cpp_name
         else:
             return 'm_%s' % cpp_name
 
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index 406fee3..35edaee 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -46,7 +46,7 @@
 import v8_types
 from v8_types import cpp_ptr_type, cpp_template_type
 import v8_utilities
-from v8_utilities import (cpp_name_or_partial, capitalize, conditional_string, cpp_name, gc_type,
+from v8_utilities import (origin_trial_enabled_function, cpp_name_or_partial, capitalize, cpp_name, gc_type,
                           has_extended_attribute_value, runtime_enabled_function_name,
                           extended_attribute_value_as_list, is_legacy_interface_type_checking)
 
@@ -63,10 +63,7 @@
     'bindings/core/v8/ExceptionState.h',
     'bindings/core/v8/V8DOMConfiguration.h',
     'bindings/core/v8/V8ObjectConstructor.h',
-    'core/dom/ContextFeatures.h',
     'core/dom/Document.h',
-    'platform/RuntimeEnabledFeatures.h',
-    'platform/TraceEvent.h',
     'wtf/GetPtr.h',
     'wtf/RefPtr.h',
 ])
@@ -96,7 +93,8 @@
     is_array_buffer_or_view = interface.idl_type.is_array_buffer_or_view
     is_typed_array_type = interface.idl_type.is_typed_array
     if is_array_buffer_or_view:
-        includes.add('bindings/core/v8/V8ArrayBuffer.h')
+        includes.update(('bindings/core/v8/V8ArrayBuffer.h',
+                         'bindings/core/v8/V8SharedArrayBuffer.h'))
     if interface.name == 'ArrayBufferView':
         includes.update((
             'bindings/core/v8/V8Int8Array.h',
@@ -110,9 +108,6 @@
             'bindings/core/v8/V8Float64Array.h',
             'bindings/core/v8/V8DataView.h'))
 
-    # [ActiveDOMObject]
-    is_active_dom_object = 'ActiveDOMObject' in extended_attributes
-
     # [CheckSecurity]
     is_check_security = 'CheckSecurity' in extended_attributes
     if is_check_security:
@@ -121,10 +116,9 @@
     # [DependentLifetime]
     is_dependent_lifetime = 'DependentLifetime' in extended_attributes
 
-    # [MeasureAs]
-    is_measure_as = 'MeasureAs' in extended_attributes
-    if is_measure_as:
-        includes.add('core/frame/UseCounter.h')
+    # [PrimaryGlobal] and [Global]
+    is_global = ('PrimaryGlobal' in extended_attributes or
+                 'Global' in extended_attributes)
 
     # [SetWrapperReferenceFrom]
     set_wrapper_reference_from = extended_attributes.get('SetWrapperReferenceFrom')
@@ -162,8 +156,14 @@
     cpp_class_name_or_partial = cpp_name_or_partial(interface)
     v8_class_name_or_partial = v8_utilities.v8_class_name_or_partial(interface)
 
+    if 'RuntimeEnabled' in extended_attributes:
+        includes.add('platform/RuntimeEnabledFeatures.h')
+
+    if 'OriginTrialEnabled' in extended_attributes:
+        includes.add('core/inspector/ConsoleMessage.h')
+        includes.add('core/origin_trials/OriginTrials.h')
+
     context = {
-        'conditional_string': conditional_string(interface),  # [Conditional]
         'cpp_class': cpp_class_name,
         'cpp_class_or_partial': cpp_class_name_or_partial,
         'event_target_inheritance': 'InheritFromEventTarget' if is_event_target else 'NotInheritFromEventTarget',
@@ -177,20 +177,17 @@
         'has_visit_dom_wrapper': has_visit_dom_wrapper,
         'header_includes': header_includes,
         'interface_name': interface.name,
-        'is_active_dom_object': is_active_dom_object,
         'is_array_buffer_or_view': is_array_buffer_or_view,
         'is_check_security': is_check_security,
         'is_event_target': is_event_target,
         'is_exception': interface.is_exception,
+        'is_global': is_global,
         'is_node': inherits_interface(interface.name, 'Node'),
         'is_partial': interface.is_partial,
         'is_typed_array_type': is_typed_array_type,
-        'lifetime': 'Dependent'
-            if (has_visit_dom_wrapper or
-                is_active_dom_object or
-                is_dependent_lifetime)
-            else 'Independent',
+        'lifetime': 'Dependent' if (has_visit_dom_wrapper or is_dependent_lifetime) else 'Independent',
         'measure_as': v8_utilities.measure_as(interface, None),  # [MeasureAs]
+        'origin_trial_name': v8_utilities.origin_trial_name(interface),
         'parent_interface': parent_interface,
         'pass_cpp_type': cpp_template_type(
             cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type),
@@ -225,11 +222,14 @@
     if constructors or custom_constructors or named_constructor:
         if interface.is_partial:
             raise Exception('[Constructor] and [NamedConstructor] MUST NOT be'
-                            ' specified on partial interface definitions:'
+                            ' specified on partial interface definitions: '
                             '%s' % interface.name)
 
         includes.add('bindings/core/v8/V8ObjectConstructor.h')
         includes.add('core/frame/LocalDOMWindow.h')
+    elif 'Measure' in extended_attributes or 'MeasureAs' in extended_attributes:
+        raise Exception('[Measure] or [MeasureAs] specified for interface without a constructor: '
+                        '%s' % interface.name)
 
     # [Unscopeable] attributes and methods
     unscopeables = []
@@ -253,15 +253,18 @@
     constants = [constant_context(constant, interface) for constant in interface.constants]
 
     special_getter_constants = []
-    runtime_enabled_constants = []
+    runtime_enabled_constants = dict()
     constant_configuration_constants = []
 
     for constant in constants:
-        if constant['measure_as'] or constant['deprecate_as']:
+        if constant['measure_as'] or constant['deprecate_as'] or constant['origin_trial_name']:
             special_getter_constants.append(constant)
             continue
-        if constant['runtime_enabled_function']:
-            runtime_enabled_constants.append(constant)
+        runtime_enabled_function = constant['runtime_enabled_function']
+        if runtime_enabled_function:
+            if runtime_enabled_function not in runtime_enabled_constants:
+                runtime_enabled_constants[runtime_enabled_function] = []
+            runtime_enabled_constants[runtime_enabled_function].append(constant)
             continue
         constant_configuration_constants.append(constant)
 
@@ -273,7 +276,7 @@
         'has_constant_configuration': any(
             not constant['runtime_enabled_function']
             for constant in constants),
-        'runtime_enabled_constants': runtime_enabled_constants,
+        'runtime_enabled_constants': sorted(runtime_enabled_constants.iteritems()),
         'special_getter_constants': special_getter_constants,
     })
 
@@ -288,18 +291,19 @@
     context.update({
         'attributes': attributes,
         'has_accessor_configuration': any(
-            attribute['is_expose_js_accessors'] and
-            not (attribute['is_static'] or
+            not (attribute['exposed_test'] or
                  attribute['runtime_enabled_function']) and
+            not attribute['is_data_type_property'] and
             attribute['should_be_exposed_to_script']
             for attribute in attributes),
         'has_attribute_configuration': any(
-             not (attribute['is_expose_js_accessors'] or
-                  attribute['is_static'] or
-                  attribute['runtime_enabled_function'])
-             and attribute['should_be_exposed_to_script']
-             for attribute in attributes),
+            not (attribute['exposed_test'] or
+                 attribute['runtime_enabled_function']) and
+            attribute['is_data_type_property'] and
+            attribute['should_be_exposed_to_script']
+            for attribute in attributes),
         'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes),
+        'needs_constructor_setter_callback': any(attribute['constructor_type'] == attribute['name'] for attribute in attributes),
         'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes),
     })
 
@@ -344,13 +348,15 @@
 
     # [Iterable], iterable<>, maplike<> and setlike<>
     iterator_method = None
+    has_array_iterator = False
+
     # FIXME: support Iterable in partial interfaces. However, we don't
     # need to support iterator overloads between interface and
     # partial interface definitions.
     # http://heycam.github.io/webidl/#idl-overloading
     if (not interface.is_partial
         and (interface.iterable or interface.maplike or interface.setlike
-             or 'Iterable' in extended_attributes)):
+             or interface.has_indexed_elements or 'Iterable' in extended_attributes)):
 
         used_extended_attributes = {}
 
@@ -383,7 +389,10 @@
                 extended_attributes=used_extended_attributes,
                 implemented_as=implemented_as)
 
-        iterator_method = generated_iterator_method('iterator', implemented_as='iterator')
+        if interface.iterable or interface.maplike or interface.setlike or 'Iterable' in extended_attributes:
+            iterator_method = generated_iterator_method('iterator', implemented_as='iterator')
+        elif interface.has_indexed_elements:
+            has_array_iterator = True
 
         if interface.iterable or interface.maplike or interface.setlike:
             implicit_methods = [
@@ -550,12 +559,13 @@
     context.update({
         'conditionally_enabled_methods': conditionally_enabled_methods,
         'custom_registration_methods': custom_registration_methods,
-        'has_origin_safe_method_setter': any(
-            method['is_check_security_for_frame'] and not method['is_read_only']
+        'has_origin_safe_method_setter': is_global and any(
+            method['is_check_security_for_receiver'] and not method['is_unforgeable']
             for method in methods),
         'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or
             any(method['is_implemented_in_private_script'] for method in methods),
         'iterator_method': iterator_method,
+        'has_array_iterator': has_array_iterator,
         'method_configuration_methods': method_configuration_methods,
         'methods': methods,
     })
@@ -583,22 +593,34 @@
         'named_property_setter': property_setter(interface.named_property_setter, interface),
         'named_property_deleter': property_deleter(interface.named_property_deleter),
     })
+    context.update({
+        'has_named_properties_object': is_global and context['named_property_getter'],
+    })
 
     return context
 
 
-# [DeprecateAs], [Reflect], [RuntimeEnabled]
+# [DeprecateAs], [OriginTrialEnabled], [Reflect], [RuntimeEnabled]
 def constant_context(constant, interface):
     extended_attributes = constant.extended_attributes
+
+    if 'OriginTrialEnabled' in extended_attributes:
+        includes.add('core/inspector/ConsoleMessage.h')
+        includes.add('core/origin_trials/OriginTrials.h')
+
     return {
         'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
         'deprecate_as': v8_utilities.deprecate_as(constant),  # [DeprecateAs]
         'idl_type': constant.idl_type.name,
+        'is_origin_trial_enabled': v8_utilities.origin_trial_enabled_function(constant) or v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
         'measure_as': v8_utilities.measure_as(constant, interface),  # [MeasureAs]
         'name': constant.name,
+        'origin_trial_enabled': v8_utilities.origin_trial_enabled_function(constant),  # [OriginTrialEnabled]
+        'origin_trial_enabled_per_interface': v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
+        'origin_trial_name': extended_attributes.get('OriginTrialEnabled'),  # [OriginTrialEnabled]
         # FIXME: use 'reflected_name' as correct 'name'
         'reflected_name': extended_attributes.get('Reflect', constant.name),
-        'runtime_enabled_function': runtime_enabled_function_name(constant),
+        'runtime_enabled_function': runtime_enabled_function_name(constant),  # [RuntimeEnabled]
         'value': constant.value,
     }
 
@@ -890,7 +912,14 @@
     """
     # Only applicable “If there is more than one entry”
     assert len(entries) > 1
-    type_lists = [tuple(idl_type.name for idl_type in entry[1])
+
+    def typename_without_nullable(idl_type):
+        if idl_type.is_nullable:
+            return idl_type.inner_type.name
+        return idl_type.name
+
+    type_lists = [tuple(typename_without_nullable(idl_type)
+                        for idl_type in entry[1])
                   for entry in entries]
     type_list_length = len(type_lists[0])
     # Only applicable for entries that “[have] a given type list length”
@@ -1195,9 +1224,12 @@
     is_constructor_raises_exception = \
         interface.extended_attributes.get('RaisesException') == 'Constructor'
 
+    argument_contexts = [
+        v8_methods.argument_context(interface, constructor, argument, index)
+        for index, argument in enumerate(constructor.arguments)]
+
     return {
-        'arguments': [v8_methods.argument_context(interface, constructor, argument, index)
-                      for index, argument in enumerate(constructor.arguments)],
+        'arguments': argument_contexts,
         'cpp_type': cpp_template_type(
             cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)),
             cpp_name(interface)),
@@ -1208,6 +1240,9 @@
             any(argument for argument in constructor.arguments
                 if argument.idl_type.name == 'SerializedScriptValue' or
                    argument.idl_type.v8_conversion_needs_exception_state),
+        'has_optional_argument_without_default_value':
+            any(True for argument_context in argument_contexts
+                if argument_context['is_optional_without_default_value']),
         'is_call_with_document':
             # [ConstructorCallWith=Document]
             has_extended_attribute_value(interface,
@@ -1330,7 +1365,7 @@
     is_call_with_script_state = v8_utilities.has_extended_attribute_value(setter, 'CallWith', 'ScriptState')
     is_raises_exception = 'RaisesException' in extended_attributes
 
-    # [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
+    # [LegacyInterfaceTypeChecking]
     has_type_checking_interface = (
         not is_legacy_interface_type_checking(interface, setter) and
         idl_type.is_wrapper_type)
diff --git a/bindings/scripts/v8_methods.py b/bindings/scripts/v8_methods.py
index 7db6e4e..a3d4232 100644
--- a/bindings/scripts/v8_methods.py
+++ b/bindings/scripts/v8_methods.py
@@ -48,8 +48,6 @@
 CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES = frozenset([
     'DoNotCheckSecurity',
     'DoNotCheckSignature',
-    'NotEnumerable',
-    'Unforgeable',
 ])
 
 
@@ -75,13 +73,6 @@
 
     this_cpp_value = cpp_value(interface, method, len(arguments))
 
-    def function_template():
-        if is_static:
-            return 'functionTemplate'
-        if is_unforgeable(interface, method):
-            return 'instanceTemplate'
-        return 'prototypeTemplate'
-
     is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_attributes
     if is_implemented_in_private_script:
         includes.add('bindings/core/v8/PrivateScriptRunner.h')
@@ -93,29 +84,27 @@
 
     is_call_with_script_arguments = has_extended_attribute_value(method, 'CallWith', 'ScriptArguments')
     if is_call_with_script_arguments:
-        includes.update(['bindings/core/v8/ScriptCallStackFactory.h',
+        includes.update(['bindings/core/v8/ScriptCallStack.h',
                          'core/inspector/ScriptArguments.h'])
     is_call_with_script_state = has_extended_attribute_value(method, 'CallWith', 'ScriptState')
     is_call_with_this_value = has_extended_attribute_value(method, 'CallWith', 'ThisValue')
     if is_call_with_script_state or is_call_with_this_value:
         includes.add('bindings/core/v8/ScriptState.h')
-    is_check_security_for_node = 'CheckSecurity' in extended_attributes
-    if is_check_security_for_node:
+
+    # [CheckSecurity]
+    is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
+    is_check_security_for_receiver = (
+        has_extended_attribute_value(interface, 'CheckSecurity', 'Receiver') and
+        not is_do_not_check_security)
+    is_check_security_for_return_value = (
+        has_extended_attribute_value(method, 'CheckSecurity', 'ReturnValue'))
+    if is_check_security_for_receiver or is_check_security_for_return_value:
         includes.add('bindings/core/v8/BindingSecurity.h')
+
     is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
     if is_custom_element_callbacks:
         includes.add('core/dom/custom/CustomElementProcessingStack.h')
 
-    is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
-
-    is_check_security_for_frame = (
-        has_extended_attribute_value(interface, 'CheckSecurity', 'Frame') and
-        not is_do_not_check_security)
-
-    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
     is_custom_call_prologue = has_extended_attribute_value(method, 'Custom', 'CallPrologue')
     is_custom_call_epilogue = has_extended_attribute_value(method, 'Custom', 'CallEpilogue')
@@ -124,17 +113,27 @@
         includes.add('bindings/core/v8/SerializedScriptValueFactory.h')
         includes.add('core/dom/DOMArrayBuffer.h')
         includes.add('core/dom/MessagePort.h')
+        includes.add('core/frame/ImageBitmap.h')
 
     if 'LenientThis' in extended_attributes:
         raise Exception('[LenientThis] is not supported for operations.')
 
+    if 'RuntimeEnabled' in extended_attributes:
+        includes.add('platform/RuntimeEnabledFeatures.h')
+
+    if 'OriginTrialEnabled' in extended_attributes:
+        includes.add('core/inspector/ConsoleMessage.h')
+        includes.add('core/origin_trials/OriginTrials.h')
+
+    argument_contexts = [
+        argument_context(interface, method, argument, index, is_visible=is_visible)
+        for index, argument in enumerate(arguments)]
+
     return {
         'activity_logging_world_list': v8_utilities.activity_logging_world_list(method),  # [ActivityLogging]
-        'arguments': [argument_context(interface, method, argument, index, is_visible=is_visible)
-                      for index, argument in enumerate(arguments)],
+        'arguments': argument_contexts,
         'argument_declarations_for_private_script':
             argument_declarations_for_private_script(interface, method),
-        '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),
         'cpp_value': this_cpp_value,
@@ -144,27 +143,28 @@
                 extended_attributes.iterkeys()),
         'deprecate_as': v8_utilities.deprecate_as(method),  # [DeprecateAs]
         'exposed_test': v8_utilities.exposed(method, interface),  # [Exposed]
-        'function_template': function_template(),
+        # TODO(yukishiino): Retire has_custom_registration flag.  Should be
+        # replaced with V8DOMConfiguration::PropertyLocationConfiguration.
         'has_custom_registration':
-            is_static or
-            is_unforgeable(interface, method) or
             v8_utilities.has_extended_attribute(
                 method, CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES),
         'has_exception_state':
             is_raises_exception or
-            is_check_security_for_frame or
-            is_check_security_for_window or
+            is_check_security_for_receiver or
             any(argument for argument in arguments
                 if (argument.idl_type.name == 'SerializedScriptValue' or
                     argument_conversion_needs_exception_state(method, argument))),
+        'has_optional_argument_without_default_value':
+            any(True for argument_context in argument_contexts
+                if argument_context['is_optional_without_default_value']),
         'idl_type': idl_type.base_type,
+        'is_origin_trial_enabled': v8_utilities.origin_trial_enabled_function(method) or v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
         '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_call_with_this_value': is_call_with_this_value,
-        '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_check_security_for_receiver': is_check_security_for_receiver,
+        'is_check_security_for_return_value': is_check_security_for_return_value,
         'is_custom': 'Custom' in extended_attributes and
             not (is_custom_call_prologue or is_custom_call_epilogue),
         'is_custom_call_prologue': is_custom_call_prologue,
@@ -179,8 +179,8 @@
         'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
         'is_post_message': is_post_message,
         'is_raises_exception': is_raises_exception,
-        'is_read_only': is_unforgeable(interface, method),
         'is_static': is_static,
+        'is_unforgeable': is_unforgeable(interface, method),
         'is_variadic': arguments and arguments[-1].is_variadic,
         'measure_as': v8_utilities.measure_as(method, interface),  # [MeasureAs]
         'name': name,
@@ -195,13 +195,14 @@
         'on_interface': v8_utilities.on_interface(interface, method),
         'on_prototype': v8_utilities.on_prototype(interface, method),
         'only_exposed_to_private_script': is_only_exposed_to_private_script,
+        'origin_trial_enabled': v8_utilities.origin_trial_enabled_function(method),  # [OriginTrialEnabled]
+        'origin_trial_enabled_per_interface': v8_utilities.origin_trial_enabled_function(interface),  # [OriginTrialEnabled]
         'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
             extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->isolate()', bailout_return_value='false'),
         'property_attributes': property_attributes(interface, method),
         'returns_promise': method.returns_promise,
         'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(method),  # [RuntimeEnabled]
         'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script),
-        'signature': 'v8::Local<v8::Signature>()' if is_static or 'DoNotCheckSignature' in extended_attributes else 'defaultSignature',
         'use_output_parameter_for_result': idl_type.use_output_parameter_for_result,
         'use_local_result': use_local_result(method),
         'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value),
@@ -219,21 +220,21 @@
     this_cpp_value = cpp_value(interface, method, index)
     is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
 
-    # [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
+    # [LegacyInterfaceTypeChecking]
     has_type_checking_interface = (
         not is_legacy_interface_type_checking(interface, method) and
         idl_type.is_wrapper_type)
 
     if ('ImplementedInPrivateScript' in extended_attributes and
-        not idl_type.is_wrapper_type and
-        not idl_type.is_basic_type):
+            not idl_type.is_wrapper_type and
+            not idl_type.is_basic_type):
         raise Exception('Private scripts supports only primitive types and DOM wrappers.')
 
     set_default_value = argument.set_default_value
     this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes,
                                            raw_type=True,
                                            used_as_variadic_argument=argument.is_variadic)
-    return {
+    context = {
         'cpp_type': (
             v8_types.cpp_template_type('Nullable', this_cpp_type)
             if idl_type.is_explicit_nullable and not argument.is_variadic
@@ -270,6 +271,14 @@
         '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(method, argument, index),
     }
+    context.update({
+        'is_optional_without_default_value':
+            context['is_optional'] and
+            not context['has_default'] and
+            not context['is_dictionary'] and
+            not context['is_callback_interface'],
+    })
+    return context
 
 
 def argument_declarations_for_private_script(interface, method):
@@ -314,8 +323,8 @@
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in method.extended_attributes and
-        not 'ImplementedInPrivateScript' in method.extended_attributes and
-        not method.is_static):
+            'ImplementedInPrivateScript' not in method.extended_attributes and
+            not method.is_static):
         cpp_arguments.append('*impl')
     cpp_arguments.extend(cpp_argument(argument) for argument in arguments)
 
@@ -323,8 +332,8 @@
         if method.idl_type.name != 'void':
             cpp_arguments.append('&result')
     elif ('RaisesException' in method.extended_attributes or
-        (method.is_constructor and
-         has_extended_attribute_value(interface, 'RaisesException', 'Constructor'))):
+          (method.is_constructor and
+           has_extended_attribute_value(interface, 'RaisesException', 'Constructor'))):
         cpp_arguments.append('exceptionState')
 
     # If a method returns an IDL dictionary or union type, the return value is
@@ -354,8 +363,8 @@
         return None
 
     if ('ImplementedInPrivateScript' in extended_attributes and
-        not idl_type.is_wrapper_type and
-        not idl_type.is_basic_type):
+            not idl_type.is_wrapper_type and
+            not idl_type.is_basic_type):
         raise Exception('Private scripts supports only primitive types and DOM wrappers.')
 
     release = False
@@ -412,7 +421,7 @@
 # Auxiliary functions
 ################################################################################
 
-# [NotEnumerable]
+# [NotEnumerable], [Unforgeable]
 def property_attributes(interface, method):
     extended_attributes = method.extended_attributes
     property_attributes_list = []
@@ -420,8 +429,7 @@
         property_attributes_list.append('v8::DontEnum')
     if is_unforgeable(interface, method):
         property_attributes_list.append('v8::ReadOnly')
-    if property_attributes_list:
-        property_attributes_list.insert(0, 'v8::DontDelete')
+        property_attributes_list.append('v8::DontDelete')
     return property_attributes_list
 
 
diff --git a/bindings/scripts/v8_types.py b/bindings/scripts/v8_types.py
index f5c92bc..04739d2 100644
--- a/bindings/scripts/v8_types.py
+++ b/bindings/scripts/v8_types.py
@@ -70,8 +70,10 @@
     'ArrayBuffer',
     'ArrayBufferView',
     'DataView',
+    'SharedArrayBuffer',
 ]))
 
+
 IdlType.is_array_buffer_or_view = property(
     lambda self: self.base_type in ARRAY_BUFFER_AND_VIEW_TYPES)
 
@@ -182,8 +184,10 @@
             return 'String'
         return 'V8StringResource<%s>' % string_mode()
 
-    if idl_type.is_array_buffer_or_view and raw_type:
-        return idl_type.implemented_as + '*'
+    if idl_type.base_type == 'ArrayBufferView' and 'FlexibleArrayBufferView' in extended_attributes:
+        return 'FlexibleArrayBufferView'
+    if idl_type.base_type in TYPED_ARRAY_TYPES and 'FlexibleArrayBufferView' in extended_attributes:
+        return 'Flexible' + idl_type.base_type + 'View'
     if idl_type.is_interface_type:
         implemented_as_class = idl_type.implemented_as
         if raw_type or (used_as_rvalue_type and idl_type.is_garbage_collected):
@@ -341,6 +345,8 @@
 
 INCLUDES_FOR_TYPE = {
     'object': set(),
+    'ArrayBufferView': set(['bindings/core/v8/V8ArrayBufferView.h',
+                            'core/dom/FlexibleArrayBufferView.h']),
     'Dictionary': set(['bindings/core/v8/Dictionary.h']),
     'EventHandler': set(['bindings/core/v8/V8AbstractEventListener.h',
                          'bindings/core/v8/V8EventListenerList.h']),
@@ -374,6 +380,10 @@
     base_idl_type = idl_type.base_type
     if base_idl_type in INCLUDES_FOR_TYPE:
         return INCLUDES_FOR_TYPE[base_idl_type]
+    if idl_type.base_type in TYPED_ARRAY_TYPES:
+        return INCLUDES_FOR_TYPE['ArrayBufferView'].union(
+            set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type], base_idl_type)])
+        )
     if idl_type.is_basic_type:
         return set()
     if base_idl_type.endswith('ConstructorConstructor'):
@@ -497,9 +507,10 @@
     # Interface types
     'Dictionary': 'Dictionary({v8_value}, {isolate}, exceptionState)',
     'EventTarget': 'toEventTarget({isolate}, {v8_value})',
+    'FlexibleArrayBufferView': 'toFlexibleArrayBufferView({isolate}, {v8_value}, {variable_name}, allocateFlexibleArrayBufferViewStorage({v8_value}))',
     'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), ScriptState::current({isolate}))',
     'Promise': 'ScriptPromise::cast(ScriptState::current({isolate}), {v8_value})',
-    'SerializedScriptValue': 'SerializedScriptValueFactory::instance().create({isolate}, {v8_value}, 0, 0, exceptionState)',
+    'SerializedScriptValue': 'SerializedScriptValueFactory::instance().create({isolate}, {v8_value}, nullptr, nullptr, nullptr, exceptionState)',
     'ScriptValue': 'ScriptValue(ScriptState::current({isolate}), {v8_value})',
     'Window': 'toDOMWindow({isolate}, {v8_value})',
     'XPathNSResolver': 'toXPathNSResolver(ScriptState::current({isolate}), {v8_value})',
@@ -550,6 +561,11 @@
     idl_type = idl_type.preprocessed_type
     base_idl_type = idl_type.as_union_type.name if idl_type.is_union_type else idl_type.base_type
 
+    if 'FlexibleArrayBufferView' in extended_attributes:
+        if base_idl_type not in TYPED_ARRAY_TYPES.union(set(['ArrayBufferView'])):
+            raise "Unrecognized base type for extended attribute 'FlexibleArrayBufferView': %s" % (idl_type.base_type)
+        base_idl_type = 'FlexibleArrayBufferView'
+
     if idl_type.is_integer_type:
         configuration = 'NormalConversion'
         if 'EnforceRange' in extended_attributes:
@@ -567,9 +583,10 @@
         cpp_expression_format = (
             '{v8_value}->Is{idl_type}() ? '
             'V8{idl_type}::toImpl(v8::Local<v8::{idl_type}>::Cast({v8_value})) : 0')
+    elif idl_type.is_union_type:
+        nullable = 'UnionTypeConversionMode::Nullable' if idl_type.includes_nullable_type else 'UnionTypeConversionMode::NotNullable'
+        cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {variable_name}, %s, exceptionState)' % nullable
     elif idl_type.use_output_parameter_for_result:
-        if idl_type.includes_nullable_type:
-            base_idl_type = idl_type.cpp_type + 'OrNull'
         cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {variable_name}, exceptionState)'
     else:
         cpp_expression_format = (
@@ -646,6 +663,10 @@
         return {
             'error_message': 'no V8 -> C++ conversion for IDL type: %s' % idl_type.name
         }
+    elif 'FlexibleArrayBufferView' in extended_attributes:
+        if idl_type.base_type not in TYPED_ARRAY_TYPES.union(set(['ArrayBufferView'])):
+            raise "Unrecognized base type for extended attribute 'FlexibleArrayBufferView': %s" % (idl_type.base_type)
+        set_expression = cpp_value
     else:
         assign_expression = cpp_value
 
@@ -749,14 +770,7 @@
     if idl_type.is_string_type:
         if idl_type.is_nullable:
             return 'StringOrNull'
-        if 'TreatReturnedNullStringAs' not in extended_attributes:
-            return base_idl_type
-        treat_returned_null_string_as = extended_attributes['TreatReturnedNullStringAs']
-        if treat_returned_null_string_as == 'Null':
-            return 'StringOrNull'
-        if treat_returned_null_string_as == 'Undefined':
-            return 'StringOrUndefined'
-        raise 'Unrecognized TreatReturnedNullStringAs value: "%s"' % treat_returned_null_string_as
+        return base_idl_type
     if idl_type.is_basic_type or base_idl_type == 'ScriptValue':
         return base_idl_type
     # Generic dictionary type
@@ -780,9 +794,7 @@
     'DOMString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
     'ByteString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
     'USVString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
-    # [TreatReturnedNullStringAs]
     'StringOrNull': 'v8SetReturnValueStringOrNull(info, {cpp_value}, info.GetIsolate())',
-    'StringOrUndefined': 'v8SetReturnValueStringOrUndefined(info, {cpp_value}, info.GetIsolate())',
     'void': '',
     # No special v8SetReturnValue* function (set value directly)
     'float': 'v8SetReturnValue(info, {cpp_value})',
@@ -869,9 +881,7 @@
     'double': 'v8::Number::New({isolate}, {cpp_value})',
     'unrestricted double': 'v8::Number::New({isolate}, {cpp_value})',
     'void': 'v8Undefined()',
-    # [TreatReturnedNullStringAs]
     'StringOrNull': '{cpp_value}.isNull() ? v8::Local<v8::Value>(v8::Null({isolate})) : v8String({isolate}, {cpp_value})',
-    'StringOrUndefined': '{cpp_value}.isNull() ? v8Undefined() : v8String({isolate}, {cpp_value})',
     # Special cases
     'Dictionary': '{cpp_value}.v8Value()',
     'EventHandler': '{cpp_value} ? v8::Local<v8::Value>(V8AbstractEventListener::cast({cpp_value})->getListenerObject(impl->executionContext())) : v8::Local<v8::Value>(v8::Null({isolate}))',
diff --git a/bindings/scripts/v8_union.py b/bindings/scripts/v8_union.py
index 1b94261..fa22cdb 100644
--- a/bindings/scripts/v8_union.py
+++ b/bindings/scripts/v8_union.py
@@ -25,11 +25,14 @@
 
 cpp_includes = set()
 header_forward_decls = set()
+header_includes = set()
 
 
 def union_context(union_types, interfaces_info):
     cpp_includes.clear()
     header_forward_decls.clear()
+    header_includes.clear()
+    header_includes.update(UNION_H_INCLUDES)
 
     # For container classes we strip nullable wrappers. For example,
     # both (A or B)? and (A? or B) will become AOrB. This should be OK
@@ -37,26 +40,21 @@
     # distinguishing (A or B)? and (A? or B) doesn't make sense.
     container_cpp_types = set()
     union_types_for_containers = set()
-    nullable_cpp_types = set()
     for union_type in union_types:
         cpp_type = union_type.cpp_type
         if cpp_type not in container_cpp_types:
             union_types_for_containers.add(union_type)
             container_cpp_types.add(cpp_type)
-        if union_type.includes_nullable_type:
-            nullable_cpp_types.add(cpp_type)
 
     union_types_for_containers = sorted(union_types_for_containers,
                                         key=lambda union_type: union_type.cpp_type)
-    nullable_cpp_types = sorted(nullable_cpp_types)
 
     return {
         'containers': [container_context(union_type, interfaces_info)
                        for union_type in union_types_for_containers],
         'cpp_includes': sorted(cpp_includes - UNION_CPP_INCLUDES_BLACKLIST),
         'header_forward_decls': sorted(header_forward_decls),
-        'header_includes': sorted(UNION_H_INCLUDES),
-        'nullable_cpp_types': nullable_cpp_types,
+        'header_includes': sorted(header_includes),
     }
 
 
@@ -72,6 +70,7 @@
     dictionary_type = None
     interface_types = []
     numeric_type = None
+    object_type = None
     string_type = None
     for member in union_type.member_types:
         context = member_context(member, interfaces_info)
@@ -84,8 +83,7 @@
             if array_buffer_view_type:
                 raise Exception('%s is ambiguous.' % union_type.name)
             array_buffer_view_type = context
-        # FIXME: Remove generic Dictionary special casing.
-        elif member.is_dictionary or member.base_type == 'Dictionary':
+        elif member.is_dictionary:
             if dictionary_type:
                 raise Exception('%s is ambiguous.' % union_type.name)
             dictionary_type = context
@@ -93,6 +91,11 @@
             if array_or_sequence_type:
                 raise Exception('%s is ambiguous.' % union_type.name)
             array_or_sequence_type = context
+        # "Dictionary" is an object, rather than an IDL dictionary.
+        elif member.base_type == 'Dictionary':
+            if object_type:
+                raise Exception('%s is ambiguous.' % union_type.name)
+            object_type = context
         elif member.is_interface_type:
             interface_types.append(context)
         elif member is union_type.boolean_member_type:
@@ -122,17 +125,37 @@
         'interface_types': interface_types,
         'members': members,
         'numeric_type': numeric_type,
+        'object_type': object_type,
         'string_type': string_type,
         'type_string': str(union_type),
     }
 
 
-def member_context(member, interfaces_info):
-    cpp_includes.update(member.includes_for_type())
-    interface_info = interfaces_info.get(member.name, None)
+def _update_includes_and_forward_decls(member, interface_info):
     if interface_info:
-        cpp_includes.update(interface_info.get('dependencies_include_paths', []))
-        header_forward_decls.add(member.implemented_as)
+        cpp_includes.update(interface_info.get(
+            'dependencies_include_paths', []))
+        # TODO(bashi): Workaround for http://crbug.com/524424
+        # Avoid using forward declaration for IDL dictionaries so that they
+        # aren't imcomplete types in UnionTypes.h. This enables an IDL
+        # dictionary to have a union type which has an IDL dictionary. e.g.
+        #   dictionary DictA { (boolean or DictB) member; }
+        # Note that this doesn't cover all cases. We still can't use an IDL
+        # dictionary in a union type when the dictionary contains a union type.
+        # e.g.
+        #   void foo((DOMString or DictA) arg);  // won't compile
+        if member.is_dictionary:
+            header_includes.update(member.includes_for_type())
+        else:
+            cpp_includes.update(member.includes_for_type())
+            header_forward_decls.add(member.implemented_as)
+    else:
+        cpp_includes.update(member.includes_for_type())
+
+
+def member_context(member, interfaces_info):
+    interface_info = interfaces_info.get(member.name, None)
+    _update_includes_and_forward_decls(member, interface_info)
     if member.is_nullable:
         member = member.inner_type
     return {
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
index 1cd44ab..1e8733a 100644
--- a/bindings/scripts/v8_utilities.py
+++ b/bindings/scripts/v8_utilities.py
@@ -35,7 +35,7 @@
 
 from idl_types import IdlTypeBase
 import idl_types
-from idl_definitions import Exposure, IdlInterface
+from idl_definitions import Exposure, IdlInterface, IdlAttribute
 from v8_globals import includes
 
 ACRONYMS = [
@@ -125,7 +125,7 @@
     if partial_interface_implemented_as:
         return '%s::%s' % (partial_interface_implemented_as, base_name)
     if (definition.is_static or
-        definition.name in ('Constructor', 'NamedConstructor')):
+            definition.name in ('Constructor', 'NamedConstructor')):
         return '%s::%s' % (cpp_name(interface), base_name)
     return 'impl->%s' % base_name
 
@@ -176,7 +176,7 @@
     if 'LogActivity' not in extended_attributes:
         return False
     if ('PerWorldBindings' not in extended_attributes and
-        'LogAllWorlds' not in extended_attributes):
+            'LogAllWorlds' not in extended_attributes):
         return True
     return False
 
@@ -186,7 +186,7 @@
     'ScriptState': 'scriptState',
     'ExecutionContext': 'executionContext',
     'ScriptArguments': 'scriptArguments.release()',
-    'ActiveWindow': 'callingDOMWindow(info.GetIsolate())',
+    'ActiveWindow': 'currentDOMWindow(info.GetIsolate())',
     'FirstWindow': 'enteredDOMWindow(info.GetIsolate())',
     'Document': 'document',
     'ThisValue': 'ScriptValue(scriptState, info.This())',
@@ -211,24 +211,11 @@
             if extended_attribute_value_contains(call_with_values, value)]
 
 
-# [Conditional]
-DELIMITER_TO_OPERATOR = {
-    '|': '||',
-    ',': '&&',
-}
-
-
-def conditional_string(definition_or_member):
-    extended_attributes = definition_or_member.extended_attributes
-    if 'Conditional' not in extended_attributes:
-        return None
-    return 'ENABLE(%s)' % extended_attributes['Conditional']
-
-
 # [Constructor], [NamedConstructor]
 def is_constructor_attribute(member):
     # TODO(yukishiino): replace this with [Constructor] and [NamedConstructor] extended attribute
-    return member.idl_type.name.endswith('Constructor')
+    return (type(member) == IdlAttribute and
+            member.idl_type.name.endswith('Constructor'))
 
 
 # [DeprecateAs]
@@ -236,7 +223,7 @@
     extended_attributes = member.extended_attributes
     if 'DeprecateAs' not in extended_attributes:
         return None
-    includes.add('core/frame/UseCounter.h')
+    includes.add('core/frame/Deprecation.h')
     return extended_attributes['DeprecateAs']
 
 
@@ -248,6 +235,7 @@
     'SharedWorker': 'isSharedWorkerGlobalScope',
     'Window': 'isDocument',
     'Worker': 'isWorkerGlobalScope',
+    'Worklet': 'isWorkletGlobalScope',
 }
 
 
@@ -291,7 +279,7 @@
 
     @staticmethod
     def _code(exposure):
-        exposed = ('context->%s()' %
+        exposed = ('executionContext->%s()' %
                    EXPOSED_EXECUTION_CONTEXT_METHOD[exposure.exposed])
         if exposure.runtime_enabled is not None:
             runtime_enabled = ('RuntimeEnabledFeatures::%sEnabled()' %
@@ -379,6 +367,29 @@
     return None
 
 
+def runtime_feature_name(definition_or_member):
+    extended_attributes = definition_or_member.extended_attributes
+    if 'RuntimeEnabled' not in extended_attributes:
+        return None
+    return extended_attributes['RuntimeEnabled']
+
+
+def is_origin_trial_enabled(definition_or_member):
+    return 'OriginTrialEnabled' in definition_or_member.extended_attributes
+
+
+def origin_trial_name(definition_or_member):
+    return definition_or_member.extended_attributes['OriginTrialEnabled'] if is_origin_trial_enabled(definition_or_member) else None
+
+
+def origin_trial_enabled_function(definition_or_member):
+    trial_name = origin_trial_name(definition_or_member)
+    feature_name = runtime_feature_name(definition_or_member)
+    if not feature_name or not trial_name:
+        return
+    return 'OriginTrials::%sEnabled' % uncapitalize(feature_name)
+
+
 # [RuntimeEnabled]
 def runtime_enabled_function_name(definition_or_member):
     """Returns the name of the RuntimeEnabledFeatures function.
@@ -387,10 +398,16 @@
     Given extended attribute RuntimeEnabled=FeatureName, return:
         RuntimeEnabledFeatures::{featureName}Enabled
     """
-    extended_attributes = definition_or_member.extended_attributes
-    if 'RuntimeEnabled' not in extended_attributes:
-        return None
-    feature_name = extended_attributes['RuntimeEnabled']
+    feature_name = runtime_feature_name(definition_or_member)
+
+    # If an origin trial is on the method/attribute, it overrides the runtime
+    # enabled status. For now, we are unconditionally installing these
+    # attributes/methods, so we are acting as though the runtime enabled
+    # function doesn't exist. (It is checked in the generated OriginTrials
+    # function, instead)
+    trial_name = origin_trial_name(definition_or_member)
+    if not feature_name or trial_name:
+        return
     return 'RuntimeEnabledFeatures::%sEnabled' % uncapitalize(feature_name)
 
 
@@ -401,17 +418,13 @@
             not member.is_static)
 
 
-# [TypeChecking=Interface] / [LegacyInterfaceTypeChecking]
+# [LegacyInterfaceTypeChecking]
 def is_legacy_interface_type_checking(interface, member):
-    if not ('TypeChecking' in interface.extended_attributes or
-            'TypeChecking' in member.extended_attributes):
-        return True
-    if 'LegacyInterfaceTypeChecking' in member.extended_attributes:
-        return True
-    return False
+    return ('LegacyInterfaceTypeChecking' in interface.extended_attributes or
+            'LegacyInterfaceTypeChecking' in member.extended_attributes)
 
 
-# [Unforgeable], [Global], [PrimaryGlobal] and [DoNotExposeJSAccessors]
+# [Unforgeable], [Global], [PrimaryGlobal]
 def on_instance(interface, member):
     """Returns True if the interface's member needs to be defined on every
     instance object.
@@ -419,60 +432,57 @@
     The following members must be defiend on an instance object.
     - [Unforgeable] members
     - regular members of [Global] or [PrimaryGlobal] interfaces
-    - members on which [DoNotExposeJSAccessors] is specified
     """
-    # TODO(yukishiino): Implement this function following the spec.
-    return not on_prototype(interface, member)
+    if member.is_static:
+        return False
+
+    # TODO(yukishiino): Remove a hack for toString once we support
+    # Symbol.toStringTag.
+    if (interface.name == 'Window' and member.name == 'toString'):
+        return False
+
+    # TODO(yukishiino): Implement "interface object" and its [[Call]] method
+    # in a better way.  Then we can get rid of this hack.
+    if is_constructor_attribute(member):
+        return True
+
+    if ('PrimaryGlobal' in interface.extended_attributes or
+            'Global' in interface.extended_attributes or
+            'Unforgeable' in member.extended_attributes or
+            'Unforgeable' in interface.extended_attributes):
+        return True
+    return False
 
 
-# [ExposeJSAccessors]
 def on_prototype(interface, member):
     """Returns True if the interface's member needs to be defined on the
     prototype object.
 
     Most members are defined on the prototype object.  Exceptions are as
     follows.
-    - constant members
     - static members (optional)
     - [Unforgeable] members
     - members of [Global] or [PrimaryGlobal] interfaces
     - named properties of [Global] or [PrimaryGlobal] interfaces
-    However, if [ExposeJSAccessors] is specified, the member is defined on the
-    prototype object.
     """
-    # TODO(yukishiino): Implement this function following the spec.
+    if member.is_static:
+        return False
 
-    if ('ExposeJSAccessors' in interface.extended_attributes and
-            'DoNotExposeJSAccessors' in interface.extended_attributes):
-        raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time in an interface: ' + interface.name)
-    if ('ExposeJSAccessors' in member.extended_attributes and
-            'DoNotExposeJSAccessors' in member.extended_attributes):
-        raise Exception('Both of ExposeJSAccessors and DoNotExposeJSAccessors are specified at a time on a member: ' + member.name + ' in an interface: ' + interface.name)
-
-    # Note that ExposeJSAccessors and DoNotExposeJSAccessors are more powerful
-    # than 'static', [Unforgeable] and [OverrideBuiltins].
-    if 'ExposeJSAccessors' in member.extended_attributes:
+    # TODO(yukishiino): Remove a hack for toString once we support
+    # Symbol.toStringTag.
+    if (interface.name == 'Window' and member.name == 'toString'):
         return True
-    if 'DoNotExposeJSAccessors' in member.extended_attributes:
+
+    # TODO(yukishiino): Implement "interface object" and its [[Call]] method
+    # in a better way.  Then we can get rid of this hack.
+    if is_constructor_attribute(member):
         return False
 
-    # These members must not be placed on prototype chains.
-    if (is_constructor_attribute(member) or
-            member.is_static or
-            is_unforgeable(interface, member) or
-            'OverrideBuiltins' in interface.extended_attributes):
+    if ('PrimaryGlobal' in interface.extended_attributes or
+            'Global' in interface.extended_attributes or
+            'Unforgeable' in member.extended_attributes or
+            'Unforgeable' in interface.extended_attributes):
         return False
-
-    # TODO(yukishiino): We should handle [Global] and [PrimaryGlobal] instead of
-    # Window.
-    if (interface.name == 'Window'):
-        return member.idl_type.name == 'EventHandler'
-
-    if 'ExposeJSAccessors' in interface.extended_attributes:
-        return True
-    if 'DoNotExposeJSAccessors' in interface.extended_attributes:
-        return False
-
     return True
 
 
@@ -482,10 +492,10 @@
     interface object.
 
     The following members must be defiend on an interface object.
-    - constant members
     - static members
     """
-    # TODO(yukishiino): Implement this function following the spec.
+    if member.is_static:
+        return True
     return False
 
 
diff --git a/bindings/tests/idls/core/SVGTestInterface.idl b/bindings/tests/idls/core/SVGTestInterface.idl
index 6c7511e..81e8997 100644
--- a/bindings/tests/idls/core/SVGTestInterface.idl
+++ b/bindings/tests/idls/core/SVGTestInterface.idl
@@ -35,5 +35,4 @@
     DependentLifetime,
 ] interface SVGTestInterface {
     [Reflect] attribute DOMString type; // Test SVGNames namespace
-    // [Immutable] attribute SVGPoint immutablePoint; // [Immutable] is a nop
 };
diff --git a/bindings/tests/idls/core/TestDictionary.idl b/bindings/tests/idls/core/TestDictionary.idl
index d135101..0ac0a68 100644
--- a/bindings/tests/idls/core/TestDictionary.idl
+++ b/bindings/tests/idls/core/TestDictionary.idl
@@ -36,4 +36,6 @@
     Uint8Array uint8ArrayMember;
     EventTarget eventTargetMember;
     any anyMember = null;
+    Dictionary dictionaryMember;
+    [RuntimeEnabled=runtimeFeature] boolean runtimeMember;
 };
diff --git a/bindings/tests/idls/core/TestException.idl b/bindings/tests/idls/core/TestException.idl
index a62191c..0c918b4 100644
--- a/bindings/tests/idls/core/TestException.idl
+++ b/bindings/tests/idls/core/TestException.idl
@@ -27,6 +27,7 @@
  */
 
 [
+    Constructor(unsigned short argument),
     DoNotCheckConstants,
 ] exception TestException {
     readonly attribute unsigned short readonlyUnsignedShortAttribute;
diff --git a/bindings/tests/idls/core/TestIntegerIndexed.idl b/bindings/tests/idls/core/TestIntegerIndexed.idl
new file mode 100644
index 0000000..ddc9d20
--- /dev/null
+++ b/bindings/tests/idls/core/TestIntegerIndexed.idl
@@ -0,0 +1,16 @@
+// Copyright 2015 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.
+
+interface TestIntegerIndexed {
+    [Custom] getter boolean (unsigned long index);
+    [Custom] setter boolean (unsigned long index, Node value);
+    [Custom] deleter boolean (unsigned long index);
+    attribute short length;
+
+    [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter Node (DOMString name);
+    [Custom] setter Node (DOMString name, Node value);
+    [Custom] deleter boolean (DOMString name);
+
+    void voidMethodDocument(Document document);
+};
diff --git a/bindings/tests/idls/core/TestIntegerIndexedGlobal.idl b/bindings/tests/idls/core/TestIntegerIndexedGlobal.idl
new file mode 100644
index 0000000..8937125
--- /dev/null
+++ b/bindings/tests/idls/core/TestIntegerIndexedGlobal.idl
@@ -0,0 +1,17 @@
+// Copyright 2015 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.
+
+[Global]
+interface TestIntegerIndexedGlobal {
+    [Custom] getter boolean (unsigned long index);
+    [Custom] setter boolean (unsigned long index, Node value);
+    [Custom] deleter boolean (unsigned long index);
+    attribute unsigned long long length;
+
+    [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter Node (DOMString name);
+    [Custom] setter Node (DOMString name, Node value);
+    [Custom] deleter boolean (DOMString name);
+
+    void voidMethodDocument(Document document);
+};
diff --git a/bindings/tests/idls/core/TestIntegerIndexedPrimaryGlobal.idl b/bindings/tests/idls/core/TestIntegerIndexedPrimaryGlobal.idl
new file mode 100644
index 0000000..b9c760a
--- /dev/null
+++ b/bindings/tests/idls/core/TestIntegerIndexedPrimaryGlobal.idl
@@ -0,0 +1,17 @@
+// Copyright 2015 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.
+
+[PrimaryGlobal]
+interface TestIntegerIndexedPrimaryGlobal {
+    [Custom] getter boolean (unsigned long index);
+    [Custom] setter boolean (unsigned long index, Node value);
+    [Custom] deleter boolean (unsigned long index);
+    attribute byte length;
+
+    [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter Node (DOMString name);
+    [Custom] setter Node (DOMString name, Node value);
+    [Custom] deleter boolean (DOMString name);
+
+    void voidMethodDocument(Document document);
+};
diff --git a/bindings/tests/idls/core/TestInterface.idl b/bindings/tests/idls/core/TestInterface.idl
index 69a51cd..58c1e12 100644
--- a/bindings/tests/idls/core/TestInterface.idl
+++ b/bindings/tests/idls/core/TestInterface.idl
@@ -32,21 +32,18 @@
 // Also used as a target by TestObject
 
 [
-    ActiveDOMObject,
-    Conditional=CONDITION,
+    DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterfaceImplementation,
     Iterable,
-    Measure,
+    OriginTrialEnabled=OriginTrialFeatureName,
     RuntimeEnabled=FeatureName,
     SetWrapperReferenceTo(TestInterface referencedName),
-    TypeChecking=Interface,
     Exposed=(Worker,Window),
 ] interface TestInterface : TestInterfaceEmpty {
     // members needed to test [ImplementedAs], as this affect attribute
-    // configuration and method configuration, and [TypeChecking]
-    // constants also needed for [DoNotCheckConstants]
+    // configuration and method configuration
     const unsigned long UNSIGNED_LONG = 0;
     [Reflect=CONST_CPP] const short CONST_JAVASCRIPT = 1;
 
@@ -60,8 +57,13 @@
     attribute unrestricted float unrestrictedFloatAttribute;
     attribute TestEnum testEnumAttribute;
     attribute DOMStringOrDouble stringOrDoubleAttribute;
+    [RuntimeEnabled=FeatureName] attribute long conditionalLongAttribute;
+    [RuntimeEnabled=FeatureName] readonly attribute long conditionalReadOnlyLongAttribute;
     static attribute DOMString staticStringAttribute;
     static attribute TestInterface staticReturnDOMWrapperAttribute;
+    static readonly attribute DOMString staticReadOnlyStringAttribute;
+    static readonly attribute TestInterface staticReadOnlyReturnDOMWrapperAttribute;
+    [RuntimeEnabled=FeatureName] static readonly attribute long staticConditionalReadOnlyLongAttribute;
     [LegacyInterfaceTypeChecking] attribute TestInterfaceEmpty legacyInterfaceTypeCheckingAttribute;
 
     void voidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
diff --git a/bindings/tests/idls/core/TestInterface2.idl b/bindings/tests/idls/core/TestInterface2.idl
index 02de68e..18ab03f 100644
--- a/bindings/tests/idls/core/TestInterface2.idl
+++ b/bindings/tests/idls/core/TestInterface2.idl
@@ -35,7 +35,7 @@
 
 [
     Constructor,
-    DependentLifetime, // Covered by [ActiveDOMObject]
+    DependentLifetime, // Covered by [DependentLifetime]
     SetWrapperReferenceFrom=ownerNode, // Conflicts with [SetWrapperReferenceTo]
     // Note that Exposed(Arguments) has no effect on bindings-tests. It is
     // processed in generate_global_constructors.py.
@@ -46,12 +46,12 @@
 
     // Indexed property operations with an identifier
     [RaisesException] getter TestInterfaceEmpty item(unsigned long index);
-    [RaisesException, TypeChecking=Interface] setter TestInterfaceEmpty setItem(unsigned long index, TestInterfaceEmpty value);
+    [RaisesException] setter TestInterfaceEmpty setItem(unsigned long index, TestInterfaceEmpty value);
     [RaisesException] deleter boolean deleteItem(unsigned long index);
 
     // Named property operations with an identifier
     [RaisesException] getter TestInterfaceEmpty namedItem(DOMString name);
-    [RaisesException, TypeChecking=Interface] setter TestInterfaceEmpty setNamedItem(DOMString name, TestInterfaceEmpty? value);
+    [RaisesException] setter TestInterfaceEmpty setNamedItem(DOMString name, TestInterfaceEmpty? value);
     [RaisesException] deleter boolean deleteNamedItem(DOMString name);
 
     stringifier DOMString stringifierMethod();
diff --git a/bindings/tests/idls/core/TestInterfaceAccessors.idl b/bindings/tests/idls/core/TestInterfaceAccessors.idl
deleted file mode 100644
index e6c4636..0000000
--- a/bindings/tests/idls/core/TestInterfaceAccessors.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2015 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.
-
-// An interface for testing (DoNot)ExposeJSAccessors extended attributes.
-
-[
-    ExposeJSAccessors,
-] interface TestInterfaceAccessors : TestInterfaceEmpty {
-    attribute long noExposeJSAccessorAttribute;
-    [ExposeJSAccessors] attribute long exposeJSAccessorAttribute;
-    [DoNotExposeJSAccessors] attribute long doNotExposeJSAccessorAttribute;
-};
diff --git a/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl b/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
index 56ead63..5aaf41d 100644
--- a/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
+++ b/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
@@ -27,7 +27,8 @@
  */
 
 [
-    CheckSecurity=Frame,
+    CheckSecurity=Receiver,
+    Global,
 ] interface TestInterfaceCheckSecurity {
     readonly attribute long readonlyLongAttribute;
     attribute long longAttribute;
@@ -37,7 +38,6 @@
     [DoNotCheckSecurity] readonly attribute long doNotCheckSecurityReadonlyLongAttribute; // Separate read only attribute to check attribute configuration
     [DoNotCheckSecurity=Setter] attribute long doNotCheckSecurityOnSetterLongAttribute;
     [DoNotCheckSecurity, Replaceable] readonly attribute long doNotCheckSecurityReplaceableReadonlyLongAttribute;
-    [DoNotCheckSecurity, Replaceable, ExposeJSAccessors] readonly attribute long doNotCheckSecurityReplaceableReadonlyLongAccessor;
 
     [DoNotCheckSecurity] void doNotCheckSecurityVoidMethod();
     [DoNotCheckSecurity, DoNotCheckSignature] void doNotCheckSecurityDoNotCheckSignatureVoidMethod();
diff --git a/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl b/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
index bc8a06b..1185fab 100644
--- a/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
+++ b/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     NamedConstructor=Audio(
         DOMString stringArg,
         [Default=Undefined] optional boolean defaultUndefinedOptionalBooleanArg,
diff --git a/bindings/tests/idls/core/TestInterfaceOwnProperties.idl b/bindings/tests/idls/core/TestInterfaceOwnProperties.idl
deleted file mode 100644
index 940024a..0000000
--- a/bindings/tests/idls/core/TestInterfaceOwnProperties.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2015 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.
-
-// An interface for testing (DoNot)ExposeJSAccessors extended attributes.
-
-[
-    DoNotExposeJSAccessors,
-] interface TestInterfaceOwnProperties : TestInterfaceEmpty {
-    attribute long noExposeJSAccessorAttribute;
-    [ExposeJSAccessors] attribute long exposeJSAccessorAttribute;
-    [DoNotExposeJSAccessors] attribute long doNotExposeJSAccessorAttribute;
-};
diff --git a/bindings/tests/idls/core/TestInterfaceOwnPropertiesDerived.idl b/bindings/tests/idls/core/TestInterfaceOwnPropertiesDerived.idl
deleted file mode 100644
index 86f47b6..0000000
--- a/bindings/tests/idls/core/TestInterfaceOwnPropertiesDerived.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 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.
-
-// An interface for testing (DoNot)ExposeJSAccessors extended attributes.
-
-interface TestInterfaceOwnPropertiesDerived : TestInterfaceOwnProperties {
-    attribute long noExposeJSAccessorAttribute;
-    [ExposeJSAccessors] attribute long exposeJSAccessorAttribute;
-    [DoNotExposeJSAccessors] attribute long doNotExposeJSAccessorAttribute;
-};
diff --git a/bindings/tests/idls/core/TestObject.idl b/bindings/tests/idls/core/TestObject.idl
index 97a9ab9..4e37b82 100644
--- a/bindings/tests/idls/core/TestObject.idl
+++ b/bindings/tests/idls/core/TestObject.idl
@@ -42,7 +42,6 @@
     const unsigned short CONST_VALUE_4 = 4;
     const unsigned short CONST_VALUE_8 = 8;
     const short CONST_VALUE_9 = -1;
-    const DOMString CONST_VALUE_10 = "my constant string";
     const unsigned short CONST_VALUE_11 = 0xffffffff;
     const unsigned short CONST_VALUE_12 = 0x01;
     const unsigned short CONST_VALUE_13 = 0X20;
@@ -63,7 +62,16 @@
     // Extended attributes
     [DeprecateAs=Constant] const short DEPRECATED_CONSTANT = 1;
     [MeasureAs=Constant] const short MEASURED_CONSTANT = 1;
-    [RuntimeEnabled=FeatureName] const short FEATURE_ENABLED_CONST = 1;
+    [RuntimeEnabled=FeatureName1] const short FEATURE1_ENABLED_CONST1 = 1;
+    [RuntimeEnabled=FeatureName1] const short FEATURE1_ENABLED_CONST2 = 2;
+    [RuntimeEnabled=FeatureName2] const short FEATURE2_ENABLED_CONST1 = 3;
+    [RuntimeEnabled=FeatureName2] const short FEATURE2_ENABLED_CONST2 = 4;
+    [RuntimeEnabled=FeatureName3] const short FEATURE3_ENABLED_CONST1 = 5;
+    [RuntimeEnabled=FeatureName1, OriginTrialEnabled=FeatureName1] const short FEATURE1_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1 = 1;
+    [RuntimeEnabled=FeatureName1, OriginTrialEnabled=FeatureName1] const short FEATURE1_RUNTIME_AND_EXPERIMENT_ENABLED_CONST2 = 2;
+    [RuntimeEnabled=FeatureName2, OriginTrialEnabled=FeatureName2] const short FEATURE2_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1 = 3;
+    [RuntimeEnabled=FeatureName2, OriginTrialEnabled=FeatureName2] const short FEATURE2_RUNTIME_AND_EXPERIMENT_ENABLED_CONST2 = 4;
+    [RuntimeEnabled=FeatureName3, OriginTrialEnabled=FeatureName3] const short FEATURE3_RUNTIME_AND_EXPERIMENT_ENABLED_CONST1 = 5;
     [Reflect=CONST_IMPL] const short CONST_JAVASCRIPT = 1;
 
     stringifier attribute DOMString stringifierAttribute;
@@ -174,8 +182,7 @@
     [CallWith=ExecutionContext] attribute any callWithExecutionContextAnyAttribute;
     [CallWith=ScriptState] attribute any callWithScriptStateAnyAttribute;
     [CallWith=(ExecutionContext,ScriptState)] attribute any callWithExecutionContextAndScriptStateAnyAttribute;
-    [CheckSecurity=Node] readonly attribute Document checkSecurityForNodeReadonlyDocumentAttribute; // All uses are read only
-    [Conditional=CONDITION] attribute long conditionalLongAttribute;
+    [CheckSecurity=ReturnValue] readonly attribute Document checkSecurityForNodeReadonlyDocumentAttribute; // All uses are read only
     // Constructors: FIXME: replace suffix with [ConstructorAttribute]
     attribute TestInterfaceEmptyConstructor testInterfaceEmptyConstructorAttribute;
     [DeprecateAs=deprecatedTestInterfaceEmptyConstructorAttribute] attribute TestInterfaceEmptyConstructor testInterfaceEmptyConstructorAttribute;
@@ -184,11 +191,10 @@
     [Custom=Getter] attribute long customGetterLongAttribute;
     [Custom=Getter] readonly attribute object customGetterReadonlyObjectAttribute;
     [Custom=Setter] attribute long customSetterLongAttribute;
-    [Conditional=CONDITION, Custom] attribute long customLongAttribute;
     [CustomElementCallbacks] readonly attribute long customElementsCallbacksReadonlyLongAttribute;
     [DeprecateAs=LongAttribute] attribute long deprecatedLongAttribute;
     [EnforceRange] attribute long enforceRangeLongAttribute;
-    [ExposeJSAccessors] attribute long exposeJSAccessorsLongAttribute;
+    [OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName] attribute long experimentRuntimeEnabledLongAttribute;
     [ImplementedAs=implementedAsName] attribute long implementedAsLongAttribute;
     [Custom, ImplementedAs=implementedAsNameWithCustom] attribute long customImplementedAsLongAttribute;
     [Custom=Getter, ImplementedAs=implementedAsNameWithCustomGetter] attribute long customGetterImplementedAsLongAttribute;
@@ -205,7 +211,7 @@
     [PutForwards=hrefCallWith] readonly attribute TestNode locationWithCallWith;
     [PutForwards=hrefByteString] readonly attribute TestNode locationByteString;
     [PerWorldBindings, PutForwards=href] readonly attribute TestNode locationWithPerWorldBindings;
-    [TypeChecking=Interface, PutForwards=href] readonly attribute TestNode locationTypeCheckingInterface;
+    [PutForwards=href, LegacyInterfaceTypeChecking] readonly attribute TestNode locationLegacyInterfaceTypeChecking;
     [PutForwards=attr1] readonly attribute TestInterfaceGarbageCollected locationGarbageCollected;
     [PutForwards=attr1] readonly attribute TestInterfaceWillBeGarbageCollected locationWillBeGarbageCollected;
     [RaisesException] attribute long raisesExceptionLongAttribute;
@@ -238,30 +244,22 @@
     [Reflect, ReflectOnly=("empty","missing","invalid","a-normal"), ReflectEmpty="empty", ReflectMissing="missing", ReflectInvalid="invalid"] readonly attribute DOMString limitedWithEmptyMissingInvalidAttribute;
 
     [Replaceable] readonly attribute long replaceableReadonlyLongAttribute;
-    [Replaceable, ExposeJSAccessors] readonly attribute long replaceableReadonlyLongAccessor;
     [PutForwards=href] readonly attribute TestNode locationPutForwards;
     [RuntimeEnabled=FeatureName] attribute long runtimeEnabledLongAttribute;
-    [Conditional=CONDITION, RuntimeEnabled=FeatureName] attribute long conditionalRuntimeEnabledLongAttribute;
     [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString setterCallWithActiveWindowAndFirstWindowStringAttribute;
     [SetterCallWith=ExecutionContext] attribute DOMString setterCallWithExecutionContextStringAttribute;
     [TreatNullAs=EmptyString] attribute DOMString treatNullAsEmptyStringStringAttribute;
     [TreatNullAs=NullString] attribute DOMString treatNullAsNullStringStringAttribute;
-    [TreatReturnedNullStringAs=Null] attribute DOMString treatReturnedNullStringAsNullStringAttribute;
-    [TreatReturnedNullStringAs=Undefined] attribute DOMString treatReturnedNullStringAsUndefinedStringAttribute;
-    [TreatReturnedNullStringAs=Undefined, CachedAttribute=isStringDirty] attribute DOMString cachedTreatReturnedNullStringAsUndefinedStringAttribute;
-    [TreatReturnedNullStringAs=Null] attribute ByteString treatReturnedNullStringAsNullByteStringAttribute;
-    [TreatReturnedNullStringAs=Undefined] attribute ByteString treatReturnedNullStringAsUndefinedByteStringAttribute;
-    [TreatReturnedNullStringAs=Null] attribute USVString treatReturnedNullStringAsNullUSVStringAttribute;
-    [TreatReturnedNullStringAs=Undefined] attribute USVString treatReturnedNullStringAsUndefinedUSVStringAttribute;
-    [TypeChecking=Interface] attribute float typeCheckingInterfaceFloatAttribute; // nop for non-interface types
-    [TypeChecking=Interface] attribute TestInterface typeCheckingInterfaceTestInterfaceAttribute;
-    [TypeChecking=Interface] attribute TestInterface? typeCheckingInterfaceTestInterfaceOrNullAttribute;
+    [LegacyInterfaceTypeChecking] attribute float legacyInterfaceTypeCheckingFloatAttribute; // nop for non-interface types
+    [LegacyInterfaceTypeChecking] attribute TestInterface legacyInterfaceTypeCheckingTestInterfaceAttribute;
+    [LegacyInterfaceTypeChecking] attribute TestInterface? legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute;
     [Reflect, URL] attribute DOMString urlStringAttribute;
     [Reflect=reflectUrlAttribute, URL] attribute DOMString urlStringAttribute;
     [Unforgeable] attribute long unforgeableLongAttribute;
     [Measure] attribute long measuredLongAttribute;
     [SameObject] attribute TestInterface sameObjectAttribute;
     [Unscopeable] attribute long unscopeableLongAttribute;
+    [Unscopeable, OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName] attribute long unscopeableExperimentEnabledLongAttribute;
     [Unscopeable, RuntimeEnabled=FeatureName] attribute long unscopeableRuntimeEnabledLongAttribute;
     [Unscopeable] void unscopeableVoidMethod();
     [Unscopeable, RuntimeEnabled=FeatureName] void unscopeableRuntimeEnabledVoidMethod();
@@ -341,6 +339,8 @@
     void voidMethodArrayBufferArg(ArrayBuffer arrayBufferArg);
     void voidMethodArrayBufferOrNullArg(ArrayBuffer? arrayBufferArg);
     void voidMethodArrayBufferViewArg(ArrayBufferView arrayBufferViewArg);
+    void voidMethodFlexibleArrayBufferViewArg([FlexibleArrayBufferView] ArrayBufferView arrayBufferViewArg);
+    void voidMethodFlexibleArrayBufferViewTypedArg([FlexibleArrayBufferView] Float32Array typedArrayBufferViewArg);
     void voidMethodFloat32ArrayArg(Float32Array float32ArrayArg);
     void voidMethodInt32ArrayArg(Int32Array int32ArrayArg);
     void voidMethodUint8ArrayArg(Uint8Array uint8ArrayArg);
@@ -515,16 +515,21 @@
     [CallWith=ActiveWindow] void callWithActiveWindow();
     [CallWith=(ActiveWindow,FirstWindow)] void callWithActiveWindowScriptWindow();
     [CallWith=ThisValue] void callWithThisValue();
-    [CheckSecurity=Node] void checkSecurityForNodeVoidMethod();
-    [Conditional=CONDITION] void conditionalConditionVoidMethod();
-    [Conditional=CONDITION] static void conditionalConditionStaticVoidMethod();
+    [CheckSecurity=ReturnValue] void checkSecurityForNodeVoidMethod();
     [Custom] void customVoidMethod();
     [Custom=CallPrologue] void customCallPrologueVoidMethod();
     [Custom=CallEpilogue] void customCallEpilogueVoidMethod();
-    [Conditional=CONDITION, Custom] void conditionalConditionCustomVoidMethod();
     [CustomElementCallbacks] void customElementCallbacksVoidMethod();
     [DeprecateAs=voidMethod] void deprecatedVoidMethod();
     [DoNotCheckSignature] void doNotCheckSignatureVoidMethod();
+    [OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName1] void experimentEnabledVoidMethod();
+    [PerWorldBindings, OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName1] void perWorldBindingsExperimentEnabledVoidMethod();
+    [OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName1] void experimentEnabledOverloadedVoidMethod(DOMString stringArg);
+    [OriginTrialEnabled=FeatureName, RuntimeEnabled=FeatureName1] void experimentEnabledOverloadedVoidMethod(long longArg);
+    [OriginTrialEnabled=FeatureName1, RuntimeEnabled=FeatureName1] void partiallyExperimentEnabledOverloadedVoidMethod(DOMString stringArg);
+    [OriginTrialEnabled=FeatureName2, RuntimeEnabled=FeatureName1] void partiallyExperimentEnabledOverloadedVoidMethod(TestInterface testInterfaceArg);
+     void partiallyExperimentEnabledOverloadedVoidMethod(long longArg, DOMString stringArg);
+    [OriginTrialEnabled=FeatureName3] void partiallyExperimentEnabledOverloadedVoidMethod(long longArg, DOMString stringArg, TestInterface testInterfaceArg);
     [ImplementedAs=implementedAsMethodName] void implementedAsVoidMethod();
     [MeasureAs=TestFeature] void measureAsVoidMethod();
     [Measure] void measureMethod();
@@ -566,19 +571,12 @@
     [RuntimeEnabled=FeatureName2] void partiallyRuntimeEnabledOverloadedVoidMethod(TestInterface testInterfaceArg);
     void partiallyRuntimeEnabledOverloadedVoidMethod(long longArg, DOMString stringArg);
     [RuntimeEnabled=FeatureName3] void partiallyRuntimeEnabledOverloadedVoidMethod(long longArg, DOMString stringArg, TestInterface testInterfaceArg);
-    [TreatReturnedNullStringAs=Null] DOMString treatReturnedNullStringAsNullStringMethod();
-    [TreatReturnedNullStringAs=Undefined] DOMString treatReturnedNullStringAsUndefinedStringMethod();
-    [TreatReturnedNullStringAs=Null] ByteString treatReturnedNullStringAsNullByteStringMethod();
-    [TreatReturnedNullStringAs=Undefined] ByteString treatReturnedNullStringAsUndefinedByteStringMethod();
-    [TreatReturnedNullStringAs=Null] USVString treatReturnedNullStringAsNullUSVStringMethod();
-    [TreatReturnedNullStringAs=Undefined] USVString treatReturnedNullStringAsUndefinedUSVStringMethod();
-    [TypeChecking=Interface] void typeCheckingInterfaceVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
-    [TypeChecking=Interface] void typeCheckingInterfaceVoidMethodTestInterfaceEmptyVariadicArg(TestInterfaceEmpty... testInterfaceEmptyArg);
+    [LegacyInterfaceTypeChecking] void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
+    [LegacyInterfaceTypeChecking] void legacyInterfaceTypeCheckingVoidMethodTestInterfaceEmptyVariadicArg(TestInterfaceEmpty... testInterfaceEmptyArg);
     // Avoid redundant type checking
-    [TypeChecking=Interface] void useToImpl4ArgumentsCheckingIfPossibleWithOptionalArg(Node node1, optional Node node2);
-    [TypeChecking=Interface] void useToImpl4ArgumentsCheckingIfPossibleWithNullableArg(Node node1, Node? node2);
-    [TypeChecking=Interface] void useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArg(Node node1, [Default=Undefined] optional Node node2);
-    void typeCheckingUnrestrictedVoidMethodFloatArgDoubleArg(float floatArg, double doubleArg);
+    void useToImpl4ArgumentsCheckingIfPossibleWithOptionalArg(Node node1, optional Node node2);
+    void useToImpl4ArgumentsCheckingIfPossibleWithNullableArg(Node node1, Node? node2);
+    void useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArg(Node node1, [Default=Undefined] optional Node node2);
     [Unforgeable] void unforgeableVoidMethod();
     void voidMethodTestInterfaceGarbageCollectedSequenceArg(sequence<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedSequenceArg);
     void voidMethodTestInterfaceGarbageCollectedArrayArg(TestInterfaceGarbageCollected[] testInterfaceGarbageCollectedArrayArg);
diff --git a/bindings/tests/idls/core/TestPartialInterface.idl b/bindings/tests/idls/core/TestPartialInterface.idl
index 2981f87..0bc42ac 100644
--- a/bindings/tests/idls/core/TestPartialInterface.idl
+++ b/bindings/tests/idls/core/TestPartialInterface.idl
@@ -37,10 +37,10 @@
 
 callback PartialCallbackType = void (PartialString value);
 [
-    Conditional=PARTIAL_CONDITION,
     RuntimeEnabled=PartialFeatureName,
 ] partial interface TestInterface {
     const unsigned short PARTIAL_UNSIGNED_SHORT = 0;
+    const double PARTIAL_DOUBLE = 3.14;
 
     attribute long partialLongAttribute;
     static attribute long partialStaticLongAttribute;
diff --git a/bindings/tests/idls/core/TestPartialInterface4.idl b/bindings/tests/idls/core/TestPartialInterface4.idl
deleted file mode 100644
index fcdbd80..0000000
--- a/bindings/tests/idls/core/TestPartialInterface4.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2015 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.
-
-[
-    Conditional=FOO,
-    TypeChecking=Interface,
-] partial interface TestInterface3 {
-    [Conditional=BAR] static void voidMethodDocument(Document document, double d);
-};
diff --git a/bindings/tests/idls/core/TestSpecialOperations.idl b/bindings/tests/idls/core/TestSpecialOperations.idl
index 0f3c2de..73c7c13 100644
--- a/bindings/tests/idls/core/TestSpecialOperations.idl
+++ b/bindings/tests/idls/core/TestSpecialOperations.idl
@@ -5,8 +5,8 @@
 [
     OverrideBuiltins,
 ] interface TestSpecialOperations {
-    // [ImplementedAs], [TypeChecking=Interface], union return, nullability
+    // [ImplementedAs], union return, nullability
     // [OverrideBuiltins] affects named property operations
     [ImplementedAs=getItem] getter (Node or NodeList) namedItem(DOMString name);
-    [TypeChecking=Interface] setter Node (DOMString name, Node? value);
+    setter Node (DOMString name, Node? value);
 };
diff --git a/bindings/tests/idls/core/TestTypedefs.idl b/bindings/tests/idls/core/TestTypedefs.idl
index 996f1c1..9f3006e 100644
--- a/bindings/tests/idls/core/TestTypedefs.idl
+++ b/bindings/tests/idls/core/TestTypedefs.idl
@@ -48,6 +48,7 @@
 ] interface TestTypedefs {
     attribute ULongLong uLongLongAttribute;
     attribute T tAttribute;
+    attribute DOMStringOrDouble? domStringOrDoubleOrNullAttribute;
 
     void voidMethodArrayOfLongsArg(optional ArrayOfLongs arrayOfLongsArg);
 
diff --git a/bindings/tests/idls/modules/TestInterface5.idl b/bindings/tests/idls/modules/TestInterface5.idl
index d08b7cb..7179186 100644
--- a/bindings/tests/idls/modules/TestInterface5.idl
+++ b/bindings/tests/idls/modules/TestInterface5.idl
@@ -34,19 +34,16 @@
 enum TestEnumModules { "EnumModulesValue1", "EnumModulesValue2" };
 
 [
-    ActiveDOMObject,
-    Conditional=CONDITION,
+    DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterface5Implementation,
     RuntimeEnabled=FeatureName,
     SetWrapperReferenceTo(TestInterface5 referencedName),
-    TypeChecking=Interface,
     Exposed=(Worker,Window),
 ] interface TestInterface5 : TestInterfaceEmpty {
     // members needed to test [ImplementedAs], as this affect attribute
-    // configuration and method configuration, and [TypeChecking]
-    // constants also needed for [DoNotCheckConstants]
+    // configuration and method configuration
     const unsigned long UNSIGNED_LONG = 0;
     [Reflect=CONST_CPP] const short CONST_JAVASCRIPT = 1;
 
@@ -96,4 +93,3 @@
 
     iterable<any>;
 };
-
diff --git a/core/README b/core/README
deleted file mode 100644
index 630832e..0000000
--- a/core/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This directory contains a copy of WebKit/WebCore IDL files.
-See the attached LICENSE-* files in this directory.
-
-Please do not modify the files here.  They are periodically copied
-using the script: $DART_ROOT/sdk/lib/html/scripts/idlsync.py
-
-The current version corresponds to:
-URL: https://src.chromium.org/blink/branches/dart/2454_1
-Current revision: 202759
diff --git a/core/animation/Animation.idl b/core/animation/Animation.idl
index 76ef6bb..34099ba 100644
--- a/core/animation/Animation.idl
+++ b/core/animation/Animation.idl
@@ -33,7 +33,7 @@
 enum AnimationPlayState { "idle", "pending", "running", "paused", "finished" };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     NoInterfaceObject,
 ] interface Animation : EventTarget {
     // TODO(dstockwell): Add timeline property.
@@ -43,14 +43,13 @@
     [Measure] attribute double     playbackRate;
     [Measure] readonly attribute AnimationPlayState playState;
     [Measure, RaisesException] void finish();
-    [Measure] void play();
-    [Measure] void pause();
-    [Measure] void reverse();
-    [RuntimeEnabled=WebAnimationsAPI] attribute double startClip;
-    [RuntimeEnabled=WebAnimationsAPI] attribute double endClip;
-
+    [Measure, RaisesException] void play();
+    [Measure, RaisesException] void pause();
+    [Measure, RaisesException] void reverse();
+    [Measure] attribute DOMString id;
     [Measure] void cancel();
     [Measure] attribute EventHandler onfinish;
+    [Measure] attribute EventHandler oncancel;
     [RuntimeEnabled=WebAnimationsAPI, CallWith=ScriptState] readonly attribute Promise<Animation> finished;
     [RuntimeEnabled=WebAnimationsAPI, CallWith=ScriptState] readonly attribute Promise<Animation> ready;
 };
diff --git a/core/animation/AnimationEffectReadOnly.idl b/core/animation/AnimationEffectReadOnly.idl
index 06540d1..8011f9c 100644
--- a/core/animation/AnimationEffectReadOnly.idl
+++ b/core/animation/AnimationEffectReadOnly.idl
@@ -32,7 +32,7 @@
 
 [
     RuntimeEnabled=WebAnimationsAPI,
-    WillBeGarbageCollected,
+    GarbageCollected,
     ImplementedAs=AnimationEffect,
 ] interface AnimationEffectReadOnly {
     readonly attribute AnimationEffectTiming timing;
diff --git a/core/animation/AnimationEffectTiming.idl b/core/animation/AnimationEffectTiming.idl
index 59a395e..70d016f 100644
--- a/core/animation/AnimationEffectTiming.idl
+++ b/core/animation/AnimationEffectTiming.idl
@@ -7,7 +7,7 @@
 
 [
     RuntimeEnabled=WebAnimationsAPI,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface AnimationEffectTiming {
     attribute double delay;
     attribute double endDelay;
diff --git a/core/animation/AnimationTimeline.idl b/core/animation/AnimationTimeline.idl
index 81f4238..772b2e6 100644
--- a/core/animation/AnimationTimeline.idl
+++ b/core/animation/AnimationTimeline.idl
@@ -9,7 +9,7 @@
 
 [
     RuntimeEnabled=WebAnimationsAPI,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface AnimationTimeline {
     attribute double? currentTime;
     attribute double playbackRate;
diff --git a/core/animation/EffectModel.idl b/core/animation/EffectModel.idl
index 38c7185..6393414 100644
--- a/core/animation/EffectModel.idl
+++ b/core/animation/EffectModel.idl
@@ -10,6 +10,6 @@
 [
     RuntimeEnabled=WebAnimationsAPI,
     NoInterfaceObject,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface EffectModel {
 };
diff --git a/core/animation/ElementAnimation.idl b/core/animation/ElementAnimation.idl
index 7129e4d..a6ac513 100644
--- a/core/animation/ElementAnimation.idl
+++ b/core/animation/ElementAnimation.idl
@@ -37,8 +37,8 @@
 
 partial interface Element {
     // FIXME: Union types with dictionary type members doesn't work (yet).
-    // Animation animate((EffectModel or sequence<Dictionary>)? effect, optional (double or KeyframeEffectOptions) timing);
-    [Measure, RaisesException] Animation animate((EffectModel or sequence<Dictionary>)? effect, optional double timing);
-    [Measure, RaisesException] Animation animate((EffectModel or sequence<Dictionary>)? effect, KeyframeEffectOptions timing);
+    // Animation animate((EffectModel or sequence<Dictionary> or Dictionary)? effect, optional (double or KeyframeEffectOptions) timing);
+    [Measure, RaisesException] Animation animate((EffectModel or sequence<Dictionary> or Dictionary)? effect, optional double timing);
+    [Measure, RaisesException] Animation animate((EffectModel or sequence<Dictionary> or Dictionary)? effect, KeyframeEffectOptions timing);
     [RuntimeEnabled=WebAnimationsAPI] sequence<Animation> getAnimations();
 };
diff --git a/core/animation/KeyframeEffect.idl b/core/animation/KeyframeEffect.idl
index 0235507..5ec493d 100644
--- a/core/animation/KeyframeEffect.idl
+++ b/core/animation/KeyframeEffect.idl
@@ -32,10 +32,9 @@
 
 [
     // TODO(dstockwell): the third argument should be "optional (unrestricted double or KeyframeEffectOptions) timing".
-    Constructor(Element? target, sequence<Dictionary> keyframes, optional unrestricted double timing),
-    Constructor(Element? target, sequence<Dictionary> keyframes, KeyframeEffectOptions timing),
+    Constructor(Element? target, (EffectModel or sequence<Dictionary> or Dictionary)? effect, optional unrestricted double timing),
+    Constructor(Element? target, (EffectModel or sequence<Dictionary> or Dictionary)? effect, KeyframeEffectOptions timing),
     RaisesException=Constructor,
     RuntimeEnabled=WebAnimationsAPI,
-    TypeChecking=Interface,
 ] interface KeyframeEffect : AnimationEffectReadOnly {
 };
diff --git a/core/animation/KeyframeEffectOptions.idl b/core/animation/KeyframeEffectOptions.idl
index 9585948..fbf78ad 100644
--- a/core/animation/KeyframeEffectOptions.idl
+++ b/core/animation/KeyframeEffectOptions.idl
@@ -2,20 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://w3c.github.io/web-animations/#the-animationeffecttimingproperties-dictionary
+// https://w3c.github.io/web-animations/#the-keyframeeffectoptions-dictionary
 
-// TODO(dstockwell): Rename this to AnimationEffectTimingProperties.
+enum FillMode { "none", "forwards", "backwards", "both", "auto" };
+enum PlaybackDirection { "normal", "reverse", "alternate", "alternate-reverse" };
+
 dictionary KeyframeEffectOptions {
     double                             delay = 0;
     double                             endDelay = 0;
-    // TODO(dstockwell): The fill type should be FillMode.
-    DOMString                          fill = "auto";
+    FillMode                           fill = "auto";
     double                             iterationStart = 0.0;
     unrestricted double                iterations = 1.0;
     (unrestricted double or DOMString) duration = "auto";
     // TODO(dstockwell): There is no playbackRate member in the spec.
     double                             playbackRate = 1.0;
-    // TODO(dstockwell): The direction type should be PlaybackDirection.
-    DOMString                          direction = "normal";
+    PlaybackDirection                  direction = "normal";
     DOMString                          easing = "linear";
+    DOMString                          id = "";
 };
diff --git a/core/clipboard/DataTransfer.idl b/core/clipboard/DataTransfer.idl
index 3b5e1b4..5b22118 100644
--- a/core/clipboard/DataTransfer.idl
+++ b/core/clipboard/DataTransfer.idl
@@ -36,7 +36,7 @@
 
     [SameObject] readonly attribute DataTransferItemList items;
 
-    [RaisesException] void setDragImage(Element image, long x, long y);
+    void setDragImage(Element image, long x, long y);
 
     /* old interface */
     [SameObject] readonly attribute DOMString[] types;
diff --git a/core/clipboard/DataTransferItemList.idl b/core/clipboard/DataTransferItemList.idl
index 4349174..8a3e6c8 100644
--- a/core/clipboard/DataTransferItemList.idl
+++ b/core/clipboard/DataTransferItemList.idl
@@ -31,7 +31,6 @@
 // https://html.spec.whatwg.org/#the-datatransferitemlist-interface
 
 [
-    TypeChecking=Interface,
     GarbageCollected,
 ] interface DataTransferItemList {
     readonly attribute unsigned long length;
diff --git a/core/css/CSS.idl b/core/css/CSS.idl
index 7e5e2e0..185541c 100644
--- a/core/css/CSS.idl
+++ b/core/css/CSS.idl
@@ -35,4 +35,5 @@
 ] interface CSS {
     static boolean supports(DOMString property, DOMString value);
     static boolean supports(DOMString conditionText);
+    static DOMString escape(DOMString ident);
 };
diff --git a/core/css/CSSFontFaceRule.idl b/core/css/CSSFontFaceRule.idl
index 6d2ece7..cc71dcd 100644
--- a/core/css/CSSFontFaceRule.idl
+++ b/core/css/CSSFontFaceRule.idl
@@ -27,5 +27,5 @@
 // TODO(philipj): Implement the interface from CSS Fonts.
 
 interface CSSFontFaceRule : CSSRule {
-    readonly attribute CSSStyleDeclaration style;
+    [Measure] readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/css/CSSNamespaceRule.idl b/core/css/CSSNamespaceRule.idl
new file mode 100644
index 0000000..d48fc9a
--- /dev/null
+++ b/core/css/CSSNamespaceRule.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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-1/#the-cssnamespacerule-interface
+
+interface CSSNamespaceRule : CSSRule {
+
+    readonly attribute DOMString namespaceURI;
+    readonly attribute DOMString prefix;
+};
diff --git a/core/css/CSSRule.idl b/core/css/CSSRule.idl
index 894ef34..a064711 100644
--- a/core/css/CSSRule.idl
+++ b/core/css/CSSRule.idl
@@ -32,8 +32,7 @@
     const unsigned short PAGE_RULE = 6;
     // TODO(philipj): Implement CSSMarginRule.
     // const unsigned short MARGIN_RULE = 9;
-    // TODO(philipj): Implement CSSNamespaceRule. crbug.com/389549
-    // const unsigned short NAMESPACE_RULE = 10;
+    const unsigned short NAMESPACE_RULE = 10;
     readonly attribute unsigned short type;
     attribute DOMString cssText;
     readonly attribute CSSRule? parentRule;
diff --git a/core/css/CSSStyleDeclaration.idl b/core/css/CSSStyleDeclaration.idl
index 24fdfbb..b109bb0 100644
--- a/core/css/CSSStyleDeclaration.idl
+++ b/core/css/CSSStyleDeclaration.idl
@@ -24,22 +24,19 @@
     DependentLifetime,
     WillBeGarbageCollected
 ] interface CSSStyleDeclaration {
-    // TODO(philipj): cssText should not be nullable.
-    [RaisesException=Setter] attribute DOMString? cssText;
+    [RaisesException=Setter] attribute DOMString cssText;
     readonly attribute unsigned long length;
     getter DOMString item(unsigned long index);
-    // TODO(philipj): All DOMString? return types in this interface should be
-    // just DOMString (not nullable).
-    DOMString? getPropertyValue(DOMString property);
-    DOMString? getPropertyPriority(DOMString property);
+    DOMString getPropertyValue(DOMString property);
+    DOMString getPropertyPriority(DOMString property);
     // TODO(philipj): The value and priority arguments should have
     // [TreatNullAs=EmptyString] and should not be nullable.
     [RaisesException] void setProperty(DOMString property, DOMString? value, optional DOMString? priority = null);
     // void setPropertyValue(DOMString property, [TreatNullAs=EmptyString] DOMString value);
     // void setPropertyPriority(DOMString property, [TreatNullAs=EmptyString] DOMString priority);
-    [RaisesException] DOMString? removeProperty(DOMString property);
+    [RaisesException] DOMString removeProperty(DOMString property);
     readonly attribute CSSRule? parentRule;
-    // [TreatNullAs=EmptyString] attribute DOMString cssFloat;
+    [RaisesException=Setter, TreatNullAs=EmptyString] attribute DOMString cssFloat;
 
     // The camel-cased and dashed attribute getters have custom bindings.
     // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-camel-cased-attribute
diff --git a/core/css/CSSStyleRule.idl b/core/css/CSSStyleRule.idl
index c1b2908..52503b8 100644
--- a/core/css/CSSStyleRule.idl
+++ b/core/css/CSSStyleRule.idl
@@ -22,6 +22,5 @@
 
 interface CSSStyleRule : CSSRule {
     attribute DOMString selectorText;
-    // TODO(philipj): style should have [PutForwards=cssText].
-    [SameObject] readonly attribute CSSStyleDeclaration style;
+    [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/css/FontFace.idl b/core/css/FontFace.idl
index 37e45c4..527e800 100644
--- a/core/css/FontFace.idl
+++ b/core/css/FontFace.idl
@@ -39,10 +39,11 @@
 
 // TODO(philipj): This interface should be [Exposed=Window,Worker].
 [
-    ActiveDOMObject,
+    DependentLifetime,
     // FIXME: This should be (DOMString or BinaryData), where BinaryData is typedef of (ArrayBuffer or ArrayBufferView)
     Constructor(DOMString family, (DOMString or ArrayBuffer or ArrayBufferView) source, optional FontFaceDescriptors descriptors),
     ConstructorCallWith=ExecutionContext,
+    MeasureAs=FontFaceConstructor,
     WillBeGarbageCollected,
 ] interface FontFace {
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString family;
diff --git a/core/css/FontFaceSet.idl b/core/css/FontFaceSet.idl
index 50525e5..9f7480e 100644
--- a/core/css/FontFaceSet.idl
+++ b/core/css/FontFaceSet.idl
@@ -35,19 +35,12 @@
 // TODO(philipj): This interface should be [Exposed=Window,Worker] and should
 // have a constructor, and thus not have [NoInterfaceObject].
 [
-    ActiveDOMObject,
+    DependentLifetime,
     SetWrapperReferenceFrom=document,
     NoInterfaceObject,
 ] interface FontFaceSet : EventTarget {
-    // TODO(ksakamoto): Make FontFaceSet Set-like. crbug.com/392075
-    // setlike<FontFace>;
-    void forEach(FontFaceSetForEachCallback callback, optional any thisArg);
-    [RaisesException] boolean has(FontFace fontFace);
+    setlike<FontFace>;
     readonly attribute unsigned long size;
-    // TODO(philipj): add() should return the FontFaceSet.
-    [RaisesException] void add(FontFace fontFace);
-    [RaisesException, ImplementedAs=remove] boolean delete(FontFace fontFace);
-    void clear();
 
     // events for when loading state changes
     attribute EventHandler onloading;
diff --git a/core/css/FontFaceSetForEachCallback.idl b/core/css/FontFaceSetForEachCallback.idl
deleted file mode 100644
index ac6c771..0000000
--- a/core/css/FontFaceSetForEachCallback.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-// TODO(ksakamoto): Remove this interface when FontFaceSet is made Set-like.
-// crbug.com/392075
-callback interface FontFaceSetForEachCallback {
-    [CallWith=ThisValue] boolean handleItem(FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
-    boolean handleItem(FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
-};
diff --git a/core/css/MediaQueryList.idl b/core/css/MediaQueryList.idl
index 7c1a4af..f1906be 100644
--- a/core/css/MediaQueryList.idl
+++ b/core/css/MediaQueryList.idl
@@ -20,7 +20,7 @@
 // http://dev.w3.org/csswg/cssom-view/#the-mediaquerylist-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
 ] interface MediaQueryList : EventTarget {
     readonly attribute DOMString media;
     readonly attribute boolean matches;
diff --git a/core/css/WebKitCSSMatrix.idl b/core/css/WebKitCSSMatrix.idl
index b224c07..b43ec06 100644
--- a/core/css/WebKitCSSMatrix.idl
+++ b/core/css/WebKitCSSMatrix.idl
@@ -60,47 +60,46 @@
     [RaisesException] void setMatrixValue([Default=Undefined] optional DOMString string);
 
     // Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix)
-    [Immutable] WebKitCSSMatrix multiply([Default=Undefined] optional WebKitCSSMatrix secondMatrix);
+    [LegacyInterfaceTypeChecking] WebKitCSSMatrix multiply([Default=Undefined] optional WebKitCSSMatrix secondMatrix);
 
     // Return the inverse of this matrix. Throw an exception if the matrix is not invertible
-    [Immutable, RaisesException] WebKitCSSMatrix inverse();
+    [RaisesException] WebKitCSSMatrix inverse();
 
     // Return this matrix translated by the passed values.
     // Passing a NaN will use a value of 0. This allows the 3D form to used for 2D operations
-    [Immutable] WebKitCSSMatrix translate([Default=Undefined] optional unrestricted double x,
-                                          [Default=Undefined] optional unrestricted double y,
-                                          [Default=Undefined] optional unrestricted double z);
+    WebKitCSSMatrix translate([Default=Undefined] optional unrestricted double x,
+                              [Default=Undefined] optional unrestricted double y,
+                              [Default=Undefined] optional unrestricted double z);
 
     // Returns this matrix scaled by the passed values.
     // Passing scaleX or scaleZ as NaN uses a value of 1, but passing scaleY of NaN
     // makes it the same as scaleX. This allows the 3D form to used for 2D operations
-    [Immutable] WebKitCSSMatrix scale([Default=Undefined] optional unrestricted double scaleX,
-                                      [Default=Undefined] optional unrestricted double scaleY,
-                                      [Default=Undefined] optional unrestricted double scaleZ);
+    WebKitCSSMatrix scale([Default=Undefined] optional unrestricted double scaleX,
+                          [Default=Undefined] optional unrestricted double scaleY,
+                          [Default=Undefined] optional unrestricted double scaleZ);
 
     // Returns this matrix rotated by the passed values.
     // If rotY and rotZ are NaN, rotate about Z (rotX=0, rotateY=0, rotateZ=rotX).
     // Otherwise use a rotation value of 0 for any passed NaN.
-    [Immutable] WebKitCSSMatrix rotate([Default=Undefined] optional unrestricted double rotX,
-                                       [Default=Undefined] optional unrestricted double rotY,
-                                       [Default=Undefined] optional unrestricted double rotZ);
+    WebKitCSSMatrix rotate([Default=Undefined] optional unrestricted double rotX,
+                           [Default=Undefined] optional unrestricted double rotY,
+                           [Default=Undefined] optional unrestricted double rotZ);
 
     // Returns this matrix rotated about the passed axis by the passed angle.
     // Passing a NaN will use a value of 0. If the axis is (0,0,0) use a value
     // of (0,0,1).
-    [Immutable] WebKitCSSMatrix rotateAxisAngle([Default=Undefined] optional unrestricted double x,
-                                                [Default=Undefined] optional unrestricted double y,
-                                                [Default=Undefined] optional unrestricted double z,
-                                                [Default=Undefined] optional unrestricted double angle);
+    WebKitCSSMatrix rotateAxisAngle([Default=Undefined] optional unrestricted double x,
+                                    [Default=Undefined] optional unrestricted double y,
+                                    [Default=Undefined] optional unrestricted double z,
+                                    [Default=Undefined] optional unrestricted double angle);
 
     // Returns this matrix skewed along the X axis by the passed values.
     // Passing a NaN will use a value of 0.
-    [Immutable] WebKitCSSMatrix skewX([Default=Undefined] optional unrestricted double angle);
+    WebKitCSSMatrix skewX([Default=Undefined] optional unrestricted double angle);
 
     // Returns this matrix skewed along the Y axis by the passed values.
     // Passing a NaN will use a value of 0.
-    [Immutable] WebKitCSSMatrix skewY([Default=Undefined] optional unrestricted double angle);
+    WebKitCSSMatrix skewY([Default=Undefined] optional unrestricted double angle);
 
     [NotEnumerable] stringifier;
 };
-
diff --git a/core/css/cssom/CalcDictionary.idl b/core/css/cssom/CalcDictionary.idl
new file mode 100644
index 0000000..2f925c3
--- /dev/null
+++ b/core/css/cssom/CalcDictionary.idl
@@ -0,0 +1,17 @@
+dictionary CalcDictionary {
+  double? px = null;
+  double? percent = null;
+  double? em = null;
+  double? ex = null;
+  double? ch = null;
+  double? rem = null;
+  double? vw = null;
+  double? vh = null;
+  double? vmin = null;
+  double? vmax = null;
+  double? cm = null;
+  double? mm = null;
+  double? in = null;
+  double? pc = null;
+  double? pt = null;
+};
diff --git a/core/css/cssom/CalcLength.idl b/core/css/cssom/CalcLength.idl
new file mode 100644
index 0000000..79b2d2c
--- /dev/null
+++ b/core/css/cssom/CalcLength.idl
@@ -0,0 +1,23 @@
+[
+    Constructor(LengthValue length),
+    Constructor(CalcDictionary calcDictionary),
+    ImplementedAs=StyleCalcLength,
+    RaisesException=Constructor,
+    RuntimeEnabled=CSSTypedOM
+] interface CalcLength : LengthValue {
+    readonly attribute double? px;
+    readonly attribute double? percent;
+    readonly attribute double? em;
+    readonly attribute double? ex;
+    readonly attribute double? ch;
+    readonly attribute double? rem;
+    readonly attribute double? vw;
+    readonly attribute double? vh;
+    readonly attribute double? vmin;
+    readonly attribute double? vmax;
+    readonly attribute double? cm;
+    readonly attribute double? mm;
+    readonly attribute double? in;
+    readonly attribute double? pc;
+    readonly attribute double? pt;
+};
diff --git a/core/css/cssom/KeywordValue.idl b/core/css/cssom/KeywordValue.idl
new file mode 100644
index 0000000..8b7f660
--- /dev/null
+++ b/core/css/cssom/KeywordValue.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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.
+
+[
+    Constructor(DOMString keyword),
+    RuntimeEnabled=CSSTypedOM,
+    RaisesException=Constructor
+] interface KeywordValue : StyleValue {
+    readonly attribute DOMString keywordValue;
+};
diff --git a/core/css/cssom/LengthValue.idl b/core/css/cssom/LengthValue.idl
new file mode 100644
index 0000000..611425d
--- /dev/null
+++ b/core/css/cssom/LengthValue.idl
@@ -0,0 +1,20 @@
+// Copyright 2015 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 LengthType {
+    "px", "percent", "em", "ex", "ch", "rem", "vw", "vh", "vmin", "vmax", "cm", "mm", "in", "pc", "pt"
+};
+
+[
+    RuntimeEnabled=CSSTypedOM
+] interface LengthValue : StyleValue {
+    [RaisesException, NewObject] LengthValue add(LengthValue other);
+    [RaisesException, NewObject] LengthValue subtract(LengthValue other);
+    [RaisesException, NewObject] LengthValue multiply(double value);
+    [RaisesException, NewObject] LengthValue divide(double value);
+
+    [RaisesException, NewObject] static LengthValue parse(DOMString cssString);
+    [RaisesException, NewObject] static LengthValue fromValue(double value, LengthType type);
+    [RaisesException, NewObject] static LengthValue fromDictionary(CalcDictionary dictionary);
+};
diff --git a/core/css/cssom/Matrix.idl b/core/css/cssom/Matrix.idl
new file mode 100644
index 0000000..92b12a8
--- /dev/null
+++ b/core/css/cssom/Matrix.idl
@@ -0,0 +1,36 @@
+// Copyright 2016 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.
+
+[
+    Constructor(double a, double b, double c, double d, double e, double f),
+    Constructor(double m11, double m12, double m13, double m14,
+        double m21, double m22, double m23, double m24,
+        double m31, double m32, double m33, double m34,
+        double m41, double m42, double m43, double m44),
+    ImplementedAs=MatrixTransformComponent,
+    RuntimeEnabled=CSSTypedOM
+] interface Matrix : TransformComponent {
+    readonly attribute double a;
+    readonly attribute double b;
+    readonly attribute double c;
+    readonly attribute double d;
+    readonly attribute double e;
+    readonly attribute double f;
+    readonly attribute double m11;
+    readonly attribute double m12;
+    readonly attribute double m13;
+    readonly attribute double m14;
+    readonly attribute double m21;
+    readonly attribute double m22;
+    readonly attribute double m23;
+    readonly attribute double m24;
+    readonly attribute double m31;
+    readonly attribute double m32;
+    readonly attribute double m33;
+    readonly attribute double m34;
+    readonly attribute double m41;
+    readonly attribute double m42;
+    readonly attribute double m43;
+    readonly attribute double m44;
+};
diff --git a/core/css/cssom/NumberValue.idl b/core/css/cssom/NumberValue.idl
new file mode 100644
index 0000000..06bc109
--- /dev/null
+++ b/core/css/cssom/NumberValue.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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.
+
+[
+    Constructor(double value),
+    RuntimeEnabled=CSSTypedOM
+] interface NumberValue : StyleValue {
+    readonly attribute double value;
+};
diff --git a/core/css/cssom/Perspective.idl b/core/css/cssom/Perspective.idl
new file mode 100644
index 0000000..6baedaa
--- /dev/null
+++ b/core/css/cssom/Perspective.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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.
+
+[
+    Constructor(LengthValue length),
+    ImplementedAs=PerspectiveTransformComponent,
+    RuntimeEnabled=CSSTypedOM,
+    RaisesException=Constructor
+] interface Perspective : TransformComponent {
+    readonly attribute LengthValue length;
+};
diff --git a/core/css/cssom/PositionValue.idl b/core/css/cssom/PositionValue.idl
new file mode 100644
index 0000000..5e405ec
--- /dev/null
+++ b/core/css/cssom/PositionValue.idl
@@ -0,0 +1,11 @@
+// Copyright 2016 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.
+
+[
+    Constructor(LengthValue x, LengthValue y),
+    RuntimeEnabled=CSSTypedOM
+] interface PositionValue : StyleValue {
+    readonly attribute LengthValue x;
+    readonly attribute LengthValue y;
+};
diff --git a/core/css/cssom/Rotation.idl b/core/css/cssom/Rotation.idl
new file mode 100644
index 0000000..7a81cdb
--- /dev/null
+++ b/core/css/cssom/Rotation.idl
@@ -0,0 +1,15 @@
+// Copyright 2016 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.
+
+[
+    Constructor(double angle),
+    Constructor(double angle, double x, double y, double z),
+    ImplementedAs=RotationTransformComponent,
+    RuntimeEnabled=CSSTypedOM
+] interface Rotation : TransformComponent {
+    readonly attribute double angle;
+    readonly attribute double x;
+    readonly attribute double y;
+    readonly attribute double z;
+};
diff --git a/core/css/cssom/Scale.idl b/core/css/cssom/Scale.idl
new file mode 100644
index 0000000..22ec20d
--- /dev/null
+++ b/core/css/cssom/Scale.idl
@@ -0,0 +1,14 @@
+// Copyright 2016 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.
+
+[
+    Constructor(double x, double y),
+    Constructor(double x, double y, double z),
+    ImplementedAs=ScaleTransformComponent,
+    RuntimeEnabled=CSSTypedOM
+] interface Scale : TransformComponent {
+    readonly attribute double x;
+    readonly attribute double y;
+    readonly attribute double z;
+};
diff --git a/core/css/cssom/SimpleLength.idl b/core/css/cssom/SimpleLength.idl
new file mode 100644
index 0000000..07c0b49
--- /dev/null
+++ b/core/css/cssom/SimpleLength.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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.
+
+[
+    Constructor(double value, DOMString type),
+    RaisesException=Constructor,
+    RuntimeEnabled=CSSTypedOM
+] interface SimpleLength : LengthValue {
+    [EnforceRange] attribute double value;
+    [ImplementedAs=unit] readonly attribute LengthType type;
+};
diff --git a/core/css/cssom/Skew.idl b/core/css/cssom/Skew.idl
new file mode 100644
index 0000000..5755f2b
--- /dev/null
+++ b/core/css/cssom/Skew.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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.
+
+[
+    Constructor(double ax, double ay),
+    ImplementedAs=SkewTransformComponent,
+    RuntimeEnabled=CSSTypedOM
+] interface Skew : TransformComponent {
+    readonly attribute double ax;
+    readonly attribute double ay;
+};
diff --git a/core/css/cssom/StylePropertyMap.idl b/core/css/cssom/StylePropertyMap.idl
new file mode 100644
index 0000000..17d3945
--- /dev/null
+++ b/core/css/cssom/StylePropertyMap.idl
@@ -0,0 +1,17 @@
+// Copyright 2016 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=CSSTypedOM,
+    GarbageCollected
+] interface StylePropertyMap {
+    [RaisesException] void append(DOMString property, (StyleValue or sequence<StyleValue> or DOMString) value);
+    [RaisesException, ImplementedAs=remove] void delete(DOMString property);
+    StyleValue? get(DOMString property);
+    sequence<StyleValue> getAll(DOMString property);
+    boolean has(DOMString property);
+    [RaisesException] void set(DOMString property, (StyleValue or sequence<StyleValue> or DOMString) value);
+    iterable<DOMString, (StyleValue or sequence<StyleValue>)>;
+    sequence<DOMString> getProperties();
+};
diff --git a/core/css/cssom/StyleValue.idl b/core/css/cssom/StyleValue.idl
new file mode 100644
index 0000000..85b809d
--- /dev/null
+++ b/core/css/cssom/StyleValue.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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=CSSTypedOM,
+    GarbageCollected
+] interface StyleValue {
+    readonly attribute DOMString cssString;
+    // static (StyleValue or sequence<StyleValue>)? parse(DOMString property, DOMString cssText);
+    [CallWith=ScriptState] static object? parse(DOMString property, DOMString cssText);
+};
diff --git a/core/css/cssom/TransformComponent.idl b/core/css/cssom/TransformComponent.idl
new file mode 100644
index 0000000..f8da462
--- /dev/null
+++ b/core/css/cssom/TransformComponent.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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=CSSTypedOM,
+    GarbageCollected
+] interface TransformComponent {
+    readonly attribute DOMString cssString;
+    boolean is2DComponent();
+    [NewObject] Matrix asMatrix();
+};
diff --git a/core/css/cssom/TransformValue.idl b/core/css/cssom/TransformValue.idl
new file mode 100644
index 0000000..2168f5f
--- /dev/null
+++ b/core/css/cssom/TransformValue.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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.
+
+[
+    Constructor(),
+    Constructor(sequence<TransformComponent> transformComponents),
+    RuntimeEnabled=CSSTypedOM
+] interface TransformValue : StyleValue {
+    iterable<TransformComponent>;
+    boolean is2D();
+};
diff --git a/core/css/cssom/Translation.idl b/core/css/cssom/Translation.idl
new file mode 100644
index 0000000..464b7cd
--- /dev/null
+++ b/core/css/cssom/Translation.idl
@@ -0,0 +1,15 @@
+// Copyright 2016 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.
+
+[
+    Constructor(LengthValue x, LengthValue y),
+    Constructor(LengthValue x, LengthValue y, LengthValue z),
+    ImplementedAs=TranslationTransformComponent,
+    RaisesException=Constructor,
+    RuntimeEnabled=CSSTypedOM
+] interface Translation : TransformComponent {
+    readonly attribute LengthValue x;
+    readonly attribute LengthValue y;
+    readonly attribute LengthValue z;
+};
diff --git a/core/dom/ChildNode.idl b/core/dom/ChildNode.idl
index 0b0168e..8c2f9f3 100644
--- a/core/dom/ChildNode.idl
+++ b/core/dom/ChildNode.idl
@@ -26,8 +26,9 @@
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface ChildNode {
-    [Unscopeable, RaisesException, CustomElementCallbacks, RuntimeEnabled=DOMConvenienceAPI] void before((Node or DOMString) ... nodes);
-    [Unscopeable, RaisesException, CustomElementCallbacks, RuntimeEnabled=DOMConvenienceAPI] void after((Node or DOMString)... nodes);
-    [Unscopeable, RaisesException, CustomElementCallbacks, RuntimeEnabled=DOMConvenienceAPI] void replaceWith((Node or DOMString)... nodes);
-    [Unscopeable, RaisesException, CustomElementCallbacks] void remove();
+    // [Unscopeable] void before((Node or DOMString)... nodes);
+    // [Unscopeable] void after((Node or DOMString)... nodes);
+    // [Unscopeable] void replaceWith((Node or DOMString)... nodes);
+    // TODO(philipj): remove() should be [Unscopeable]. crbug.com/462916
+    [RaisesException, CustomElementCallbacks] void remove();
 };
diff --git a/core/dom/DOMException.idl b/core/dom/DOMException.idl
index c4e8919..a2f4571 100644
--- a/core/dom/DOMException.idl
+++ b/core/dom/DOMException.idl
@@ -26,7 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// Web IDL exceptions are defined in prose rather than IDL.
+// http://heycam.github.io/webidl/#idl-exceptions
+// http://heycam.github.io/webidl/#es-DOMException
+
 [
+    Constructor(optional DOMString message = "", optional DOMString name = "Error"),
     Exposed=(Window,Worker),
     DoNotCheckConstants,
     GarbageCollected,
@@ -77,4 +82,3 @@
     const unsigned short      INVALID_NODE_TYPE_ERR          = 24;
     const unsigned short      DATA_CLONE_ERR                 = 25;
 };
-
diff --git a/core/dom/DOMImplementation.idl b/core/dom/DOMImplementation.idl
index 6ed29bb..b058f29 100644
--- a/core/dom/DOMImplementation.idl
+++ b/core/dom/DOMImplementation.idl
@@ -22,7 +22,6 @@
 
 [
     SetWrapperReferenceFrom=document,
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface DOMImplementation {
     [NewObject, RaisesException] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
diff --git a/core/dom/DOMSettableTokenList.idl b/core/dom/DOMSettableTokenList.idl
deleted file mode 100644
index b62d903..0000000
--- a/core/dom/DOMSettableTokenList.idl
+++ /dev/null
@@ -1,32 +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:
- * 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 INC. AND ITS 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 APPLE INC. OR ITS 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.
- */
-
-// https://dom.spec.whatwg.org/#interface-domsettabletokenlist
-
-interface DOMSettableTokenList : DOMTokenList {
-    attribute DOMString value;
-
-    // FIXME: This getter is not in the spec.
-    [ImplementedAs=item] getter DOMString? (unsigned long index);
-};
diff --git a/core/dom/DOMTokenList.idl b/core/dom/DOMTokenList.idl
index 1293203..e49a183 100644
--- a/core/dom/DOMTokenList.idl
+++ b/core/dom/DOMTokenList.idl
@@ -34,7 +34,13 @@
     [RaisesException, CustomElementCallbacks] void add(DOMString... tokens);
     [RaisesException, CustomElementCallbacks] void remove(DOMString... tokens);
     [RaisesException, CustomElementCallbacks] boolean toggle(DOMString token, optional boolean force);
+    [RaisesException, CustomElementCallbacks] boolean supports(DOMString token);
+    attribute DOMString value;
     // FIXME: stringifier should be enumerable.
     [NotEnumerable] stringifier;
     iterable<DOMString>;
+
+
+    // FIXME: This getter is not in the spec.
+    [ImplementedAs=item] getter DOMString? (unsigned long index);
 };
diff --git a/core/dom/DataView.idl b/core/dom/DataView.idl
index 3e957df..876a0a8 100644
--- a/core/dom/DataView.idl
+++ b/core/dom/DataView.idl
@@ -27,6 +27,5 @@
 
 [
     ImplementedAs=DOMDataView,
-    TypeChecking=Interface,
 ] interface DataView : ArrayBufferView {
 };
diff --git a/core/dom/Document.idl b/core/dom/Document.idl
index 5b4d664..aafcdaf 100644
--- a/core/dom/Document.idl
+++ b/core/dom/Document.idl
@@ -35,10 +35,12 @@
     // FIXME: documentURI should not be nullable.
     [ImplementedAs=url] readonly attribute DOMString? documentURI;
     readonly attribute DOMString origin;
+    [RuntimeEnabled=suborigins] readonly attribute DOMString suborigin;
     readonly attribute DOMString compatMode;
 
     readonly attribute DOMString characterSet;
-    [MeasureAs=DocumentInputEncoding, ImplementedAs=characterSet] readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
+    [ImplementedAs=characterSet] readonly attribute DOMString charset; // legacy alias of .characterSet
+    [ImplementedAs=characterSet] readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
     readonly attribute DOMString contentType;
 
     readonly attribute DocumentType? doctype;
@@ -54,19 +56,19 @@
     [NewObject] Comment createComment(DOMString data);
     [NewObject, RaisesException] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
 
-    [NewObject, CustomElementCallbacks, RaisesException, TypeChecking=Interface] Node importNode(Node node, optional boolean deep = false);
-    [RaisesException, CustomElementCallbacks, TypeChecking=Interface] Node adoptNode(Node node);
+    [NewObject, CustomElementCallbacks, RaisesException] Node importNode(Node node, optional boolean deep = false);
+    [RaisesException, CustomElementCallbacks] Node adoptNode(Node node);
 
     [NewObject, RaisesException, MeasureAs=DocumentCreateAttribute] Attr createAttribute(DOMString localName);
     [NewObject, RaisesException, MeasureAs=DocumentCreateAttributeNS] Attr createAttributeNS(DOMString? namespaceURI, DOMString qualifiedName);
 
-    [NewObject, RaisesException] Event createEvent(DOMString eventType);
+    [NewObject, RaisesException, CallWith=ExecutionContext] Event createEvent(DOMString eventType);
 
     [NewObject] Range createRange();
 
     // NodeFilter.SHOW_ALL = 0xFFFFFFFF
-    [NewObject, RaisesException, TypeChecking=Interface] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
-    [NewObject, RaisesException, TypeChecking=Interface] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+    [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+    [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
 
     // FIXME: CDATASection has been removed from the spec. crbug.com/437205
     [RaisesException, MeasureAs=DocumentCreateCDATASection] CDATASection createCDATASection(DOMString data);
@@ -80,19 +82,23 @@
     // https://html.spec.whatwg.org/#the-document-object
 
     // resource metadata management
+
+    // Inheritance of [Unforgeable] attributes is not supported.  So we have to
+    // define the same unforgeable attributes in derived interfaces as well.
+    // See that HTMLDocument and XMLDocument redefine 'location' attribute.
+    // Keep all the definitions consistent.
+    // TODO(yukishiino): Support inheritance of attributes defined on instance.
     [PutForwards=href, Unforgeable] readonly attribute Location? location;
     [RaisesException=Setter] attribute DOMString domain;
     readonly attribute DOMString referrer;
-    // FIXME: cookie should not have [TreatNullAs=NullString].
-    [TreatNullAs=NullString, RaisesException] attribute DOMString cookie;
+    [RaisesException] attribute DOMString cookie;
     readonly attribute DOMString lastModified;
     readonly attribute DocumentReadyState readyState;
 
     // DOM tree accessors
-    // FIXME: title and dir should not have [TreatNullAs=NullString].
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString title;
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString dir;
-    [RaisesException=Setter, CustomElementCallbacks, PerWorldBindings, TypeChecking=Interface] attribute HTMLElement? body;
+    [CustomElementCallbacks] attribute DOMString title;
+    [CustomElementCallbacks] attribute DOMString dir;
+    [RaisesException=Setter, CustomElementCallbacks, PerWorldBindings] attribute HTMLElement? body;
     readonly attribute HTMLHeadElement? head;
     [SameObject] readonly attribute HTMLCollection images;
     [SameObject] readonly attribute HTMLCollection embeds;
@@ -107,15 +113,14 @@
     // FIXME: There are two open() methods in the spec.
     [Custom, CustomElementCallbacks, RaisesException] void open();
     [RaisesException] void close();
-    [CallWith=ActiveWindow, CustomElementCallbacks, RaisesException] void write(DOMString... text);
-    [CallWith=ActiveWindow, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
+    [CallWith=FirstWindow, CustomElementCallbacks, RaisesException] void write(DOMString... text);
+    [CallWith=FirstWindow, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
 
     // user interaction
     [ImplementedAs=domWindow] readonly attribute Window? defaultView;
     readonly attribute Element? activeElement;
     boolean hasFocus();
-    // FIXME: designMode should not have [TreatNullAs=NullString].
-    [TreatNullAs=NullString, CustomElementCallbacks, MeasureAs=DocumentDesignMode] attribute DOMString designMode;
+    [CustomElementCallbacks, MeasureAs=DocumentDesignMode] attribute DOMString designMode;
     [CustomElementCallbacks, RaisesException] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
     [RaisesException] boolean queryCommandEnabled(DOMString commandId);
     [RaisesException] boolean queryCommandIndeterm(DOMString commandId);
@@ -162,25 +167,19 @@
     // Touch Events
     // http://rawgit.com/w3c/touch-events/v1-errata/touchevents.html#extensions-to-the-document-interface
     // FIXME: The arguments should not be optional.
-    [RuntimeEnabled=Touch, Measure] Touch createTouch([Default=Undefined] optional Window window,
-                                                      [Default=Undefined] optional EventTarget target,
-                                                      [Default=Undefined] optional long identifier,
-                                                      [Default=Undefined] optional unrestricted double pageX,
-                                                      [Default=Undefined] optional unrestricted double pageY,
-                                                      [Default=Undefined] optional unrestricted double screenX,
-                                                      [Default=Undefined] optional unrestricted double screenY,
-                                                      [Default=Undefined] optional unrestricted double radiusX,
-                                                      [Default=Undefined] optional unrestricted double radiusY,
-                                                      [Default=Undefined] optional unrestricted float rotationAngle,
-                                                      [Default=Undefined] optional unrestricted float force);
+    [RuntimeEnabled=Touch, Measure, LegacyInterfaceTypeChecking] Touch createTouch([Default=Undefined] optional Window window,
+                                                                                   [Default=Undefined] optional EventTarget target,
+                                                                                   [Default=Undefined] optional long identifier,
+                                                                                   [Default=Undefined] optional unrestricted double pageX,
+                                                                                   [Default=Undefined] optional unrestricted double pageY,
+                                                                                   [Default=Undefined] optional unrestricted double screenX,
+                                                                                   [Default=Undefined] optional unrestricted double screenY,
+                                                                                   [Default=Undefined] optional unrestricted double radiusX,
+                                                                                   [Default=Undefined] optional unrestricted double radiusY,
+                                                                                   [Default=Undefined] optional unrestricted float rotationAngle,
+                                                                                   [Default=Undefined] optional unrestricted float force);
     [RuntimeEnabled=Touch] TouchList createTouchList(Touch... touches);
 
-    // FIXME: The spec doesn't define these event handler attributes.
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchcancel;
-
     // Custom Elements
     // http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register
     // FIXME: The registerElement return type should be Function.
@@ -196,10 +195,7 @@
     readonly attribute VisibilityState visibilityState;
 
     // Non-standard APIs
-    [MeasureAs=DocumentCharset] readonly attribute DOMString charset;
-    [MeasureAs=DocumentDefaultCharset, TreatReturnedNullStringAs=Undefined] readonly attribute DOMString defaultCharset;
     [MeasureAs=DocumentCaretRangeFromPoint] Range caretRangeFromPoint([Default=Undefined] optional long x, [Default=Undefined] optional long y);
-    [CallWith=ScriptState, DeprecateAs=DocumentGetCSSCanvasContext] any getCSSCanvasContext(DOMString contextId, DOMString name, long width, long height);
 
     // Deprecated prefixed page visibility API.
     // TODO(davidben): This is a property so attaching a deprecation warning results in false positives when outputting
diff --git a/core/dom/Element.idl b/core/dom/Element.idl
index 2d0574c..a516e09 100644
--- a/core/dom/Element.idl
+++ b/core/dom/Element.idl
@@ -18,11 +18,14 @@
  * Boston, MA 02110-1301, USA.
  */
 
+// See
+// https://docs.google.com/document/d/1VnvAqeWFG9JFZfgG5evBqrLGDZYRE5w6G5jEDORekPY
+// for details.
+enum NativeScrollBehavior { "disable-native-scroll", "perform-before-native-scroll", "perform-after-native-scroll" };
+
 // https://dom.spec.whatwg.org/#interface-element
 
-[
-    TypeChecking=Interface,
-] interface Element : Node {
+interface Element : Node {
     readonly attribute DOMString? namespaceURI;
     readonly attribute DOMString? prefix;
     readonly attribute DOMString localName;
@@ -30,7 +33,7 @@
 
     [Reflect] attribute DOMString id;
     [Reflect=class] attribute DOMString className;
-    [SameObject, PerWorldBindings] readonly attribute DOMTokenList classList;
+    [SameObject, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList classList;
 
     [MeasureAs=HasAttributes] boolean hasAttributes();
     [SameObject, PerWorldBindings, ImplementedAs=attributesForBindings] readonly attribute NamedNodeMap attributes;
@@ -65,9 +68,11 @@
     // Shadow DOM
     // http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-element-interface
     [RaisesException, CallWith=ScriptState, MeasureAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot();
-    [RuntimeEnabled=CreateShadowRootWithParameter, RaisesException, CallWith=ScriptState, MeasureAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot(ShadowRootInit shadowRootInitDict);
+    [RuntimeEnabled=ShadowDOMV1, RaisesException, CallWith=ScriptState, MeasureAs=ElementAttachShadow] ShadowRoot attachShadow(ShadowRootInit shadowRootInitDict);
     NodeList getDestinationInsertionPoints();
-    [PerWorldBindings] readonly attribute ShadowRoot? shadowRoot;
+    [PerWorldBindings, ImplementedAs=openShadowRoot] readonly attribute ShadowRoot? shadowRoot;
+    [RuntimeEnabled=ShadowDOMV1, Reflect] attribute DOMString slot;
+    [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot;
 
     // Pointer Lock
     // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-element-interface
@@ -95,13 +100,10 @@
     readonly attribute long clientLeft;
     readonly attribute long clientWidth;
     readonly attribute long clientHeight;
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-htmlelement-interface
-    // FIXME: offset* should only be on HTMLElement.
-    [MeasureAs=ElementOffsetParent, PerWorldBindings] readonly attribute Element? offsetParent;
-    [MeasureAs=ElementOffsetTop] readonly attribute long offsetTop;
-    [MeasureAs=ElementOffsetLeft] readonly attribute long offsetLeft;
-    [MeasureAs=ElementOffsetWidth] readonly attribute long offsetWidth;
-    [MeasureAs=ElementOffsetHeight] readonly attribute long offsetHeight;
+
+    // Scroll Customization API. See crbug.com/410974 for details.
+    [RuntimeEnabled=ScrollCustomization] void setApplyScroll(ScrollStateCallback scrollStateCallback, NativeScrollBehavior nativeScrollBehavior);
+    [RuntimeEnabled=ScrollCustomization] void setDistributeScroll(ScrollStateCallback scrollStateCallback, NativeScrollBehavior nativeScrollBehavior);
 
     // Non-standard APIs
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=19962
@@ -123,10 +125,6 @@
     attribute EventHandler onpaste;
     attribute EventHandler onsearch;
     attribute EventHandler onselectstart;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchcancel;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
     attribute EventHandler onwheel;
 };
 
diff --git a/core/dom/FrameRequestCallback.idl b/core/dom/FrameRequestCallback.idl
index b65b637..ddf7cda 100644
--- a/core/dom/FrameRequestCallback.idl
+++ b/core/dom/FrameRequestCallback.idl
@@ -28,6 +28,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// TODO(philipj): FrameRequestCallback should not be a callback interface.
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=28152
 callback interface FrameRequestCallback {
     // highResTime is passed as high resolution timestamp, see
     // http://www.w3.org/TR/hr-time/ for details.
diff --git a/core/dom/GlobalEventHandlers.idl b/core/dom/GlobalEventHandlers.idl
index 685f349..5366bd8 100644
--- a/core/dom/GlobalEventHandlers.idl
+++ b/core/dom/GlobalEventHandlers.idl
@@ -80,14 +80,6 @@
     attribute EventHandler onpause;
     attribute EventHandler onplay;
     attribute EventHandler onplaying;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointercancel;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerdown;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerenter;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerleave;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointermove;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerout;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerover;
-    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerup;
     attribute EventHandler onprogress;
     attribute EventHandler onratechange;
     attribute EventHandler onreset;
@@ -105,4 +97,22 @@
     attribute EventHandler ontoggle;
     attribute EventHandler onvolumechange;
     attribute EventHandler onwaiting;
+
+    // Pointer Events
+    // https://w3c.github.io/pointerevents/#extensions-to-the-globaleventhandlers-interface
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerdown;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointermove;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerup;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointercancel;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerover;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerout;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerenter;
+    [RuntimeEnabled=PointerEvent] attribute EventHandler onpointerleave;
+
+    // Touch Events
+    // https://w3c.github.io/touch-events/#extensions-to-the-globaleventhandlers-interface
+    [RuntimeEnabled=Touch] attribute EventHandler ontouchcancel;
+    [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
+    [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
+    [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
 };
diff --git a/core/dom/IdleDeadline.idl b/core/dom/IdleDeadline.idl
new file mode 100644
index 0000000..1550789
--- /dev/null
+++ b/core/dom/IdleDeadline.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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,
+  RuntimeEnabled=RequestIdleCallback,
+] interface IdleDeadline {
+    double timeRemaining();
+    readonly attribute boolean didTimeout;
+};
diff --git a/core/dom/IdleRequestCallback.idl b/core/dom/IdleRequestCallback.idl
new file mode 100644
index 0000000..b4cda7e
--- /dev/null
+++ b/core/dom/IdleRequestCallback.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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,
+  RuntimeEnabled=RequestIdleCallback,
+] callback interface IdleRequestCallback {
+    void handleEvent(IdleDeadline deadline);
+};
diff --git a/modules/background_sync/SyncRegistrationOptions.idl b/core/dom/IdleRequestOptions.idl
similarity index 63%
copy from modules/background_sync/SyncRegistrationOptions.idl
copy to core/dom/IdleRequestOptions.idl
index 6e1abbc..cd89101 100644
--- a/modules/background_sync/SyncRegistrationOptions.idl
+++ b/core/dom/IdleRequestOptions.idl
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    RuntimeEnabled=BackgroundSyncV2,
-] dictionary SyncRegistrationOptions {
-    DOMString tag;
+dictionary IdleRequestOptions {
+    unsigned long timeout = 0;
 };
diff --git a/core/dom/IntersectionObserver.idl b/core/dom/IntersectionObserver.idl
new file mode 100644
index 0000000..eb6122b
--- /dev/null
+++ b/core/dom/IntersectionObserver.idl
@@ -0,0 +1,23 @@
+// Copyright 2016 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.
+
+// TODO(szager): add link to final spec.
+callback IntersectionObserverCallback = void (sequence<IntersectionObserverEntry> entries, IntersectionObserver observer);
+
+// TODO(szager): Update the doc link when the spec has an official home.
+// https://github.com/slightlyoff/IntersectionObserver
+[
+    CustomConstructor(IntersectionObserverCallback callback, IntersectionObserverInit options),
+    Custom=VisitDOMWrapper,
+    GarbageCollected,
+    RuntimeEnabled=IntersectionObserver,
+] interface IntersectionObserver {
+    [RaisesException] void observe(Element target);
+    [RaisesException] void unobserve(Element target);
+    void disconnect();
+    sequence<IntersectionObserverEntry> takeRecords();
+    readonly attribute Element? root;
+    readonly attribute DOMString rootMargin;
+    readonly attribute double[] thresholds;
+};
diff --git a/core/dom/IntersectionObserverEntry.idl b/core/dom/IntersectionObserverEntry.idl
new file mode 100644
index 0000000..14d7268
--- /dev/null
+++ b/core/dom/IntersectionObserverEntry.idl
@@ -0,0 +1,16 @@
+// Copyright 2016 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://github.com/slightlyoff/IntersectionObserver
+
+[
+    GarbageCollected,
+    RuntimeEnabled=IntersectionObserver,
+] interface IntersectionObserverEntry {
+    readonly attribute ClientRect boundingClientRect;
+    readonly attribute ClientRect intersectionRect;
+    readonly attribute ClientRect? rootBounds;
+    readonly attribute Element target;
+    readonly attribute DOMHighResTimeStamp time;
+};
diff --git a/core/dom/IntersectionObserverInit.idl b/core/dom/IntersectionObserverInit.idl
new file mode 100644
index 0000000..f333646
--- /dev/null
+++ b/core/dom/IntersectionObserverInit.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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.
+
+// TODO(szager): link to final spec
+
+[
+    RuntimeEnabled=IntersectionObserver
+] dictionary IntersectionObserverInit {
+    Element? root;
+    DOMString rootMargin;
+    (double or double[]) threshold = 0;
+};
diff --git a/core/dom/MessagePort.idl b/core/dom/MessagePort.idl
index 3c21c03..895e05e 100644
--- a/core/dom/MessagePort.idl
+++ b/core/dom/MessagePort.idl
@@ -28,7 +28,7 @@
 // https://html.spec.whatwg.org/#message-ports
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Exposed=(Window,Worker),
     GarbageCollected,
 ] interface MessagePort : EventTarget {
diff --git a/core/dom/MutationObserverInit.idl b/core/dom/MutationObserverInit.idl
index a9f9724..9ff5be4 100644
--- a/core/dom/MutationObserverInit.idl
+++ b/core/dom/MutationObserverInit.idl
@@ -2,7 +2,7 @@
 // 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
+// Spec: https://dom.spec.whatwg.org/#interface-mutationobserver
 
 dictionary MutationObserverInit {
     boolean childList = false;
diff --git a/core/dom/NamedNodeMap.idl b/core/dom/NamedNodeMap.idl
index 65a1cf3..b5af211 100644
--- a/core/dom/NamedNodeMap.idl
+++ b/core/dom/NamedNodeMap.idl
@@ -22,7 +22,6 @@
 
 [
     SetWrapperReferenceFrom=element,
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface NamedNodeMap {
     readonly attribute unsigned long length;
diff --git a/core/dom/Node.idl b/core/dom/Node.idl
index 9c3e3a5..d3271a4 100644
--- a/core/dom/Node.idl
+++ b/core/dom/Node.idl
@@ -22,7 +22,6 @@
 
 [
     DependentLifetime,
-    TypeChecking=Interface,
 ] interface Node : EventTarget {
     const unsigned short ELEMENT_NODE = 1;
     // FIXME: Attr should not inherit from Node. crbug.com/305105
@@ -38,7 +37,7 @@
     const unsigned short DOCUMENT_TYPE_NODE = 10;
     const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
     const unsigned short NOTATION_NODE = 12; // historical
-    readonly attribute unsigned short nodeType;
+    [ImplementedAs=getNodeType] readonly attribute unsigned short nodeType;
     readonly attribute DOMString nodeName;
 
     readonly attribute DOMString? baseURI;
@@ -52,14 +51,14 @@
     [PerWorldBindings] readonly attribute Node? lastChild;
     [PerWorldBindings] readonly attribute Node? previousSibling;
     [PerWorldBindings] readonly attribute Node? nextSibling;
+    [RuntimeEnabled=ShadowDOMV1, MeasureAs=NodeTreeRoot] readonly attribute Node treeRoot;
 
     [CustomElementCallbacks] attribute DOMString? nodeValue;
     // FIXME: textContent should not have [TreatUndefinedAs=NullString].
     [TreatUndefinedAs=NullString, CustomElementCallbacks] attribute DOMString? textContent;
     [CustomElementCallbacks] void normalize();
 
-    // FIXME: The deep argument should have a default value false.
-    [NewObject, CustomElementCallbacks] Node cloneNode(optional boolean deep);
+    [NewObject, CustomElementCallbacks] Node cloneNode(optional boolean deep = false);
     boolean isEqualNode(Node? node);
 
     const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
@@ -80,11 +79,7 @@
     [CustomElementCallbacks, PerWorldBindings, RaisesException] Node replaceChild(Node node, Node child);
     [CustomElementCallbacks, RaisesException] Node removeChild(Node child);
 
-    // FIXME: namespaceURI and localName have been moved to Element and Attr.
-    [MeasureAs=NodeNamespaceURI] readonly attribute DOMString? namespaceURI;
-    [MeasureAs=NodeLocalName] readonly attribute DOMString? localName;
-
     // FIXME: isSameNode has been removed from the spec:
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27424
-    [MeasureAs=NodeIsSameNode] boolean isSameNode(Node? other);
+    [MeasureAs=NodeIsSameNode, ImplementedAs=isSameNodeDeprecated] boolean isSameNode(Node? other);
 };
diff --git a/core/dom/NodeFilter.idl b/core/dom/NodeFilter.idl
index 3fe66ea..bcb5557 100644
--- a/core/dom/NodeFilter.idl
+++ b/core/dom/NodeFilter.idl
@@ -46,5 +46,5 @@
     const unsigned long SHOW_NOTATION = 0x800; // historical
 
     // FIXME: The node argument should not be optional.
-    [RaisesException] unsigned short acceptNode([Default=Undefined] optional Node node);
+    [RaisesException, LegacyInterfaceTypeChecking] unsigned short acceptNode([Default=Undefined] optional Node node);
 };
diff --git a/core/dom/NodeIterator.idl b/core/dom/NodeIterator.idl
index e7e60da..4262b7a 100644
--- a/core/dom/NodeIterator.idl
+++ b/core/dom/NodeIterator.idl
@@ -33,5 +33,5 @@
     [RaisesException] Node? nextNode();
     [RaisesException] Node? previousNode();
 
-    [DeprecateAs=NodeIteratorDetach] void detach();
+    [MeasureAs=NodeIteratorDetach] void detach();
 };
diff --git a/core/dom/NodeList.idl b/core/dom/NodeList.idl
index 5e549ca..0d85493 100644
--- a/core/dom/NodeList.idl
+++ b/core/dom/NodeList.idl
@@ -27,5 +27,5 @@
 ] interface NodeList {
     getter Node? item(unsigned long index);
     readonly attribute unsigned long length;
-    // FIXME: iterable<Node>;
+    [RuntimeEnabled=IterableCollections] iterable<Node>;
 };
diff --git a/core/dom/ParentNode.idl b/core/dom/ParentNode.idl
index 0f722e8..e660f6c 100644
--- a/core/dom/ParentNode.idl
+++ b/core/dom/ParentNode.idl
@@ -39,8 +39,8 @@
     [PerWorldBindings] readonly attribute Element? lastElementChild;
     readonly attribute unsigned long childElementCount;
 
-    [Unscopeable, RaisesException, CustomElementCallbacks, RuntimeEnabled=DOMConvenienceAPI] void prepend((Node or DOMString)... nodes);
-    [Unscopeable, RaisesException, CustomElementCallbacks, RuntimeEnabled=DOMConvenienceAPI] void append((Node or DOMString)... nodes);
+    // [Unscopeable] void prepend((Node or DOMString)... nodes);
+    // [Unscopeable] void append((Node or DOMString)... nodes);
 
     // [Unscopeable] Element? query(DOMString relativeSelectors);
     // [NewObject, Unscopeable] Elements queryAll(DOMString relativeSelectors);
diff --git a/core/dom/Range.idl b/core/dom/Range.idl
index 5452b45..88a4a36 100644
--- a/core/dom/Range.idl
+++ b/core/dom/Range.idl
@@ -25,7 +25,6 @@
     Constructor,
     ConstructorCallWith=Document,
     WillBeGarbageCollected,
-    TypeChecking=Interface,
 ] interface Range {
     readonly attribute Node startContainer;
     readonly attribute long startOffset;
@@ -57,7 +56,7 @@
     [RaisesException, CustomElementCallbacks] void surroundContents(Node newParent);
 
     [NewObject] Range cloneRange();
-    [DeprecateAs=RangeDetach] void detach();
+    [MeasureAs=RangeDetach] void detach();
 
     [RaisesException] boolean isPointInRange(Node node, long offset);
     [RaisesException] short comparePoint(Node node, long offset);
diff --git a/core/dom/SharedArrayBuffer.idl b/core/dom/SharedArrayBuffer.idl
index 21bb64b..9ba56d5 100644
--- a/core/dom/SharedArrayBuffer.idl
+++ b/core/dom/SharedArrayBuffer.idl
@@ -2,9 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// Draft spec:
-// https://docs.google.com/document/d/1NDGA_gZJ7M7w1Bh8S0AoDyEqwDdRh4uSoTPSNn77PFk
-
+// Draft spec: https://github.com/lars-t-hansen/ecmascript_sharedmem
 [
     ImplementedAs=DOMSharedArrayBuffer,
     NoInterfaceObject,
diff --git a/core/dom/Text.idl b/core/dom/Text.idl
index 1d733b9..f970d49 100644
--- a/core/dom/Text.idl
+++ b/core/dom/Text.idl
@@ -29,4 +29,5 @@
     // Shadow DOM
     // http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-text-interface
     NodeList getDestinationInsertionPoints();
+    [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot;
 };
diff --git a/core/dom/Touch.idl b/core/dom/Touch.idl
index 72bc53c..a48a023 100644
--- a/core/dom/Touch.idl
+++ b/core/dom/Touch.idl
@@ -23,9 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://rawgit.com/w3c/touch-events/v1-errata/touchevents.html#touch-interface
+// https://w3c.github.io/touch-events/#touch-interface
 
 [
+    Constructor(TouchInit initDict),
+    ConstructorCallWith=Document,
     WillBeGarbageCollected,
 ] interface Touch {
     readonly attribute long identifier;
@@ -36,17 +38,8 @@
     readonly attribute double clientY;
     readonly attribute double pageX;
     readonly attribute double pageY;
-
-    // Touch Events Extensions
-    // http://rawgit.com/w3c/touch-events/master/touchevents.html#touch-interface
     readonly attribute float radiusX;
     readonly attribute float radiusY;
     readonly attribute float rotationAngle;
     readonly attribute float force;
-
-    // Non-standard APIs
-    [DeprecateAs=PrefixedTouchRadiusX, ImplementedAs=radiusX] readonly attribute float webkitRadiusX;
-    [DeprecateAs=PrefixedTouchRadiusY, ImplementedAs=radiusY] readonly attribute float webkitRadiusY;
-    [DeprecateAs=PrefixedTouchRotationAngle, ImplementedAs=rotationAngle] readonly attribute float webkitRotationAngle;
-    [DeprecateAs=PrefixedTouchForce, ImplementedAs=force] readonly attribute float webkitForce;
 };
diff --git a/core/dom/TouchInit.idl b/core/dom/TouchInit.idl
new file mode 100644
index 0000000..ba733b6
--- /dev/null
+++ b/core/dom/TouchInit.idl
@@ -0,0 +1,20 @@
+// Copyright 2015 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://w3c.github.io/touch-events/#touch-interface
+
+dictionary TouchInit {
+    required long        identifier;
+    required EventTarget target;
+             double      clientX = 0;
+             double      clientY = 0;
+             double      screenX = 0;
+             double      screenY = 0;
+             double      pageX = 0;
+             double      pageY = 0;
+             float       radiusX = 0;
+             float       radiusY = 0;
+             float       rotationAngle = 0;
+             float       force = 0;
+};
diff --git a/core/dom/TouchList.idl b/core/dom/TouchList.idl
index a0bd263..ea7d013 100644
--- a/core/dom/TouchList.idl
+++ b/core/dom/TouchList.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/touch-events/#touchlist-interface
+// https://w3c.github.io/touch-events/#touchlist-interface
 
 [
     WillBeGarbageCollected,
diff --git a/core/dom/TreeWalker.idl b/core/dom/TreeWalker.idl
index 6cfa8a3..4fa1298 100644
--- a/core/dom/TreeWalker.idl
+++ b/core/dom/TreeWalker.idl
@@ -27,7 +27,7 @@
     [SameObject] readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
     readonly attribute NodeFilter? filter;
-    [RaisesException=Setter] attribute Node currentNode;
+    attribute Node currentNode;
 
     [RaisesException] Node? parentNode();
     [RaisesException] Node? firstChild();
diff --git a/core/dom/URL.idl b/core/dom/URL.idl
index 8bd9527..f5df0bb 100644
--- a/core/dom/URL.idl
+++ b/core/dom/URL.idl
@@ -27,11 +27,7 @@
 // https://url.spec.whatwg.org/#url
 
 [
-    // TODO(philipj): There should only be one constructor:
-    // Constructor(USVString url, optional USVString base)
-    Constructor(USVString url),
-    Constructor(USVString url, USVString base),
-    Constructor(USVString url, URL base),
+    Constructor(USVString url, optional USVString base),
     Exposed=(Window,Worker),
     ImplementedAs=DOMURL,
     RaisesException=Constructor,
@@ -45,8 +41,8 @@
     // TODO(philipj): This should be in a partial interface definition:
     // File API
     // https://w3c.github.io/FileAPI/#creating-revoking
-    // TODO(philipj): Neither the return value nor the argument should be nullable.
-    [RaisesException, CallWith=ExecutionContext] static DOMString? createObjectURL(Blob? blob);
+    // TODO(philipj): The return type should not be nullable.
+    [RaisesException, CallWith=ExecutionContext] static DOMString? createObjectURL(Blob blob);
     [CallWith=ExecutionContext] static void revokeObjectURL(DOMString url);
 };
 
diff --git a/core/dom/URLSearchParams.idl b/core/dom/URLSearchParams.idl
new file mode 100644
index 0000000..409542c
--- /dev/null
+++ b/core/dom/URLSearchParams.idl
@@ -0,0 +1,21 @@
+// Copyright 2015 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://url.spec.whatwg.org/#interface-urlsearchparams
+
+[
+    Constructor(optional (USVString or URLSearchParams) init = ""),
+    GarbageCollected,
+    Exposed=(Window,Worker)
+] interface URLSearchParams {
+    void append(USVString name, USVString value);
+    [ImplementedAs=deleteAllWithName] void delete(USVString name);
+    USVString? get(USVString name);
+    sequence<USVString> getAll(USVString name);
+    boolean has(USVString name);
+    void set(USVString name, USVString value);
+    
+    iterable<USVString, USVString>;
+    stringifier;
+};
diff --git a/core/dom/shadow/ShadowRoot.idl b/core/dom/shadow/ShadowRoot.idl
index cfb06f2..f783a41 100644
--- a/core/dom/shadow/ShadowRoot.idl
+++ b/core/dom/shadow/ShadowRoot.idl
@@ -42,5 +42,5 @@
     // interface. Here, it's used to implement "Invoking the cloneNode() method
     // on a ShadowRoot instance must always throw a DATA_CLONE_ERR exception" as
     // Node.cloneNode() does not have [RaisesException].
-    [RaisesException] Node cloneNode([Default=Undefined] optional boolean deep);
+    [RaisesException] Node cloneNode(optional boolean deep = false);
 };
diff --git a/core/dom/shadow/ShadowRootInit.idl b/core/dom/shadow/ShadowRootInit.idl
index a2a97dc..69321e7 100644
--- a/core/dom/shadow/ShadowRootInit.idl
+++ b/core/dom/shadow/ShadowRootInit.idl
@@ -7,6 +7,6 @@
 enum ShadowRootMode { "open", "closed" };
 
 dictionary ShadowRootInit {
-    ShadowRootMode mode;
+    required ShadowRootMode mode;
     [RuntimeEnabled=ShadowRootDelegatesFocus] boolean delegatesFocus;
 };
diff --git a/core/editing/Selection.idl b/core/editing/Selection.idl
index a7ad07b..51c2879 100644
--- a/core/editing/Selection.idl
+++ b/core/editing/Selection.idl
@@ -30,42 +30,44 @@
 // http://w3c.github.io/selection-api/#idl-def-Selection
 
 // TODO(yoichio): All long types should be unsigned long. crbug.com/391673
+// TODO(philipj): No arguments are optional in the spec, but some should be:
+// https://github.com/w3c/selection-api/issues/30
 [
     ImplementedAs=DOMSelection,
     WillBeGarbageCollected,
 ] interface Selection {
-    readonly attribute Node? anchorNode;
-    readonly attribute long anchorOffset;
-    readonly attribute Node? focusNode;
-    readonly attribute long focusOffset;
-    readonly attribute boolean isCollapsed;
-    readonly attribute long rangeCount;
-    [RaisesException] Range getRangeAt(long index);
-    void addRange(Range range);
+    [MeasureAs=SelectionAnchorNode] readonly attribute Node? anchorNode;
+    [MeasureAs=SelectionAnchorOffset] readonly attribute long anchorOffset;
+    [MeasureAs=SelectionFocusNode] readonly attribute Node? focusNode;
+    [MeasureAs=SelectionFocusOffset] readonly attribute long focusOffset;
+    [MeasureAs=SelectionIsCollapsed] readonly attribute boolean isCollapsed;
+    [MeasureAs=SelectionRangeCount] readonly attribute long rangeCount;
+    [MeasureAs=SelectionType] readonly attribute DOMString type;
+    [MeasureAs=SelectionGetRangeAt, RaisesException] Range getRangeAt(long index);
+    [MeasureAs=SelectionAddRange] void addRange(Range range);
     // TODO(yoichio): Implement removeRange. crbug.com/391673
     //void removeRange(Range range);
-    void removeAllRanges();
-    // TODO(yoichio): The node argument should not be nullable. crbug.com/391673
-    // TODO(philipj): The offset argument should not have a default value.
-    [RaisesException] void collapse(Node? node, optional long offset = 0);
-    [RaisesException] void collapseToStart();
-    [RaisesException] void collapseToEnd();
-    // TODO(philipj): The offset argument should not have a default value.
-    [RaisesException, TypeChecking=Interface] void extend(Node node, optional long offset = 0);
+    [MeasureAs=SelectionRemoveAllRanges] void removeAllRanges();
+    [MeasureAs=SelectionEmpty] void empty();
+    [MeasureAs=SelectionCollapse, RaisesException, LegacyInterfaceTypeChecking] void collapse(Node? node, optional long offset = 0);
+    [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException, LegacyInterfaceTypeChecking] void setPosition(Node? node, optional long offset = 0);
+    [MeasureAs=SelectionCollapseToStart, RaisesException] void collapseToStart();
+    [MeasureAs=SelectionCollapseToEnd, RaisesException] void collapseToEnd();
+    [MeasureAs=SelectionExtend, RaisesException] void extend(Node node, optional long offset = 0);
     // TODO(philipj): The arguments should be anchorNode, anchorOffset,
-    // focusNode and focusOffset, and none of them should be optional.
-    [MeasureAs=SelectionSetBaseAndExtent, RaisesException] void setBaseAndExtent([Default=Undefined] optional Node baseNode,
-                                                                                 [Default=Undefined] optional long baseOffset,
-                                                                                 [Default=Undefined] optional Node extentNode,
-                                                                                 [Default=Undefined] optional long extentOffset);
-    [RaisesException, TypeChecking=Interface] void selectAllChildren(Node node);
-    [CustomElementCallbacks] void deleteFromDocument();
-    // TODO(philipj): The arguments should not be optional.
-    [MeasureAs=SelectionContainsNode] boolean containsNode([Default=Undefined] optional Node node, [Default=Undefined] optional boolean allowPartialContainment);
+    // focusNode and focusOffset, and none of them are optional or nullable in
+    // the spec.
+    [MeasureAs=SelectionSetBaseAndExtent, RaisesException, LegacyInterfaceTypeChecking] void setBaseAndExtent([Default=Undefined] optional Node? baseNode,
+                                                                                                              [Default=Undefined] optional long baseOffset,
+                                                                                                              [Default=Undefined] optional Node? extentNode,
+                                                                                                              [Default=Undefined] optional long extentOffset);
+    [MeasureAs=SelectionSelectAllChildren, RaisesException] void selectAllChildren(Node node);
+    [MeasureAs=SelectionDeleteDromDocument, CustomElementCallbacks] void deleteFromDocument();
+    [MeasureAs=SelectionContainsNode] boolean containsNode(Node node, optional boolean allowPartialContainment = false);
     // TODO(philipj): The spec does not use [NotEnumerable]. See also:
     // https://codereview.chromium.org/345983004/
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=26179
-    [NotEnumerable] stringifier DOMString ();
+    [MeasureAs=SelectionDOMString, NotEnumerable] stringifier DOMString();
 
     // Non-standard APIs
 
@@ -75,17 +77,8 @@
     [MeasureAs=SelectionExtentNode] readonly attribute Node? extentNode;
     [MeasureAs=SelectionExtentOffset] readonly attribute long extentOffset;
 
-    // https://github.com/w3c/selection-api/issues/14
-    [MeasureAs=SelectionType] readonly attribute DOMString type;
-
-    // https://github.com/w3c/selection-api/issues/36
-    [MeasureAs=SelectionEmpty] void empty();
-
     // https://github.com/w3c/selection-api/issues/37
     [MeasureAs=SelectionModify] void modify([Default=Undefined] optional DOMString alter,
                                             [Default=Undefined] optional DOMString direction,
                                             [Default=Undefined] optional DOMString granularity);
-
-    // https://github.com/w3c/selection-api/issues/38
-    [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException] void setPosition(Node? node, optional long offset = 0);
 };
diff --git a/core/events/AnimationPlayerEvent.idl b/core/events/AnimationPlayerEvent.idl
index bfd724a..291567a 100644
--- a/core/events/AnimationPlayerEvent.idl
+++ b/core/events/AnimationPlayerEvent.idl
@@ -11,6 +11,6 @@
     Constructor(DOMString type, optional AnimationPlayerEventInit eventInitDict),
     RuntimeEnabled=WebAnimationsAPI,
 ] interface AnimationPlayerEvent : Event {
-    readonly attribute double currentTime;
+    readonly attribute double? currentTime;
     readonly attribute double timelineTime;
 };
diff --git a/core/events/CustomEvent.idl b/core/events/CustomEvent.idl
index 4d4cb08..ca1e27f 100644
--- a/core/events/CustomEvent.idl
+++ b/core/events/CustomEvent.idl
@@ -26,14 +26,12 @@
 // https://dom.spec.whatwg.org/#interface-customevent
 
 [
-    Constructor(DOMString type, optional CustomEventInit eventInitDict),
+    // TODO(bashi): Don't use CustomConstructor. Constructor should be:
+    // Constructor(DOMString type, optional CustomEventInit eventInitDict),
+    CustomConstructor,
     Exposed=(Window,Worker),
 ] interface CustomEvent : Event {
     [Custom=Getter] readonly attribute any detail;
 
-    // FIXME: initCustomEvent()'s arguments should not be optional.
-    [Custom, Measure] void initCustomEvent([Default=Undefined] optional DOMString type,
-                                           [Default=Undefined] optional boolean bubbles,
-                                           [Default=Undefined] optional boolean cancelable,
-                                           [Default=Undefined] optional any detail);
+    [Measure,Custom=(CallEpilogue)] void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
 };
diff --git a/core/events/DragEvent.idl b/core/events/DragEvent.idl
new file mode 100644
index 0000000..04047e2
--- /dev/null
+++ b/core/events/DragEvent.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://html.spec.whatwg.org/multipage/interaction.html#dragevent
+
+[
+    Constructor(DOMString type, optional DragEventInit eventInitDict),
+] interface DragEvent : MouseEvent {
+    readonly attribute DataTransfer dataTransfer;
+};
diff --git a/core/events/DragEventInit.idl b/core/events/DragEventInit.idl
new file mode 100644
index 0000000..3b90386
--- /dev/null
+++ b/core/events/DragEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://html.spec.whatwg.org/multipage/interaction.html#drageventinit
+
+dictionary DragEventInit : MouseEventInit {
+    DataTransfer? dataTransfer;
+};
diff --git a/core/events/Event.idl b/core/events/Event.idl
index 0a40ba6..e2f5a1c 100644
--- a/core/events/Event.idl
+++ b/core/events/Event.idl
@@ -43,9 +43,20 @@
     void preventDefault();
     readonly attribute boolean defaultPrevented;
 
-    // FIXME: Implement the isTrusted attribute. crbug.com/334015
-    // [Unforgeable] readonly attribute boolean isTrusted;
-    readonly attribute DOMTimeStamp timeStamp;
+    [RuntimeEnabled=ShadowDOMV1, MeasureAs=EventScoped] readonly attribute boolean scoped;
+
+    [RuntimeEnabled=TrustedEvents, Unforgeable] readonly attribute boolean isTrusted;
+
+    // TODO(majidvp): At the moment the actual return value type can either
+    // be: 
+    //  - DOMTimeStamp (i.e. long long): legacy type
+    //  - DOMHighResTimeStamp (i.e. double):  HighResEventTimeStamp REF is 
+    //    enabled 
+    // Below IDL definition uses DOMHighResTimeStamp because all DOMTimeStamp
+    // values can be represented in double type without any loss of precision.
+    // Once the feature is enabled by default the return value type will always
+    // match the definition here.
+    [CallWith=ScriptState] readonly attribute DOMHighResTimeStamp timeStamp;
 
     // FIXME: initEvent()'s arguments should not be optional.
     [Measure] void initEvent([Default=Undefined] optional DOMString type,
@@ -55,6 +66,7 @@
     // Shadow DOM
     // https://w3c.github.io/webcomponents/spec/shadow/#extensions-to-event-interface
     [MeasureAs=EventPath, CallWith=ScriptState] readonly attribute EventTarget[] path;
+    [RuntimeEnabled=ShadowDOMV1, MeasureAs=EventDeepPath, CallWith=ScriptState] sequence<EventTarget> deepPath();
 
     // Non-standard APIs
     const unsigned short MOUSEDOWN = 1;
diff --git a/core/events/EventInit.idl b/core/events/EventInit.idl
index f94cf4e..0ddc8ca 100644
--- a/core/events/EventInit.idl
+++ b/core/events/EventInit.idl
@@ -7,4 +7,5 @@
 dictionary EventInit {
     boolean bubbles = false;
     boolean cancelable = false;
+    [RuntimeEnabled=ShadowDOMV1] boolean scoped = false;
 };
diff --git a/core/events/EventListener.idl b/core/events/EventListener.idl
index 3f601bd..2823f16 100644
--- a/core/events/EventListener.idl
+++ b/core/events/EventListener.idl
@@ -20,6 +20,8 @@
 
 // https://dom.spec.whatwg.org/#callbackdef-eventlistener
 
-callback interface EventListener {
+[
+    WillBeGarbageCollected
+] callback interface EventListener {
     void handleEvent(Event event);
 };
diff --git a/core/events/EventListenerOptions.idl b/core/events/EventListenerOptions.idl
new file mode 100644
index 0000000..f670de3
--- /dev/null
+++ b/core/events/EventListenerOptions.idl
@@ -0,0 +1,15 @@
+// Copyright 2015 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://github.com/RByers/EventListenerOptions
+
+dictionary EventListenerOptions {
+    // TODO: |capture| is runtime enabled and its value actually
+    // changes whether the feature is enabled or not. Setting
+    // it to a default value here prevents the ability of checking
+    // whether it was set manually or by default. See EventTarget.cpp
+    // where it is populated. crbug.com/543685
+    [RuntimeEnabled=EventListenerOptions] boolean capture;
+    [RuntimeEnabled=PassiveEventListeners] boolean passive;
+};
diff --git a/core/events/EventModifierInit.idl b/core/events/EventModifierInit.idl
index 7c28e78..44caeb1 100644
--- a/core/events/EventModifierInit.idl
+++ b/core/events/EventModifierInit.idl
@@ -9,5 +9,12 @@
     boolean shiftKey = false;
     boolean altKey = false;
     boolean metaKey = false;
+    boolean modifierAltGraph = false;
+    boolean modifierCapsLock = false;
+    boolean modifierFn = false;
+    boolean modifierNumLock = false;
+    boolean modifierOS = false;
+    boolean modifierScrollLock = false;
+    boolean modifierSymbol = false;
     // FIXME: Add modifierXXX members when needed.
 };
diff --git a/core/events/EventTarget.idl b/core/events/EventTarget.idl
index 3a37d19..b17db3f 100644
--- a/core/events/EventTarget.idl
+++ b/core/events/EventTarget.idl
@@ -21,14 +21,11 @@
 // https://dom.spec.whatwg.org/#interface-eventtarget
 
 [
-    CheckSecurity=Window,
+    CheckSecurity=Receiver,
     WillBeGarbageCollected,
     Exposed=(Window,Worker)
 ] interface EventTarget {
-    // FIXME: first 2 args should be required, but throwing TypeError breaks
-    // legacy content.  http://crbug.com/353484
-    // FIXME: type should not be nullable.
-    [Custom=(CallPrologue,CallEpilogue)] void addEventListener(optional DOMString? type = null, optional EventListener? listener = null, optional boolean capture = false);
-    [Custom=(CallPrologue,CallEpilogue)] void removeEventListener(optional DOMString? type = null, optional EventListener? listener = null, optional boolean capture = false);
-    [RaisesException] boolean dispatchEvent(Event event);
+    [Custom] void addEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options);
+    [Custom] void removeEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options);
+    [ImplementedAs=dispatchEventForBindings, RaisesException] boolean dispatchEvent(Event event);
 };
diff --git a/core/events/HashChangeEvent.idl b/core/events/HashChangeEvent.idl
index 663fd57..40d4ec3 100644
--- a/core/events/HashChangeEvent.idl
+++ b/core/events/HashChangeEvent.idl
@@ -25,12 +25,4 @@
 ] interface HashChangeEvent : Event {
     readonly attribute DOMString oldURL;
     readonly attribute DOMString newURL;
-
-    // TODO(philipj): initHashChangeEvent() has been removed from the spec:
-    // https://html5.org/r/6551
-    [Measure] void initHashChangeEvent([Default=Undefined] optional DOMString type,
-                                       [Default=Undefined] optional boolean canBubble,
-                                       [Default=Undefined] optional boolean cancelable,
-                                       [Default=Undefined] optional DOMString oldURL,
-                                       [Default=Undefined] optional DOMString newURL);
 };
diff --git a/core/events/InputEvent.idl b/core/events/InputEvent.idl
new file mode 100644
index 0000000..cc1d595
--- /dev/null
+++ b/core/events/InputEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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://w3c.github.io/editing/input-events.html
+
+[
+    Constructor(DOMString type, optional InputEventInit eventInitDict),
+    RuntimeEnabled=InputEvent,
+] interface InputEvent : UIEvent {
+    // TODO(chongz): Add 'inputType', 'data', 'isComposing' and 'targetRanges'
+};
diff --git a/core/events/InputEventInit.idl b/core/events/InputEventInit.idl
new file mode 100644
index 0000000..6b2d07d
--- /dev/null
+++ b/core/events/InputEventInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2016 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://w3c.github.io/editing/input-events.html
+
+[
+    RuntimeEnabled=InputEvent,
+] dictionary InputEventInit : UIEventInit {
+    // TODO(chongz): Add 'inputType', 'data', 'isComposing' and 'targetRanges'
+};
diff --git a/core/events/KeyboardEvent.idl b/core/events/KeyboardEvent.idl
index a83b365..15990ac 100644
--- a/core/events/KeyboardEvent.idl
+++ b/core/events/KeyboardEvent.idl
@@ -45,7 +45,7 @@
     [CallWith=ScriptState, Measure] void initKeyboardEvent([Default=Undefined] optional DOMString type,
                                                            [Default=Undefined] optional boolean bubbles,
                                                            [Default=Undefined] optional boolean cancelable,
-                                                           [Default=Undefined] optional Window view,
+                                                           [Default=Undefined] optional Window? view,
                                                            [Default=Undefined] optional DOMString keyIdentifier,
                                                            [Default=Undefined] optional unsigned long location,
                                                            [Default=Undefined] optional boolean ctrlKey,
@@ -60,5 +60,4 @@
 
     // Non-standard APIs
     [Measure] readonly attribute DOMString keyIdentifier;
-    [ImplementedAs=location, DeprecateAs=KeyboardEventKeyLocation] readonly attribute unsigned long keyLocation;
 };
diff --git a/core/events/KeyboardEventInit.idl b/core/events/KeyboardEventInit.idl
index 80a6007..d45a16d 100644
--- a/core/events/KeyboardEventInit.idl
+++ b/core/events/KeyboardEventInit.idl
@@ -5,13 +5,12 @@
 // https://w3c.github.io/uievents/#idl-def-KeyboardEventInit
 
 dictionary KeyboardEventInit : EventModifierInit {
-    // TODO(philipj): DOMString key = "";
-    // TODO(philipj): DOMString code = "";
+    [RuntimeEnabled=KeyboardEventKey] DOMString key = "";
+    [RuntimeEnabled=KeyboardEventCode] DOMString code = "";
     unsigned long location = 0;
     boolean repeat = false;
     // TODO(philipj): boolean isComposing = false;
 
     // Non-standard APIs
     DOMString keyIdentifier = "";
-    [ImplementedAs=location, DeprecateAs=KeyboardEventKeyLocation] unsigned long keyLocation = 0;
 };
diff --git a/core/events/MessageEvent.idl b/core/events/MessageEvent.idl
index 588a939..536ba1f 100644
--- a/core/events/MessageEvent.idl
+++ b/core/events/MessageEvent.idl
@@ -38,6 +38,7 @@
     // TODO(bashi): |source| should be (WindowProxy or MessagePort)?
     readonly attribute EventTarget? source;
     readonly attribute MessagePort[]? ports;
+    [RuntimeEnabled=suborigins] readonly attribute DOMString suborigin;
 
     // TODO(philipj): None of the initMessageEvent() arguments should be
     // optional, and |sourceArg| and |portsArg| are of the wrong type.
diff --git a/core/events/MouseEvent.idl b/core/events/MouseEvent.idl
index fbdeaa3..0f4eab1 100644
--- a/core/events/MouseEvent.idl
+++ b/core/events/MouseEvent.idl
@@ -34,7 +34,7 @@
     readonly attribute short            button;
     readonly attribute unsigned short   buttons;
     readonly attribute EventTarget?     relatedTarget;
-    // TODO(philipj): boolean getModifierState(DOMString keyArg);
+    boolean getModifierState(DOMString keyArg);
 
     // https://w3c.github.io/uievents/#idl-interface-MouseEvent-initializers
     // TODO(philipj): None of the initMouseEvent() arguments should be optional.
@@ -74,11 +74,6 @@
     [MeasureAs=MouseEventFromElement] readonly attribute Node fromElement;
     [MeasureAs=MouseEventToElement] readonly attribute Node toElement;
     [MeasureAs=MouseEventWhich] readonly attribute long which;
-    [DeprecateAs=PrefixedMouseEventMovementX, ImplementedAs=movementX] readonly attribute long webkitMovementX;
-    [DeprecateAs=PrefixedMouseEventMovementY, ImplementedAs=movementY] readonly attribute long webkitMovementY;
     [Measure] readonly attribute long layerX;
     [Measure] readonly attribute long layerY;
-
-    // FIXME: dataTransfer belongs on the DragEvent interface. crbug.com/498504
-    readonly attribute DataTransfer dataTransfer;
 };
diff --git a/core/events/MutationEvent.idl b/core/events/MutationEvent.idl
index 03ef830..d3607a4 100644
--- a/core/events/MutationEvent.idl
+++ b/core/events/MutationEvent.idl
@@ -34,7 +34,7 @@
     [Measure] void initMutationEvent([Default=Undefined] optional DOMString type,
                                      [Default=Undefined] optional boolean bubbles,
                                      [Default=Undefined] optional boolean cancelable,
-                                     [Default=Undefined] optional Node relatedNode,
+                                     [Default=Undefined] optional Node? relatedNode,
                                      [Default=Undefined] optional DOMString prevValue,
                                      [Default=Undefined] optional DOMString newValue,
                                      [Default=Undefined] optional DOMString attrName,
diff --git a/core/events/ProgressEvent.idl b/core/events/ProgressEvent.idl
index 5ff7270..5062dea 100644
--- a/core/events/ProgressEvent.idl
+++ b/core/events/ProgressEvent.idl
@@ -25,10 +25,9 @@
 
 // https://xhr.spec.whatwg.org/#interface-progressevent
 
-// TODO(philipj): The spec has Exposed=(Window,Worker)
-// https://github.com/whatwg/xhr/issues/19
 [
     Constructor(DOMString type, optional ProgressEventInit eventInitDict),
+    Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface ProgressEvent : Event {
     readonly attribute boolean lengthComputable;
     readonly attribute unsigned long long loaded;
diff --git a/core/events/PromiseRejectionEvent.idl b/core/events/PromiseRejectionEvent.idl
index 85ebeec..6cb2adf 100644
--- a/core/events/PromiseRejectionEvent.idl
+++ b/core/events/PromiseRejectionEvent.idl
@@ -7,10 +7,10 @@
 [
     RuntimeEnabled=PromiseRejectionEvent,
     Custom=VisitDOMWrapper,
-    Constructor(DOMString type, optional PromiseRejectionEventInit eventInitDict),
+    Constructor(DOMString type, PromiseRejectionEventInit eventInitDict),
     ConstructorCallWith=ScriptState,
-    Exposed=(Window,Worker,ServiceWorker),
+    Exposed=(Window,Worker),
 ] interface PromiseRejectionEvent : Event {
-    [Custom=Getter] readonly attribute Promise<any>? promise;
+    [Custom=Getter] readonly attribute Promise<any> promise;
     [CallWith=ScriptState] readonly attribute any reason;
 };
diff --git a/core/events/PromiseRejectionEventInit.idl b/core/events/PromiseRejectionEventInit.idl
index cf6b3ba..caa0e7e 100644
--- a/core/events/PromiseRejectionEventInit.idl
+++ b/core/events/PromiseRejectionEventInit.idl
@@ -7,6 +7,6 @@
 [
     RuntimeEnabled=PromiseRejectionEvent,
 ] dictionary PromiseRejectionEventInit : EventInit {
-    Promise<any> promise;
+    required Promise<any> promise;
     any reason;
 };
diff --git a/core/events/SecurityPolicyViolationEvent.idl b/core/events/SecurityPolicyViolationEvent.idl
index f3984a5..2ae1dbf 100644
--- a/core/events/SecurityPolicyViolationEvent.idl
+++ b/core/events/SecurityPolicyViolationEvent.idl
@@ -36,8 +36,7 @@
     readonly attribute DOMString effectiveDirective;
     readonly attribute DOMString originalPolicy;
     readonly attribute DOMString sourceFile;
-    // FIXME: The spec says "statusCode" is a DOMString.
-    [Measure] readonly attribute long      statusCode;
+    [Measure] readonly attribute unsigned short statusCode;
     readonly attribute long      lineNumber;
     readonly attribute long      columnNumber;
 };
diff --git a/core/events/SecurityPolicyViolationEventInit.idl b/core/events/SecurityPolicyViolationEventInit.idl
index 32ce1ba..77d3db3 100644
--- a/core/events/SecurityPolicyViolationEventInit.idl
+++ b/core/events/SecurityPolicyViolationEventInit.idl
@@ -14,8 +14,7 @@
     DOMString effectiveDirective;
     DOMString originalPolicy;
     DOMString sourceFile;
-    // FIXME: The spec says "statusCode" is a DOMString.
-    long      statusCode;
+    unsigned short statusCode;
     long      lineNumber;
     long      columnNumber;
 };
diff --git a/core/events/TextEvent.idl b/core/events/TextEvent.idl
index 96ffbce..b49c98f 100644
--- a/core/events/TextEvent.idl
+++ b/core/events/TextEvent.idl
@@ -34,10 +34,10 @@
 
     [Measure] readonly attribute DOMString data;
 
-    [Measure] void initTextEvent([Default=Undefined] optional DOMString typeArg,
-                                 [Default=Undefined] optional boolean canBubbleArg,
-                                 [Default=Undefined] optional boolean cancelableArg,
-                                 [Default=Undefined] optional Window viewArg,
-                                 [Default=Undefined] optional DOMString dataArg);
+    [Measure] void initTextEvent([Default=Undefined] optional DOMString type,
+                                 [Default=Undefined] optional boolean bubbles,
+                                 [Default=Undefined] optional boolean cancelable,
+                                 [Default=Undefined] optional Window? view,
+                                 [Default=Undefined] optional DOMString data);
 
 };
diff --git a/core/events/TouchEvent.idl b/core/events/TouchEvent.idl
index d4c3b2c..42e234d 100644
--- a/core/events/TouchEvent.idl
+++ b/core/events/TouchEvent.idl
@@ -23,9 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/touch-events/#touchevent-interface
+// https://w3c.github.io/touch-events/#touchevent-interface
 
-interface TouchEvent : UIEvent {
+[
+    Constructor(DOMString type, optional TouchEventInit eventInitDict),
+] interface TouchEvent : UIEvent {
     readonly attribute TouchList touches;
     readonly attribute TouchList targetTouches;
     readonly attribute TouchList changedTouches;
@@ -34,18 +36,17 @@
     readonly attribute boolean ctrlKey;
     readonly attribute boolean shiftKey;
 
-    // FIXME: initTouch() is not yet standardized.
-    [CallWith=ScriptState, Measure] void initTouchEvent([Default=Undefined] optional TouchList touches,
-                                                        [Default=Undefined] optional TouchList targetTouches,
-                                                        [Default=Undefined] optional TouchList changedTouches,
-                                                        [Default=Undefined] optional DOMString type,
-                                                        [Default=Undefined] optional Window view,
-                                                        [Default=Undefined] optional long unused1,
-                                                        [Default=Undefined] optional long unused2,
-                                                        [Default=Undefined] optional long unused3,
-                                                        [Default=Undefined] optional long unused4,
-                                                        [Default=Undefined] optional boolean ctrlKey,
-                                                        [Default=Undefined] optional boolean altKey,
-                                                        [Default=Undefined] optional boolean shiftKey,
-                                                        [Default=Undefined] optional boolean metaKey);
+    [CallWith=ScriptState, DeprecateAs=V8TouchEvent_InitTouchEvent_Method, LegacyInterfaceTypeChecking] void initTouchEvent([Default=Undefined] optional TouchList touches,
+                                                                                                                            [Default=Undefined] optional TouchList targetTouches,
+                                                                                                                            [Default=Undefined] optional TouchList changedTouches,
+                                                                                                                            [Default=Undefined] optional DOMString type,
+                                                                                                                            [Default=Undefined] optional Window? view,
+                                                                                                                            [Default=Undefined] optional long unused1,
+                                                                                                                            [Default=Undefined] optional long unused2,
+                                                                                                                            [Default=Undefined] optional long unused3,
+                                                                                                                            [Default=Undefined] optional long unused4,
+                                                                                                                            [Default=Undefined] optional boolean ctrlKey,
+                                                                                                                            [Default=Undefined] optional boolean altKey,
+                                                                                                                            [Default=Undefined] optional boolean shiftKey,
+                                                                                                                            [Default=Undefined] optional boolean metaKey);
 };
diff --git a/core/events/TouchEventInit.idl b/core/events/TouchEventInit.idl
new file mode 100644
index 0000000..3fffb6b
--- /dev/null
+++ b/core/events/TouchEventInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://w3c.github.io/touch-events/#touchevent-interface
+
+dictionary TouchEventInit : EventModifierInit {
+    sequence<Touch> touches = [];
+    sequence<Touch> targetTouches = [];
+    sequence<Touch> changedTouches = [];
+};
diff --git a/core/events/UIEvent.idl b/core/events/UIEvent.idl
index 7cb51a8..c0ae319 100644
--- a/core/events/UIEvent.idl
+++ b/core/events/UIEvent.idl
@@ -24,7 +24,7 @@
 ] interface UIEvent : Event {
     readonly attribute Window? view;
     readonly attribute long detail;
-    [RuntimeEnabled=InputDevice] readonly attribute InputDevice? sourceDevice;
+    [RuntimeEnabled=InputDeviceCapabilities] readonly attribute InputDeviceCapabilities? sourceCapabilities;
 
     // https://w3c.github.io/uievents/#idl-interface-UIEvent-initializers
     // TODO(philipj): None of the initUIEvent() arguments should be optional.
@@ -34,8 +34,6 @@
                                [Default=Undefined] optional Window? view,
                                [Default=Undefined] optional long detail);
 
-    // FIXME: these belong on the KeyboardEvent interface
-    [MeasureAs=UIEventCharCode] readonly attribute long charCode;
-    [MeasureAs=UIEventKeyCode] readonly attribute long keyCode;
+    // FIXME: this belongs on the KeyboardEvent interface
     [MeasureAs=UIEventWhich] readonly attribute long which;
 };
diff --git a/core/events/UIEventInit.idl b/core/events/UIEventInit.idl
index 522b008..e1f9cbe 100644
--- a/core/events/UIEventInit.idl
+++ b/core/events/UIEventInit.idl
@@ -7,5 +7,5 @@
 dictionary UIEventInit : EventInit {
     Window? view = null;
     long detail = 0;
-    [RuntimeEnabled=InputDevice] InputDevice? sourceDevice = null; 
-};
+    [RuntimeEnabled=InputDeviceCapabilities] InputDeviceCapabilities? sourceCapabilities = null; 
+};
\ No newline at end of file
diff --git a/modules/filesystem/FileCallback.idl b/core/fileapi/BlobCallback.idl
similarity index 95%
rename from modules/filesystem/FileCallback.idl
rename to core/fileapi/BlobCallback.idl
index 2a692ba..e3ebb5e 100644
--- a/modules/filesystem/FileCallback.idl
+++ b/core/fileapi/BlobCallback.idl
@@ -28,6 +28,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-callback interface FileCallback {
-    void handleEvent(File file);
+callback interface BlobCallback {
+    void handleEvent(Blob? blob);
 };
diff --git a/core/fileapi/FileError.idl b/core/fileapi/FileError.idl
index 2507a7e..9022489 100644
--- a/core/fileapi/FileError.idl
+++ b/core/fileapi/FileError.idl
@@ -29,6 +29,7 @@
  */
 
 // TODO(philipj): Remove the FileError interface. crbug.com/496901
+[Exposed=(Window,Worker)]
 interface FileError : DOMError {
     const unsigned short NOT_FOUND_ERR = 1;
     const unsigned short SECURITY_ERR = 2;
diff --git a/core/fileapi/FileReader.idl b/core/fileapi/FileReader.idl
index 1a032a9..c299840 100644
--- a/core/fileapi/FileReader.idl
+++ b/core/fileapi/FileReader.idl
@@ -33,11 +33,10 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
-    TypeChecking=Interface
 ] interface FileReader : EventTarget {
     // async read methods
     [RaisesException] void readAsArrayBuffer(Blob blob);
@@ -54,7 +53,7 @@
     const unsigned short LOADING = 1;
     const unsigned short DONE = 2;
 
-    readonly attribute unsigned short readyState;
+    [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
 
     // File or Blob data
     readonly attribute (DOMString or ArrayBuffer)? result;
diff --git a/core/fileapi/FileReaderSync.idl b/core/fileapi/FileReaderSync.idl
index 642d8e2..d587242 100644
--- a/core/fileapi/FileReaderSync.idl
+++ b/core/fileapi/FileReaderSync.idl
@@ -33,7 +33,7 @@
 [
     GarbageCollected,
     Exposed=Worker,
-    Constructor
+    Constructor,
 ] interface FileReaderSync {
     [CallWith=ExecutionContext, RaisesException] ArrayBuffer readAsArrayBuffer(Blob blob);
     // TODO(philipj): readAsBinaryString() was removed from the spec in 2012:
diff --git a/core/frame/BarProp.idl b/core/frame/BarProp.idl
index 90a8e1e..278b34d 100644
--- a/core/frame/BarProp.idl
+++ b/core/frame/BarProp.idl
@@ -31,7 +31,5 @@
 [
     WillBeGarbageCollected,
 ] interface BarProp {
-    // TODO(philipj): Remove readonly or have it added to the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28697
     readonly attribute boolean visible;
 };
diff --git a/core/frame/History.idl b/core/frame/History.idl
index 5462033..bec0890 100644
--- a/core/frame/History.idl
+++ b/core/frame/History.idl
@@ -25,26 +25,20 @@
 
 // https://html.spec.whatwg.org/#the-history-interface
 
+enum ScrollRestoration {"auto", "manual"};
+
 [
     GarbageCollected,
 ] interface History {
-    // TODO(philipj): length is long in the spec, use that or change the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28789
     readonly attribute unsigned long length;
+    [RuntimeEnabled=ScrollRestoration, Measure] attribute ScrollRestoration scrollRestoration;
     // TODO(philipj): The SerializedScriptValue type should be any.
     [CachedAttribute=stateChanged] readonly attribute SerializedScriptValue state;
-    // TODO(philipj): delta does not have a default value in the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28790
     [CallWith=ExecutionContext] void go(optional long delta = 0);
     [CallWith=ExecutionContext] void back();
     [CallWith=ExecutionContext] void forward();
     // TODO(philipj): The SerializedScriptValue types should be any.
     // TODO(philipj): The title arguments should simply be 'DOMString title'.
-    // Note: The options arguments are part of the Scroll Restoration API.
-    [RaisesException] void pushState(SerializedScriptValue data, [TreatUndefinedAs=NullString] DOMString? title, optional DOMString? url = null, optional StateOptions options);
-    [RaisesException] void replaceState(SerializedScriptValue data, [TreatUndefinedAs=NullString] DOMString? title, optional DOMString? url = null, optional StateOptions options);
-
-    // Experimental Scroll Restoration API
-    // https://www.chromestatus.com/features/5657284784947200
-    [RuntimeEnabled=ScrollRestoration] readonly attribute StateOptions options;
+    [RaisesException] void pushState(SerializedScriptValue data, [TreatUndefinedAs=NullString] DOMString? title, optional DOMString? url = null);
+    [RaisesException] void replaceState(SerializedScriptValue data, [TreatUndefinedAs=NullString] DOMString? title, optional DOMString? url = null);
 };
diff --git a/core/frame/ImageBitmap.idl b/core/frame/ImageBitmap.idl
index 5cb21c8..b47435f 100644
--- a/core/frame/ImageBitmap.idl
+++ b/core/frame/ImageBitmap.idl
@@ -5,10 +5,10 @@
 // https://html.spec.whatwg.org/#images
 
 [
-    // TODO(philipj): Exposed=(Window,Worker)
+    Exposed=(Window,Worker),
     WillBeGarbageCollected,
 ] interface ImageBitmap {
-    // TODO(philipj): width/height should be unsigned long.
-    readonly attribute long width;
-    readonly attribute long height;
+    readonly attribute unsigned long width;
+    readonly attribute unsigned long height;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] void close();
 };
diff --git a/core/frame/Location.idl b/core/frame/Location.idl
index d68eaf7..592474d 100644
--- a/core/frame/Location.idl
+++ b/core/frame/Location.idl
@@ -29,7 +29,7 @@
 // https://html.spec.whatwg.org/#the-location-interface
 
 [
-    CheckSecurity=Frame,
+    CheckSecurity=Receiver,
     Unforgeable,
     WillBeGarbageCollected,
 ] interface Location {
diff --git a/core/frame/NavigatorID.idl b/core/frame/NavigatorID.idl
index eeeeba4..0bf48d5 100644
--- a/core/frame/NavigatorID.idl
+++ b/core/frame/NavigatorID.idl
@@ -35,7 +35,7 @@
     Exposed=(Window,Worker),
 ] interface NavigatorID {
     readonly attribute DOMString appCodeName; // constant "Mozilla"
-    readonly attribute DOMString appName;
+    readonly attribute DOMString appName; // constant "Netscape"
     readonly attribute DOMString appVersion;
     readonly attribute DOMString platform;
     readonly attribute DOMString product; // constant "Gecko"
diff --git a/core/frame/NavigatorStorageUtils.idl b/core/frame/NavigatorStorageUtils.idl
index e41b602..b408dc7 100644
--- a/core/frame/NavigatorStorageUtils.idl
+++ b/core/frame/NavigatorStorageUtils.idl
@@ -8,6 +8,4 @@
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface NavigatorStorageUtils {
     readonly attribute boolean cookieEnabled;
-    // TODO(philipj): This is called yieldForStorageUpdates() in the spec.
-    [Measure] void getStorageUpdates();
 };
diff --git a/core/frame/StateOptions.idl b/core/frame/StateOptions.idl
deleted file mode 100644
index cd6a9bd..0000000
--- a/core/frame/StateOptions.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 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.
-
-// Experimental Scroll Restoration API
-// https://www.chromestatus.com/features/5657284784947200
-
-enum ScrollRestoration {"auto", "manual"};
-
-dictionary StateOptions {
-    ScrollRestoration scrollRestoration = "auto";
-};
diff --git a/core/frame/Window.idl b/core/frame/Window.idl
index 679fd07..f73fac7 100644
--- a/core/frame/Window.idl
+++ b/core/frame/Window.idl
@@ -28,7 +28,7 @@
 
 // FIXME: explain all uses of [DoNotCheckSecurity]
 [
-    CheckSecurity=Frame,
+    CheckSecurity=Receiver,
     ImplementedAs=DOMWindow,
     PrimaryGlobal,
 ] interface Window : EventTarget {
@@ -60,9 +60,9 @@
     // FIXME: opener should be of type any.
     [DoNotCheckSecurity, Custom=Setter] attribute Window opener;
     [Replaceable, DoNotCheckSecurity] readonly attribute Window parent;
-    [CheckSecurity=Node, Custom=Getter] readonly attribute Element? frameElement;
+    [CheckSecurity=ReturnValue, Custom=Getter] readonly attribute Element? frameElement;
     // FIXME: open() should have 4 optional arguments with defaults.
-    [Custom] Window open(DOMString url, DOMString target, optional DOMString features);
+    [Custom] Window? open(DOMString url, DOMString target, optional DOMString features);
     // FIXME: These getters should not have [NotEnumerable].
     [NotEnumerable, DoNotCheckSecurity] getter Window (unsigned long index);
     [Custom, NotEnumerable, DoNotCheckSecurity] getter object (DOMString name);
@@ -72,17 +72,18 @@
     [RuntimeEnabled=ApplicationCache, LogActivity=GetterOnly] readonly attribute ApplicationCache applicationCache;
 
     // user prompts
-    void alert();
-    void alert(DOMString message);
-    boolean confirm(optional DOMString message = "");
-    DOMString? prompt(optional DOMString message = "", optional DOMString defaultValue = "");
-    void print();
+    [Measure] void alert();
+    [Measure] void alert(DOMString message);
+    [Measure] boolean confirm(optional DOMString message = "");
+    [Measure] DOMString? prompt(optional DOMString message = "", optional DOMString defaultValue = "");
+    [Measure] void print();
 
-    // FIXME: requestAnimationFrame should take a FrameRequestCallback:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28152
     [MeasureAs=UnprefixedRequestAnimationFrame] long requestAnimationFrame(FrameRequestCallback callback);
     void cancelAnimationFrame(long handle);
 
+    [Measure, RuntimeEnabled=RequestIdleCallback] long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options);
+    [RuntimeEnabled=RequestIdleCallback] void cancelIdleCallback(long handle);
+
     [DoNotCheckSecurity, Custom, RaisesException] void postMessage(any message, DOMString targetOrigin, optional sequence<Transferable> transfer);
 
     // HTML obsolete features
@@ -93,7 +94,7 @@
     // CSS Object Model (CSSOM)
     // http://dev.w3.org/csswg/cssom/#extensions-to-the-window-interface
     // FIXME: The optional pseudoElt argument should have no default.
-    [NewObject, TypeChecking=Interface] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt = null);
+    [NewObject] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt = null);
 
     // CSSOM View Module
     // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-window-interface
@@ -153,8 +154,8 @@
     [MeasureAs=WindowDefaultStatus] attribute DOMString defaultStatus;
     [MeasureAs=WindowDefaultstatus, ImplementedAs=defaultStatus] attribute DOMString defaultstatus;
     [MeasureAs=StyleMedia] readonly attribute StyleMedia styleMedia;
-    [DeprecateAs=GetMatchedCSSRules] CSSRuleList getMatchedCSSRules([Default=Undefined] optional Element element,
-                                                                    [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? pseudoElement);
+    [DeprecateAs=GetMatchedCSSRules, LegacyInterfaceTypeChecking] CSSRuleList getMatchedCSSRules([Default=Undefined] optional Element element,
+                                                                                                 [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? pseudoElement);
     // This is the interface orientation in degrees. Some examples are:
     //  0 is straight up; -90 is when the device is rotated 90 clockwise;
     //  90 is when rotated counter clockwise.
@@ -173,10 +174,6 @@
     attribute EventHandler onanimationstart;
     [RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;
     attribute EventHandler onsearch;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchcancel;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
-    [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
     attribute EventHandler ontransitionend;
     attribute EventHandler onwebkitanimationend;
     attribute EventHandler onwebkitanimationiteration;
@@ -184,8 +181,8 @@
     attribute EventHandler onwebkittransitionend;
     attribute EventHandler onwheel;
 
-    // window.toString() requires special handling in V8
-    [DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] stringifier;
+    // https://w3c.github.io/webappsec/specs/powerfulfeatures/#monkey-patching-global-object
+    readonly attribute boolean isSecureContext;
 };
 
 // http://www.whatwg.org/specs/web-apps/current-work/#transferable-objects
diff --git a/core/html/AssignedNodesOptions.idl b/core/html/AssignedNodesOptions.idl
new file mode 100644
index 0000000..5247c06
--- /dev/null
+++ b/core/html/AssignedNodesOptions.idl
@@ -0,0 +1,9 @@
+// Copyright 2016 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://w3c.github.io/webcomponents/spec/shadow/#idl-def-AssignedNodesOptions
+
+dictionary AssignedNodesOptions {
+    boolean flatten = false;
+};
diff --git a/core/html/FormData.idl b/core/html/FormData.idl
index dccbd43..70df8fe 100644
--- a/core/html/FormData.idl
+++ b/core/html/FormData.idl
@@ -37,7 +37,7 @@
     Constructor(optional HTMLFormElement form),
     Exposed=(Window,Worker),
     GarbageCollected,
-    ImplementedAs=DOMFormData,
+    LegacyInterfaceTypeChecking,
 ] interface FormData {
     // TODO(philipj): The value argument should be FormDataEntryValue and there
     // should be no optional filename argument. crbug.com/498790
@@ -47,7 +47,7 @@
     [RuntimeEnabled=FormDataNewMethods, ImplementedAs=deleteEntry] void delete(USVString name);
     [RuntimeEnabled=FormDataNewMethods] FormDataEntryValue? get(USVString name);
     [RuntimeEnabled=FormDataNewMethods] sequence<FormDataEntryValue> getAll(USVString name);
-    [RuntimeEnabled=FormDataNewMethods, ImplementedAs=hasEntry] boolean has(USVString name);
+    [RuntimeEnabled=FormDataNewMethods] boolean has(USVString name);
     // TODO(philipj): The value argument should be FormDataEntryValue and there
     // should be no optional filename argument.
     [RuntimeEnabled=FormDataNewMethods] void set(USVString name, Blob value, optional USVString filename);
diff --git a/core/html/HTMLAllCollection.idl b/core/html/HTMLAllCollection.idl
index 40c7fc4..dc4ba0d 100644
--- a/core/html/HTMLAllCollection.idl
+++ b/core/html/HTMLAllCollection.idl
@@ -26,20 +26,17 @@
 
 // https://html.spec.whatwg.org/#the-htmlallcollection-interface
 
-// FIXME: This interface should inherit HTMLCollection.
 [
     Custom=LegacyCallAsFunction,
     DependentLifetime,
     SetWrapperReferenceFrom=ownerNode,
     WillBeGarbageCollected,
 ] interface HTMLAllCollection {
-    // FIXME: length and 'getter' should be inherited from HTMLCollection.
     readonly attribute unsigned long length;
     [ImplementedAs=item] getter Element (unsigned long index);
     // FIXME: The custom item() implementation may return a NodeList, but the
     // spec has a (HTMLCollection or Element)? item(DOMString name) method.
     [Custom] Element? item([Default=Undefined] optional unsigned long index);
-    // FIXME:
     // FIXME: namedItem() should be a legacycaller. crbug.com/465009
     // FIXME: namedItem() should return an (HTMLCollection or Element)? union.
     [ImplementedAs=namedGetter] getter (NodeList or Element)? namedItem(DOMString name);
diff --git a/core/html/HTMLAnchorElement.idl b/core/html/HTMLAnchorElement.idl
index a91eb23..255acf0 100644
--- a/core/html/HTMLAnchorElement.idl
+++ b/core/html/HTMLAnchorElement.idl
@@ -23,12 +23,13 @@
 interface HTMLAnchorElement : HTMLElement {
     [Reflect] attribute DOMString target;
     [Reflect] attribute DOMString download;
-    // FIXME: ping should be a DOMSettableTokenList.
+    // FIXME: ping should be a DOMTokenList.
     [Reflect] attribute DOMString ping;
     [Reflect] attribute DOMString rel;
     // FIXME: readonly attribute DOMTokenList relList;
     [Reflect] attribute DOMString hreflang;
     [Reflect] attribute DOMString type;
+    [RuntimeEnabled=ReferrerPolicyAttribute, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerpolicy;
 
     [ImplementedAs=textContent] attribute DOMString text;
 
diff --git a/core/html/HTMLAppletElement.idl b/core/html/HTMLAppletElement.idl
deleted file mode 100644
index d337bfb..0000000
--- a/core/html/HTMLAppletElement.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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.
- */
-
-// https://html.spec.whatwg.org/#the-applet-element
-
-// TODO(yukishiino): HTMLAppletElement should not have [OverrideBuiltins].
-[
-    OverrideBuiltins,
-] interface HTMLAppletElement : HTMLElement {
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString alt;
-    [Reflect] attribute DOMString archive;
-    [Reflect] attribute DOMString code;
-    [Reflect, URL] attribute DOMString codeBase;
-    [Reflect] attribute DOMString height;
-    [Reflect] attribute unsigned long hspace;
-    [Reflect] attribute DOMString name;
-    [Reflect, URL] attribute DOMString _object; // the underscore is not part of the identifier
-    [Reflect] attribute unsigned long vspace;
-    [Reflect] attribute DOMString width;
-
-    // FIXME: These getters and setters are not in the spec.
-    [Custom, NotEnumerable] getter boolean (unsigned long index);
-    [Custom] setter boolean (unsigned long index, Node value);
-    [Custom, NotEnumerable] getter Node (DOMString name);
-    [Custom] setter Node (DOMString name, Node value);
-};
diff --git a/core/html/HTMLAreaElement.idl b/core/html/HTMLAreaElement.idl
index 89a51c4..4782665 100644
--- a/core/html/HTMLAreaElement.idl
+++ b/core/html/HTMLAreaElement.idl
@@ -25,9 +25,10 @@
     [Reflect] attribute DOMString coords;
     [Reflect] attribute DOMString shape;
     [Reflect] attribute DOMString target;
-    // FIXME: ping should be a DOMSettableTokenList.
+    // FIXME: ping should be a DOMTokenList.
     [Reflect] attribute DOMString ping;
-    // FIXME: download, rel, relList, hreflang and type are missing.
+    // FIXME: download, rel, relList are missing
+    [RuntimeEnabled=ReferrerPolicyAttribute, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerpolicy;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLAreaElement-partial
diff --git a/core/html/HTMLButtonElement.idl b/core/html/HTMLButtonElement.idl
index 6ab20ee..a6c47d6 100644
--- a/core/html/HTMLButtonElement.idl
+++ b/core/html/HTMLButtonElement.idl
@@ -24,7 +24,7 @@
     [Reflect] attribute boolean autofocus;
     [Reflect] attribute boolean disabled;
     [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [Reflect, URL] attribute DOMString formAction;
+    attribute DOMString formAction;
     attribute DOMString formEnctype;
     attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;
diff --git a/core/html/HTMLCanvasElement.idl b/core/html/HTMLCanvasElement.idl
index 458e8ab..15e7e50 100644
--- a/core/html/HTMLCanvasElement.idl
+++ b/core/html/HTMLCanvasElement.idl
@@ -26,7 +26,8 @@
 
 // https://html.spec.whatwg.org/#the-canvas-element
 
-interface HTMLCanvasElement : HTMLElement {
+interface HTMLCanvasElement : HTMLElement
+{
     // FIXME: width and height should be unsigned long.
     attribute long width;
     attribute long height;
@@ -45,11 +46,12 @@
     // handled differently the return type could be changed to "RenderingContext?"
     // and the [CallWith=ScriptState] extended attribute removed.
     //
-    // FIXME: The contextId argument should not be optional.
-    [CallWith=ScriptState] any getContext([Default=Undefined] optional DOMString contextId, [PermissiveDictionaryConversion] optional CanvasContextCreationAttributes attributes);
+    [CallWith=ScriptState] any getContext(DOMString contextId, [PermissiveDictionaryConversion] optional CanvasContextCreationAttributes attributes);
 
     // Note: The arguments argument is variadic in the spec, but not here as
     // only one extra argument is actually used.
-    // FIXME: type should not be nullable or have a default value.
-    [RaisesException] DOMString toDataURL(optional DOMString? type = null, optional any arguments);
+    // FIXME: type should not have a default value.
+    [RaisesException] DOMString toDataURL(optional DOMString type = null, optional any arguments);
+
+    [RaisesException] void toBlob(BlobCallback _callback, optional DOMString type = null, optional any arguments);
 };
diff --git a/core/html/HTMLCollection.idl b/core/html/HTMLCollection.idl
index 85c2d5a..b285517 100644
--- a/core/html/HTMLCollection.idl
+++ b/core/html/HTMLCollection.idl
@@ -27,7 +27,6 @@
     WillBeGarbageCollected,
 ] interface HTMLCollection {
     readonly attribute unsigned long length;
-    // FIXME: The index argument should not be optional.
-    getter Element? item([Default=Undefined] optional unsigned long index);
+    getter Element? item(unsigned long index);
     getter Element? namedItem(DOMString name);
 };
diff --git a/core/html/HTMLContentElement.idl b/core/html/HTMLContentElement.idl
index d03ee3d..0979cf8 100644
--- a/core/html/HTMLContentElement.idl
+++ b/core/html/HTMLContentElement.idl
@@ -27,7 +27,6 @@
 // http://w3c.github.io/webcomponents/spec/shadow/#the-content-element
 
 interface HTMLContentElement : HTMLElement {
-    // FIXME: select should not have [TreatNullAs=NullString].
-    [Reflect, TreatNullAs=NullString] attribute DOMString select;
+    [Reflect] attribute DOMString select;
     NodeList getDistributedNodes();
 };
diff --git a/core/html/HTMLDocument.idl b/core/html/HTMLDocument.idl
index 1b73bc8..2b3f5b9 100644
--- a/core/html/HTMLDocument.idl
+++ b/core/html/HTMLDocument.idl
@@ -26,12 +26,11 @@
 interface HTMLDocument : Document {
     // https://html.spec.whatwg.org/#Document-partial
 
-    // FIXME: *Color should have [TreatNullAs=EmptyString].
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString fgColor;
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString linkColor;
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString vlinkColor;
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString alinkColor;
-    [TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString bgColor;
+    [TreatNullAs=EmptyString, CustomElementCallbacks] attribute DOMString fgColor;
+    [TreatNullAs=EmptyString, CustomElementCallbacks] attribute DOMString linkColor;
+    [TreatNullAs=EmptyString, CustomElementCallbacks] attribute DOMString vlinkColor;
+    [TreatNullAs=EmptyString, CustomElementCallbacks] attribute DOMString alinkColor;
+    [TreatNullAs=EmptyString, CustomElementCallbacks] attribute DOMString bgColor;
 
     [MeasureAs=DocumentClear] void clear();
     [MeasureAs=DocumentCaptureEvents] void captureEvents();
diff --git a/core/html/HTMLElement.idl b/core/html/HTMLElement.idl
index 7a849e9..d39a27a 100644
--- a/core/html/HTMLElement.idl
+++ b/core/html/HTMLElement.idl
@@ -30,7 +30,7 @@
 
     // user interaction
     [Reflect] attribute boolean hidden;
-    void click();
+    [ImplementedAs=clickForBindings] void click();
     [CustomElementCallbacks] attribute long tabIndex;
     void focus();
     void blur();
@@ -54,8 +54,7 @@
 
     // CSS Object Model (CSSOM)
     // http://dev.w3.org/csswg/cssom/#the-elementcssinlinestyle-interface
-    // FIXME: style should have [PutForwards=cssText].
-    [SameObject, PerWorldBindings] readonly attribute CSSStyleDeclaration style;
+    [SameObject, PerWorldBindings, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 
     // Non-standard APIs
     [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter, MeasureAs=HTMLElementInnerText] attribute DOMString innerText;
diff --git a/core/html/HTMLEmbedElement.idl b/core/html/HTMLEmbedElement.idl
index 5759506..5def601 100644
--- a/core/html/HTMLEmbedElement.idl
+++ b/core/html/HTMLEmbedElement.idl
@@ -29,7 +29,7 @@
     [Reflect] attribute DOMString type;
     [Reflect] attribute DOMString width;
     [Reflect] attribute DOMString height;
-    [CheckSecurity=Node, RaisesException] Document? getSVGDocument();
+    [CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
     // FIXME: The spec has a legacycaller any (any... arguments); crbug.com/465009
 
     // obsolete members
diff --git a/core/html/HTMLFieldSetElement.idl b/core/html/HTMLFieldSetElement.idl
index 58dc295..fb86dc8 100644
--- a/core/html/HTMLFieldSetElement.idl
+++ b/core/html/HTMLFieldSetElement.idl
@@ -26,7 +26,7 @@
 
     readonly attribute DOMString type;
 
-    readonly attribute HTMLFormControlsCollection elements;
+    [Measure] readonly attribute HTMLFormControlsCollection elements;
 
     readonly attribute boolean willValidate;
     [SameObject] readonly attribute ValidityState validity;
diff --git a/core/html/HTMLFormElement.idl b/core/html/HTMLFormElement.idl
index cbd2500..d9e9d4c 100644
--- a/core/html/HTMLFormElement.idl
+++ b/core/html/HTMLFormElement.idl
@@ -44,5 +44,5 @@
     boolean checkValidity();
     boolean reportValidity();
 
-    [RuntimeEnabled=RequestAutocomplete] void requestAutocomplete();
+    [RuntimeEnabled=RequestAutocomplete, MeasureAs=RequestAutocomplete] void requestAutocomplete();
 };
diff --git a/core/html/HTMLFrameElement.idl b/core/html/HTMLFrameElement.idl
index 819bc6c..54e2901 100644
--- a/core/html/HTMLFrameElement.idl
+++ b/core/html/HTMLFrameElement.idl
@@ -27,13 +27,9 @@
     [Reflect] attribute DOMString frameBorder;
     [Reflect, URL] attribute DOMString longDesc;
     [Reflect] attribute boolean noResize;
-    [CheckSecurity=Node] readonly attribute Document? contentDocument;
+    [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
     readonly attribute Window? contentWindow;
 
     [Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
     [Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
-
-    // FIXME: The spec defines getSVGDocument() for HTMLIFrameElement,
-    // HTMLEmbedElement and HTMLObjectElement, but not here.
-    [Measure, CheckSecurity=Node, RaisesException] Document? getSVGDocument();
 };
diff --git a/core/html/HTMLIFrameElement.idl b/core/html/HTMLIFrameElement.idl
index d3f8e3f..1c98d81 100644
--- a/core/html/HTMLIFrameElement.idl
+++ b/core/html/HTMLIFrameElement.idl
@@ -24,14 +24,16 @@
     [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString srcdoc;
     [Reflect] attribute DOMString name;
-    [PutForwards=value] readonly attribute DOMSettableTokenList sandbox;
+    [PutForwards=value] readonly attribute DOMTokenList sandbox;
     // Note: The seamless attribute was once supported, but was removed.
     [Reflect] attribute boolean allowFullscreen;
     [Reflect] attribute DOMString width;
     [Reflect] attribute DOMString height;
-    [CheckSecurity=Node] readonly attribute Document? contentDocument;
+    [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
     readonly attribute Window? contentWindow;
-    [CheckSecurity=Node, RaisesException] Document? getSVGDocument();
+    [CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
+    [RuntimeEnabled=ReferrerPolicyAttribute, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerpolicy;
+
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLIFrameElement-partial
diff --git a/core/html/HTMLImageElement.idl b/core/html/HTMLImageElement.idl
index 976e52f..abec4c2 100644
--- a/core/html/HTMLImageElement.idl
+++ b/core/html/HTMLImageElement.idl
@@ -38,6 +38,7 @@
     readonly attribute long naturalHeight;
     readonly attribute boolean complete;
     readonly attribute DOMString currentSrc;
+    [RuntimeEnabled=ReferrerPolicyAttribute, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerpolicy;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLImageElement-partial
diff --git a/core/html/HTMLInputElement.idl b/core/html/HTMLInputElement.idl
index 95719d0..b82f096 100644
--- a/core/html/HTMLInputElement.idl
+++ b/core/html/HTMLInputElement.idl
@@ -21,6 +21,8 @@
 
 // https://html.spec.whatwg.org/#the-input-element
 
+enum SelectionMode { "select", "start", "end", "preserve" };
+
 interface HTMLInputElement : HTMLElement {
     [Reflect] attribute DOMString accept;
     [Reflect] attribute DOMString alt;
@@ -34,7 +36,7 @@
     // The 'files' attribute is intentionally not readonly.
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22682
     attribute FileList? files;
-    [Reflect, URL] attribute DOMString formAction;
+    attribute DOMString formAction;
     [CustomElementCallbacks] attribute DOMString formEnctype;
     [CustomElementCallbacks] attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;
@@ -83,11 +85,10 @@
     [RaisesException, ImplementedAs=selectionEndForBinding] attribute long selectionEnd;
     [RaisesException, ImplementedAs=selectionDirectionForBinding] attribute DOMString selectionDirection;
     [RaisesException] void setRangeText(DOMString replacement);
-    // FIXME: The selectionMode argument should be a SelectionMode enum.
     [RaisesException] void setRangeText(DOMString replacement,
                                         unsigned long start,
                                         unsigned long end,
-                                        optional DOMString selectionMode = "preserve");
+                                        optional SelectionMode selectionMode = "preserve");
     // FIXME: The start and end arguments should be unsigned long and should not have [Default=Undefined].
     [RaisesException, ImplementedAs=setSelectionRangeForBinding]
     void setSelectionRange([Default=Undefined] optional long start,
diff --git a/core/html/HTMLLabelElement.idl b/core/html/HTMLLabelElement.idl
index 3d17ad9..4db6d18 100644
--- a/core/html/HTMLLabelElement.idl
+++ b/core/html/HTMLLabelElement.idl
@@ -21,7 +21,7 @@
 // https://html.spec.whatwg.org/#the-label-element
 
 interface HTMLLabelElement : HTMLElement {
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [ImplementedAs=formForBinding, MeasureAs=HTMLLabelElementFormIDLAttribute] readonly attribute HTMLFormElement? form;
     [Reflect=for] attribute DOMString htmlFor;
     readonly attribute HTMLElement? control;
 };
diff --git a/core/html/HTMLLinkElement.idl b/core/html/HTMLLinkElement.idl
index 91c040e..1d19a86 100644
--- a/core/html/HTMLLinkElement.idl
+++ b/core/html/HTMLLinkElement.idl
@@ -28,11 +28,12 @@
     [Reflect, URL] attribute DOMString href;
     [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
     [Reflect] attribute DOMString rel;
-    // FIXME: readonly attribute DOMTokenList relList;
+    [RuntimeEnabled=LinkPreload, PutForwards=value] readonly attribute DOMTokenList relList;
     [Reflect] attribute DOMString media;
     [Reflect] attribute DOMString hreflang;
     [Reflect] attribute DOMString type;
-    [PutForwards=value] readonly attribute DOMSettableTokenList sizes;
+    [Reflect, RuntimeEnabled=LinkPreload] attribute DOMString as;
+    [PutForwards=value] readonly attribute DOMTokenList sizes;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLLinkElement-partial
diff --git a/core/html/HTMLMediaElement.idl b/core/html/HTMLMediaElement.idl
index 0ced5dc..80899b4 100644
--- a/core/html/HTMLMediaElement.idl
+++ b/core/html/HTMLMediaElement.idl
@@ -27,7 +27,7 @@
 
 enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=Media,
 ] interface HTMLMediaElement : HTMLElement {
 
@@ -55,11 +55,11 @@
     const unsigned short HAVE_CURRENT_DATA = 2;
     const unsigned short HAVE_FUTURE_DATA = 3;
     const unsigned short HAVE_ENOUGH_DATA = 4;
-    readonly attribute unsigned short readyState;
+    [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
     readonly attribute boolean seeking;
 
     // playback state
-    [RaisesException=Setter] attribute double currentTime;
+    attribute double currentTime;
     // FIXME: void fastSeek(double time);
     readonly attribute unrestricted double duration;
     // FIXME: Date getStartDate(); crbug.com/312699
@@ -71,13 +71,9 @@
     readonly attribute boolean ended;
     [Reflect] attribute boolean autoplay;
     [Reflect] attribute boolean loop;
-    void play();
+    [CallWith=ScriptState, ImplementedAs=playForBindings] Promise<void> play();
     void pause();
 
-    // media controller
-    [RuntimeEnabled=MediaController, Reflect] attribute DOMString mediaGroup;
-    [RuntimeEnabled=MediaController, TypeChecking=Interface] attribute MediaController? controller;
-
     // controls
     [Reflect] attribute boolean controls;
     [RaisesException=Setter] attribute double volume;
@@ -91,7 +87,6 @@
     [RaisesException] TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = "");
 
     // Non-standard APIs
-    [RuntimeEnabled=PrefixedEncryptedMedia, DeprecateAs=CanPlayTypeKeySystem] DOMString canPlayType(DOMString type, [TreatUndefinedAs=NullString] DOMString? keySystem);
     // The number of bytes consumed by the media decoder.
     [MeasureAs=PrefixedAudioDecodedByteCount] readonly attribute unsigned long webkitAudioDecodedByteCount;
     [MeasureAs=PrefixedVideoDecodedByteCount] readonly attribute unsigned long webkitVideoDecodedByteCount;
diff --git a/core/html/HTMLObjectElement.idl b/core/html/HTMLObjectElement.idl
index a936771..d0f6261 100644
--- a/core/html/HTMLObjectElement.idl
+++ b/core/html/HTMLObjectElement.idl
@@ -33,9 +33,9 @@
     [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
     [Reflect] attribute DOMString width;
     [Reflect] attribute DOMString height;
-    [CheckSecurity=Node] readonly attribute Document? contentDocument;
+    [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
     // TODO(philipj): readonly attribute WindowProxy? contentWindow;
-    [CheckSecurity=Node, RaisesException] Document? getSVGDocument();
+    [CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
 
     readonly attribute boolean willValidate;
     readonly attribute ValidityState validity;
diff --git a/core/html/HTMLOptionElement.idl b/core/html/HTMLOptionElement.idl
index bcbeed3..92a2323 100644
--- a/core/html/HTMLOptionElement.idl
+++ b/core/html/HTMLOptionElement.idl
@@ -32,7 +32,7 @@
     readonly attribute HTMLFormElement? form;
     attribute DOMString label;
     [Reflect=selected] attribute boolean defaultSelected;
-    attribute boolean selected;
+    [ImplementedAs=selectedForBinding] attribute boolean selected;
     attribute DOMString value;
 
     // TODO(philipj): The text setter should never throw.
diff --git a/core/html/HTMLOptionsCollection.idl b/core/html/HTMLOptionsCollection.idl
index 7a9fabf..6907ffb 100644
--- a/core/html/HTMLOptionsCollection.idl
+++ b/core/html/HTMLOptionsCollection.idl
@@ -26,10 +26,10 @@
     SetWrapperReferenceFrom=ownerNode,
 ] interface HTMLOptionsCollection : HTMLCollection {
     // inherits item()
-    [Custom=Setter, RaisesException=Setter] attribute unsigned long length; // shadows inherited length
+    [RaisesException=Setter] attribute unsigned long length; // shadows inherited length
     // FIXME: The spec has a legacycaller HTMLOptionElement? (DOMString name);
-    [RaisesException, TypeChecking=Interface] setter void (unsigned long index, HTMLOptionElement? option);
-    [RaisesException, TypeChecking=Interface] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
+    [RaisesException] setter void (unsigned long index, HTMLOptionElement? option);
+    [RaisesException] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
     void remove(long index);
     attribute long selectedIndex;
     // FIXME: Neither of these getters are in the spec, and the
diff --git a/core/html/HTMLOutputElement.idl b/core/html/HTMLOutputElement.idl
index 957a9aa..8efb9a0 100644
--- a/core/html/HTMLOutputElement.idl
+++ b/core/html/HTMLOutputElement.idl
@@ -25,7 +25,7 @@
 // https://html.spec.whatwg.org/#the-output-element
 
 interface HTMLOutputElement : HTMLElement {
-    [PutForwards=value] readonly attribute DOMSettableTokenList htmlFor;
+    [PutForwards=value] readonly attribute DOMTokenList htmlFor;
     [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
     [Reflect] attribute DOMString name;
 
diff --git a/core/html/HTMLSelectElement.idl b/core/html/HTMLSelectElement.idl
index 718cec1..f631cc2 100644
--- a/core/html/HTMLSelectElement.idl
+++ b/core/html/HTMLSelectElement.idl
@@ -37,13 +37,12 @@
     // TODO(philipj): The length setter should never throw.
     [RaisesException=Setter] attribute unsigned long length;
     getter Element? item(unsigned long index);
-    // TODO(philipj): The name argument should not be optional.
-    HTMLOptionElement? namedItem([Default=Undefined] optional DOMString name);
-    [RaisesException, TypeChecking=Interface] void add((HTMLOptionElement or HTMLOptGroupElement) element,
-                                                       optional (HTMLElement or long)? before = null);
+    HTMLOptionElement? namedItem(DOMString name);
+    [RaisesException] void add((HTMLOptionElement or HTMLOptGroupElement) element,
+                               optional (HTMLElement or long)? before = null);
     [RaisesException] void remove(); // ChildNode overload
     void remove(long index);
-    [RaisesException, TypeChecking=Interface] setter void (unsigned long index, HTMLOptionElement? option);
+    [RaisesException] setter void (unsigned long index, HTMLOptionElement? option);
 
     readonly attribute HTMLCollection selectedOptions;
     attribute long selectedIndex;
diff --git a/modules/filesystem/FileCallback.idl b/core/html/HTMLSlotElement.idl
similarity index 77%
copy from modules/filesystem/FileCallback.idl
copy to core/html/HTMLSlotElement.idl
index 2a692ba..3dc032a 100644
--- a/modules/filesystem/FileCallback.idl
+++ b/core/html/HTMLSlotElement.idl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2015 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
@@ -7,10 +7,6 @@
  *
  *     * 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.
@@ -28,6 +24,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-callback interface FileCallback {
-    void handleEvent(File file);
+// http://w3c.github.io/webcomponents/spec/shadow/#the-slot-element
+
+[
+    RuntimeEnabled=ShadowDOMV1,
+] interface HTMLSlotElement : HTMLElement {
+    [Reflect] attribute DOMString name;
+    [ImplementedAs=getAssignedNodesForBinding] sequence<Node> getAssignedNodes(optional AssignedNodesOptions options);
 };
diff --git a/core/html/HTMLTableCellElement.idl b/core/html/HTMLTableCellElement.idl
index 7a9a8d8..933fedb 100644
--- a/core/html/HTMLTableCellElement.idl
+++ b/core/html/HTMLTableCellElement.idl
@@ -24,7 +24,7 @@
     attribute unsigned long colSpan;
     attribute unsigned long rowSpan;
     // TODO(philipj): headers should be a [PutForwards=value] readonly attribute
-    // DOMSettableTokenList.
+    // DOMTokenList.
     [Reflect, TreatNullAs=NullString] attribute DOMString headers;
     readonly attribute long cellIndex;
 
diff --git a/core/html/HTMLTableElement.idl b/core/html/HTMLTableElement.idl
index acf2684..b36de85 100644
--- a/core/html/HTMLTableElement.idl
+++ b/core/html/HTMLTableElement.idl
@@ -23,18 +23,18 @@
 interface HTMLTableElement : HTMLElement {
     // TODO(philipj): The caption, tHead and tFoot setters should never throw.
     [RaisesException=Setter] attribute HTMLTableCaptionElement? caption;
-    HTMLElement createCaption();
+    HTMLTableCaptionElement createCaption();
     void deleteCaption();
     [RaisesException=Setter] attribute HTMLTableSectionElement? tHead;
-    HTMLElement createTHead();
+    HTMLTableSectionElement createTHead();
     void deleteTHead();
     [RaisesException=Setter] attribute HTMLTableSectionElement? tFoot;
-    HTMLElement createTFoot();
+    HTMLTableSectionElement createTFoot();
     void deleteTFoot();
     readonly attribute HTMLCollection tBodies;
-    HTMLElement createTBody();
+    HTMLTableSectionElement createTBody();
     readonly attribute HTMLCollection rows;
-    [RaisesException] HTMLElement insertRow(optional long index = -1);
+    [RaisesException] HTMLTableRowElement insertRow(optional long index = -1);
     [RaisesException] void deleteRow(long index);
     // attribute boolean sortable;
     // void stopSorting();
diff --git a/core/html/HTMLTextAreaElement.idl b/core/html/HTMLTextAreaElement.idl
index a937807..ea7ca76 100644
--- a/core/html/HTMLTextAreaElement.idl
+++ b/core/html/HTMLTextAreaElement.idl
@@ -58,11 +58,10 @@
     attribute long selectionEnd;
     attribute DOMString selectionDirection;
     [RaisesException] void setRangeText(DOMString replacement);
-    // TODO(philipj): The selectionMode argument should be a SelectionMode enum.
     [RaisesException] void setRangeText(DOMString replacement,
                                         unsigned long start,
                                         unsigned long end,
-                                        optional DOMString selectionMode = null);
+                                        optional SelectionMode selectionMode = "preserve");
     // TODO(philipj): The start and end arguments should be unsigned long and
     // should not be optional.
     void setSelectionRange([Default=Undefined] optional long start,
diff --git a/core/html/HTMLTrackElement.idl b/core/html/HTMLTrackElement.idl
index 8a9b38e..08b3f14 100644
--- a/core/html/HTMLTrackElement.idl
+++ b/core/html/HTMLTrackElement.idl
@@ -37,7 +37,7 @@
     const unsigned short LOADED = 2;
     // Reflect is used for ERROR because it conflicts with a windows define.
     [Reflect=TRACK_ERROR] const unsigned short ERROR = 3;
-    readonly attribute unsigned short readyState;
+    [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
 
     readonly attribute TextTrack track;
 };
diff --git a/core/html/HTMLVideoElement.idl b/core/html/HTMLVideoElement.idl
index 5989128..3f2d0cc 100644
--- a/core/html/HTMLVideoElement.idl
+++ b/core/html/HTMLVideoElement.idl
@@ -38,11 +38,11 @@
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoSupportsFullscreen] readonly attribute boolean webkitSupportsFullscreen;
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoDisplayingFullscreen] readonly attribute boolean webkitDisplayingFullscreen;
 
-    [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoEnterFullscreen, RaisesException, LogActivity, LogAllWorlds] void webkitEnterFullscreen();
+    [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoEnterFullscreen, LogActivity, LogAllWorlds] void webkitEnterFullscreen();
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoExitFullscreen] void webkitExitFullscreen();
 
     // Note the different capitalization of the "S" in FullScreen.
-    [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoEnterFullScreen, ImplementedAs=webkitEnterFullscreen, RaisesException, LogActivity, LogAllWorlds] void webkitEnterFullScreen();
+    [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoEnterFullScreen, ImplementedAs=webkitEnterFullscreen, LogActivity, LogAllWorlds] void webkitEnterFullScreen();
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoExitFullScreen, ImplementedAs=webkitExitFullscreen] void webkitExitFullScreen();
 
     // The number of frames that have been decoded and made available for
diff --git a/core/html/ImageData.idl b/core/html/ImageData.idl
index 44f6977..152a63d 100644
--- a/core/html/ImageData.idl
+++ b/core/html/ImageData.idl
@@ -29,16 +29,14 @@
 // https://html.spec.whatwg.org/#dom-imagedata
 
 [
-    TypeChecking=Interface,
     Constructor(unsigned long sw, unsigned long sh),
     Constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh),
     Exposed=(Window,Worker),
     RaisesException=Constructor,
     GarbageCollected,
 ] interface ImageData {
-    // TODO(philipj): width/height should be unsigned long.
-    readonly attribute long width;
-    readonly attribute long height;
+    readonly attribute unsigned long width;
+    readonly attribute unsigned long height;
     // TODO(philipj): Expose data.
     // FIXMEDART: Uncomment - we need this property.
     readonly attribute Uint8ClampedArray data;
diff --git a/core/html/MediaController.idl b/core/html/MediaController.idl
deleted file mode 100644
index ca1dad4..0000000
--- a/core/html/MediaController.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-// https://html.spec.whatwg.org/#media-controllers
-
-enum MediaControllerPlaybackState { "waiting", "playing", "ended" };
-
-[
-    Constructor,
-    ConstructorCallWith=ExecutionContext,
-    RuntimeEnabled=MediaController,
-] interface MediaController : EventTarget {
-    // TODO(philipj): Expose readyState.
-    // readonly attribute unsigned short readyState; // uses HTMLMediaElement.readyState's values
-
-    readonly attribute TimeRanges buffered;
-    readonly attribute TimeRanges seekable;
-    readonly attribute unrestricted double duration;
-    attribute double currentTime;
-
-    readonly attribute boolean paused;
-    readonly attribute MediaControllerPlaybackState playbackState;
-    readonly attribute TimeRanges played;
-    void pause();
-    void unpause();
-    void play(); // calls play() on all media elements as well
-
-    attribute double defaultPlaybackRate;
-    attribute double playbackRate;
-
-    [RaisesException=Setter] attribute double volume;
-    attribute boolean muted;
-
-    // TODO(philipj): Expose the on* event handler attributes.
-};
diff --git a/core/html/MediaError.idl b/core/html/MediaError.idl
index 0d8b100..712251d 100644
--- a/core/html/MediaError.idl
+++ b/core/html/MediaError.idl
@@ -26,8 +26,8 @@
 // https://html.spec.whatwg.org/#error-codes
 
 [
+    GarbageCollected,
     RuntimeEnabled=Media,
-    WillBeGarbageCollected,
 ] interface MediaError {
     const unsigned short MEDIA_ERR_ABORTED = 1;
     const unsigned short MEDIA_ERR_NETWORK = 2;
diff --git a/core/html/MediaKeyError.idl b/core/html/MediaKeyError.idl
deleted file mode 100644
index 2a80de0..0000000
--- a/core/html/MediaKeyError.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- * 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=PrefixedEncryptedMedia,
-    WillBeGarbageCollected,
-] interface MediaKeyError {
-    const unsigned short MEDIA_KEYERR_UNKNOWN = 1;
-    const unsigned short MEDIA_KEYERR_CLIENT = 2;
-    const unsigned short MEDIA_KEYERR_SERVICE = 3;
-    const unsigned short MEDIA_KEYERR_OUTPUT = 4;
-    const unsigned short MEDIA_KEYERR_HARDWARECHANGE = 5;
-    const unsigned short MEDIA_KEYERR_DOMAIN = 6;
-    readonly attribute unsigned short code;
-    [RuntimeEnabled=EncryptedMedia] readonly attribute unsigned long systemCode;
-};
diff --git a/core/html/MediaKeyEvent.idl b/core/html/MediaKeyEvent.idl
deleted file mode 100644
index 1159db0..0000000
--- a/core/html/MediaKeyEvent.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- * 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.
- */
-
-[
-    Constructor(DOMString type, optional MediaKeyEventInit eventInitDict),
-    RuntimeEnabled=PrefixedEncryptedMedia,
-] interface MediaKeyEvent : Event {
-    readonly attribute DOMString keySystem;
-    readonly attribute DOMString sessionId;
-    readonly attribute Uint8Array initData;
-    readonly attribute Uint8Array message;
-    readonly attribute DOMString defaultURL;
-    readonly attribute MediaKeyError? errorCode;
-    readonly attribute unsigned short systemCode;
-};
-
diff --git a/core/html/MediaKeyEventInit.idl b/core/html/MediaKeyEventInit.idl
deleted file mode 100644
index b8eb75a..0000000
--- a/core/html/MediaKeyEventInit.idl
+++ /dev/null
@@ -1,13 +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.
-
-dictionary MediaKeyEventInit : EventInit {
-    DOMString keySystem;
-    DOMString sessionId;
-    Uint8Array initData;
-    Uint8Array message;
-    DOMString defaultURL;
-    MediaKeyError? errorCode;
-    unsigned short systemCode;
-};
diff --git a/core/html/TextMetrics.idl b/core/html/TextMetrics.idl
index b9bdf06..e5d8fdb 100644
--- a/core/html/TextMetrics.idl
+++ b/core/html/TextMetrics.idl
@@ -28,7 +28,7 @@
 // TODO(philipj): All float types in this interface should be double.
 [
     // TODO(philipj): Exposed=(Window,Worker)
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface TextMetrics {
     // x-direction
     readonly attribute float width; // advance width
diff --git a/core/html/TimeRanges.idl b/core/html/TimeRanges.idl
index edd9cfc..281861e 100644
--- a/core/html/TimeRanges.idl
+++ b/core/html/TimeRanges.idl
@@ -26,7 +26,7 @@
 // https://html.spec.whatwg.org/#time-ranges
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     RuntimeEnabled=Media
 ] interface TimeRanges {
     readonly attribute unsigned long length;
diff --git a/core/html/canvas/OffscreenCanvas.idl b/core/html/canvas/OffscreenCanvas.idl
new file mode 100644
index 0000000..be5bf91
--- /dev/null
+++ b/core/html/canvas/OffscreenCanvas.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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.
+
+[
+    Constructor([EnforceRange] unsigned long width, [EnforceRange] unsigned long height),
+    GarbageCollected,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=ExperimentalCanvasFeatures,
+] interface OffscreenCanvas {
+    [EnforceRange] attribute unsigned long width;
+    [EnforceRange] attribute unsigned long height;
+};
diff --git a/core/html/shadow/PluginPlaceholderElement.idl b/core/html/shadow/PluginPlaceholderElement.idl
deleted file mode 100644
index a873f0a..0000000
--- a/core/html/shadow/PluginPlaceholderElement.idl
+++ /dev/null
@@ -1,12 +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.
-
-[
-    NoInterfaceObject
-] interface PluginPlaceholderElement : HTMLDivElement {
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString message;
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute boolean closeable;
-
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void createdCallback();
-};
diff --git a/core/html/track/AudioTrack.idl b/core/html/track/AudioTrack.idl
index 28c294e..6299715 100644
--- a/core/html/track/AudioTrack.idl
+++ b/core/html/track/AudioTrack.idl
@@ -7,7 +7,7 @@
 [
     RuntimeEnabled=AudioVideoTracks,
     SetWrapperReferenceFrom=owner,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface AudioTrack {
   readonly attribute DOMString id;
   readonly attribute DOMString kind;
diff --git a/core/html/track/AudioTrackList.idl b/core/html/track/AudioTrackList.idl
index 43a321e..80ba853 100644
--- a/core/html/track/AudioTrackList.idl
+++ b/core/html/track/AudioTrackList.idl
@@ -5,6 +5,7 @@
 // https://html.spec.whatwg.org/#audiotracklist
 
 [
+    GarbageCollected,
     RuntimeEnabled=AudioVideoTracks,
     SetWrapperReferenceFrom=owner,
 ] interface AudioTrackList : EventTarget {
diff --git a/core/html/track/TextTrack.idl b/core/html/track/TextTrack.idl
index 9fc8a39..3ce419b 100644
--- a/core/html/track/TextTrack.idl
+++ b/core/html/track/TextTrack.idl
@@ -29,8 +29,8 @@
 enum TextTrackKind { "subtitles",  "captions",  "descriptions",  "chapters",  "metadata" };
 
 [
+    GarbageCollected,
     SetWrapperReferenceFrom=owner,
-    TypeChecking=Interface,
 ] interface TextTrack : EventTarget {
     readonly attribute TextTrackKind kind;
     readonly attribute DOMString label;
diff --git a/core/html/track/TextTrackCue.idl b/core/html/track/TextTrackCue.idl
index d10834b..7e4c6c8 100644
--- a/core/html/track/TextTrackCue.idl
+++ b/core/html/track/TextTrackCue.idl
@@ -26,6 +26,7 @@
 // https://html.spec.whatwg.org/#texttrackcue
 
 [
+    GarbageCollected,
     SetWrapperReferenceFrom=owner,
 ] interface TextTrackCue : EventTarget {
     readonly attribute TextTrack? track;
diff --git a/core/html/track/TextTrackCueList.idl b/core/html/track/TextTrackCueList.idl
index a65101b..116c75c 100644
--- a/core/html/track/TextTrackCueList.idl
+++ b/core/html/track/TextTrackCueList.idl
@@ -26,10 +26,9 @@
 // https://html.spec.whatwg.org/#texttrackcuelist
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface TextTrackCueList {
     readonly attribute unsigned long length;
-    // TODO(philipj): This getter should be anonymous.
-    [Measure] getter TextTrackCue item(unsigned long index);
+    getter TextTrackCue (unsigned long index);
     TextTrackCue? getCueById(DOMString id);
 };
diff --git a/core/html/track/TextTrackList.idl b/core/html/track/TextTrackList.idl
index 4f3168f..cef8012 100644
--- a/core/html/track/TextTrackList.idl
+++ b/core/html/track/TextTrackList.idl
@@ -26,11 +26,11 @@
 // https://html.spec.whatwg.org/#texttracklist
 
 [
+    GarbageCollected,
     SetWrapperReferenceFrom=owner,
 ] interface TextTrackList : EventTarget {
     readonly attribute unsigned long length;
-    // TODO(philipj): This getter should be anonymous.
-    [Measure] getter TextTrack item(unsigned long index);
+    getter TextTrack (unsigned long index);
     TextTrack? getTrackById(DOMString id);
 
     attribute EventHandler onchange;
diff --git a/core/html/track/VideoTrack.idl b/core/html/track/VideoTrack.idl
index bc0073e..8a6b8f6 100644
--- a/core/html/track/VideoTrack.idl
+++ b/core/html/track/VideoTrack.idl
@@ -7,7 +7,7 @@
 [
     RuntimeEnabled=AudioVideoTracks,
     SetWrapperReferenceFrom=owner,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface VideoTrack {
   readonly attribute DOMString id;
   readonly attribute DOMString kind;
diff --git a/core/html/track/VideoTrackList.idl b/core/html/track/VideoTrackList.idl
index 0651763..79727b7 100644
--- a/core/html/track/VideoTrackList.idl
+++ b/core/html/track/VideoTrackList.idl
@@ -5,6 +5,7 @@
 // https://html.spec.whatwg.org/#videotracklist
 
 [
+    GarbageCollected,
     RuntimeEnabled=AudioVideoTracks,
     SetWrapperReferenceFrom=owner,
 ] interface VideoTrackList : EventTarget {
diff --git a/core/html/track/vtt/VTTRegion.idl b/core/html/track/vtt/VTTRegion.idl
index 3f18b15..a2843fd 100644
--- a/core/html/track/vtt/VTTRegion.idl
+++ b/core/html/track/vtt/VTTRegion.idl
@@ -28,7 +28,7 @@
 [
     Constructor,
     RuntimeEnabled=WebVTTRegions,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface VTTRegion {
     [RaisesException=Setter] attribute double width;
     // TODO(philipj): height should be called lines.
diff --git a/core/html/track/vtt/VTTRegionList.idl b/core/html/track/vtt/VTTRegionList.idl
index 080b103..8eff2cd 100644
--- a/core/html/track/vtt/VTTRegionList.idl
+++ b/core/html/track/vtt/VTTRegionList.idl
@@ -28,7 +28,7 @@
 
 [
     RuntimeEnabled=WebVTTRegions,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface VTTRegionList {
     readonly attribute unsigned long length;
     getter VTTRegion item(unsigned long index);
diff --git a/core/imagebitmap/ImageBitmapFactories.idl b/core/imagebitmap/ImageBitmapFactories.idl
index 376fafa..02b3425 100644
--- a/core/imagebitmap/ImageBitmapFactories.idl
+++ b/core/imagebitmap/ImageBitmapFactories.idl
@@ -30,31 +30,24 @@
 
 // https://html.spec.whatwg.org/#imagebitmapfactories
 
-// FIXME: should use typedef instead, but
-// requires better union type support: http://crbug.com/240176
-/*
-typedef (// HTMLImageElement or
-         // HTMLVideoElement or
-         // HTMLCanvasElement or
+typedef (HTMLImageElement or
+         HTMLVideoElement or
+         HTMLCanvasElement or
          Blob or
          ImageData or
-         // CanvasRenderingContext2D or
          ImageBitmap) ImageBitmapSource;
-*/
 
 [
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
     Exposed=(Window,Worker),
-    RuntimeEnabled=ExperimentalCanvasFeatures,
-    TypeChecking=Interface,
 ] interface ImageBitmapFactories {
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(Blob blob);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(Blob blob, long sx, long sy, long sw, long sh);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageData data);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageData data, long sx, long sy, long sw, long sh);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageBitmap bitmap);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageBitmap bitmap, long sx, long sy, long sw, long sh);
+    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageBitmapSource imageBitmap);
+    [CallWith=ScriptState, RaisesException, RuntimeEnabled=ExperimentalCanvasFeatures] Promise createImageBitmap(
+        ImageBitmapSource imageBitmap, ImageBitmapOptions options);
+    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(ImageBitmapSource imageBitmap, long sx, long sy, long sw, long sh);
+    [CallWith=ScriptState, RaisesException, RuntimeEnabled=ExperimentalCanvasFeatures] Promise createImageBitmap(
+        ImageBitmapSource imageBitmap, long sx, long sy, long sw, long sh, ImageBitmapOptions options);
 };
 
 Window implements ImageBitmapFactories;
diff --git a/core/imagebitmap/ImageBitmapOptions.idl b/core/imagebitmap/ImageBitmapOptions.idl
new file mode 100644
index 0000000..e8c231d
--- /dev/null
+++ b/core/imagebitmap/ImageBitmapOptions.idl
@@ -0,0 +1,10 @@
+// Copyright 2016 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=ExperimentalCanvasFeatures] enum ImageOrientation { "none", "flipY" };
+[RuntimeEnabled=ExperimentalCanvasFeatures] enum PremultiplyAlpha { "none", "default" };
+dictionary ImageBitmapOptions {
+    [RuntimeEnabled=ExperimentalCanvasFeatures] PremultiplyAlpha premultiplyAlpha = "default";
+    [RuntimeEnabled=ExperimentalCanvasFeatures] ImageOrientation imageOrientation = "none";
+};
diff --git a/core/input/InputDevice.idl b/core/input/InputDevice.idl
deleted file mode 100644
index 83e345f..0000000
--- a/core/input/InputDevice.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 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.
-
-// Represents an input device (or group of related devices).
-// To ease implementation, developers cannot rely on comparing two InputDevice
-// instances for equality. Now we only have two InputDevice instances: one
-// represents all the devices which send touch events, the other one covers all
-// other devices which do not send touch events, because currently all we care
-// about is if the input device fires touch events or not.
-[
-    Constructor(optional InputDeviceInit deviceInitDict),
-    RuntimeEnabled=InputDevice,
-    GarbageCollected,
-] interface InputDevice {
-    
-    // Whether this device dispatches touch events for movement.  This is used to detect
-    // mouse events which represent only an action that has already been handled  by
-    // touch event handlers.
-    readonly attribute boolean firesTouchEvents;
-};
diff --git a/core/input/InputDeviceCapabilities.idl b/core/input/InputDeviceCapabilities.idl
new file mode 100644
index 0000000..6263af8
--- /dev/null
+++ b/core/input/InputDeviceCapabilities.idl
@@ -0,0 +1,22 @@
+// Copyright 2015 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.
+
+// Represents capabilities for a group of related input devices.
+// To ease implementation, developers cannot rely on comparing two 
+// InputDeviceCapabilities instances for equality. Now we only have two
+// InputDeviceCapabilities instances: one for devices which send touch
+// events, and one for those that don't, because currently all we care
+// about is if the input device fires touch events or not.
+
+[
+    Constructor(optional InputDeviceCapabilitiesInit deviceInitDict),
+    RuntimeEnabled=InputDeviceCapabilities,
+    GarbageCollected,
+] interface InputDeviceCapabilities {
+    
+    // Whether this device dispatches touch events for movement.  This is used to detect
+    // mouse events which represent only an action that has already been handled  by
+    // touch event handlers.
+    [Measure] readonly attribute boolean firesTouchEvents;
+};
diff --git a/core/input/InputDeviceInit.idl b/core/input/InputDeviceCapabilitiesInit.idl
similarity index 70%
rename from core/input/InputDeviceInit.idl
rename to core/input/InputDeviceCapabilitiesInit.idl
index cad1069..e7ae86d 100644
--- a/core/input/InputDeviceInit.idl
+++ b/core/input/InputDeviceCapabilitiesInit.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=InputDevice,
-] dictionary InputDeviceInit {
+    RuntimeEnabled=InputDeviceCapabilities,
+] dictionary InputDeviceCapabilitiesInit {
     boolean firesTouchEvents = false;
 };
diff --git a/core/inspector/CodeGeneratorInspector.py b/core/inspector/CodeGeneratorInspector.py
deleted file mode 100755
index dccfdc0..0000000
--- a/core/inspector/CodeGeneratorInspector.py
+++ /dev/null
@@ -1,2127 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 Google Inc. All rights reserved.
-# Copyright (c) 2012 Intel Corporation. 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.
-
-import os.path
-import sys
-import string
-import optparse
-import re
-try:
-    import json
-except ImportError:
-    import simplejson as json
-
-import CodeGeneratorInspectorStrings
-
-# Manually-filled map of type name replacements.
-TYPE_NAME_FIX_MAP = {
-    "RGBA": "Rgba",  # RGBA is reported to be conflicting with a define name in Windows CE.
-    "": "Empty",
-}
-
-
-TYPES_WITH_RUNTIME_CAST_SET = frozenset(["Runtime.RemoteObject", "Runtime.PropertyDescriptor", "Runtime.InternalPropertyDescriptor",
-                                         "Debugger.FunctionDetails", "Debugger.GeneratorObjectDetails", "Debugger.CollectionEntry", "Debugger.CallFrame", "Debugger.Location"])
-
-TYPES_WITH_OPEN_FIELD_LIST_SET = frozenset([
-                                            # InspectorStyleSheet not only creates this property but wants to read it and modify it.
-                                            "CSS.CSSProperty",
-                                            # InspectorResourceAgent needs to update mime-type.
-                                            "Network.Response"])
-
-cmdline_parser = optparse.OptionParser()
-cmdline_parser.add_option("--output_dir")
-
-try:
-    arg_options, arg_values = cmdline_parser.parse_args()
-    if (len(arg_values) != 1):
-        raise Exception("Exactly one plain argument expected (found %s)" % len(arg_values))
-    input_json_filename = arg_values[0]
-    output_dirname = arg_options.output_dir
-    if not output_dirname:
-        raise Exception("Output directory must be specified")
-except Exception:
-    # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html
-    exc = sys.exc_info()[1]
-    sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc)
-    sys.stderr.write("Usage: <script> --output_dir <output_dir> protocol.json\n")
-    exit(1)
-
-
-# FIXME: move this methods under Capitalizer class below and remove duplications.
-def dash_to_camelcase(word):
-    return ''.join(x.capitalize() or '-' for x in word.split('-'))
-
-
-def fix_camel_case(name):
-    refined = re.sub(r'-(\w)', lambda pat: pat.group(1).upper(), name)
-    refined = to_title_case(refined)
-    return re.sub(r'(?i)HTML|XML|WML|API', lambda pat: pat.group(0).upper(), refined)
-
-
-def to_title_case(name):
-    return name[:1].upper() + name[1:]
-
-
-class Capitalizer:
-    @staticmethod
-    def lower_camel_case_to_upper(str):
-        if len(str) > 0 and str[0].islower():
-            str = str[0].upper() + str[1:]
-        return str
-
-    @staticmethod
-    def upper_camel_case_to_lower(str):
-        pos = 0
-        while pos < len(str) and str[pos].isupper():
-            pos += 1
-        if pos == 0:
-            return str
-        if pos == 1:
-            return str[0].lower() + str[1:]
-        if pos < len(str):
-            pos -= 1
-        possible_abbreviation = str[0:pos]
-        if possible_abbreviation not in Capitalizer.ABBREVIATION:
-            raise Exception("Unknown abbreviation %s" % possible_abbreviation)
-        str = possible_abbreviation.lower() + str[pos:]
-        return str
-
-    ABBREVIATION = frozenset(["XHR", "DOM", "CSS"])
-
-VALIDATOR_IFDEF_NAME = "ENABLE(ASSERT)"
-
-
-class DomainNameFixes:
-    @staticmethod
-    def get_fixed_data(domain_name):
-        return Capitalizer.upper_camel_case_to_lower(domain_name) + "Agent"
-
-class RawTypes(object):
-    @staticmethod
-    def get(json_type):
-        if json_type == "boolean":
-            return RawTypes.Bool
-        elif json_type == "string":
-            return RawTypes.String
-        elif json_type == "array":
-            return RawTypes.Array
-        elif json_type == "object":
-            return RawTypes.Object
-        elif json_type == "integer":
-            return RawTypes.Int
-        elif json_type == "number":
-            return RawTypes.Number
-        elif json_type == "any":
-            return RawTypes.Any
-        else:
-            raise Exception("Unknown type: %s" % json_type)
-
-    class BaseType(object):
-        @classmethod
-        def get_raw_validator_call_text(cls):
-            return "RuntimeCastHelper::assertType<JSONValue::Type%s>" % cls.get_getter_name()
-
-        @staticmethod
-        def get_getter_name():
-            raise Exception("Unsupported")
-
-    class String(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "String"
-
-        get_setter_name = get_getter_name
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "InspectorString::create(%s)"
-
-        @staticmethod
-        def is_heavy_value():
-            return True
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "String"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.String
-
-    class Int(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Int"
-
-        @staticmethod
-        def get_setter_name():
-            return "Number"
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "InspectorBasicValue::create(%s)"
-
-        @classmethod
-        def get_raw_validator_call_text(cls):
-            return "RuntimeCastHelper::assertInt"
-
-        @staticmethod
-        def is_heavy_value():
-            return False
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "int"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Int
-
-    class Number(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Double"
-
-        @staticmethod
-        def get_setter_name():
-            return "Number"
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "InspectorBasicValue::create(%s)"
-
-        @staticmethod
-        def get_raw_validator_call_text():
-            return "RuntimeCastHelper::assertType<JSONValue::TypeNumber>"
-
-        @staticmethod
-        def is_heavy_value():
-            return False
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "double"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Number
-
-    class Bool(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Boolean"
-
-        get_setter_name = get_getter_name
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "InspectorBasicValue::create(%s)"
-
-        @staticmethod
-        def is_heavy_value():
-            return False
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "bool"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Bool
-
-    class Object(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Object"
-
-        @staticmethod
-        def get_setter_name():
-            return "Value"
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "%s"
-
-        @staticmethod
-        def get_output_argument_prefix():
-            return ""
-
-        @staticmethod
-        def is_heavy_value():
-            return True
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "JSONObject"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Object
-
-    class Any(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Value"
-
-        get_setter_name = get_getter_name
-
-        @staticmethod
-        def get_constructor_pattern():
-            raise Exception("Unsupported")
-
-        @staticmethod
-        def get_raw_validator_call_text():
-            return "RuntimeCastHelper::assertAny"
-
-        @staticmethod
-        def is_heavy_value():
-            return True
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "JSONValue"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Any
-
-    class Array(BaseType):
-        @staticmethod
-        def get_getter_name():
-            return "Array"
-
-        @staticmethod
-        def get_setter_name():
-            return "Value"
-
-        @staticmethod
-        def get_constructor_pattern():
-            return "%s"
-
-        @staticmethod
-        def get_output_argument_prefix():
-            return ""
-
-        @staticmethod
-        def is_heavy_value():
-            return True
-
-        @staticmethod
-        def get_array_item_raw_c_type_text():
-            return "JSONArray"
-
-        @staticmethod
-        def get_raw_type_model():
-            return TypeModel.Array
-
-
-def replace_right_shift(input_str):
-    return input_str.replace(">>", "> >")
-
-
-class CommandReturnPassModel:
-    class ByReference:
-        def __init__(self, var_type, set_condition):
-            self.var_type = var_type
-            self.set_condition = set_condition
-
-        def get_return_var_type(self):
-            return self.var_type
-
-        @staticmethod
-        def get_output_argument_prefix():
-            return ""
-
-        @staticmethod
-        def get_output_to_raw_expression():
-            return "%s"
-
-        def get_output_parameter_type(self):
-            return self.var_type + "&"
-
-        def get_set_return_condition(self):
-            return self.set_condition
-
-    class ByPointer:
-        def __init__(self, var_type):
-            self.var_type = var_type
-
-        def get_return_var_type(self):
-            return self.var_type
-
-        @staticmethod
-        def get_output_argument_prefix():
-            return "&"
-
-        @staticmethod
-        def get_output_to_raw_expression():
-            return "%s"
-
-        def get_output_parameter_type(self):
-            return self.var_type + "*"
-
-        @staticmethod
-        def get_set_return_condition():
-            return None
-
-    class OptOutput:
-        def __init__(self, var_type):
-            self.var_type = var_type
-
-        def get_return_var_type(self):
-            return "TypeBuilder::OptOutput<%s>" % self.var_type
-
-        @staticmethod
-        def get_output_argument_prefix():
-            return "&"
-
-        @staticmethod
-        def get_output_to_raw_expression():
-            return "%s.getValue()"
-
-        def get_output_parameter_type(self):
-            return "TypeBuilder::OptOutput<%s>*" % self.var_type
-
-        @staticmethod
-        def get_set_return_condition():
-            return "%s.isAssigned()"
-
-
-class TypeModel:
-    class RefPtrBased(object):
-        def __init__(self, class_name):
-            self.class_name = class_name
-            self.optional = False
-
-        def get_optional(self):
-            result = TypeModel.RefPtrBased(self.class_name)
-            result.optional = True
-            return result
-
-        def get_command_return_pass_model(self):
-            if self.optional:
-                set_condition = "%s"
-            else:
-                set_condition = None
-            return CommandReturnPassModel.ByReference(replace_right_shift("RefPtr<%s>" % self.class_name), set_condition)
-
-        def get_input_param_type_text(self):
-            return replace_right_shift("PassRefPtr<%s>" % self.class_name)
-
-        @staticmethod
-        def get_event_setter_expression_pattern():
-            return "%s"
-
-    class Enum(object):
-        def __init__(self, base_type_name):
-            self.type_name = base_type_name + "::Enum"
-
-        def get_optional(base_self):
-            class EnumOptional:
-                @classmethod
-                def get_optional(cls):
-                    return cls
-
-                @staticmethod
-                def get_command_return_pass_model():
-                    return CommandReturnPassModel.OptOutput(base_self.type_name)
-
-                @staticmethod
-                def get_input_param_type_text():
-                    return base_self.type_name + "*"
-
-                @staticmethod
-                def get_event_setter_expression_pattern():
-                    raise Exception("TODO")
-            return EnumOptional
-
-        def get_command_return_pass_model(self):
-            return CommandReturnPassModel.ByPointer(self.type_name)
-
-        def get_input_param_type_text(self):
-            return self.type_name
-
-        @staticmethod
-        def get_event_setter_expression_pattern():
-            return "%s"
-
-    class ValueType(object):
-        def __init__(self, type_name, is_heavy):
-            self.type_name = type_name
-            self.is_heavy = is_heavy
-
-        def get_optional(self):
-            return self.ValueOptional(self)
-
-        def get_command_return_pass_model(self):
-            return CommandReturnPassModel.ByPointer(self.type_name)
-
-        def get_input_param_type_text(self):
-            if self.is_heavy:
-                return "const %s&" % self.type_name
-            else:
-                return self.type_name
-
-        def get_opt_output_type_(self):
-            return self.type_name
-
-        @staticmethod
-        def get_event_setter_expression_pattern():
-            return "%s"
-
-        class ValueOptional:
-            def __init__(self, base):
-                self.base = base
-
-            def get_optional(self):
-                return self
-
-            def get_command_return_pass_model(self):
-                return CommandReturnPassModel.OptOutput(self.base.get_opt_output_type_())
-
-            def get_input_param_type_text(self):
-                return "const %s* const" % self.base.type_name
-
-            @staticmethod
-            def get_event_setter_expression_pattern():
-                return "*%s"
-
-    @classmethod
-    def init_class(cls):
-        cls.Bool = cls.ValueType("bool", False)
-        cls.Int = cls.ValueType("int", False)
-        cls.Number = cls.ValueType("double", False)
-        cls.String = cls.ValueType("String", True,)
-        cls.Object = cls.RefPtrBased("JSONObject")
-        cls.Array = cls.RefPtrBased("JSONArray")
-        cls.Any = cls.RefPtrBased("JSONValue")
-
-TypeModel.init_class()
-
-
-# Collection of JSONObject class methods that are likely to be overloaded in generated class.
-# We must explicitly import all overloaded methods or they won't be available to user.
-INSPECTOR_OBJECT_SETTER_NAMES = frozenset(["setValue", "setBoolean", "setNumber", "setString", "setValue", "setObject", "setArray"])
-
-
-def fix_type_name(json_name):
-    if json_name in TYPE_NAME_FIX_MAP:
-        fixed = TYPE_NAME_FIX_MAP[json_name]
-
-        class Result(object):
-            class_name = fixed
-
-            @staticmethod
-            def output_comment(writer):
-                writer.newline("// Type originally was named '%s'.\n" % json_name)
-    else:
-
-        class Result(object):
-            class_name = json_name
-
-            @staticmethod
-            def output_comment(writer):
-                pass
-
-    return Result
-
-
-class Writer:
-    def __init__(self, output, indent):
-        self.output = output
-        self.indent = indent
-
-    def newline(self, str):
-        if (self.indent):
-            self.output.append(self.indent)
-        self.output.append(str)
-
-    def append(self, str):
-        self.output.append(str)
-
-    def newline_multiline(self, str):
-        parts = str.split('\n')
-        self.newline(parts[0])
-        for p in parts[1:]:
-            self.output.append('\n')
-            if p:
-                self.newline(p)
-
-    def append_multiline(self, str):
-        parts = str.split('\n')
-        self.append(parts[0])
-        for p in parts[1:]:
-            self.output.append('\n')
-            if p:
-                self.newline(p)
-
-    def get_indent(self):
-        return self.indent
-
-    def insert_writer(self, additional_indent):
-        new_output = []
-        self.output.append(new_output)
-        return Writer(new_output, self.indent + additional_indent)
-
-
-class EnumConstants:
-    map_ = {}
-    constants_ = []
-
-    @classmethod
-    def add_constant(cls, value):
-        if value in cls.map_:
-            return cls.map_[value]
-        else:
-            pos = len(cls.map_)
-            cls.map_[value] = pos
-            cls.constants_.append(value)
-            return pos
-
-    @classmethod
-    def get_enum_constant_code(cls):
-        output = []
-        for item in cls.constants_:
-            output.append("    \"" + item + "\"")
-        return ",\n".join(output) + "\n"
-
-
-# Typebuilder code is generated in several passes: first typedefs, then other classes.
-# Manual pass management is needed because we cannot have forward declarations for typedefs.
-class TypeBuilderPass:
-    TYPEDEF = "typedef"
-    MAIN = "main"
-
-
-class TypeBindings:
-    @staticmethod
-    def create_named_type_declaration(json_typable, context_domain_name, type_data):
-        json_type = type_data.get_json_type()
-
-        class Helper:
-            is_ad_hoc = False
-            full_name_prefix_for_use = "TypeBuilder::" + context_domain_name + "::"
-            full_name_prefix_for_impl = "TypeBuilder::" + context_domain_name + "::"
-
-            @staticmethod
-            def write_doc(writer):
-                if "description" in json_type:
-                    writer.newline("/* ")
-                    writer.append(json_type["description"])
-                    writer.append(" */\n")
-
-            @staticmethod
-            def add_to_forward_listener(forward_listener):
-                forward_listener.add_type_data(type_data)
-
-
-        fixed_type_name = fix_type_name(json_type["id"])
-        return TypeBindings.create_type_declaration_(json_typable, context_domain_name, fixed_type_name, Helper)
-
-    @staticmethod
-    def create_ad_hoc_type_declaration(json_typable, context_domain_name, ad_hoc_type_context):
-        class Helper:
-            is_ad_hoc = True
-            full_name_prefix_for_use = ad_hoc_type_context.container_relative_name_prefix
-            full_name_prefix_for_impl = ad_hoc_type_context.container_full_name_prefix
-
-            @staticmethod
-            def write_doc(writer):
-                pass
-
-            @staticmethod
-            def add_to_forward_listener(forward_listener):
-                pass
-        fixed_type_name = ad_hoc_type_context.get_type_name_fix()
-        return TypeBindings.create_type_declaration_(json_typable, context_domain_name, fixed_type_name, Helper)
-
-    @staticmethod
-    def create_type_declaration_(json_typable, context_domain_name, fixed_type_name, helper):
-        if json_typable["type"] == "string":
-            if "enum" in json_typable:
-
-                class EnumBinding:
-                    need_user_runtime_cast_ = False
-                    need_internal_runtime_cast_ = False
-
-                    @classmethod
-                    def resolve_inner(cls, resolve_context):
-                        pass
-
-                    @classmethod
-                    def request_user_runtime_cast(cls, request):
-                        if request:
-                            cls.need_user_runtime_cast_ = True
-                            request.acknowledge()
-
-                    @classmethod
-                    def request_internal_runtime_cast(cls):
-                        cls.need_internal_runtime_cast_ = True
-
-                    @classmethod
-                    def get_code_generator(enum_binding_cls):
-
-                        class CodeGenerator:
-                            @staticmethod
-                            def generate_type_builder(writer, generate_context):
-                                enum = json_typable["enum"]
-                                helper.write_doc(writer)
-                                enum_name = fixed_type_name.class_name
-                                fixed_type_name.output_comment(writer)
-                                writer.newline("struct ")
-                                writer.append(enum_name)
-                                writer.append(" {\n")
-                                writer.newline("    enum Enum {\n")
-                                for enum_item in enum:
-                                    enum_pos = EnumConstants.add_constant(enum_item)
-
-                                    item_c_name = enum_item.replace('-', '_')
-                                    item_c_name = Capitalizer.lower_camel_case_to_upper(item_c_name)
-                                    if item_c_name in TYPE_NAME_FIX_MAP:
-                                        item_c_name = TYPE_NAME_FIX_MAP[item_c_name]
-                                    writer.newline("        ")
-                                    writer.append(item_c_name)
-                                    writer.append(" = ")
-                                    writer.append("%s" % enum_pos)
-                                    writer.append(",\n")
-                                writer.newline("    };\n")
-                                if enum_binding_cls.need_user_runtime_cast_:
-                                    raise Exception("Not yet implemented")
-
-                                if enum_binding_cls.need_internal_runtime_cast_:
-                                    writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
-                                    writer.newline("    static void assertCorrectValue(JSONValue* value);\n")
-                                    writer.append("#endif  // %s\n" % VALIDATOR_IFDEF_NAME)
-
-                                    validator_writer = generate_context.validator_writer
-
-                                    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")
-                                    validator_writer.newline("    bool cast_res = value->asString(&s);\n")
-                                    validator_writer.newline("    ASSERT(cast_res);\n")
-                                    if len(enum) > 0:
-                                        condition_list = []
-                                        for enum_item in enum:
-                                            enum_pos = EnumConstants.add_constant(enum_item)
-                                            condition_list.append("s == \"%s\"" % enum_item)
-                                        validator_writer.newline("    ASSERT(%s);\n" % " || ".join(condition_list))
-                                    validator_writer.newline("}\n")
-
-                                    validator_writer.newline("\n\n")
-
-                                writer.newline("}; // struct ")
-                                writer.append(enum_name)
-                                writer.append("\n\n")
-
-                            @staticmethod
-                            def register_use(forward_listener):
-                                pass
-
-                            @staticmethod
-                            def get_generate_pass_id():
-                                return TypeBuilderPass.MAIN
-
-                        return CodeGenerator
-
-                    @classmethod
-                    def get_validator_call_text(cls):
-                        return helper.full_name_prefix_for_use + fixed_type_name.class_name + "::assertCorrectValue"
-
-                    @classmethod
-                    def get_array_item_c_type_text(cls):
-                        return helper.full_name_prefix_for_use + fixed_type_name.class_name + "::Enum"
-
-                    @staticmethod
-                    def get_setter_value_expression_pattern():
-                        return "TypeBuilder::getEnumConstantValue(%s)"
-
-                    @staticmethod
-                    def reduce_to_raw_type():
-                        return RawTypes.String
-
-                    @staticmethod
-                    def get_type_model():
-                        return TypeModel.Enum(helper.full_name_prefix_for_use + fixed_type_name.class_name)
-
-                return EnumBinding
-            else:
-                if helper.is_ad_hoc:
-
-                    class PlainString:
-                        @classmethod
-                        def resolve_inner(cls, resolve_context):
-                            pass
-
-                        @staticmethod
-                        def request_user_runtime_cast(request):
-                            raise Exception("Unsupported")
-
-                        @staticmethod
-                        def request_internal_runtime_cast():
-                            pass
-
-                        @staticmethod
-                        def get_code_generator():
-                            return None
-
-                        @classmethod
-                        def get_validator_call_text(cls):
-                            return RawTypes.String.get_raw_validator_call_text()
-
-                        @staticmethod
-                        def reduce_to_raw_type():
-                            return RawTypes.String
-
-                        @staticmethod
-                        def get_type_model():
-                            return TypeModel.String
-
-                        @staticmethod
-                        def get_setter_value_expression_pattern():
-                            return None
-
-                        @classmethod
-                        def get_array_item_c_type_text(cls):
-                            return cls.reduce_to_raw_type().get_array_item_raw_c_type_text()
-
-                    return PlainString
-
-                else:
-
-                    class TypedefString:
-                        @classmethod
-                        def resolve_inner(cls, resolve_context):
-                            pass
-
-                        @staticmethod
-                        def request_user_runtime_cast(request):
-                            raise Exception("Unsupported")
-
-                        @staticmethod
-                        def request_internal_runtime_cast():
-                            pass
-
-                        @staticmethod
-                        def get_code_generator():
-                            class CodeGenerator:
-                                @staticmethod
-                                def generate_type_builder(writer, generate_context):
-                                    helper.write_doc(writer)
-                                    fixed_type_name.output_comment(writer)
-                                    writer.newline("typedef String ")
-                                    writer.append(fixed_type_name.class_name)
-                                    writer.append(";\n\n")
-
-                                @staticmethod
-                                def register_use(forward_listener):
-                                    pass
-
-                                @staticmethod
-                                def get_generate_pass_id():
-                                    return TypeBuilderPass.TYPEDEF
-
-                            return CodeGenerator
-
-                        @classmethod
-                        def get_validator_call_text(cls):
-                            return RawTypes.String.get_raw_validator_call_text()
-
-                        @staticmethod
-                        def reduce_to_raw_type():
-                            return RawTypes.String
-
-                        @staticmethod
-                        def get_type_model():
-                            return TypeModel.ValueType("%s%s" % (helper.full_name_prefix_for_use, fixed_type_name.class_name), True)
-
-                        @staticmethod
-                        def get_setter_value_expression_pattern():
-                            return None
-
-                        @classmethod
-                        def get_array_item_c_type_text(cls):
-                            return "%s%s" % (helper.full_name_prefix_for_use, fixed_type_name.class_name)
-
-                    return TypedefString
-
-        elif json_typable["type"] == "object":
-            if "properties" in json_typable:
-
-                class ClassBinding:
-                    resolve_data_ = None
-                    need_user_runtime_cast_ = False
-                    need_internal_runtime_cast_ = False
-
-                    @classmethod
-                    def resolve_inner(cls, resolve_context):
-                        if cls.resolve_data_:
-                            return
-
-                        properties = json_typable["properties"]
-                        main = []
-                        optional = []
-
-                        ad_hoc_type_list = []
-
-                        for prop in properties:
-                            prop_name = prop["name"]
-                            ad_hoc_type_context = cls.AdHocTypeContextImpl(prop_name, fixed_type_name.class_name, resolve_context, ad_hoc_type_list, helper.full_name_prefix_for_impl)
-                            binding = resolve_param_type(prop, context_domain_name, ad_hoc_type_context)
-
-                            code_generator = binding.get_code_generator()
-                            if code_generator:
-                                code_generator.register_use(resolve_context.forward_listener)
-
-                            class PropertyData:
-                                param_type_binding = binding
-                                p = prop
-
-                            if prop.get("optional"):
-                                optional.append(PropertyData)
-                            else:
-                                main.append(PropertyData)
-
-                        class ResolveData:
-                            main_properties = main
-                            optional_properties = optional
-                            ad_hoc_types = ad_hoc_type_list
-
-                        cls.resolve_data_ = ResolveData
-
-                        for ad_hoc in ad_hoc_type_list:
-                            ad_hoc.resolve_inner(resolve_context)
-
-                    @classmethod
-                    def request_user_runtime_cast(cls, request):
-                        if not request:
-                            return
-                        cls.need_user_runtime_cast_ = True
-                        request.acknowledge()
-                        cls.request_internal_runtime_cast()
-
-                    @classmethod
-                    def request_internal_runtime_cast(cls):
-                        if cls.need_internal_runtime_cast_:
-                            return
-                        cls.need_internal_runtime_cast_ = True
-                        for p in cls.resolve_data_.main_properties:
-                            p.param_type_binding.request_internal_runtime_cast()
-                        for p in cls.resolve_data_.optional_properties:
-                            p.param_type_binding.request_internal_runtime_cast()
-
-                    @classmethod
-                    def get_code_generator(class_binding_cls):
-                        class CodeGenerator:
-                            @classmethod
-                            def generate_type_builder(cls, writer, generate_context):
-                                resolve_data = class_binding_cls.resolve_data_
-                                helper.write_doc(writer)
-                                class_name = fixed_type_name.class_name
-
-                                is_open_type = (context_domain_name + "." + class_name) in TYPES_WITH_OPEN_FIELD_LIST_SET
-
-                                fixed_type_name.output_comment(writer)
-                                writer.newline("class ")
-                                writer.append(class_name)
-                                writer.append(" : public ")
-                                if is_open_type:
-                                    writer.append("JSONObject")
-                                else:
-                                    writer.append("JSONObjectBase")
-                                writer.append(" {\n")
-                                writer.newline("public:\n")
-                                ad_hoc_type_writer = writer.insert_writer("    ")
-
-                                for ad_hoc_type in resolve_data.ad_hoc_types:
-                                    code_generator = ad_hoc_type.get_code_generator()
-                                    if code_generator:
-                                        code_generator.generate_type_builder(ad_hoc_type_writer, generate_context)
-
-                                writer.newline_multiline(
-"""    enum {
-        NoFieldsSet = 0,
-""")
-
-                                state_enum_items = []
-                                if len(resolve_data.main_properties) > 0:
-                                    pos = 0
-                                    for prop_data in resolve_data.main_properties:
-                                        item_name = Capitalizer.lower_camel_case_to_upper(prop_data.p["name"]) + "Set"
-                                        state_enum_items.append(item_name)
-                                        writer.newline("        %s = 1 << %s,\n" % (item_name, pos))
-                                        pos += 1
-                                    all_fields_set_value = "(" + (" | ".join(state_enum_items)) + ")"
-                                else:
-                                    all_fields_set_value = "0"
-
-                                writer.newline_multiline(CodeGeneratorInspectorStrings.class_binding_builder_part_1
-                                                         % (all_fields_set_value, class_name, class_name))
-
-                                pos = 0
-                                for prop_data in resolve_data.main_properties:
-                                    prop_name = prop_data.p["name"]
-
-                                    param_type_binding = prop_data.param_type_binding
-                                    param_raw_type = param_type_binding.reduce_to_raw_type()
-
-                                    writer.newline_multiline(CodeGeneratorInspectorStrings.class_binding_builder_part_2
-                                        % (state_enum_items[pos],
-                                           Capitalizer.lower_camel_case_to_upper(prop_name),
-                                           param_type_binding.get_type_model().get_input_param_type_text(),
-                                           state_enum_items[pos], prop_name,
-                                           param_raw_type.get_setter_name(), prop_name,
-                                           format_setter_value_expression(param_type_binding, "value"),
-                                           state_enum_items[pos]))
-
-                                    pos += 1
-
-                                writer.newline_multiline(CodeGeneratorInspectorStrings.class_binding_builder_part_3
-                                                         % (class_name, class_name, class_name, class_name, class_name, class_name))
-
-                                writer.newline("    /*\n")
-                                writer.newline("     * Synthetic constructor:\n")
-                                writer.newline("     * RefPtr<%s> result = %s::create()" % (class_name, class_name))
-                                for prop_data in resolve_data.main_properties:
-                                    writer.append_multiline("\n     *     .set%s(...)" % Capitalizer.lower_camel_case_to_upper(prop_data.p["name"]))
-                                writer.append_multiline(";\n     */\n")
-
-                                writer.newline_multiline(CodeGeneratorInspectorStrings.class_binding_builder_part_4)
-
-                                writer.newline("    typedef TypeBuilder::StructItemTraits ItemTraits;\n")
-
-                                for prop_data in resolve_data.main_properties:
-                                    prop_name = prop_data.p["name"]
-                                    param_type_binding = prop_data.param_type_binding
-                                    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())
-                                        writer.newline("    {\n")
-                                        writer.newline("        JSONObjectBase::get%s(\"%s\", value);\n"
-                                            % (param_type_binding.reduce_to_raw_type().get_setter_name(), prop_data.p["name"]))
-                                        writer.newline("    }\n")
-
-                                for prop_data in resolve_data.optional_properties:
-                                    prop_name = prop_data.p["name"]
-                                    param_type_binding = prop_data.param_type_binding
-                                    setter_name = "set%s" % Capitalizer.lower_camel_case_to_upper(prop_name)
-
-                                    writer.append_multiline("\n    void %s" % setter_name)
-                                    writer.append("(%s value)\n" % param_type_binding.get_type_model().get_input_param_type_text())
-                                    writer.newline("    {\n")
-                                    writer.newline("        this->set%s(\"%s\", %s);\n"
-                                        % (param_type_binding.reduce_to_raw_type().get_setter_name(), prop_data.p["name"],
-                                           format_setter_value_expression(param_type_binding, "value")))
-                                    writer.newline("    }\n")
-
-                                    if setter_name in INSPECTOR_OBJECT_SETTER_NAMES:
-                                        writer.newline("    using JSONObjectBase::%s;\n\n" % setter_name)
-
-                                if class_binding_cls.need_user_runtime_cast_:
-                                    writer.newline("    static PassRefPtr<%s> runtimeCast(PassRefPtr<JSONValue> value)\n" % class_name)
-                                    writer.newline("    {\n")
-                                    writer.newline("        RefPtr<JSONObject> object;\n")
-                                    writer.newline("        bool castRes = value->asObject(&object);\n")
-                                    writer.newline("        ASSERT_UNUSED(castRes, castRes);\n")
-                                    writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
-                                    writer.newline("        assertCorrectValue(object.get());\n")
-                                    writer.append("#endif  // %s\n" % VALIDATOR_IFDEF_NAME)
-                                    writer.newline("        static_assert(sizeof(%s) == sizeof(JSONObjectBase), \"%s should be the same size as JSONObjectBase\");\n" % (class_name, class_name))
-                                    writer.newline("        return static_cast<%s*>(static_cast<JSONObjectBase*>(object.get()));\n" % class_name)
-                                    writer.newline("    }\n")
-                                    writer.append("\n")
-
-                                if class_binding_cls.need_internal_runtime_cast_:
-                                    writer.append("#if %s\n" % VALIDATOR_IFDEF_NAME)
-                                    writer.newline("    static void assertCorrectValue(JSONValue* value);\n")
-                                    writer.append("#endif  // %s\n" % VALIDATOR_IFDEF_NAME)
-
-                                    closed_field_set = (context_domain_name + "." + class_name) not in TYPES_WITH_OPEN_FIELD_LIST_SET
-
-                                    validator_writer = generate_context.validator_writer
-
-                                    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")
-                                    validator_writer.newline("    bool castRes = value->asObject(&object);\n")
-                                    validator_writer.newline("    ASSERT_UNUSED(castRes, castRes);\n")
-                                    for prop_data in resolve_data.main_properties:
-                                        validator_writer.newline("    {\n")
-                                        it_name = "%sPos" % prop_data.p["name"]
-                                        validator_writer.newline("        JSONObject::iterator %s;\n" % it_name)
-                                        validator_writer.newline("        %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
-                                        validator_writer.newline("        ASSERT(%s != object->end());\n" % it_name)
-                                        validator_writer.newline("        %s(%s->value.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
-                                        validator_writer.newline("    }\n")
-
-                                    if closed_field_set:
-                                        validator_writer.newline("    int foundPropertiesCount = %s;\n" % len(resolve_data.main_properties))
-
-                                    for prop_data in resolve_data.optional_properties:
-                                        validator_writer.newline("    {\n")
-                                        it_name = "%sPos" % prop_data.p["name"]
-                                        validator_writer.newline("        JSONObject::iterator %s;\n" % it_name)
-                                        validator_writer.newline("        %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
-                                        validator_writer.newline("        if (%s != object->end()) {\n" % it_name)
-                                        validator_writer.newline("            %s(%s->value.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
-                                        if closed_field_set:
-                                            validator_writer.newline("            ++foundPropertiesCount;\n")
-                                        validator_writer.newline("        }\n")
-                                        validator_writer.newline("    }\n")
-
-                                    if closed_field_set:
-                                        validator_writer.newline("    if (foundPropertiesCount != object->size()) {\n")
-                                        validator_writer.newline("      FATAL(\"Unexpected properties in object: %s\\n\", object->toJSONString().ascii().data());\n")
-                                        validator_writer.newline("    }\n")
-                                    validator_writer.newline("}\n")
-
-                                    validator_writer.newline("\n\n")
-
-                                if is_open_type:
-                                    cpp_writer = generate_context.cpp_writer
-                                    writer.append("\n")
-                                    writer.newline("    // Property names for type generated as open.\n")
-                                    for prop_data in resolve_data.main_properties + resolve_data.optional_properties:
-                                        prop_name = prop_data.p["name"]
-                                        prop_field_name = Capitalizer.lower_camel_case_to_upper(prop_name)
-                                        writer.newline("    static const char %s[];\n" % (prop_field_name))
-                                        cpp_writer.newline("const char %s%s::%s[] = \"%s\";\n" % (helper.full_name_prefix_for_impl, class_name, prop_field_name, prop_name))
-
-
-                                writer.newline("};\n\n")
-
-                            @staticmethod
-                            def generate_forward_declaration(writer):
-                                class_name = fixed_type_name.class_name
-                                writer.newline("class ")
-                                writer.append(class_name)
-                                writer.append(";\n")
-
-                            @staticmethod
-                            def register_use(forward_listener):
-                                helper.add_to_forward_listener(forward_listener)
-
-                            @staticmethod
-                            def get_generate_pass_id():
-                                return TypeBuilderPass.MAIN
-
-                        return CodeGenerator
-
-                    @staticmethod
-                    def get_validator_call_text():
-                        return helper.full_name_prefix_for_use + fixed_type_name.class_name + "::assertCorrectValue"
-
-                    @classmethod
-                    def get_array_item_c_type_text(cls):
-                        return helper.full_name_prefix_for_use + fixed_type_name.class_name
-
-                    @staticmethod
-                    def get_setter_value_expression_pattern():
-                        return None
-
-                    @staticmethod
-                    def reduce_to_raw_type():
-                        return RawTypes.Object
-
-                    @staticmethod
-                    def get_type_model():
-                        return TypeModel.RefPtrBased(helper.full_name_prefix_for_use + fixed_type_name.class_name)
-
-                    class AdHocTypeContextImpl:
-                        def __init__(self, property_name, class_name, resolve_context, ad_hoc_type_list, parent_full_name_prefix):
-                            self.property_name = property_name
-                            self.class_name = class_name
-                            self.resolve_context = resolve_context
-                            self.ad_hoc_type_list = ad_hoc_type_list
-                            self.container_full_name_prefix = parent_full_name_prefix + class_name + "::"
-                            self.container_relative_name_prefix = ""
-
-                        def get_type_name_fix(self):
-                            class NameFix:
-                                class_name = Capitalizer.lower_camel_case_to_upper(self.property_name)
-
-                                @staticmethod
-                                def output_comment(writer):
-                                    writer.newline("// Named after property name '%s' while generating %s.\n" % (self.property_name, self.class_name))
-
-                            return NameFix
-
-                        def add_type(self, binding):
-                            self.ad_hoc_type_list.append(binding)
-
-                return ClassBinding
-            else:
-
-                class PlainObjectBinding:
-                    @classmethod
-                    def resolve_inner(cls, resolve_context):
-                        pass
-
-                    @staticmethod
-                    def request_user_runtime_cast(request):
-                        pass
-
-                    @staticmethod
-                    def request_internal_runtime_cast():
-                        pass
-
-                    @staticmethod
-                    def get_code_generator():
-                        pass
-
-                    @staticmethod
-                    def get_validator_call_text():
-                        return "RuntimeCastHelper::assertType<JSONValue::TypeObject>"
-
-                    @classmethod
-                    def get_array_item_c_type_text(cls):
-                        return cls.reduce_to_raw_type().get_array_item_raw_c_type_text()
-
-                    @staticmethod
-                    def get_setter_value_expression_pattern():
-                        return None
-
-                    @staticmethod
-                    def reduce_to_raw_type():
-                        return RawTypes.Object
-
-                    @staticmethod
-                    def get_type_model():
-                        return TypeModel.Object
-
-                return PlainObjectBinding
-        elif json_typable["type"] == "array":
-            if "items" in json_typable:
-
-                ad_hoc_types = []
-
-                class AdHocTypeContext:
-                    container_full_name_prefix = "<not yet defined>"
-                    container_relative_name_prefix = ""
-
-                    @staticmethod
-                    def get_type_name_fix():
-                        return fixed_type_name
-
-                    @staticmethod
-                    def add_type(binding):
-                        ad_hoc_types.append(binding)
-
-                item_binding = resolve_param_type(json_typable["items"], context_domain_name, AdHocTypeContext)
-
-                class ArrayBinding:
-                    resolve_data_ = None
-                    need_internal_runtime_cast_ = False
-
-                    @classmethod
-                    def resolve_inner(cls, resolve_context):
-                        if cls.resolve_data_:
-                            return
-
-                        class ResolveData:
-                            item_type_binding = item_binding
-                            ad_hoc_type_list = ad_hoc_types
-
-                        cls.resolve_data_ = ResolveData
-
-                        for t in ad_hoc_types:
-                            t.resolve_inner(resolve_context)
-
-                    @classmethod
-                    def request_user_runtime_cast(cls, request):
-                        raise Exception("Not implemented yet")
-
-                    @classmethod
-                    def request_internal_runtime_cast(cls):
-                        if cls.need_internal_runtime_cast_:
-                            return
-                        cls.need_internal_runtime_cast_ = True
-                        cls.resolve_data_.item_type_binding.request_internal_runtime_cast()
-
-                    @classmethod
-                    def get_code_generator(array_binding_cls):
-
-                        class CodeGenerator:
-                            @staticmethod
-                            def generate_type_builder(writer, generate_context):
-                                ad_hoc_type_writer = writer
-
-                                resolve_data = array_binding_cls.resolve_data_
-
-                                for ad_hoc_type in resolve_data.ad_hoc_type_list:
-                                    code_generator = ad_hoc_type.get_code_generator()
-                                    if code_generator:
-                                        code_generator.generate_type_builder(ad_hoc_type_writer, generate_context)
-
-                            @staticmethod
-                            def generate_forward_declaration(writer):
-                                pass
-
-                            @staticmethod
-                            def register_use(forward_listener):
-                                item_code_generator = item_binding.get_code_generator()
-                                if item_code_generator:
-                                    item_code_generator.register_use(forward_listener)
-
-                            @staticmethod
-                            def get_generate_pass_id():
-                                return TypeBuilderPass.MAIN
-
-                        return CodeGenerator
-
-                    @classmethod
-                    def get_validator_call_text(cls):
-                        return cls.get_array_item_c_type_text() + "::assertCorrectValue"
-
-                    @classmethod
-                    def get_array_item_c_type_text(cls):
-                        return replace_right_shift("TypeBuilder::Array<%s>" % cls.resolve_data_.item_type_binding.get_array_item_c_type_text())
-
-                    @staticmethod
-                    def get_setter_value_expression_pattern():
-                        return None
-
-                    @staticmethod
-                    def reduce_to_raw_type():
-                        return RawTypes.Array
-
-                    @classmethod
-                    def get_type_model(cls):
-                        return TypeModel.RefPtrBased(cls.get_array_item_c_type_text())
-
-                return ArrayBinding
-            else:
-                # Fall-through to raw type.
-                pass
-
-        raw_type = RawTypes.get(json_typable["type"])
-
-        return RawTypeBinding(raw_type)
-
-
-class RawTypeBinding:
-    def __init__(self, raw_type):
-        self.raw_type_ = raw_type
-
-    def resolve_inner(self, resolve_context):
-        pass
-
-    def request_user_runtime_cast(self, request):
-        raise Exception("Unsupported")
-
-    def request_internal_runtime_cast(self):
-        pass
-
-    def get_code_generator(self):
-        return None
-
-    def get_validator_call_text(self):
-        return self.raw_type_.get_raw_validator_call_text()
-
-    def get_array_item_c_type_text(self):
-        return self.raw_type_.get_array_item_raw_c_type_text()
-
-    def get_setter_value_expression_pattern(self):
-        return None
-
-    def reduce_to_raw_type(self):
-        return self.raw_type_
-
-    def get_type_model(self):
-        return self.raw_type_.get_raw_type_model()
-
-
-class TypeData(object):
-    def __init__(self, json_type, json_domain, domain_data):
-        self.json_type_ = json_type
-        self.json_domain_ = json_domain
-        self.domain_data_ = domain_data
-
-        if "type" not in json_type:
-            raise Exception("Unknown type")
-
-        json_type_name = json_type["type"]
-        raw_type = RawTypes.get(json_type_name)
-        self.raw_type_ = raw_type
-        self.binding_being_resolved_ = False
-        self.binding_ = None
-
-    def get_raw_type(self):
-        return self.raw_type_
-
-    def get_binding(self):
-        if not self.binding_:
-            if self.binding_being_resolved_:
-                raise Error("Type %s is already being resolved" % self.json_type_["type"])
-            # Resolve only lazily, because resolving one named type may require resolving some other named type.
-            self.binding_being_resolved_ = True
-            try:
-                self.binding_ = TypeBindings.create_named_type_declaration(self.json_type_, self.json_domain_["domain"], self)
-            finally:
-                self.binding_being_resolved_ = False
-
-        return self.binding_
-
-    def get_json_type(self):
-        return self.json_type_
-
-    def get_name(self):
-        return self.json_type_["id"]
-
-    def get_domain_name(self):
-        return self.json_domain_["domain"]
-
-
-class DomainData:
-    def __init__(self, json_domain):
-        self.json_domain = json_domain
-        self.types_ = []
-
-    def add_type(self, type_data):
-        self.types_.append(type_data)
-
-    def name(self):
-        return self.json_domain["domain"]
-
-    def types(self):
-        return self.types_
-
-
-class TypeMap:
-    def __init__(self, api):
-        self.map_ = {}
-        self.domains_ = []
-        for json_domain in api["domains"]:
-            domain_name = json_domain["domain"]
-
-            domain_map = {}
-            self.map_[domain_name] = domain_map
-
-            domain_data = DomainData(json_domain)
-            self.domains_.append(domain_data)
-
-            if "types" in json_domain:
-                for json_type in json_domain["types"]:
-                    type_name = json_type["id"]
-                    type_data = TypeData(json_type, json_domain, domain_data)
-                    domain_map[type_name] = type_data
-                    domain_data.add_type(type_data)
-
-    def domains(self):
-        return self.domains_
-
-    def get(self, domain_name, type_name):
-        return self.map_[domain_name][type_name]
-
-
-def resolve_param_type(json_parameter, scope_domain_name, ad_hoc_type_context):
-    if "$ref" in json_parameter:
-        json_ref = json_parameter["$ref"]
-        type_data = get_ref_data(json_ref, scope_domain_name)
-        return type_data.get_binding()
-    elif "type" in json_parameter:
-        result = TypeBindings.create_ad_hoc_type_declaration(json_parameter, scope_domain_name, ad_hoc_type_context)
-        ad_hoc_type_context.add_type(result)
-        return result
-    else:
-        raise Exception("Unknown type")
-
-def resolve_param_raw_type(json_parameter, scope_domain_name):
-    if "$ref" in json_parameter:
-        json_ref = json_parameter["$ref"]
-        type_data = get_ref_data(json_ref, scope_domain_name)
-        return type_data.get_raw_type()
-    elif "type" in json_parameter:
-        json_type = json_parameter["type"]
-        return RawTypes.get(json_type)
-    else:
-        raise Exception("Unknown type")
-
-
-def get_ref_data(json_ref, scope_domain_name):
-    dot_pos = json_ref.find(".")
-    if dot_pos == -1:
-        domain_name = scope_domain_name
-        type_name = json_ref
-    else:
-        domain_name = json_ref[:dot_pos]
-        type_name = json_ref[dot_pos + 1:]
-
-    return type_map.get(domain_name, type_name)
-
-
-input_file = open(input_json_filename, "r")
-json_string = input_file.read()
-json_api = json.loads(json_string)
-
-
-class Templates:
-    def get_this_script_path_(absolute_path):
-        absolute_path = os.path.abspath(absolute_path)
-        components = []
-
-        def fill_recursive(path_part, depth):
-            if depth <= 0 or path_part == '/':
-                return
-            fill_recursive(os.path.dirname(path_part), depth - 1)
-            components.append(os.path.basename(path_part))
-
-        # Typical path is /Source/WebCore/inspector/CodeGeneratorInspector.py
-        # Let's take 4 components from the real path then.
-        fill_recursive(absolute_path, 4)
-
-        return "/".join(components)
-
-    file_header_ = ("// File is generated by %s\n\n" % get_this_script_path_(sys.argv[0]) +
-"""// Copyright (c) 2011 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.
-""")
-
-    frontend_domain_class = string.Template(CodeGeneratorInspectorStrings.frontend_domain_class)
-    backend_method = string.Template(CodeGeneratorInspectorStrings.backend_method)
-    frontend_method = string.Template(CodeGeneratorInspectorStrings.frontend_method)
-    callback_main_methods = string.Template(CodeGeneratorInspectorStrings.callback_main_methods)
-    callback_failure_method = string.Template(CodeGeneratorInspectorStrings.callback_failure_method)
-    frontend_h = string.Template(file_header_ + CodeGeneratorInspectorStrings.frontend_h)
-    backend_h = string.Template(file_header_ + CodeGeneratorInspectorStrings.backend_h)
-    backend_cpp = string.Template(file_header_ + CodeGeneratorInspectorStrings.backend_cpp)
-    frontend_cpp = string.Template(file_header_ + CodeGeneratorInspectorStrings.frontend_cpp)
-    typebuilder_h = string.Template(file_header_ + CodeGeneratorInspectorStrings.typebuilder_h)
-    typebuilder_cpp = string.Template(file_header_ + CodeGeneratorInspectorStrings.typebuilder_cpp)
-    param_container_access_code = CodeGeneratorInspectorStrings.param_container_access_code
-
-
-
-
-
-type_map = TypeMap(json_api)
-
-
-class NeedRuntimeCastRequest:
-    def __init__(self):
-        self.ack_ = None
-
-    def acknowledge(self):
-        self.ack_ = True
-
-    def is_acknowledged(self):
-        return self.ack_
-
-
-def resolve_all_types():
-    runtime_cast_generate_requests = {}
-    for type_name in TYPES_WITH_RUNTIME_CAST_SET:
-        runtime_cast_generate_requests[type_name] = NeedRuntimeCastRequest()
-
-    class ForwardListener:
-        type_data_set = set()
-        already_declared_set = set()
-
-        @classmethod
-        def add_type_data(cls, type_data):
-            if type_data not in cls.already_declared_set:
-                cls.type_data_set.add(type_data)
-
-    class ResolveContext:
-        forward_listener = ForwardListener
-
-    for domain_data in type_map.domains():
-        for type_data in domain_data.types():
-            # Do not generate forwards for this type any longer.
-            ForwardListener.already_declared_set.add(type_data)
-
-            binding = type_data.get_binding()
-            binding.resolve_inner(ResolveContext)
-
-    for domain_data in type_map.domains():
-        for type_data in domain_data.types():
-            full_type_name = "%s.%s" % (type_data.get_domain_name(), type_data.get_name())
-            request = runtime_cast_generate_requests.pop(full_type_name, None)
-            binding = type_data.get_binding()
-            if request:
-                binding.request_user_runtime_cast(request)
-
-            if request and not request.is_acknowledged():
-                raise Exception("Failed to generate runtimeCast in " + full_type_name)
-
-    for full_type_name in runtime_cast_generate_requests:
-        raise Exception("Failed to generate runtimeCast. Type " + full_type_name + " not found")
-
-    return ForwardListener
-
-
-global_forward_listener = resolve_all_types()
-
-
-def get_annotated_type_text(raw_type, annotated_type):
-    if annotated_type != raw_type:
-        return "/*%s*/ %s" % (annotated_type, raw_type)
-    else:
-        return raw_type
-
-
-def format_setter_value_expression(param_type_binding, value_ref):
-    pattern = param_type_binding.get_setter_value_expression_pattern()
-    if pattern:
-        return pattern % value_ref
-    else:
-        return value_ref
-
-class Generator:
-    frontend_class_field_lines = []
-    frontend_domain_class_lines = []
-
-    method_name_enum_list = []
-    backend_method_declaration_list = []
-    backend_method_implementation_list = []
-    backend_method_name_declaration_list = []
-    backend_method_name_declaration_index_list = []
-    backend_method_name_declaration_current_index = 0
-    method_handler_list = []
-    frontend_method_list = []
-
-    backend_virtual_setters_list = []
-    backend_agent_interface_list = []
-    backend_setters_list = []
-    backend_constructor_init_list = []
-    backend_field_list = []
-    frontend_constructor_init_list = []
-    type_builder_fragments = []
-    type_builder_forwards = []
-    validator_impl_list = []
-    type_builder_impl_list = []
-
-
-    @staticmethod
-    def go():
-        Generator.process_types(type_map)
-
-        for json_domain in json_api["domains"]:
-            domain_name = json_domain["domain"]
-            domain_name_lower = domain_name.lower()
-
-            agent_field_name = DomainNameFixes.get_fixed_data(domain_name)
-
-            frontend_method_declaration_lines = []
-
-            if "events" in json_domain:
-                for json_event in json_domain["events"]:
-                    Generator.process_event(json_event, domain_name, frontend_method_declaration_lines)
-
-            Generator.frontend_class_field_lines.append("    %s m_%s;\n" % (domain_name, domain_name_lower))
-            if Generator.frontend_constructor_init_list:
-                Generator.frontend_constructor_init_list.append("    , ")
-            Generator.frontend_constructor_init_list.append("m_%s(inspectorFrontendChannel)\n" % domain_name_lower)
-            Generator.frontend_domain_class_lines.append(Templates.frontend_domain_class.substitute(None,
-                domainClassName=domain_name,
-                domainFieldName=domain_name_lower,
-                frontendDomainMethodDeclarations="".join(flatten_list(frontend_method_declaration_lines))))
-
-            agent_interface_name = Capitalizer.lower_camel_case_to_upper(domain_name) + "CommandHandler"
-            Generator.backend_agent_interface_list.append("    class CORE_EXPORT %s {\n" % agent_interface_name)
-            Generator.backend_agent_interface_list.append("    public:\n")
-            if "commands" in json_domain:
-                for json_command in json_domain["commands"]:
-                    Generator.process_command(json_command, domain_name, agent_field_name, agent_interface_name)
-            Generator.backend_agent_interface_list.append("\n    protected:\n")
-            Generator.backend_agent_interface_list.append("        virtual ~%s() { }\n" % agent_interface_name)
-            Generator.backend_agent_interface_list.append("    };\n\n")
-
-            Generator.backend_constructor_init_list.append("        , m_%s(0)" % agent_field_name)
-            Generator.backend_virtual_setters_list.append("    virtual void registerAgent(%s* %s) = 0;" % (agent_interface_name, agent_field_name))
-            Generator.backend_setters_list.append("    virtual void registerAgent(%s* %s) { ASSERT(!m_%s); m_%s = %s; }" % (agent_interface_name, agent_field_name, agent_field_name, agent_field_name, agent_field_name))
-            Generator.backend_field_list.append("    %s* m_%s;" % (agent_interface_name, agent_field_name))
-
-    @staticmethod
-    def process_event(json_event, domain_name, frontend_method_declaration_lines):
-        if (("handlers" in json_event) and (not ("renderer" in json_event["handlers"]))):
-            return
-
-        event_name = json_event["name"]
-
-        ad_hoc_type_output = []
-        frontend_method_declaration_lines.append(ad_hoc_type_output)
-        ad_hoc_type_writer = Writer(ad_hoc_type_output, "        ")
-
-        decl_parameter_list = []
-
-        json_parameters = json_event.get("parameters")
-        Generator.generate_send_method(json_parameters, event_name, domain_name, ad_hoc_type_writer,
-                                       decl_parameter_list,
-                                       Generator.EventMethodStructTemplate,
-                                       Generator.frontend_method_list, Templates.frontend_method, {"eventName": event_name})
-
-        frontend_method_declaration_lines.append(
-            "        void %s(%s);\n" % (event_name, ", ".join(decl_parameter_list)))
-
-    class EventMethodStructTemplate:
-        @staticmethod
-        def append_prolog(line_list):
-            line_list.append("    RefPtr<JSONObject> paramsObject = JSONObject::create();\n")
-
-        @staticmethod
-        def append_epilog(line_list):
-            line_list.append("    jsonMessage->setObject(\"params\", paramsObject);\n")
-
-        container_name = "paramsObject"
-
-    @staticmethod
-    def process_command(json_command, domain_name, agent_field_name, agent_interface_name):
-        if (("handlers" in json_command) and (not ("renderer" in json_command["handlers"]))):
-            return
-
-        json_command_name = json_command["name"]
-
-        cmd_enum_name = "k%s_%sCmd" % (domain_name, json_command["name"])
-
-        Generator.method_name_enum_list.append("        %s," % cmd_enum_name)
-        Generator.method_handler_list.append("            &InspectorBackendDispatcherImpl::%s_%s," % (domain_name, json_command_name))
-        Generator.backend_method_declaration_list.append("    void %s_%s(int callId, JSONObject* requestMessageObject, JSONArray* protocolErrors);" % (domain_name, json_command_name))
-
-        backend_agent_interface_list = [] if "redirect" in json_command else Generator.backend_agent_interface_list
-
-        ad_hoc_type_output = []
-        backend_agent_interface_list.append(ad_hoc_type_output)
-        ad_hoc_type_writer = Writer(ad_hoc_type_output, "        ")
-
-        backend_agent_interface_list.append("        virtual void %s(ErrorString*" % json_command_name)
-
-        method_in_code = ""
-        method_out_code = ""
-        agent_call_param_list = ["&error"]
-        agent_call_params_declaration_list = ["    ErrorString error;"]
-        send_response_call_params_list = ["error"]
-        request_message_param = ""
-        normal_response_cook_text = ""
-        error_type_binding = None
-        if "error" in json_command:
-            json_error = json_command["error"]
-            error_type_binding = Generator.resolve_type_and_generate_ad_hoc(json_error, json_command_name + "Error", json_command_name, domain_name, ad_hoc_type_writer, agent_interface_name + "::")
-            error_type_model = error_type_binding.get_type_model().get_optional()
-            error_annotated_type = error_type_model.get_command_return_pass_model().get_output_parameter_type()
-            agent_call_param_list.append("%serrorData" % error_type_model.get_command_return_pass_model().get_output_argument_prefix())
-            backend_agent_interface_list.append(", %s errorData" % error_annotated_type)
-            method_in_code += "    %s errorData;\n" % error_type_model.get_command_return_pass_model().get_return_var_type()
-            send_response_call_params_list.append("errorData")
-
-        if "parameters" in json_command:
-            json_params = json_command["parameters"]
-            request_message_param = " requestMessageObject"
-
-            if json_params:
-                method_in_code += Templates.param_container_access_code
-
-            for json_parameter in json_params:
-                json_param_name = json_parameter["name"]
-                param_raw_type = resolve_param_raw_type(json_parameter, domain_name)
-
-                getter_name = param_raw_type.get_getter_name()
-
-                optional = json_parameter.get("optional")
-
-                non_optional_type_model = param_raw_type.get_raw_type_model()
-
-                if optional:
-                    code = ("    bool %s_valueFound = false;\n"
-                            "    %s in_%s = get%s(paramsContainerPtr, \"%s\", &%s_valueFound, protocolErrors);\n" %
-                           (json_param_name, non_optional_type_model.get_command_return_pass_model().get_return_var_type(), json_param_name, getter_name, json_param_name, json_param_name))
-                    param = "%s_valueFound ? &in_%s : 0" % (json_param_name, json_param_name)
-                    # FIXME: pass optional refptr-values as PassRefPtr
-                    formal_param_type_pattern = "const %s*"
-                else:
-                    code = ("    %s in_%s = get%s(paramsContainerPtr, \"%s\", 0, protocolErrors);\n" %
-                            (non_optional_type_model.get_command_return_pass_model().get_return_var_type(), json_param_name, getter_name, json_param_name))
-                    param = "in_%s" % json_param_name
-                    # FIXME: pass not-optional refptr-values as NonNullPassRefPtr
-                    if param_raw_type.is_heavy_value():
-                        formal_param_type_pattern = "const %s&"
-                    else:
-                        formal_param_type_pattern = "%s"
-
-                method_in_code += code
-                agent_call_param_list.append(param)
-                backend_agent_interface_list.append(", %s in_%s" % (formal_param_type_pattern % non_optional_type_model.get_command_return_pass_model().get_return_var_type(), json_param_name))
-
-        if json_command.get("async") == True:
-            callback_name = Capitalizer.lower_camel_case_to_upper(json_command_name) + "Callback"
-
-            callback_output = []
-            callback_writer = Writer(callback_output, ad_hoc_type_writer.get_indent())
-
-            decl_parameter_list = []
-            Generator.generate_send_method(json_command.get("returns"), json_command_name, domain_name, ad_hoc_type_writer,
-                                           decl_parameter_list,
-                                           Generator.CallbackMethodStructTemplate,
-                                           Generator.backend_method_implementation_list, Templates.callback_main_methods,
-                                           {"callbackName": callback_name, "agentName": agent_interface_name})
-
-            callback_writer.newline("class " + callback_name + " : public CallbackBase {\n")
-            callback_writer.newline("public:\n")
-            callback_writer.newline("    " + callback_name + "(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl>, int id);\n")
-            callback_writer.newline("    CORE_EXPORT void sendSuccess(" + ", ".join(decl_parameter_list) + ");\n")
-            error_part_writer = callback_writer.insert_writer("")
-            callback_writer.newline("};\n")
-
-            if error_type_binding:
-                annotated_type = error_type_model.get_input_param_type_text()
-                error_part_writer.newline("    void sendFailure(const ErrorString&, %s);\n" % annotated_type)
-                error_part_writer.newline("    using CallbackBase::sendFailure;\n")
-
-                assigment_value = error_type_model.get_event_setter_expression_pattern() % "errorData"
-                assigment_value = error_type_binding.reduce_to_raw_type().get_constructor_pattern() % assigment_value
-
-                Generator.backend_method_implementation_list.append(Templates.callback_failure_method.substitute(None,
-                    agentName=agent_interface_name,
-                    callbackName=callback_name,
-                    parameter=annotated_type + " errorData",
-                    argument=assigment_value))
-
-            ad_hoc_type_output.append(callback_output)
-
-            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(", PassRefPtrWillBeRawPtr<%s> callback" % callback_name)
-        else:
-            if "returns" in json_command:
-                method_out_code += "\n"
-                agent_call_params_declaration_list.append("    RefPtr<JSONObject> result = JSONObject::create();")
-                send_response_call_params_list.append("result")
-                response_cook_list = []
-                for json_return in json_command["returns"]:
-
-                    json_return_name = json_return["name"]
-
-                    optional = bool(json_return.get("optional"))
-
-                    return_type_binding = Generator.resolve_param_type_and_generate_ad_hoc(json_return, json_command_name, domain_name, ad_hoc_type_writer, agent_interface_name + "::")
-
-                    raw_type = return_type_binding.reduce_to_raw_type()
-                    setter_type = raw_type.get_setter_name()
-
-                    type_model = return_type_binding.get_type_model()
-                    if optional:
-                        type_model = type_model.get_optional()
-
-                    code = "    %s out_%s;\n" % (type_model.get_command_return_pass_model().get_return_var_type(), json_return_name)
-                    param = "%sout_%s" % (type_model.get_command_return_pass_model().get_output_argument_prefix(), json_return_name)
-                    var_name = "out_%s" % json_return_name
-                    setter_argument = type_model.get_command_return_pass_model().get_output_to_raw_expression() % var_name
-                    if return_type_binding.get_setter_value_expression_pattern():
-                        setter_argument = return_type_binding.get_setter_value_expression_pattern() % setter_argument
-
-                    cook = "        result->set%s(\"%s\", %s);\n" % (setter_type, json_return_name,
-                                                                         setter_argument)
-
-                    set_condition_pattern = type_model.get_command_return_pass_model().get_set_return_condition()
-                    if set_condition_pattern:
-                        cook = ("        if (%s)\n    " % (set_condition_pattern % var_name)) + cook
-                    annotated_type = type_model.get_command_return_pass_model().get_output_parameter_type()
-
-                    param_name = var_name
-                    if optional:
-                        param_name = "opt_" + param_name
-
-                    backend_agent_interface_list.append(", %s %s" % (annotated_type, param_name))
-                    response_cook_list.append(cook)
-
-                    method_out_code += code
-                    agent_call_param_list.append(param)
-
-                normal_response_cook_text += "".join(response_cook_list)
-
-                if len(normal_response_cook_text) != 0:
-                    normal_response_cook_text = "    if (!error.length()) {\n" + normal_response_cook_text + "    }"
-
-        # Redirect to another agent's implementation.
-        agent_field = "m_" + agent_field_name
-        if "redirect" in json_command:
-            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,
-            agentField=agent_field,
-            methodCode="".join([method_in_code, method_out_code]),
-            agentCallParamsDeclaration="\n".join(agent_call_params_declaration_list),
-            agentCallParams=", ".join(agent_call_param_list),
-            requestMessageObject=request_message_param,
-            responseCook=normal_response_cook_text,
-            sendResponseCallParams=", ".join(send_response_call_params_list),
-            commandNameIndex=cmd_enum_name))
-        declaration_command_name = "%s.%s\\0" % (domain_name, json_command_name)
-        Generator.backend_method_name_declaration_list.append("    \"%s\"" % declaration_command_name)
-        assert Generator.backend_method_name_declaration_current_index < 2 ** 16, "Number too large for unsigned short."
-        Generator.backend_method_name_declaration_index_list.append("    %d," % Generator.backend_method_name_declaration_current_index)
-        Generator.backend_method_name_declaration_current_index += len(declaration_command_name) - 1
-
-        backend_agent_interface_list.append(") = 0;\n")
-
-    class CallbackMethodStructTemplate:
-        @staticmethod
-        def append_prolog(line_list):
-            pass
-
-        @staticmethod
-        def append_epilog(line_list):
-            pass
-
-        container_name = "jsonMessage"
-
-    # Generates common code for event sending and callback response data sending.
-    @staticmethod
-    def generate_send_method(parameters, event_name, domain_name, ad_hoc_type_writer, decl_parameter_list,
-                             method_struct_template,
-                             generator_method_list, method_template, template_params):
-        method_line_list = []
-        if parameters:
-            method_struct_template.append_prolog(method_line_list)
-            for json_parameter in parameters:
-                parameter_name = json_parameter["name"]
-
-                param_type_binding = Generator.resolve_param_type_and_generate_ad_hoc(json_parameter, event_name, domain_name, ad_hoc_type_writer, "")
-
-                raw_type = param_type_binding.reduce_to_raw_type()
-                raw_type_binding = RawTypeBinding(raw_type)
-
-                optional = bool(json_parameter.get("optional"))
-
-                setter_type = raw_type.get_setter_name()
-
-                type_model = param_type_binding.get_type_model()
-                raw_type_model = raw_type_binding.get_type_model()
-                if optional:
-                    type_model = type_model.get_optional()
-                    raw_type_model = raw_type_model.get_optional()
-
-                annotated_type = type_model.get_input_param_type_text()
-                mode_type_binding = param_type_binding
-
-                decl_parameter_list.append("%s %s" % (annotated_type, parameter_name))
-
-                setter_argument = raw_type_model.get_event_setter_expression_pattern() % parameter_name
-                if mode_type_binding.get_setter_value_expression_pattern():
-                    setter_argument = mode_type_binding.get_setter_value_expression_pattern() % setter_argument
-
-                setter_code = "    %s->set%s(\"%s\", %s);\n" % (method_struct_template.container_name, setter_type, parameter_name, setter_argument)
-                if optional:
-                    setter_code = ("    if (%s)\n    " % parameter_name) + setter_code
-                method_line_list.append(setter_code)
-
-            method_struct_template.append_epilog(method_line_list)
-
-        generator_method_list.append(method_template.substitute(None,
-            domainName=domain_name,
-            parameters=", ".join(decl_parameter_list),
-            code="".join(method_line_list), **template_params))
-
-    @classmethod
-    def resolve_param_type_and_generate_ad_hoc(cls, json_param, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param):
-        param_name = json_param["name"]
-        return cls.resolve_type_and_generate_ad_hoc(json_param, param_name, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param)
-
-    @staticmethod
-    def resolve_type_and_generate_ad_hoc(typable_element, element_name, method_name, domain_name, ad_hoc_type_writer, container_relative_name_prefix_param):
-        ad_hoc_type_list = []
-
-        class AdHocTypeContext:
-            container_full_name_prefix = "<not yet defined>"
-            container_relative_name_prefix = container_relative_name_prefix_param
-
-            @staticmethod
-            def get_type_name_fix():
-                class NameFix:
-                    class_name = Capitalizer.lower_camel_case_to_upper(element_name)
-
-                    @staticmethod
-                    def output_comment(writer):
-                        writer.newline("// Named after parameter '%s' while generating command/event %s.\n" % (element_name, method_name))
-
-                return NameFix
-
-            @staticmethod
-            def add_type(binding):
-                ad_hoc_type_list.append(binding)
-
-        type_binding = resolve_param_type(typable_element, domain_name, AdHocTypeContext)
-
-        class InterfaceForwardListener:
-            @staticmethod
-            def add_type_data(type_data):
-                pass
-
-        class InterfaceResolveContext:
-            forward_listener = InterfaceForwardListener
-
-        for type in ad_hoc_type_list:
-            type.resolve_inner(InterfaceResolveContext)
-
-        class InterfaceGenerateContext:
-            validator_writer = "not supported in InterfaceGenerateContext"
-            cpp_writer = validator_writer
-
-        for type in ad_hoc_type_list:
-            generator = type.get_code_generator()
-            if generator:
-                generator.generate_type_builder(ad_hoc_type_writer, InterfaceGenerateContext)
-
-        return type_binding
-
-    @staticmethod
-    def process_types(type_map):
-        output = Generator.type_builder_fragments
-
-        class GenerateContext:
-            validator_writer = Writer(Generator.validator_impl_list, "")
-            cpp_writer = Writer(Generator.type_builder_impl_list, "")
-
-        def generate_all_domains_code(out, type_data_callback):
-            writer = Writer(out, "")
-            for domain_data in type_map.domains():
-                namespace_declared = []
-
-                def namespace_lazy_generator():
-                    if not namespace_declared:
-                        writer.newline("namespace ")
-                        writer.append(domain_data.name())
-                        writer.append(" {\n")
-                        # What is a better way to change value from outer scope?
-                        namespace_declared.append(True)
-                    return writer
-
-                for type_data in domain_data.types():
-                    type_data_callback(type_data, namespace_lazy_generator)
-
-                if namespace_declared:
-                    writer.append("} // ")
-                    writer.append(domain_data.name())
-                    writer.append("\n\n")
-
-        def create_type_builder_caller(generate_pass_id):
-            def call_type_builder(type_data, writer_getter):
-                code_generator = type_data.get_binding().get_code_generator()
-                if code_generator and generate_pass_id == code_generator.get_generate_pass_id():
-                    writer = writer_getter()
-
-                    code_generator.generate_type_builder(writer, GenerateContext)
-            return call_type_builder
-
-        generate_all_domains_code(output, create_type_builder_caller(TypeBuilderPass.MAIN))
-
-        Generator.type_builder_forwards.append("// Forward declarations.\n")
-
-        def generate_forward_callback(type_data, writer_getter):
-            if type_data in global_forward_listener.type_data_set:
-                binding = type_data.get_binding()
-                binding.get_code_generator().generate_forward_declaration(writer_getter())
-        generate_all_domains_code(Generator.type_builder_forwards, generate_forward_callback)
-
-        Generator.type_builder_forwards.append("// End of forward declarations.\n\n")
-
-        Generator.type_builder_forwards.append("// Typedefs.\n")
-
-        generate_all_domains_code(Generator.type_builder_forwards, create_type_builder_caller(TypeBuilderPass.TYPEDEF))
-
-        Generator.type_builder_forwards.append("// End of typedefs.\n\n")
-
-
-def flatten_list(input):
-    res = []
-
-    def fill_recursive(l):
-        for item in l:
-            if isinstance(item, list):
-                fill_recursive(item)
-            else:
-                res.append(item)
-    fill_recursive(input)
-    return res
-
-def output_file(file_name):
-    return open(file_name, "w")
-
-
-Generator.go()
-
-backend_h_file = output_file(output_dirname + "/InspectorBackendDispatcher.h")
-backend_cpp_file = output_file(output_dirname + "/InspectorBackendDispatcher.cpp")
-
-frontend_h_file = output_file(output_dirname + "/InspectorFrontend.h")
-frontend_cpp_file = output_file(output_dirname + "/InspectorFrontend.cpp")
-
-typebuilder_h_file = output_file(output_dirname + "/InspectorTypeBuilder.h")
-typebuilder_cpp_file = output_file(output_dirname + "/InspectorTypeBuilder.cpp")
-
-
-backend_h_file.write(Templates.backend_h.substitute(None,
-    virtualSetters="\n".join(Generator.backend_virtual_setters_list),
-    agentInterfaces="".join(flatten_list(Generator.backend_agent_interface_list)),
-    methodNamesEnumContent="\n".join(Generator.method_name_enum_list)))
-
-backend_cpp_file.write(Templates.backend_cpp.substitute(None,
-    constructorInit="\n".join(Generator.backend_constructor_init_list),
-    setters="\n".join(Generator.backend_setters_list),
-    fieldDeclarations="\n".join(Generator.backend_field_list),
-    methodNameDeclarations="\n".join(Generator.backend_method_name_declaration_list),
-    methodNameDeclarationsIndex="\n".join(Generator.backend_method_name_declaration_index_list),
-    methods="\n".join(Generator.backend_method_implementation_list),
-    methodDeclarations="\n".join(Generator.backend_method_declaration_list),
-    messageHandlers="\n".join(Generator.method_handler_list)))
-
-frontend_h_file.write(Templates.frontend_h.substitute(None,
-    fieldDeclarations="".join(Generator.frontend_class_field_lines),
-    domainClassList="".join(Generator.frontend_domain_class_lines)))
-
-frontend_cpp_file.write(Templates.frontend_cpp.substitute(None,
-    constructorInit="".join(Generator.frontend_constructor_init_list),
-    methods="\n".join(Generator.frontend_method_list)))
-
-typebuilder_h_file.write(Templates.typebuilder_h.substitute(None,
-    typeBuilders="".join(flatten_list(Generator.type_builder_fragments)),
-    forwards="".join(Generator.type_builder_forwards),
-    validatorIfdefName=VALIDATOR_IFDEF_NAME))
-
-typebuilder_cpp_file.write(Templates.typebuilder_cpp.substitute(None,
-    enumConstantValues=EnumConstants.get_enum_constant_code(),
-    implCode="".join(flatten_list(Generator.type_builder_impl_list)),
-    validatorCode="".join(flatten_list(Generator.validator_impl_list)),
-    validatorIfdefName=VALIDATOR_IFDEF_NAME))
-
-backend_h_file.close()
-backend_cpp_file.close()
-
-frontend_h_file.close()
-frontend_cpp_file.close()
-
-typebuilder_h_file.close()
-typebuilder_cpp_file.close()
diff --git a/core/inspector/CodeGeneratorInspectorStrings.py b/core/inspector/CodeGeneratorInspectorStrings.py
deleted file mode 100644
index e20c806..0000000
--- a/core/inspector/CodeGeneratorInspectorStrings.py
+++ /dev/null
@@ -1,917 +0,0 @@
-# Copyright (c) 2013 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.
-
-# THis file contains string resources for CodeGeneratorInspector.
-# Its syntax is a Python syntax subset, suitable for manual parsing.
-
-frontend_domain_class = (
-"""    class CORE_EXPORT $domainClassName {
-    public:
-        static $domainClassName* from(InspectorFrontend* frontend) { return &(frontend->m_$domainFieldName) ;}
-        $domainClassName(InspectorFrontendChannel* inspectorFrontendChannel) : m_inspectorFrontendChannel(inspectorFrontendChannel) { }
-${frontendDomainMethodDeclarations}
-        void flush() { m_inspectorFrontendChannel->flush(); }
-    private:
-        InspectorFrontendChannel* m_inspectorFrontendChannel;
-    };
-
-""")
-
-backend_method = (
-"""void InspectorBackendDispatcherImpl::${domainName}_$methodName(int callId, JSONObject*$requestMessageObject, JSONArray* protocolErrors)
-{
-    if (!$agentField)
-        protocolErrors->pushString("${domainName} handler is not available.");
-$methodCode
-    if (protocolErrors->length()) {
-        reportProtocolError(callId, InvalidParams, String::format(InvalidParamsFormatString, commandName($commandNameIndex)), protocolErrors);
-        return;
-    }
-$agentCallParamsDeclaration
-    $agentField->$methodName($agentCallParams);
-$responseCook
-    sendResponse(callId, $sendResponseCallParams);
-}
-""")
-
-frontend_method = ("""void InspectorFrontend::$domainName::$eventName($parameters)
-{
-    RefPtr<JSONObject> jsonMessage = JSONObject::create();
-    jsonMessage->setString("method", "$domainName.$eventName");
-$code    if (m_inspectorFrontendChannel)
-        m_inspectorFrontendChannel->sendProtocolNotification(jsonMessage.release());
-}
-""")
-
-callback_main_methods = (
-"""InspectorBackendDispatcher::$agentName::$callbackName::$callbackName(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id) : CallbackBase(backendImpl, id) {}
-
-void InspectorBackendDispatcher::$agentName::$callbackName::sendSuccess($parameters)
-{
-    RefPtr<JSONObject> jsonMessage = JSONObject::create();
-$code    sendIfActive(jsonMessage, ErrorString(), PassRefPtr<JSONValue>());
-}
-""")
-
-callback_failure_method = (
-"""void InspectorBackendDispatcher::$agentName::$callbackName::sendFailure(const ErrorString& error, $parameter)
-{
-    ASSERT(error.length());
-    RefPtr<JSONValue> errorDataValue;
-    if (error) {
-        errorDataValue = $argument;
-    }
-    sendIfActive(nullptr, error, errorDataValue.release());
-}
-""")
-
-
-frontend_h = (
-"""#ifndef InspectorFrontend_h
-#define InspectorFrontend_h
-
-#include "InspectorTypeBuilder.h"
-#include "core/CoreExport.h"
-#include "core/inspector/InspectorFrontendChannel.h"
-#include "platform/JSONValues.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/text/WTFString.h"
-
-namespace blink {
-
-typedef String ErrorString;
-
-class CORE_EXPORT InspectorFrontend {
-public:
-    InspectorFrontend(InspectorFrontendChannel*);
-    InspectorFrontendChannel* channel() { return m_inspectorFrontendChannel; }
-
-$domainClassList
-private:
-    InspectorFrontendChannel* m_inspectorFrontendChannel;
-${fieldDeclarations}};
-
-} // namespace blink
-#endif // !defined(InspectorFrontend_h)
-""")
-
-backend_h = (
-"""#ifndef InspectorBackendDispatcher_h
-#define InspectorBackendDispatcher_h
-
-#include "InspectorTypeBuilder.h"
-
-#include "core/CoreExport.h"
-#include "platform/heap/Handle.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefCounted.h"
-#include "wtf/text/WTFString.h"
-
-namespace blink {
-
-class JSONObject;
-class JSONArray;
-class InspectorFrontendChannel;
-
-typedef String ErrorString;
-
-class InspectorBackendDispatcherImpl;
-
-class CORE_EXPORT InspectorBackendDispatcher: public RefCountedWillBeGarbageCollectedFinalized<InspectorBackendDispatcher> {
-public:
-    static PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> create(InspectorFrontendChannel* inspectorFrontendChannel);
-    virtual ~InspectorBackendDispatcher() { }
-    DEFINE_INLINE_VIRTUAL_TRACE() { }
-
-    class CORE_EXPORT CallbackBase: public RefCountedWillBeGarbageCollectedFinalized<CallbackBase> {
-    public:
-        CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id);
-        virtual ~CallbackBase();
-        DECLARE_VIRTUAL_TRACE();
-        void sendFailure(const ErrorString&);
-        bool isActive();
-
-    protected:
-        void sendIfActive(PassRefPtr<JSONObject> partialMessage, const ErrorString& invocationError, PassRefPtr<JSONValue> errorData);
-
-    private:
-        void disable() { m_alreadySent = true; }
-
-        RefPtrWillBeMember<InspectorBackendDispatcherImpl> m_backendImpl;
-        int m_id;
-        bool m_alreadySent;
-
-        friend class InspectorBackendDispatcherImpl;
-    };
-
-$agentInterfaces
-$virtualSetters
-
-    virtual void clearFrontend() = 0;
-
-    enum CommonErrorCode {
-        ParseError = 0,
-        InvalidRequest,
-        MethodNotFound,
-        InvalidParams,
-        InternalError,
-        ServerError,
-        LastEntry,
-    };
-
-    void reportProtocolError(int callId, CommonErrorCode, const String& errorMessage) const;
-    virtual void reportProtocolError(int callId, CommonErrorCode, const String& errorMessage, PassRefPtr<JSONValue> data) const = 0;
-    virtual void dispatch(const String& message) = 0;
-    static bool getCommandName(const String& message, String* result);
-
-    enum MethodNames {
-$methodNamesEnumContent
-
-        kMethodNamesEnumSize
-    };
-
-    static const char* commandName(MethodNames);
-
-private:
-    static const char commandNames[];
-    static const unsigned short commandNamesIndex[];
-};
-
-} // namespace blink
-#endif // !defined(InspectorBackendDispatcher_h)
-
-
-""")
-
-backend_cpp = (
-"""
-
-#include "config.h"
-#include "InspectorBackendDispatcher.h"
-
-#include "core/inspector/InspectorFrontendChannel.h"
-#include "core/inspector/JSONParser.h"
-#include "platform/JSONValues.h"
-#include "wtf/text/CString.h"
-#include "wtf/text/WTFString.h"
-
-namespace blink {
-
-const char InspectorBackendDispatcher::commandNames[] = {
-$methodNameDeclarations
-};
-
-const unsigned short InspectorBackendDispatcher::commandNamesIndex[] = {
-$methodNameDeclarationsIndex
-};
-
-const char* InspectorBackendDispatcher::commandName(MethodNames index) {
-    static_assert(static_cast<int>(kMethodNamesEnumSize) == WTF_ARRAY_LENGTH(commandNamesIndex), "MethodNames enum should have the same number of elements as commandNamesIndex");
-    return commandNames + commandNamesIndex[index];
-}
-
-class InspectorBackendDispatcherImpl : public InspectorBackendDispatcher {
-public:
-    InspectorBackendDispatcherImpl(InspectorFrontendChannel* inspectorFrontendChannel)
-        : m_inspectorFrontendChannel(inspectorFrontendChannel)
-$constructorInit
-    {
-        // Initialize dispatch map.
-        const CallHandler handlers[] = {
-  $messageHandlers
-        };
-        for (size_t i = 0; i < kMethodNamesEnumSize; ++i)
-            m_dispatchMap.add(commandName(static_cast<MethodNames>(i)), handlers[i]);
-
-        // Initialize common errors.
-        m_commonErrors.insert(ParseError, -32700);
-        m_commonErrors.insert(InvalidRequest, -32600);
-        m_commonErrors.insert(MethodNotFound, -32601);
-        m_commonErrors.insert(InvalidParams, -32602);
-        m_commonErrors.insert(InternalError, -32603);
-        m_commonErrors.insert(ServerError, -32000);
-    }
-
-    virtual void clearFrontend() { m_inspectorFrontendChannel = 0; }
-    virtual void dispatch(const String& message);
-    virtual void reportProtocolError(int callId, CommonErrorCode, const String& errorMessage, PassRefPtr<JSONValue> data) const;
-    using InspectorBackendDispatcher::reportProtocolError;
-
-    void sendResponse(int callId, const ErrorString& invocationError, PassRefPtr<JSONValue> errorData, PassRefPtr<JSONObject> result);
-    bool isActive() { return m_inspectorFrontendChannel; }
-
-$setters
-private:
-    using CallHandler = void (InspectorBackendDispatcherImpl::*)(int callId, JSONObject* messageObject, JSONArray* protocolErrors);
-    using DispatchMap = HashMap<String, CallHandler>;
-
-$methodDeclarations
-
-    InspectorFrontendChannel* m_inspectorFrontendChannel;
-$fieldDeclarations
-
-    template<typename R, typename V, typename V0>
-    static R getPropertyValueImpl(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors, V0 initial_value, bool (*as_method)(JSONValue*, V*), const char* type_name);
-
-    static int getInt(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-    static double getDouble(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-    static String getString(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-    static bool getBoolean(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-    static PassRefPtr<JSONObject> getObject(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-    static PassRefPtr<JSONArray> getArray(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors);
-
-    void sendResponse(int callId, ErrorString invocationError, PassRefPtr<JSONObject> result)
-    {
-        sendResponse(callId, invocationError, RefPtr<JSONValue>(), result);
-    }
-    void sendResponse(int callId, ErrorString invocationError)
-    {
-        sendResponse(callId, invocationError, RefPtr<JSONValue>(), JSONObject::create());
-    }
-    static const char InvalidParamsFormatString[];
-
-    DispatchMap m_dispatchMap;
-    Vector<int> m_commonErrors;
-};
-
-const char InspectorBackendDispatcherImpl::InvalidParamsFormatString[] = "Some arguments of method '%s' can't be processed";
-
-$methods
-
-PassRefPtrWillBeRawPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(InspectorFrontendChannel* inspectorFrontendChannel)
-{
-    return adoptRefWillBeNoop(new InspectorBackendDispatcherImpl(inspectorFrontendChannel));
-}
-
-
-void InspectorBackendDispatcherImpl::dispatch(const String& message)
-{
-    RefPtrWillBeRawPtr<InspectorBackendDispatcher> protect(this);
-    int callId = 0;
-    RefPtr<JSONValue> parsedMessage = parseJSON(message);
-    ASSERT(parsedMessage);
-    RefPtr<JSONObject> messageObject = parsedMessage->asObject();
-    ASSERT(messageObject);
-
-    RefPtr<JSONValue> callIdValue = messageObject->get("id");
-    bool success = callIdValue->asNumber(&callId);
-    ASSERT_UNUSED(success, success);
-
-    RefPtr<JSONValue> methodValue = messageObject->get("method");
-    String method;
-    success = methodValue && methodValue->asString(&method);
-    ASSERT_UNUSED(success, success);
-
-    HashMap<String, CallHandler>::iterator it = m_dispatchMap.find(method);
-    if (it == m_dispatchMap.end()) {
-        reportProtocolError(callId, MethodNotFound, "'" + method + "' wasn't found");
-        return;
-    }
-
-    RefPtr<JSONArray> protocolErrors = JSONArray::create();
-    ((*this).*it->value)(callId, messageObject.get(), protocolErrors.get());
-}
-
-void InspectorBackendDispatcherImpl::sendResponse(int callId, const ErrorString& invocationError, PassRefPtr<JSONValue> errorData, PassRefPtr<JSONObject> result)
-{
-    if (invocationError.length()) {
-        reportProtocolError(callId, ServerError, invocationError, errorData);
-        return;
-    }
-
-    RefPtr<JSONObject> responseMessage = JSONObject::create();
-    responseMessage->setNumber("id", callId);
-    responseMessage->setObject("result", result);
-    if (m_inspectorFrontendChannel)
-        m_inspectorFrontendChannel->sendProtocolResponse(callId, responseMessage.release());
-}
-
-void InspectorBackendDispatcher::reportProtocolError(int callId, CommonErrorCode code, const String& errorMessage) const
-{
-    reportProtocolError(callId, code, errorMessage, PassRefPtr<JSONValue>());
-}
-
-void InspectorBackendDispatcherImpl::reportProtocolError(int callId, CommonErrorCode code, const String& errorMessage, PassRefPtr<JSONValue> data) const
-{
-    ASSERT(code >=0);
-    ASSERT((unsigned)code < m_commonErrors.size());
-    ASSERT(m_commonErrors[code]);
-    RefPtr<JSONObject> error = JSONObject::create();
-    error->setNumber("code", m_commonErrors[code]);
-    error->setString("message", errorMessage);
-    ASSERT(error);
-    if (data)
-        error->setValue("data", data);
-    RefPtr<JSONObject> message = JSONObject::create();
-    message->setObject("error", error);
-    message->setNumber("id", callId);
-    if (m_inspectorFrontendChannel)
-        m_inspectorFrontendChannel->sendProtocolResponse(callId, message.release());
-}
-
-template<typename R, typename V, typename V0>
-R InspectorBackendDispatcherImpl::getPropertyValueImpl(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors, V0 initial_value, bool (*as_method)(JSONValue*, V*), const char* type_name)
-{
-    ASSERT(protocolErrors);
-
-    if (valueFound)
-        *valueFound = false;
-
-    V value = initial_value;
-
-    if (!object) {
-        if (!valueFound) {
-            // Required parameter in missing params container.
-            protocolErrors->pushString(String::format("'params' object must contain required parameter '%s' with type '%s'.", name, type_name));
-        }
-        return value;
-    }
-
-    JSONObject::const_iterator end = object->end();
-    JSONObject::const_iterator valueIterator = object->find(name);
-
-    if (valueIterator == end) {
-        if (!valueFound)
-            protocolErrors->pushString(String::format("Parameter '%s' with type '%s' was not found.", name, type_name));
-        return value;
-    }
-
-    if (!as_method(valueIterator->value.get(), &value))
-        protocolErrors->pushString(String::format("Parameter '%s' has wrong type. It must be '%s'.", name, type_name));
-    else
-        if (valueFound)
-            *valueFound = true;
-    return value;
-}
-
-struct AsMethodBridges {
-    static bool asInt(JSONValue* value, int* output) { return value->asNumber(output); }
-    static bool asDouble(JSONValue* value, double* output) { return value->asNumber(output); }
-    static bool asString(JSONValue* value, String* output) { return value->asString(output); }
-    static bool asBoolean(JSONValue* value, bool* output) { return value->asBoolean(output); }
-    static bool asObject(JSONValue* value, RefPtr<JSONObject>* output) { return value->asObject(output); }
-    static bool asArray(JSONValue* value, RefPtr<JSONArray>* output) { return value->asArray(output); }
-};
-
-int InspectorBackendDispatcherImpl::getInt(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<int, int, int>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asInt, "Number");
-}
-
-double InspectorBackendDispatcherImpl::getDouble(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<double, double, double>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asDouble, "Number");
-}
-
-String InspectorBackendDispatcherImpl::getString(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<String, String, String>(object, name, valueFound, protocolErrors, "", AsMethodBridges::asString, "String");
-}
-
-bool InspectorBackendDispatcherImpl::getBoolean(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<bool, bool, bool>(object, name, valueFound, protocolErrors, false, AsMethodBridges::asBoolean, "Boolean");
-}
-
-PassRefPtr<JSONObject> InspectorBackendDispatcherImpl::getObject(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<PassRefPtr<JSONObject>, RefPtr<JSONObject>, JSONObject*>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asObject, "Object");
-}
-
-PassRefPtr<JSONArray> InspectorBackendDispatcherImpl::getArray(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors)
-{
-    return getPropertyValueImpl<PassRefPtr<JSONArray>, RefPtr<JSONArray>, JSONArray*>(object, name, valueFound, protocolErrors, 0, AsMethodBridges::asArray, "Array");
-}
-
-bool InspectorBackendDispatcher::getCommandName(const String& message, String* result)
-{
-    RefPtr<JSONValue> value = parseJSON(message);
-    if (!value)
-        return false;
-
-    RefPtr<JSONObject> object = value->asObject();
-    if (!object)
-        return false;
-
-    if (!object->getString("method", result))
-        return false;
-
-    return true;
-}
-
-InspectorBackendDispatcher::CallbackBase::CallbackBase(PassRefPtrWillBeRawPtr<InspectorBackendDispatcherImpl> backendImpl, int id)
-    : m_backendImpl(backendImpl), m_id(id), m_alreadySent(false) {}
-
-InspectorBackendDispatcher::CallbackBase::~CallbackBase() {}
-
-DEFINE_TRACE(InspectorBackendDispatcher::CallbackBase)
-{
-    visitor->trace(m_backendImpl);
-}
-
-void InspectorBackendDispatcher::CallbackBase::sendFailure(const ErrorString& error)
-{
-    ASSERT(error.length());
-    sendIfActive(nullptr, error, PassRefPtr<JSONValue>());
-}
-
-bool InspectorBackendDispatcher::CallbackBase::isActive()
-{
-    return !m_alreadySent && m_backendImpl->isActive();
-}
-
-void InspectorBackendDispatcher::CallbackBase::sendIfActive(PassRefPtr<JSONObject> partialMessage, const ErrorString& invocationError, PassRefPtr<JSONValue> errorData)
-{
-    if (m_alreadySent)
-        return;
-    m_backendImpl->sendResponse(m_id, invocationError, errorData, partialMessage);
-    m_alreadySent = true;
-}
-
-} // namespace blink
-
-""")
-
-frontend_cpp = (
-"""
-
-#include "config.h"
-#include "InspectorFrontend.h"
-
-#include "core/inspector/InspectorFrontendChannel.h"
-#include "platform/JSONValues.h"
-#include "wtf/text/CString.h"
-#include "wtf/text/WTFString.h"
-
-namespace blink {
-
-InspectorFrontend::InspectorFrontend(InspectorFrontendChannel* inspectorFrontendChannel)
-    : m_inspectorFrontendChannel(inspectorFrontendChannel)
-    , $constructorInit
-{
-}
-
-$methods
-
-} // namespace blink
-
-""")
-
-typebuilder_h = (
-"""
-#ifndef InspectorTypeBuilder_h
-#define InspectorTypeBuilder_h
-
-#include "core/CoreExport.h"
-#include "platform/JSONValues.h"
-#include "wtf/Assertions.h"
-#include "wtf/PassRefPtr.h"
-
-namespace blink {
-
-namespace TypeBuilder {
-
-template<typename T>
-class OptOutput {
-public:
-    OptOutput() : m_assigned(false) { }
-
-    void operator=(T value)
-    {
-        m_value = value;
-        m_assigned = true;
-    }
-
-    bool isAssigned() { return m_assigned; }
-
-    T getValue()
-    {
-        ASSERT(isAssigned());
-        return m_value;
-    }
-
-private:
-    T m_value;
-    bool m_assigned;
-
-    WTF_MAKE_NONCOPYABLE(OptOutput);
-};
-
-class RuntimeCastHelper {
-public:
-#if $validatorIfdefName
-    template<JSONValue::Type TYPE>
-    static void assertType(JSONValue* value)
-    {
-        ASSERT(value->type() == TYPE);
-    }
-    static void assertAny(JSONValue*);
-    static void assertInt(JSONValue* value);
-#endif
-};
-
-
-// This class provides "Traits" type for the input type T. It is programmed using C++ template specialization
-// technique. By default it simply takes "ItemTraits" type from T, but it doesn't work with the base types.
-template<typename T>
-struct ArrayItemHelper {
-    typedef typename T::ItemTraits Traits;
-};
-
-template<typename T>
-class Array : public JSONArrayBase {
-private:
-    Array() { }
-
-    JSONArray* openAccessors() {
-        static_assert(sizeof(JSONArray) == sizeof(Array<T>), "JSONArray should be the same size as Array<T>");
-        return static_cast<JSONArray*>(static_cast<JSONArrayBase*>(this));
-    }
-
-public:
-    void addItem(PassRefPtr<T> value)
-    {
-        ArrayItemHelper<T>::Traits::pushRefPtr(this->openAccessors(), value);
-    }
-
-    void addItem(T value)
-    {
-        ArrayItemHelper<T>::Traits::pushRaw(this->openAccessors(), value);
-    }
-
-    static PassRefPtr<Array<T> > create()
-    {
-        return adoptRef(new Array<T>());
-    }
-
-    static PassRefPtr<Array<T> > runtimeCast(PassRefPtr<JSONValue> value)
-    {
-        RefPtr<JSONArray> array;
-        bool castRes = value->asArray(&array);
-        ASSERT_UNUSED(castRes, castRes);
-#if $validatorIfdefName
-        assertCorrectValue(array.get());
-#endif  // $validatorIfdefName
-        static_assert(sizeof(Array<T>) == sizeof(JSONArray), "Array<T> should be the same size as JSONArray");
-        return static_cast<Array<T>*>(static_cast<JSONArrayBase*>(array.get()));
-    }
-
-    void concat(PassRefPtr<Array<T> > array)
-    {
-        return ArrayItemHelper<T>::Traits::concat(this->openAccessors(), array->openAccessors());
-    }
-
-#if $validatorIfdefName
-    static void assertCorrectValue(JSONValue* value)
-    {
-        RefPtr<JSONArray> array;
-        bool castRes = value->asArray(&array);
-        ASSERT_UNUSED(castRes, castRes);
-        for (unsigned i = 0; i < array->length(); i++)
-            ArrayItemHelper<T>::Traits::template assertCorrectValue<T>(array->get(i).get());
-    }
-
-#endif // $validatorIfdefName
-};
-
-struct StructItemTraits {
-    static void pushRefPtr(JSONArray* array, PassRefPtr<JSONValue> value)
-    {
-        array->pushValue(value);
-    }
-
-    static void concat(JSONArray* array, JSONArray* anotherArray)
-    {
-        for (JSONArray::iterator it = anotherArray->begin(); it != anotherArray->end(); ++it)
-            array->pushValue(*it);
-    }
-
-#if $validatorIfdefName
-    template<typename T>
-    static void assertCorrectValue(JSONValue* value) {
-        T::assertCorrectValue(value);
-    }
-#endif  // $validatorIfdefName
-};
-
-template<>
-struct ArrayItemHelper<String> {
-    struct Traits {
-        static void pushRaw(JSONArray* array, const String& value)
-        {
-            array->pushString(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertType<JSONValue::TypeString>(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<int> {
-    struct Traits {
-        static void pushRaw(JSONArray* array, int value)
-        {
-            array->pushInt(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertInt(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<double> {
-    struct Traits {
-        static void pushRaw(JSONArray* array, double value)
-        {
-            array->pushNumber(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertType<JSONValue::TypeNumber>(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<bool> {
-    struct Traits {
-        static void pushRaw(JSONArray* array, bool value)
-        {
-            array->pushBoolean(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertType<JSONValue::TypeBoolean>(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<JSONValue> {
-    struct Traits {
-        static void pushRefPtr(JSONArray* array, PassRefPtr<JSONValue> value)
-        {
-            array->pushValue(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertAny(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<JSONObject> {
-    struct Traits {
-        static void pushRefPtr(JSONArray* array, PassRefPtr<JSONValue> value)
-        {
-            array->pushValue(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertType<JSONValue::TypeObject>(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<>
-struct ArrayItemHelper<JSONArray> {
-    struct Traits {
-        static void pushRefPtr(JSONArray* array, PassRefPtr<JSONArray> value)
-        {
-            array->pushArray(value);
-        }
-
-#if $validatorIfdefName
-        template<typename T>
-        static void assertCorrectValue(JSONValue* value) {
-            RuntimeCastHelper::assertType<JSONValue::TypeArray>(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-template<typename T>
-struct ArrayItemHelper<TypeBuilder::Array<T> > {
-    struct Traits {
-        static void pushRefPtr(JSONArray* array, PassRefPtr<TypeBuilder::Array<T> > value)
-        {
-            array->pushValue(value);
-        }
-
-#if $validatorIfdefName
-        template<typename S>
-        static void assertCorrectValue(JSONValue* value) {
-            S::assertCorrectValue(value);
-        }
-#endif  // $validatorIfdefName
-    };
-};
-
-${forwards}
-
-CORE_EXPORT String getEnumConstantValue(int code);
-
-${typeBuilders}
-} // namespace TypeBuilder
-
-
-} // namespace blink
-
-#endif // !defined(InspectorTypeBuilder_h)
-
-""")
-
-typebuilder_cpp = (
-"""
-
-#include "config.h"
-
-#include "InspectorTypeBuilder.h"
-#include "wtf/text/CString.h"
-
-namespace blink {
-
-namespace TypeBuilder {
-
-const char* const enum_constant_values[] = {
-$enumConstantValues};
-
-String getEnumConstantValue(int code) {
-    return enum_constant_values[code];
-}
-
-} // namespace TypeBuilder
-
-$implCode
-
-#if $validatorIfdefName
-
-void TypeBuilder::RuntimeCastHelper::assertAny(JSONValue*)
-{
-    // No-op.
-}
-
-
-void TypeBuilder::RuntimeCastHelper::assertInt(JSONValue* value)
-{
-    double v;
-    bool castRes = value->asNumber(&v);
-    ASSERT_UNUSED(castRes, castRes);
-    ASSERT(static_cast<double>(static_cast<int>(v)) == v);
-}
-
-$validatorCode
-
-#endif // $validatorIfdefName
-
-} // namespace blink
-
-""")
-
-param_container_access_code = """
-    RefPtr<JSONObject> paramsContainer = requestMessageObject->getObject("params");
-    JSONObject* paramsContainerPtr = paramsContainer.get();
-"""
-
-class_binding_builder_part_1 = (
-"""        AllFieldsSet = %s
-    };
-
-    template<int STATE>
-    class Builder {
-    private:
-        RefPtr<JSONObject> m_result;
-
-        template<int STEP> Builder<STATE | STEP>& castState()
-        {
-            return *reinterpret_cast<Builder<STATE | STEP>*>(this);
-        }
-
-        Builder(PassRefPtr</*%s*/JSONObject> ptr)
-        {
-            static_assert(STATE == NoFieldsSet, "builder should not be created in non-init state");
-            m_result = ptr;
-        }
-        friend class %s;
-    public:
-""")
-
-class_binding_builder_part_2 = ("""
-        Builder<STATE | %s>& set%s(%s value)
-        {
-            static_assert(!(STATE & %s), "property %s should not be set yet");
-            m_result->set%s("%s", %s);
-            return castState<%s>();
-        }
-""")
-
-class_binding_builder_part_3 = ("""
-        operator RefPtr<%s>& ()
-        {
-            static_assert(STATE == AllFieldsSet, "state should be AllFieldsSet");
-            static_assert(sizeof(%s) == sizeof(JSONObject), "%s should be the same size as JSONObject");
-            return *reinterpret_cast<RefPtr<%s>*>(&m_result);
-        }
-
-        PassRefPtr<%s> release()
-        {
-            return RefPtr<%s>(*this).release();
-        }
-    };
-
-""")
-
-class_binding_builder_part_4 = (
-"""    static Builder<NoFieldsSet> create()
-    {
-        return Builder<NoFieldsSet>(JSONObject::create());
-    }
-""")
diff --git a/core/inspector/CodeGeneratorInstrumentation.py b/core/inspector/CodeGeneratorInstrumentation.py
index 595812e..efcdb6d 100755
--- a/core/inspector/CodeGeneratorInstrumentation.py
+++ b/core/inspector/CodeGeneratorInstrumentation.py
@@ -80,8 +80,6 @@
 
 template_cpp = string.Template("""// Code generated from InspectorInstrumentation.idl
 
-#include "config.h"
-
 ${includes}
 
 namespace blink {
@@ -111,7 +109,7 @@
 
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/FastAllocBase.h"
+#include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
@@ -122,7 +120,7 @@
 
 class CORE_EXPORT InstrumentingAgents : public RefCountedWillBeGarbageCollectedFinalized<InstrumentingAgents> {
     WTF_MAKE_NONCOPYABLE(InstrumentingAgents);
-    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED(InstrumentingAgents);
+    USING_FAST_MALLOC_WILL_BE_REMOVED(InstrumentingAgents);
 public:
     static PassRefPtrWillBeRawPtr<InstrumentingAgents> create()
     {
diff --git a/core/inspector/DevToolsHost.idl b/core/inspector/DevToolsHost.idl
index d20abb5..096fd64 100644
--- a/core/inspector/DevToolsHost.idl
+++ b/core/inspector/DevToolsHost.idl
@@ -41,10 +41,7 @@
     void copyText(DOMString text);
 
     [Custom] DOMString platform();
-    // FIXME: showContextMenu is here only for old frontends. Remove in M43.
-    [Custom] void showContextMenu(MouseEvent event, any items);
     [Custom] void showContextMenuAtPoint(float x, float y, any items, optional Document document);
-    void sendMessageToBackend(DOMString message);
     void sendMessageToEmbedder(DOMString message);
 
     DOMString getSelectionBackgroundColor();
diff --git a/core/inspector/InspectorInstrumentation.idl b/core/inspector/InspectorInstrumentation.idl
index b070934..260db42 100644
--- a/core/inspector/InspectorInstrumentation.idl
+++ b/core/inspector/InspectorInstrumentation.idl
@@ -138,10 +138,10 @@
     void didRemoveTimer([Keep] ExecutionContext*, int timerId);
 
     [Debugger, Inline=FastReturn]
-    InspectorInstrumentationCookie willCallFunction([Keep] ExecutionContext*, const DevToolsFunctionInfo&);
+    InspectorInstrumentationCookie willExecuteScript(ExecutionContext*, int scriptId);
 
     [Debugger, Inline=FastReturn]
-    void didCallFunction(const InspectorInstrumentationCookie&);
+    void didExecuteScript(const InspectorInstrumentationCookie&);
 
     [AsyncCallTracker, Inline=FastReturn]
     void didEnqueueEvent([Keep] EventTarget*, Event*);
@@ -152,7 +152,7 @@
     [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
     InspectorInstrumentationCookie willHandleEvent([Keep] EventTarget*, Event*, EventListener* listener, bool useCapture);
 
-    [AsyncCallTracker, Debugger, Inline=FastReturn]
+    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
     void didHandleEvent(const InspectorInstrumentationCookie&);
 
     [AsyncCallTracker, Inline=FastReturn]
@@ -179,11 +179,8 @@
     [AsyncCallTracker, Inline=FastReturn]
     void didPerformExecutionContextTask(ExecutionContext*);
 
-    [Debugger, DOMDebugger, Inline=FastReturn]
-    InspectorInstrumentationCookie willEvaluateScript([Keep] LocalFrame*, const String& url, int lineNumber);
-
-    [Debugger, Inline=FastReturn]
-    void didEvaluateScript(const InspectorInstrumentationCookie&);
+    [DOMDebugger, Inline=FastReturn]
+    void willEvaluateScript(ExecutionContext*);
 
     [PageRuntime]
     void didCreateScriptContext([Keep] LocalFrame*, ScriptState*, SecurityOrigin*, int worldId);
@@ -194,14 +191,11 @@
     [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
     InspectorInstrumentationCookie willFireTimer([Keep] ExecutionContext*, int timerId);
 
-    [AsyncCallTracker, Debugger, Inline=FastReturn]
+    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
     void didFireTimer(const InspectorInstrumentationCookie&);
 
     [Page, Inline=FastReturn]
-    void didLayout(LocalFrame*);
-
-    [Page, Inline=FastReturn]
-    void didScroll(LocalFrame*);
+    void didUpdateLayout(LocalFrame*);
 
     [Page, Inline=FastReturn]
     void didResizeMainFrame(LocalFrame*);
@@ -210,12 +204,12 @@
     void didDispatchXHRLoadendEvent(ExecutionContext*, XMLHttpRequest*);
 
     [LayerTree, Inline=FastReturn]
-    void didPaint([Keep] LayoutObject*, const GraphicsLayer*, GraphicsContext*, const LayoutRect&);
+    void didPaint([Keep] LayoutObject*, const GraphicsLayer*, GraphicsContext&, const LayoutRect&);
 
     [Resource, Inline=FastReturn]
     InspectorInstrumentationCookie willRecalculateStyle([Keep] Document*);
 
-    [Resource, Inline=FastReturn]
+    [Resource, Page, Inline=FastReturn]
     void didRecalculateStyle(const InspectorInstrumentationCookie&, int elementCount);
 
     [Resource, Inline=FastReturn]
@@ -225,7 +219,10 @@
     void applyUserAgentOverride(LocalFrame*, String* userAgent);
 
     [Resource]
-    void willSendRequest(LocalFrame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse, const FetchInitiatorInfo&);
+    void didBlockRequest([Keep] LocalFrame*, const ResourceRequest&, DocumentLoader*, const FetchInitiatorInfo&, ResourceRequestBlockedReason);
+
+    [Resource]
+    void willSendRequest([Keep] LocalFrame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse, const FetchInitiatorInfo&);
 
     [Resource]
     void markResourceAsCached(LocalFrame*, unsigned long identifier);
@@ -258,13 +255,13 @@
     void willSendEventSourceRequest(ExecutionContext*, ThreadableLoaderClient* eventSource);
 
     [Resource]
-    void willDispachEventSourceEvent(ExecutionContext*, ThreadableLoaderClient* eventSource, const AtomicString& eventName, const AtomicString& eventId, const Vector<UChar>& data);
+    void willDispatchEventSourceEvent(ExecutionContext*, ThreadableLoaderClient* eventSource, const AtomicString& eventName, const AtomicString& eventId, const String& data);
 
     [Resource]
     void didFinishEventSourceRequest(ExecutionContext*, ThreadableLoaderClient* eventSource);
 
     [AsyncCallTracker, Resource]
-    void willLoadXHR(ExecutionContext*, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const KURL& url, bool async, PassRefPtr<FormData>, const HTTPHeaderMap& headers, bool includeCredentials);
+    void willLoadXHR(ExecutionContext*, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const KURL& url, bool async, PassRefPtr<EncodedFormData>, const HTTPHeaderMap& headers, bool includeCredentials);
 
     [Resource]
     void didFailXHRLoading([Keep] ExecutionContext*, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url);
@@ -273,6 +270,15 @@
     void didFinishXHRLoading([Keep] ExecutionContext*, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url);
 
     [Resource]
+    void willStartFetch(ExecutionContext*, ThreadableLoaderClient*);
+
+    [Resource]
+    void didFailFetch(ExecutionContext*, ThreadableLoaderClient*);
+
+    [Resource]
+    void didFinishFetch([Keep] ExecutionContext*, ThreadableLoaderClient*, const AtomicString& method, const String& url);
+
+    [Resource]
     void scriptImported(ExecutionContext*, unsigned long identifier, const String& sourceString);
 
     [Debugger]
@@ -321,7 +327,7 @@
     void didRunJavaScriptDialog(const InspectorInstrumentationCookie&, bool result);
 
     [Inline=Forward]
-    void willDestroyResource(Resource* cachedResource);
+    void removedResourceFromMemoryCache(Resource* cachedResource);
 
     [AsyncCallTracker, DOMDebugger]
     void didRequestAnimationFrame([Keep] ExecutionContext*, int callbackId);
@@ -408,10 +414,13 @@
     void traceAsyncCallbackCompleted(const InspectorInstrumentationCookie&);
 
     [Animation, Inline=FastReturn]
-    void didCreateAnimation(Document*, Animation* player);
+    void didCreateAnimation(Document*, unsigned);
 
     [Animation, Inline=FastReturn]
-    void didCancelAnimation(Document*, Animation* player);
+    void animationPlayStateChanged(Document*, Animation*, Animation::AnimationPlayState oldPlayState, Animation::AnimationPlayState newPlayState);
+
+    [Page, Inline=FastReturn]
+    void windowCreated(LocalFrame* opener, LocalFrame* created);
 }
 
 interface InspectorConsoleInstrumentation {
diff --git a/core/inspector/InspectorOverlayHost.idl b/core/inspector/InspectorOverlayHost.idl
index 1d31eba..c35fdeb 100644
--- a/core/inspector/InspectorOverlayHost.idl
+++ b/core/inspector/InspectorOverlayHost.idl
@@ -37,4 +37,7 @@
     void startPropertyChange(DOMString propertyName);
     void changeProperty(float cssDelta);
     void endPropertyChange();
+    void clearSelection(boolean commitChanges);
+    void nextSelector();
+    void previousSelector();
 };
diff --git a/core/origin_trials/testing/InternalsFrobulate.idl b/core/origin_trials/testing/InternalsFrobulate.idl
new file mode 100644
index 0000000..7c8c5cb
--- /dev/null
+++ b/core/origin_trials/testing/InternalsFrobulate.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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.
+
+partial interface Internals {
+    [CallWith=ScriptState, RaisesException] readonly attribute boolean frobulate;
+    readonly attribute boolean frobulateNoEnabledCheck;
+};
+
diff --git a/core/page/EventSource.idl b/core/page/EventSource.idl
index cabfc5c..05abf39 100644
--- a/core/page/EventSource.idl
+++ b/core/page/EventSource.idl
@@ -32,7 +32,7 @@
 // https://html.spec.whatwg.org/multipage/comms.html#the-eventsource-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString url, optional EventSourceInit eventSourceInitDict),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
diff --git a/core/page/PagePopupController.idl b/core/page/PagePopupController.idl
index 28051d0..f32cc46 100644
--- a/core/page/PagePopupController.idl
+++ b/core/page/PagePopupController.idl
@@ -41,7 +41,6 @@
     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);
     // window.resizeTo/moveTo are not suitable because LocalDOMWindow adjusts
     // rectangle to fit in the current screen. Popups sometimes need to be
     // positioned on other screens.
diff --git a/core/page/scrolling/ScrollState.idl b/core/page/scrolling/ScrollState.idl
index 2c7dcba..7e5ff50 100644
--- a/core/page/scrolling/ScrollState.idl
+++ b/core/page/scrolling/ScrollState.idl
@@ -2,31 +2,28 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://dev.w3.org/houdini/css-scroll-api/
+// https://docs.google.com/document/d/1VnvAqeWFG9JFZfgG5evBqrLGDZYRE5w6G5jEDORekPY
 
 [
-    Constructor(optional double deltaX = 0,
-                optional double deltaY = 0,
-                optional double deltaGranularity = 0,
-                optional double velocityX = 0,
-                optional double velocityY = 0,
-                optional boolean inInertialPhase = false,
-                optional boolean isBeginning = false,
-                optional boolean isEnding = false),
-    WillBeGarbageCollected,
-    RuntimeEnabled=ScrollCustomization
-] interface ScrollState {
+  Constructor(optional ScrollStateInit scrollStateInit),
+  WillBeGarbageCollected,
+  RuntimeEnabled = ScrollCustomization,
+] interface ScrollState
+{
     readonly attribute double deltaX;
     readonly attribute double deltaY;
-    readonly attribute double deltaGranularity;
+    readonly attribute long startPositionX;
+    readonly attribute long startPositionY;
     readonly attribute double velocityX;
     readonly attribute double velocityY;
+    readonly attribute boolean isBeginning;
     readonly attribute boolean inInertialPhase;
     readonly attribute boolean isEnding;
-    readonly attribute boolean isBeginning;
-    readonly attribute boolean fromUserInput;
     readonly attribute boolean shouldPropagate;
+    readonly attribute boolean fromUserInput;
+    readonly attribute boolean isDirectManipulation;
+    readonly attribute double deltaGranularity;
 
     [RaisesException] void consumeDelta(double x, double y);
-    // FIXME: implement distributeToScrollChainDescendent.
+    void distributeToScrollChainDescendant();
 };
diff --git a/core/page/scrolling/ScrollStateCallback.idl b/core/page/scrolling/ScrollStateCallback.idl
new file mode 100644
index 0000000..423710a
--- /dev/null
+++ b/core/page/scrolling/ScrollStateCallback.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://docs.google.com/document/d/1VnvAqeWFG9JFZfgG5evBqrLGDZYRE5w6G5jEDORekPY
+
+[
+    RuntimeEnabled=ScrollCustomization
+] callback interface ScrollStateCallback {
+    void handleEvent(ScrollState scrollState);
+};
diff --git a/core/page/scrolling/ScrollStateInit.idl b/core/page/scrolling/ScrollStateInit.idl
new file mode 100644
index 0000000..d7aa140
--- /dev/null
+++ b/core/page/scrolling/ScrollStateInit.idl
@@ -0,0 +1,21 @@
+// Copyright 2016 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://docs.google.com/document/d/1VnvAqeWFG9JFZfgG5evBqrLGDZYRE5w6G5jEDORekPY
+
+dictionary ScrollStateInit {
+    double deltaX = 0;
+    double deltaY = 0;
+    long startPositionX = 0;
+    long startPositionY = 0;
+    double velocityX = 0;
+    double velocityY = 0;
+    boolean isBeginning = false;
+    boolean isInInertialPhase = false;
+    boolean isEnding = false;
+    boolean shouldPropagate = true;
+    boolean fromUserInput = false;
+    boolean isDirectManipulation = false;
+    double deltaGranularity = 0;
+};
diff --git a/core/streams/ReadableStream.idl b/core/streams/ReadableStream.idl
deleted file mode 100644
index 33fbddc..0000000
--- a/core/streams/ReadableStream.idl
+++ /dev/null
@@ -1,11 +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.
-
-[
-    GarbageCollected,
-    Exposed=(Window,Worker),
-] interface ReadableStream {
-    [CallWith=ExecutionContext, RaisesException] ReadableStreamReader getReader();
-    [CallWith=ScriptState] Promise<void> cancel(optional any reason);
-};
diff --git a/core/streams/ReadableStreamReader.idl b/core/streams/ReadableStreamReader.idl
index 6603a3f..b3419cd 100644
--- a/core/streams/ReadableStreamReader.idl
+++ b/core/streams/ReadableStreamReader.idl
@@ -4,7 +4,7 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Exposed=(Window,Worker),
     NoInterfaceObject,
 ] interface ReadableStreamReader {
diff --git a/core/streams/Stream.idl b/core/streams/Stream.idl
index 875d17f..1d3128f 100644
--- a/core/streams/Stream.idl
+++ b/core/streams/Stream.idl
@@ -38,7 +38,7 @@
 
 [
     RuntimeEnabled=ExperimentalStream,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected
 ] interface Stream {
     readonly attribute DOMString type;
diff --git a/core/streams/UnderlyingSourceBase.idl b/core/streams/UnderlyingSourceBase.idl
new file mode 100644
index 0000000..0c0486f
--- /dev/null
+++ b/core/streams/UnderlyingSourceBase.idl
@@ -0,0 +1,15 @@
+// Copyright 2016 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.
+
+// This is not a spec interface. Instead, it is used to generate bindings
+// so that Blink code which wishes to create a stream can derive from
+// UnderlyingSourceBase, and a JavaScript object can then be generated
+// automatically for use in initializing a ReadableStream.
+
+[NoInterfaceObject, GarbageCollected, DependentLifetime]
+interface UnderlyingSourceBase {
+    [CallWith=ScriptState, ImplementedAs=startWrapper] Promise<void> start(any stream);
+    [CallWith=ScriptState] Promise<void> pull();
+    [CallWith=ScriptState, ImplementedAs=cancelWrapper] Promise<void> cancel([Default=Undefined] optional any reason);
+};
diff --git a/core/svg/SVGAElement.idl b/core/svg/SVGAElement.idl
index 2b678ad..15d5148 100644
--- a/core/svg/SVGAElement.idl
+++ b/core/svg/SVGAElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/SVG2/linking.html#InterfaceSVGAElement
 
 interface SVGAElement : SVGGraphicsElement {
-    [ImplementedAs=svgTarget, RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString target;
+    [ImplementedAs=svgTarget, Measure] readonly attribute SVGAnimatedString target;
 };
 
 SVGAElement implements SVGURIReference;
diff --git a/core/svg/SVGAngle.idl b/core/svg/SVGAngle.idl
index 4c02f71..64aa811 100644
--- a/core/svg/SVGAngle.idl
+++ b/core/svg/SVGAngle.idl
@@ -22,11 +22,9 @@
 
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAngle
 
-// TODO(philipj): SVGAngle should have constructors. crbug.com/366541
 [
     ImplementedAs=SVGAngleTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGAngle {
     // Angle Unit Types
@@ -39,8 +37,7 @@
     readonly attribute unsigned short unitType;
     [RaisesException=Setter] attribute float value;
     [RaisesException=Setter] attribute float valueInSpecifiedUnits;
-    // TODO(philipj): valueAsString should not have [TreatNullAs=NullString].
-    [TreatNullAs=NullString, RaisesException=Setter] attribute DOMString valueAsString;
+    [RaisesException=Setter] attribute DOMString valueAsString;
 
     [RaisesException] void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
     [RaisesException] void convertToSpecifiedUnits(unsigned short unitType);
diff --git a/core/svg/SVGAnimatedAngle.idl b/core/svg/SVGAnimatedAngle.idl
index 2f17812..4bd5848 100644
--- a/core/svg/SVGAnimatedAngle.idl
+++ b/core/svg/SVGAnimatedAngle.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedAngle {
     readonly attribute SVGAngle baseVal;
diff --git a/core/svg/SVGAnimatedBoolean.idl b/core/svg/SVGAnimatedBoolean.idl
index 3134c8d..531af6a 100644
--- a/core/svg/SVGAnimatedBoolean.idl
+++ b/core/svg/SVGAnimatedBoolean.idl
@@ -27,9 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedBoolean {
     [RaisesException=Setter] attribute boolean baseVal;
diff --git a/core/svg/SVGAnimatedEnumeration.idl b/core/svg/SVGAnimatedEnumeration.idl
index e610e6d..830f2c9 100644
--- a/core/svg/SVGAnimatedEnumeration.idl
+++ b/core/svg/SVGAnimatedEnumeration.idl
@@ -28,9 +28,6 @@
 [
     ImplementedAs=SVGAnimatedEnumerationBase,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedEnumeration {
     [RaisesException=Setter] attribute unsigned short baseVal;
diff --git a/core/svg/SVGAnimatedInteger.idl b/core/svg/SVGAnimatedInteger.idl
index 1f8dfc8..78520f6 100644
--- a/core/svg/SVGAnimatedInteger.idl
+++ b/core/svg/SVGAnimatedInteger.idl
@@ -27,9 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedInteger {
     [RaisesException=Setter] attribute long baseVal;
diff --git a/core/svg/SVGAnimatedLength.idl b/core/svg/SVGAnimatedLength.idl
index b46026e..3fbc245 100644
--- a/core/svg/SVGAnimatedLength.idl
+++ b/core/svg/SVGAnimatedLength.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedLength {
     readonly attribute SVGLength baseVal;
diff --git a/core/svg/SVGAnimatedLengthList.idl b/core/svg/SVGAnimatedLengthList.idl
index d96c3ec..2f79e7f 100644
--- a/core/svg/SVGAnimatedLengthList.idl
+++ b/core/svg/SVGAnimatedLengthList.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedLengthList {
     readonly attribute SVGLengthList baseVal;
diff --git a/core/svg/SVGAnimatedNumber.idl b/core/svg/SVGAnimatedNumber.idl
index 87fd762..9f228b4 100644
--- a/core/svg/SVGAnimatedNumber.idl
+++ b/core/svg/SVGAnimatedNumber.idl
@@ -27,10 +27,7 @@
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedNumber
 
 [
-    MeasureAs=SVG1DOM,
-    RuntimeEnabled=SVG1DOM,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGAnimatedNumber {
     [RaisesException=Setter] attribute float baseVal;
diff --git a/core/svg/SVGAnimatedNumberList.idl b/core/svg/SVGAnimatedNumberList.idl
index 5e73f09..c38f5cd 100644
--- a/core/svg/SVGAnimatedNumberList.idl
+++ b/core/svg/SVGAnimatedNumberList.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedNumberList {
     readonly attribute SVGNumberList baseVal;
diff --git a/core/svg/SVGAnimatedPreserveAspectRatio.idl b/core/svg/SVGAnimatedPreserveAspectRatio.idl
index 3f1528c..e4b4a93 100644
--- a/core/svg/SVGAnimatedPreserveAspectRatio.idl
+++ b/core/svg/SVGAnimatedPreserveAspectRatio.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedPreserveAspectRatio {
     readonly attribute SVGPreserveAspectRatio baseVal;
diff --git a/core/svg/SVGAnimatedRect.idl b/core/svg/SVGAnimatedRect.idl
index aa1a597..d020f95 100644
--- a/core/svg/SVGAnimatedRect.idl
+++ b/core/svg/SVGAnimatedRect.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedRect {
     // TODO(philipj): SVGRect should be DOMRectReadOnly.
diff --git a/core/svg/SVGAnimatedString.idl b/core/svg/SVGAnimatedString.idl
index 5f4a067..e881925 100644
--- a/core/svg/SVGAnimatedString.idl
+++ b/core/svg/SVGAnimatedString.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedString {
     [RaisesException=Setter] attribute DOMString baseVal;
diff --git a/core/svg/SVGAnimatedTransformList.idl b/core/svg/SVGAnimatedTransformList.idl
index 54937fa..fca3d24 100644
--- a/core/svg/SVGAnimatedTransformList.idl
+++ b/core/svg/SVGAnimatedTransformList.idl
@@ -27,8 +27,6 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGAnimatedTransformList {
     [MeasureAs=SVGAnimatedTransformListBaseVal] readonly attribute SVGTransformList baseVal;
diff --git a/core/svg/SVGAnimationElement.idl b/core/svg/SVGAnimationElement.idl
index c77cbfb..d20ae51 100644
--- a/core/svg/SVGAnimationElement.idl
+++ b/core/svg/SVGAnimationElement.idl
@@ -26,6 +26,7 @@
 
 // http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGAnimationElement
 
+[RuntimeEnabled=smil]
 interface SVGAnimationElement : SVGElement {
     readonly attribute SVGElement targetElement;
 
diff --git a/core/svg/SVGCircleElement.idl b/core/svg/SVGCircleElement.idl
index 0479e26..00a32e7 100644
--- a/core/svg/SVGCircleElement.idl
+++ b/core/svg/SVGCircleElement.idl
@@ -27,7 +27,7 @@
 // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGCircleElement
 
 interface SVGCircleElement : SVGGeometryElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength r;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cx;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cy;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength r;
 };
diff --git a/core/svg/SVGClipPathElement.idl b/core/svg/SVGClipPathElement.idl
index 7afeec1..543feac 100644
--- a/core/svg/SVGClipPathElement.idl
+++ b/core/svg/SVGClipPathElement.idl
@@ -30,5 +30,5 @@
 // implement SVGUnitTypes. The transform attribute (which is on
 // SVGGraphicsElement) should also be on SVGClipPathElement.
 interface SVGClipPathElement : SVGGraphicsElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration clipPathUnits;
+    [Measure] readonly attribute SVGAnimatedEnumeration clipPathUnits;
 };
diff --git a/core/svg/SVGComponentTransferFunctionElement.idl b/core/svg/SVGComponentTransferFunctionElement.idl
index d4a34b8..8fe18b0 100644
--- a/core/svg/SVGComponentTransferFunctionElement.idl
+++ b/core/svg/SVGComponentTransferFunctionElement.idl
@@ -29,18 +29,18 @@
     DoNotCheckConstants
 ] interface SVGComponentTransferFunctionElement : SVGElement {
     // Component Transfer Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE    = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR   = 4;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA    = 5;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE    = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR   = 4;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA    = 5;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration type;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumberList  tableValues;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber      slope;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber      intercept;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber      amplitude;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber      exponent;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber      offset;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration type;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumberList  tableValues;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber      slope;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber      intercept;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber      amplitude;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber      exponent;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber      offset;
 };
diff --git a/core/svg/SVGCursorElement.idl b/core/svg/SVGCursorElement.idl
index 56a83ec..d61be40 100644
--- a/core/svg/SVGCursorElement.idl
+++ b/core/svg/SVGCursorElement.idl
@@ -26,8 +26,8 @@
 // http://www.w3.org/TR/SVG2/interact.html#InterfaceSVGCursorElement
 
 interface SVGCursorElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMCursorElement] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMCursorElement] readonly attribute SVGAnimatedLength y;
 };
 
 SVGCursorElement implements SVGURIReference;
diff --git a/core/svg/SVGDiscardElement.idl b/core/svg/SVGDiscardElement.idl
index 2b51023..72b8939 100644
--- a/core/svg/SVGDiscardElement.idl
+++ b/core/svg/SVGDiscardElement.idl
@@ -31,5 +31,6 @@
 // TODO(philipj): The SVGDiscardElement interface does not exist in the spec
 // yet: http://www.w3.org/Graphics/SVG/WG/track/actions/3727
 
+[RuntimeEnabled=smil]
 interface SVGDiscardElement : SVGElement {
 };
diff --git a/core/svg/SVGElement.idl b/core/svg/SVGElement.idl
index 1e4ac18..d8faebb 100644
--- a/core/svg/SVGElement.idl
+++ b/core/svg/SVGElement.idl
@@ -23,8 +23,10 @@
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGElement
 
 interface SVGElement : Element {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGClassName] readonly attribute SVGAnimatedString className;
-    readonly attribute CSSStyleDeclaration style;
+    [MeasureAs=SVGClassName] readonly attribute SVGAnimatedString className;
+    // CSS Object Model (CSSOM)
+    // http://dev.w3.org/csswg/cssom/#the-elementcssinlinestyle-interface
+    [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 
     readonly attribute SVGSVGElement? ownerSVGElement;
     readonly attribute SVGElement? viewportElement;
diff --git a/core/svg/SVGEllipseElement.idl b/core/svg/SVGEllipseElement.idl
index 3b431db..08750c6 100644
--- a/core/svg/SVGEllipseElement.idl
+++ b/core/svg/SVGEllipseElement.idl
@@ -26,8 +26,8 @@
 // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGEllipseElement
 
 interface SVGEllipseElement : SVGGeometryElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength rx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength ry;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cx;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cy;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength rx;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength ry;
 };
diff --git a/core/svg/SVGFEBlendElement.idl b/core/svg/SVGFEBlendElement.idl
index 9de8f38..4b9ffe4 100644
--- a/core/svg/SVGFEBlendElement.idl
+++ b/core/svg/SVGFEBlendElement.idl
@@ -30,16 +30,16 @@
 ] interface SVGFEBlendElement : SVGElement {
 
     // Blend Mode Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_NORMAL = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_SCREEN = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_DARKEN = 4;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FEBLEND_MODE_LIGHTEN = 5;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration mode;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in2;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration mode;
 };
 
 SVGFEBlendElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEColorMatrixElement.idl b/core/svg/SVGFEColorMatrixElement.idl
index bb13640..d5fd90c 100644
--- a/core/svg/SVGFEColorMatrixElement.idl
+++ b/core/svg/SVGFEColorMatrixElement.idl
@@ -29,15 +29,15 @@
     DoNotCheckConstants,
 ] interface SVGFEColorMatrixElement : SVGElement {
     // Color Matrix Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration type;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumberList values;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration type;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumberList values;
 };
 
 SVGFEColorMatrixElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEComponentTransferElement.idl b/core/svg/SVGFEComponentTransferElement.idl
index 482571e..8eda50f 100644
--- a/core/svg/SVGFEComponentTransferElement.idl
+++ b/core/svg/SVGFEComponentTransferElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEComponentTransferElement
 
 interface SVGFEComponentTransferElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
 
 SVGFEComponentTransferElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFECompositeElement.idl b/core/svg/SVGFECompositeElement.idl
index 66ba771..7f1fb25 100644
--- a/core/svg/SVGFECompositeElement.idl
+++ b/core/svg/SVGFECompositeElement.idl
@@ -29,21 +29,21 @@
     DoNotCheckConstants,
 ] interface SVGFECompositeElement : SVGElement {
     // Composite Operators
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_IN = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP = 4;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR = 5;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM,ImplementedAs=svgOperator] readonly attribute SVGAnimatedEnumeration operator;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber k1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber k2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber k3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber k4;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in2;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [ImplementedAs=svgOperator, MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration operator;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber k1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber k2;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber k3;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber k4;
 };
 
 SVGFECompositeElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEConvolveMatrixElement.idl b/core/svg/SVGFEConvolveMatrixElement.idl
index a1db16d..0c9edfd 100644
--- a/core/svg/SVGFEConvolveMatrixElement.idl
+++ b/core/svg/SVGFEConvolveMatrixElement.idl
@@ -29,27 +29,27 @@
     DoNotCheckConstants,
 ] interface SVGFEConvolveMatrixElement : SVGElement {
     // Edge Mode Values
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_EDGEMODE_WRAP = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_EDGEMODE_NONE = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_WRAP = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_NONE = 3;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedInteger orderX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedInteger orderY;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumberList kernelMatrix;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber divisor;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber bias;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedInteger targetX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedInteger targetY;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration edgeMode;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedInteger orderX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedInteger orderY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumberList kernelMatrix;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber divisor;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber bias;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedInteger targetX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedInteger targetY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration edgeMode;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
 
     // TODO(philipj): The following was part of SVG 1.1:
     // http://www.w3.org/TR/SVG11/filters.html#InterfaceSVGFEConvolveMatrixElement
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28703
-    [RuntimeEnabled=SVG1DOM, Measure] readonly attribute SVGAnimatedBoolean preserveAlpha;
+    [Measure] readonly attribute SVGAnimatedBoolean preserveAlpha;
 };
 
 SVGFEConvolveMatrixElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEDiffuseLightingElement.idl b/core/svg/SVGFEDiffuseLightingElement.idl
index b9b35cf..aa6d9f4 100644
--- a/core/svg/SVGFEDiffuseLightingElement.idl
+++ b/core/svg/SVGFEDiffuseLightingElement.idl
@@ -26,11 +26,11 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDiffuseLightingElement
 
 interface SVGFEDiffuseLightingElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber surfaceScale;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber diffuseConstant;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber surfaceScale;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber diffuseConstant;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
 };
 
 SVGFEDiffuseLightingElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEDisplacementMapElement.idl b/core/svg/SVGFEDisplacementMapElement.idl
index 43a50ae..9b70e29 100644
--- a/core/svg/SVGFEDisplacementMapElement.idl
+++ b/core/svg/SVGFEDisplacementMapElement.idl
@@ -29,17 +29,17 @@
     DoNotCheckConstants,
 ] interface SVGFEDisplacementMapElement : SVGElement {
     // Channel Selectors
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_CHANNEL_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_CHANNEL_R = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_CHANNEL_G = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_CHANNEL_B = 3;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_CHANNEL_A = 4;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_R = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_G = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_B = 3;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_A = 4;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber scale;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration xChannelSelector;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration yChannelSelector;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in2;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber scale;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration xChannelSelector;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration yChannelSelector;
 };
 
 SVGFEDisplacementMapElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEDistantLightElement.idl b/core/svg/SVGFEDistantLightElement.idl
index 5ac5083..a5c6979 100644
--- a/core/svg/SVGFEDistantLightElement.idl
+++ b/core/svg/SVGFEDistantLightElement.idl
@@ -26,6 +26,6 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDistantLightElement
 
 interface SVGFEDistantLightElement : SVGElement {
-    readonly attribute SVGAnimatedNumber azimuth;
-    readonly attribute SVGAnimatedNumber elevation;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber azimuth;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber elevation;
 };
diff --git a/core/svg/SVGFEDropShadowElement.idl b/core/svg/SVGFEDropShadowElement.idl
index ea44f41..47d742f 100644
--- a/core/svg/SVGFEDropShadowElement.idl
+++ b/core/svg/SVGFEDropShadowElement.idl
@@ -20,13 +20,13 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDropShadowElement
 
 interface SVGFEDropShadowElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber dx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber dy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber stdDeviationX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber stdDeviationY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dx;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dy;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationY;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] void setStdDeviation(float stdDeviationX, float stdDeviationY);
+    [MeasureAs=SVG1DOMFilter] void setStdDeviation(float stdDeviationX, float stdDeviationY);
 };
 
 SVGFEDropShadowElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEGaussianBlurElement.idl b/core/svg/SVGFEGaussianBlurElement.idl
index 238d344..c9326d3 100644
--- a/core/svg/SVGFEGaussianBlurElement.idl
+++ b/core/svg/SVGFEGaussianBlurElement.idl
@@ -28,11 +28,11 @@
 // Currently SVG 1.1 (SVG 2 members not implemented)
 
 interface SVGFEGaussianBlurElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber stdDeviationX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber stdDeviationY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber stdDeviationY;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] void setStdDeviation(float stdDeviationX, float stdDeviationY);
+    [MeasureAs=SVG1DOMFilter] void setStdDeviation(float stdDeviationX, float stdDeviationY);
 };
 
 SVGFEGaussianBlurElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEImageElement.idl b/core/svg/SVGFEImageElement.idl
index 2c4a272..05ecf0c 100644
--- a/core/svg/SVGFEImageElement.idl
+++ b/core/svg/SVGFEImageElement.idl
@@ -28,7 +28,7 @@
 // Currently SVG 1.1, SVG 2 members not implemented
 
 interface SVGFEImageElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
 
 SVGFEImageElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEMergeNodeElement.idl b/core/svg/SVGFEMergeNodeElement.idl
index 9936f8d..1e91f7a 100644
--- a/core/svg/SVGFEMergeNodeElement.idl
+++ b/core/svg/SVGFEMergeNodeElement.idl
@@ -26,5 +26,5 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEMergeNodeElement
 
 interface SVGFEMergeNodeElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
diff --git a/core/svg/SVGFEMorphologyElement.idl b/core/svg/SVGFEMorphologyElement.idl
index eee1596..c7facb7 100644
--- a/core/svg/SVGFEMorphologyElement.idl
+++ b/core/svg/SVGFEMorphologyElement.idl
@@ -29,14 +29,14 @@
     DoNotCheckConstants,
 ] interface SVGFEMorphologyElement : SVGElement {
     // Morphology Operators
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM,ImplementedAs=svgOperator] readonly attribute SVGAnimatedEnumeration operator;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber radiusX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber radiusY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [ImplementedAs=svgOperator, MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration operator;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber radiusX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber radiusY;
 };
 
 SVGFEMorphologyElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEOffsetElement.idl b/core/svg/SVGFEOffsetElement.idl
index bf73868..41fb654 100644
--- a/core/svg/SVGFEOffsetElement.idl
+++ b/core/svg/SVGFEOffsetElement.idl
@@ -26,9 +26,9 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEOffsetElement
 
 interface SVGFEOffsetElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber dx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber dy;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dx;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber dy;
 };
 
 SVGFEOffsetElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFEPointLightElement.idl b/core/svg/SVGFEPointLightElement.idl
index fc732b7..c37d706 100644
--- a/core/svg/SVGFEPointLightElement.idl
+++ b/core/svg/SVGFEPointLightElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFEPointLightElement
 
 interface SVGFEPointLightElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber z;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber y;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber z;
 };
diff --git a/core/svg/SVGFESpecularLightingElement.idl b/core/svg/SVGFESpecularLightingElement.idl
index 36ec866..49baa91 100644
--- a/core/svg/SVGFESpecularLightingElement.idl
+++ b/core/svg/SVGFESpecularLightingElement.idl
@@ -26,12 +26,12 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFESpecularLightingElement
 
 interface SVGFESpecularLightingElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber surfaceScale;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber specularConstant;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber specularExponent;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber surfaceScale;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber specularConstant;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber specularExponent;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
 };
 
 SVGFESpecularLightingElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFESpotLightElement.idl b/core/svg/SVGFESpotLightElement.idl
index 8ebca0e..bb0c3e8 100644
--- a/core/svg/SVGFESpotLightElement.idl
+++ b/core/svg/SVGFESpotLightElement.idl
@@ -26,12 +26,12 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFESpotLightElement
 
 interface SVGFESpotLightElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber z;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber pointsAtX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber pointsAtY;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber pointsAtZ;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber specularExponent;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber limitingConeAngle;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber y;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber z;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber pointsAtX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber pointsAtY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber pointsAtZ;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber specularExponent;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber limitingConeAngle;
 };
diff --git a/core/svg/SVGFETileElement.idl b/core/svg/SVGFETileElement.idl
index b6cb618..13da3c0 100644
--- a/core/svg/SVGFETileElement.idl
+++ b/core/svg/SVGFETileElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFETileElement
 
 interface SVGFETileElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString in1;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
 };
 
 SVGFETileElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFETurbulenceElement.idl b/core/svg/SVGFETurbulenceElement.idl
index bb35e24..08b2b83 100644
--- a/core/svg/SVGFETurbulenceElement.idl
+++ b/core/svg/SVGFETurbulenceElement.idl
@@ -29,21 +29,21 @@
     DoNotCheckConstants,
 ] interface SVGFETurbulenceElement : SVGElement {
     // Turbulence Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE = 2;
 
     // Stitch Options
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_STITCHTYPE_STITCH = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_STITCHTYPE_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_STITCHTYPE_STITCH = 1;
+    [MeasureAs=SVG1DOMFilter] const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber baseFrequencyX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber baseFrequencyY;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedInteger numOctaves;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber seed;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration stitchTiles;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration type;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber baseFrequencyX;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber baseFrequencyY;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedInteger numOctaves;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber seed;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration stitchTiles;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration type;
 };
 
 SVGFETurbulenceElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFilterElement.idl b/core/svg/SVGFilterElement.idl
index 3c990a7..2d939a3 100644
--- a/core/svg/SVGFilterElement.idl
+++ b/core/svg/SVGFilterElement.idl
@@ -26,15 +26,13 @@
 
 // http://www.w3.org/TR/filter-effects/#InterfaceSVGFilterElement
 
-[
-    TypeChecking=Interface,
-] interface SVGFilterElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration filterUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration primitiveUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength      x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength      y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength      width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength      height;
+interface SVGFilterElement : SVGElement {
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration filterUnits;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration primitiveUnits;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength      x;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength      y;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength      width;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength      height;
 };
 
 SVGFilterElement implements SVGURIReference;
diff --git a/core/svg/SVGFilterPrimitiveStandardAttributes.idl b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
index c12ffd5..458d616 100644
--- a/core/svg/SVGFilterPrimitiveStandardAttributes.idl
+++ b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
@@ -29,9 +29,9 @@
 [
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface SVGFilterPrimitiveStandardAttributes {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString result;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString result;
 };
diff --git a/core/svg/SVGFitToViewBox.idl b/core/svg/SVGFitToViewBox.idl
index cab50c5..45d3d53 100644
--- a/core/svg/SVGFitToViewBox.idl
+++ b/core/svg/SVGFitToViewBox.idl
@@ -29,6 +29,6 @@
 [
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface SVGFitToViewBox {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedRect viewBox;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+    [MeasureAs=SVG1DOMFitToViewBox] readonly attribute SVGAnimatedRect viewBox;
+    [MeasureAs=SVG1DOMFitToViewBox] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
diff --git a/core/svg/SVGForeignObjectElement.idl b/core/svg/SVGForeignObjectElement.idl
index bedb3bc..9825185 100644
--- a/core/svg/SVGForeignObjectElement.idl
+++ b/core/svg/SVGForeignObjectElement.idl
@@ -26,8 +26,8 @@
 // http://www.w3.org/TR/SVG2/extend.html#InterfaceSVGForeignObjectElement
 
 interface SVGForeignObjectElement : SVGGraphicsElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMForeignObjectElement] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMForeignObjectElement] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMForeignObjectElement] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMForeignObjectElement] readonly attribute SVGAnimatedLength height;
 };
diff --git a/core/svg/SVGGeometryElement.idl b/core/svg/SVGGeometryElement.idl
index 50bc507..8f1619a 100644
--- a/core/svg/SVGGeometryElement.idl
+++ b/core/svg/SVGGeometryElement.idl
@@ -30,9 +30,7 @@
 
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGGeometryElement
 
-[
-    TypeChecking=Interface,
-] interface SVGGeometryElement : SVGGraphicsElement {
+interface SVGGeometryElement : SVGGraphicsElement {
     // TODO(philipj): SVGPoint should be DOMPoint.
     boolean isPointInFill(SVGPoint point);
     boolean isPointInStroke(SVGPoint point);
diff --git a/core/svg/SVGGradientElement.idl b/core/svg/SVGGradientElement.idl
index 1010481..5d77514 100644
--- a/core/svg/SVGGradientElement.idl
+++ b/core/svg/SVGGradientElement.idl
@@ -29,14 +29,14 @@
     DoNotCheckConstants
 ] interface SVGGradientElement : SVGElement {
     // Spread Method Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_SPREADMETHOD_PAD     = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_SPREADMETHOD_REPEAT  = 3;
+    [MeasureAs=SVG1DOMPaintServer] const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
+    [MeasureAs=SVG1DOMPaintServer] const unsigned short SVG_SPREADMETHOD_PAD     = 1;
+    [MeasureAs=SVG1DOMPaintServer] const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
+    [MeasureAs=SVG1DOMPaintServer] const unsigned short SVG_SPREADMETHOD_REPEAT  = 3;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration   gradientUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedTransformList gradientTransform;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration   spreadMethod;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedEnumeration   gradientUnits;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedTransformList gradientTransform;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedEnumeration   spreadMethod;
 };
 
 SVGGradientElement implements SVGURIReference;
diff --git a/core/svg/SVGGraphicsElement.idl b/core/svg/SVGGraphicsElement.idl
index 7af9e22..77474ef 100644
--- a/core/svg/SVGGraphicsElement.idl
+++ b/core/svg/SVGGraphicsElement.idl
@@ -30,10 +30,8 @@
 
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGGraphicsElement
 
-[
-    TypeChecking=Interface,
-] interface SVGGraphicsElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedTransformList transform;
+interface SVGGraphicsElement : SVGElement {
+    [Measure] readonly attribute SVGAnimatedTransformList transform;
 
     [MeasureAs=SVGLocatableNearestViewportElement] readonly attribute SVGElement nearestViewportElement;
     [MeasureAs=SVGLocatableFarthestViewportElement] readonly attribute SVGElement farthestViewportElement;
@@ -41,7 +39,6 @@
     [ImplementedAs=getBBoxFromJavascript] SVGRect getBBox();
     [ImplementedAs=getCTMFromJavascript] SVGMatrix getCTM();
     [ImplementedAs=getScreenCTMFromJavascript] SVGMatrix getScreenCTM();
-    [RaisesException, MeasureAs=SVGGraphicsElementGetTransformToElement] SVGMatrix getTransformToElement(SVGElement element);
 };
 
 SVGGraphicsElement implements SVGTests;
diff --git a/core/svg/SVGImageElement.idl b/core/svg/SVGImageElement.idl
index 8830ac6..611a2cc 100644
--- a/core/svg/SVGImageElement.idl
+++ b/core/svg/SVGImageElement.idl
@@ -26,11 +26,11 @@
 // http://www.w3.org/TR/SVG2/embedded.html#InterfaceSVGImageElement
 
 interface SVGImageElement : SVGGraphicsElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
+    [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMImageElement] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
 };
 
 SVGImageElement implements SVGURIReference;
diff --git a/core/svg/SVGLength.idl b/core/svg/SVGLength.idl
index 52e2daa..06b7617 100644
--- a/core/svg/SVGLength.idl
+++ b/core/svg/SVGLength.idl
@@ -22,13 +22,9 @@
 
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGLength
 
-// TODO(philipj): SVGLength should have constructors. crbug.com/366541
 [
     ImplementedAs=SVGLengthTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    MeasureAs=SVG1DOM,
-    RuntimeEnabled=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGLength {
     // Length Unit Types
@@ -47,8 +43,7 @@
     readonly attribute unsigned short unitType;
     [RaisesException] attribute float value;
     [RaisesException=Setter] attribute float valueInSpecifiedUnits;
-    // TODO(philipj): valueAsString should not have [TreatNullAs=NullString].
-    [TreatNullAs=NullString, RaisesException=Setter] attribute DOMString valueAsString;
+    [RaisesException=Setter] attribute DOMString valueAsString;
 
     [RaisesException] void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits);
     [RaisesException] void convertToSpecifiedUnits(unsigned short unitType);
diff --git a/core/svg/SVGLengthList.idl b/core/svg/SVGLengthList.idl
index e587ed2..5d6113c 100644
--- a/core/svg/SVGLengthList.idl
+++ b/core/svg/SVGLengthList.idl
@@ -29,9 +29,6 @@
 [
     ImplementedAs=SVGLengthListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGLengthList {
     readonly attribute unsigned long length;
diff --git a/core/svg/SVGLineElement.idl b/core/svg/SVGLineElement.idl
index db52f16..73e56a1 100644
--- a/core/svg/SVGLineElement.idl
+++ b/core/svg/SVGLineElement.idl
@@ -26,8 +26,8 @@
 // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGLineElement
 
 interface SVGLineElement : SVGGeometryElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y2;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x1;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength y1;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x2;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength y2;
 };
diff --git a/core/svg/SVGLinearGradientElement.idl b/core/svg/SVGLinearGradientElement.idl
index 95e1d5c..06c5c32 100644
--- a/core/svg/SVGLinearGradientElement.idl
+++ b/core/svg/SVGLinearGradientElement.idl
@@ -26,8 +26,8 @@
 // http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGLinearGradientElement
 
 interface SVGLinearGradientElement : SVGGradientElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x2;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y2;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength x1;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength y1;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength x2;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength y2;
 };
diff --git a/core/svg/SVGMPathElement.idl b/core/svg/SVGMPathElement.idl
index beaf744..a0a1a5c 100644
--- a/core/svg/SVGMPathElement.idl
+++ b/core/svg/SVGMPathElement.idl
@@ -25,6 +25,7 @@
 
 // http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGMPathElement
 
+[RuntimeEnabled=smil]
 interface SVGMPathElement : SVGElement {
 };
 
diff --git a/core/svg/SVGMarkerElement.idl b/core/svg/SVGMarkerElement.idl
index 1083406..3ae585f 100644
--- a/core/svg/SVGMarkerElement.idl
+++ b/core/svg/SVGMarkerElement.idl
@@ -25,31 +25,29 @@
 
 // http://www.w3.org/TR/SVG2/painting.html#InterfaceSVGMarkerElement
 
-[
-    TypeChecking=Interface,
-] interface SVGMarkerElement : SVGElement {
+interface SVGMarkerElement : SVGElement {
 
     // Marker Unit Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKERUNITS_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKERUNITS_USERSPACEONUSE = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKERUNITS_STROKEWIDTH = 2;
+    const unsigned short SVG_MARKERUNITS_UNKNOWN = 0;
+    const unsigned short SVG_MARKERUNITS_USERSPACEONUSE = 1;
+    const unsigned short SVG_MARKERUNITS_STROKEWIDTH = 2;
 
     // Marker Orientation Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKER_ORIENT_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKER_ORIENT_AUTO = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_MARKER_ORIENT_ANGLE = 2;
+    const unsigned short SVG_MARKER_ORIENT_UNKNOWN = 0;
+    const unsigned short SVG_MARKER_ORIENT_AUTO = 1;
+    const unsigned short SVG_MARKER_ORIENT_ANGLE = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength refX;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength refY;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration markerUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength markerWidth;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength markerHeight;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration orientType;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedAngle orientAngle;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedLength refX;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedLength refY;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedEnumeration markerUnits;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedLength markerWidth;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedLength markerHeight;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedEnumeration orientType;
+    [MeasureAs=SVG1DOMMarkerElement] readonly attribute SVGAnimatedAngle orientAngle;
     // attribute DOMString orient;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] void setOrientToAuto();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] void setOrientToAngle(SVGAngle angle);
+    [MeasureAs=SVG1DOMMarkerElement] void setOrientToAuto();
+    [MeasureAs=SVG1DOMMarkerElement] void setOrientToAngle(SVGAngle angle);
 };
 
 SVGMarkerElement implements SVGFitToViewBox;
diff --git a/core/svg/SVGMaskElement.idl b/core/svg/SVGMaskElement.idl
index db24b72..0045a16 100644
--- a/core/svg/SVGMaskElement.idl
+++ b/core/svg/SVGMaskElement.idl
@@ -26,12 +26,12 @@
 // http://www.w3.org/TR/css-masking/#InterfaceSVGMaskElement
 
 interface SVGMaskElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration maskUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration maskContentUnits;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedEnumeration maskUnits;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedEnumeration maskContentUnits;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedLength height;
 };
 
 // SVGMaskElement implements SVGUnitTypes;
diff --git a/core/svg/SVGMatrix.idl b/core/svg/SVGMatrix.idl
index a613da6..0c960a1 100644
--- a/core/svg/SVGMatrix.idl
+++ b/core/svg/SVGMatrix.idl
@@ -26,7 +26,6 @@
 [
     ImplementedAs=SVGMatrixTearOff,
     SetWrapperReferenceTo(SVGTransform contextTransform),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGMatrix {
     // FIXME: these attributes should all be floats but since we implement
diff --git a/core/svg/SVGNumber.idl b/core/svg/SVGNumber.idl
index aa7ce79..0a2aa67 100644
--- a/core/svg/SVGNumber.idl
+++ b/core/svg/SVGNumber.idl
@@ -22,11 +22,9 @@
 
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGNumber
 
-// TODO(philipj): SVGNumber should have constructors. crbug.com/366541
 [
     ImplementedAs=SVGNumberTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGNumber {
     [RaisesException=Setter] attribute float value;
diff --git a/core/svg/SVGNumberList.idl b/core/svg/SVGNumberList.idl
index 6c9bea9..3d02ae5 100644
--- a/core/svg/SVGNumberList.idl
+++ b/core/svg/SVGNumberList.idl
@@ -29,9 +29,6 @@
 [
     ImplementedAs=SVGNumberListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGNumberList {
     readonly attribute unsigned long length;
diff --git a/core/svg/SVGPathElement.idl b/core/svg/SVGPathElement.idl
index 80c852f..c5bb32f 100644
--- a/core/svg/SVGPathElement.idl
+++ b/core/svg/SVGPathElement.idl
@@ -26,63 +26,11 @@
 
 // http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathElement
 
-[
-    TypeChecking=Interface,
-] interface SVGPathElement : SVGGeometryElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber pathLength;
+interface SVGPathElement : SVGGeometryElement {
+    [Measure] readonly attribute SVGAnimatedNumber pathLength;
 
     float getTotalLength();
     // TODO(philipj): SVGPoint should be DOMPoint.
     SVGPoint getPointAtLength(float distance);
     unsigned long getPathSegAtLength(float distance);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegClosePath createSVGPathSegClosePath();
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(float x, float y);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegMovetoRel createSVGPathSegMovetoRel(float x, float y);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(float x, float y);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoRel createSVGPathSegLinetoRel(float x, float y);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(
-        float x, float y, float x1, float y1, float x2, float y2);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(
-        float x, float y, float x1, float y1, float x2, float y2);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(
-        float x, float y, float x1, float y1);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(
-        float x, float y, float x1, float y1);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegArcAbs createSVGPathSegArcAbs(
-        float x, float y, float r1, float r2,
-        float angle, boolean largeArcFlag, boolean sweepFlag);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegArcRel createSVGPathSegArcRel(
-        float x, float y, float r1, float r2,
-        float angle, boolean largeArcFlag, boolean sweepFlag);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(float x);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(float x);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(float y);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(float y);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(
-        float x, float y, float x2, float y2);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(
-        float x, float y, float x2, float y2);
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y);
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y);
-
-    // TODO(philipj): pathSegList and animatedPathSegList should be on the
-    // SVGAnimatedPathData interface which SVGPathElement should implement:
-    // http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGAnimatedPathData
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList pathSegList;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedPathSegList;
-
-    // TODO(philipj): The following was part of SVG 1.1:
-    // http://www.w3.org/TR/SVG11/paths.html#InterfaceSVGAnimatedPathData
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList normalizedPathSegList;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVGPathSegDOM] readonly attribute SVGPathSegList animatedNormalizedPathSegList;
 };
diff --git a/core/svg/SVGPathSeg.idl b/core/svg/SVGPathSeg.idl
deleted file mode 100644
index b28dd7e..0000000
--- a/core/svg/SVGPathSeg.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006, 2009 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSeg
-
-[
-    DependentLifetime,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-    WillBeGarbageCollected,
-] interface SVGPathSeg {
-    // Path Segment Types
-    const unsigned short PATHSEG_UNKNOWN = 0;
-    const unsigned short PATHSEG_CLOSEPATH = 1;
-    const unsigned short PATHSEG_MOVETO_ABS = 2;
-    const unsigned short PATHSEG_MOVETO_REL = 3;
-    const unsigned short PATHSEG_LINETO_ABS = 4;
-    const unsigned short PATHSEG_LINETO_REL = 5;
-    const unsigned short PATHSEG_CURVETO_CUBIC_ABS = 6;
-    const unsigned short PATHSEG_CURVETO_CUBIC_REL = 7;
-    const unsigned short PATHSEG_CURVETO_QUADRATIC_ABS = 8;
-    const unsigned short PATHSEG_CURVETO_QUADRATIC_REL = 9;
-    const unsigned short PATHSEG_ARC_ABS = 10;
-    const unsigned short PATHSEG_ARC_REL = 11;
-    const unsigned short PATHSEG_LINETO_HORIZONTAL_ABS = 12;
-    const unsigned short PATHSEG_LINETO_HORIZONTAL_REL = 13;
-    const unsigned short PATHSEG_LINETO_VERTICAL_ABS = 14;
-    const unsigned short PATHSEG_LINETO_VERTICAL_REL = 15;
-    const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
-    const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
-    const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
-    const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
-
-    readonly attribute unsigned short pathSegType;
-    readonly attribute DOMString pathSegTypeAsLetter;
-};
diff --git a/core/svg/SVGPathSegArcAbs.idl b/core/svg/SVGPathSegArcAbs.idl
deleted file mode 100644
index d530ba5..0000000
--- a/core/svg/SVGPathSegArcAbs.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegArcAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegArcAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float r1;
-    attribute float r2;
-    attribute float angle;
-    attribute boolean largeArcFlag;
-    attribute boolean sweepFlag;
-};
diff --git a/core/svg/SVGPathSegArcRel.idl b/core/svg/SVGPathSegArcRel.idl
deleted file mode 100644
index aa75b5d..0000000
--- a/core/svg/SVGPathSegArcRel.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegArcRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegArcRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float r1;
-    attribute float r2;
-    attribute float angle;
-    attribute boolean largeArcFlag;
-    attribute boolean sweepFlag;
-};
diff --git a/core/svg/SVGPathSegClosePath.idl b/core/svg/SVGPathSegClosePath.idl
deleted file mode 100644
index a76a85b..0000000
--- a/core/svg/SVGPathSegClosePath.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegClosePath
-
-[
-  RuntimeEnabled=SVG1DOM
-] interface SVGPathSegClosePath : SVGPathSeg {
-};
diff --git a/core/svg/SVGPathSegCurvetoCubicAbs.idl b/core/svg/SVGPathSegCurvetoCubicAbs.idl
deleted file mode 100644
index 272dbba..0000000
--- a/core/svg/SVGPathSegCurvetoCubicAbs.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoCubicAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoCubicAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x1;
-    attribute float y1;
-    attribute float x2;
-    attribute float y2;
-};
diff --git a/core/svg/SVGPathSegCurvetoCubicRel.idl b/core/svg/SVGPathSegCurvetoCubicRel.idl
deleted file mode 100644
index c690d85..0000000
--- a/core/svg/SVGPathSegCurvetoCubicRel.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoCubicRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoCubicRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x1;
-    attribute float y1;
-    attribute float x2;
-    attribute float y2;
-};
diff --git a/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl b/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
deleted file mode 100644
index a7085c1..0000000
--- a/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoCubicSmoothAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoCubicSmoothAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x2;
-    attribute float y2;
-};
diff --git a/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl b/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
deleted file mode 100644
index b3a5329..0000000
--- a/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoCubicSmoothRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoCubicSmoothRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x2;
-    attribute float y2;
-};
diff --git a/core/svg/SVGPathSegCurvetoQuadraticAbs.idl b/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
deleted file mode 100644
index 812f2c6..0000000
--- a/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoQuadraticAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoQuadraticAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x1;
-    attribute float y1;
-};
diff --git a/core/svg/SVGPathSegCurvetoQuadraticRel.idl b/core/svg/SVGPathSegCurvetoQuadraticRel.idl
deleted file mode 100644
index 8348889..0000000
--- a/core/svg/SVGPathSegCurvetoQuadraticRel.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoQuadraticRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoQuadraticRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-    attribute float x1;
-    attribute float y1;
-};
diff --git a/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl b/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
deleted file mode 100644
index b264f8c..0000000
--- a/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoQuadraticSmoothAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl b/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
deleted file mode 100644
index a9ad774..0000000
--- a/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegCurvetoQuadraticSmoothRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegCurvetoQuadraticSmoothRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegLinetoAbs.idl b/core/svg/SVGPathSegLinetoAbs.idl
deleted file mode 100644
index 0a69c50..0000000
--- a/core/svg/SVGPathSegLinetoAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegLinetoHorizontalAbs.idl b/core/svg/SVGPathSegLinetoHorizontalAbs.idl
deleted file mode 100644
index 479b068..0000000
--- a/core/svg/SVGPathSegLinetoHorizontalAbs.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoHorizontalAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoHorizontalAbs : SVGPathSeg {
-    attribute float x;
-};
diff --git a/core/svg/SVGPathSegLinetoHorizontalRel.idl b/core/svg/SVGPathSegLinetoHorizontalRel.idl
deleted file mode 100644
index c9ececf..0000000
--- a/core/svg/SVGPathSegLinetoHorizontalRel.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoHorizontalRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoHorizontalRel : SVGPathSeg {
-    attribute float x;
-};
diff --git a/core/svg/SVGPathSegLinetoRel.idl b/core/svg/SVGPathSegLinetoRel.idl
deleted file mode 100644
index 684dfe5..0000000
--- a/core/svg/SVGPathSegLinetoRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegLinetoVerticalAbs.idl b/core/svg/SVGPathSegLinetoVerticalAbs.idl
deleted file mode 100644
index 1411120..0000000
--- a/core/svg/SVGPathSegLinetoVerticalAbs.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoVerticalAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoVerticalAbs : SVGPathSeg {
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegLinetoVerticalRel.idl b/core/svg/SVGPathSegLinetoVerticalRel.idl
deleted file mode 100644
index f7acc5e..0000000
--- a/core/svg/SVGPathSegLinetoVerticalRel.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegLinetoVerticalRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegLinetoVerticalRel : SVGPathSeg {
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegList.idl b/core/svg/SVGPathSegList.idl
deleted file mode 100644
index 20afb09..0000000
--- a/core/svg/SVGPathSegList.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegList
-
-[
-    TypeChecking=Interface,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    ImplementedAs=SVGPathSegListTearOff,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-    WillBeGarbageCollected,
-] interface SVGPathSegList {
-    readonly attribute unsigned long length;
-    [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
-
-    [RaisesException] void clear();
-    [RaisesException] SVGPathSeg initialize(SVGPathSeg newItem);
-    [RaisesException] getter SVGPathSeg getItem(unsigned long index);
-    [RaisesException] SVGPathSeg insertItemBefore(SVGPathSeg newItem, unsigned long index);
-    [RaisesException] SVGPathSeg replaceItem(SVGPathSeg newItem, unsigned long index);
-    [RaisesException] SVGPathSeg removeItem(unsigned long index);
-    [RaisesException] SVGPathSeg appendItem(SVGPathSeg newItem);
-    [RaisesException] setter void (unsigned long index, SVGPathSeg newItem);
-};
diff --git a/core/svg/SVGPathSegMovetoAbs.idl b/core/svg/SVGPathSegMovetoAbs.idl
deleted file mode 100644
index 5b90445..0000000
--- a/core/svg/SVGPathSegMovetoAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegMovetoAbs
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegMovetoAbs : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPathSegMovetoRel.idl b/core/svg/SVGPathSegMovetoRel.idl
deleted file mode 100644
index a45f987..0000000
--- a/core/svg/SVGPathSegMovetoRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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 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 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.
- */
-
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathSegMovetoRel
-
-[
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVGPathSegDOM,
-] interface SVGPathSegMovetoRel : SVGPathSeg {
-    attribute float x;
-    attribute float y;
-};
diff --git a/core/svg/SVGPatternElement.idl b/core/svg/SVGPatternElement.idl
index 45edd46..76fd7bf 100644
--- a/core/svg/SVGPatternElement.idl
+++ b/core/svg/SVGPatternElement.idl
@@ -26,13 +26,13 @@
 // http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGPatternElement
 
 interface SVGPatternElement : SVGElement {
-    readonly attribute SVGAnimatedEnumeration patternUnits;
-    readonly attribute SVGAnimatedEnumeration patternContentUnits;
-    readonly attribute SVGAnimatedTransformList patternTransform;
-    readonly attribute SVGAnimatedLength x;
-    readonly attribute SVGAnimatedLength y;
-    readonly attribute SVGAnimatedLength width;
-    readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedEnumeration patternUnits;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedEnumeration patternContentUnits;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedTransformList patternTransform;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength height;
 };
 
 SVGPatternElement implements SVGFitToViewBox;
diff --git a/core/svg/SVGPoint.idl b/core/svg/SVGPoint.idl
index 7097dc8..b7c1434 100644
--- a/core/svg/SVGPoint.idl
+++ b/core/svg/SVGPoint.idl
@@ -26,7 +26,6 @@
 [
     ImplementedAs=SVGPointTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGPoint {
     [RaisesException=Setter] attribute unrestricted float x;
diff --git a/core/svg/SVGPointList.idl b/core/svg/SVGPointList.idl
index e2dbb15..97589be 100644
--- a/core/svg/SVGPointList.idl
+++ b/core/svg/SVGPointList.idl
@@ -28,9 +28,6 @@
 [
     ImplementedAs=SVGPointListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGPointList {
     readonly attribute unsigned long length;
diff --git a/core/svg/SVGPolygonElement.idl b/core/svg/SVGPolygonElement.idl
index 21458ae..75e87c3 100644
--- a/core/svg/SVGPolygonElement.idl
+++ b/core/svg/SVGPolygonElement.idl
@@ -29,6 +29,6 @@
     // TODO(philipj): points and animatedPoints be on the SVGAnimatedPoints
     // interface which SVGPolygonElement should implement:
     // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGAnimatedPoints
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM, ImplementedAs=pointsFromJavascript] readonly attribute SVGPointList points;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGPointList animatedPoints;
+    [MeasureAs=SVG1DOMShape, ImplementedAs=pointsFromJavascript] readonly attribute SVGPointList points;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGPointList animatedPoints;
 };
diff --git a/core/svg/SVGPolylineElement.idl b/core/svg/SVGPolylineElement.idl
index 6937733..fae6f4e 100644
--- a/core/svg/SVGPolylineElement.idl
+++ b/core/svg/SVGPolylineElement.idl
@@ -29,6 +29,6 @@
     // TODO(philipj): points and animatedPoints should be on the
     // SVGAnimatedPoints interface which SVGPolylineElement should implement:
     // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGAnimatedPoints
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM, ImplementedAs=pointsFromJavascript] readonly attribute SVGPointList points;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGPointList animatedPoints;
+    [MeasureAs=SVG1DOMShape, ImplementedAs=pointsFromJavascript] readonly attribute SVGPointList points;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGPointList animatedPoints;
 };
diff --git a/core/svg/SVGPreserveAspectRatio.idl b/core/svg/SVGPreserveAspectRatio.idl
index dc9ba05..6e1d4ad 100644
--- a/core/svg/SVGPreserveAspectRatio.idl
+++ b/core/svg/SVGPreserveAspectRatio.idl
@@ -26,11 +26,8 @@
 // http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGPreserveAspectRatio
 
 [
-    TypeChecking=Interface,
     ImplementedAs=SVGPreserveAspectRatioTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGPreserveAspectRatio {
     // Alignment types
diff --git a/core/svg/SVGRadialGradientElement.idl b/core/svg/SVGRadialGradientElement.idl
index 71bd0bd..16a496b 100644
--- a/core/svg/SVGRadialGradientElement.idl
+++ b/core/svg/SVGRadialGradientElement.idl
@@ -26,10 +26,10 @@
 // http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGRadialGradientElement
 
 interface SVGRadialGradientElement : SVGGradientElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength cy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength r;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength fx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength fy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength fr;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength cx;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength cy;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength r;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength fx;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength fy;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength fr;
 };
diff --git a/core/svg/SVGRect.idl b/core/svg/SVGRect.idl
index 3ab6c6a..725ee0f 100644
--- a/core/svg/SVGRect.idl
+++ b/core/svg/SVGRect.idl
@@ -26,7 +26,6 @@
 [
     ImplementedAs=SVGRectTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGRect {
     [RaisesException=Setter] attribute unrestricted float x;
diff --git a/core/svg/SVGRectElement.idl b/core/svg/SVGRectElement.idl
index a23a007..98fb22d 100644
--- a/core/svg/SVGRectElement.idl
+++ b/core/svg/SVGRectElement.idl
@@ -27,10 +27,10 @@
 // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGRectElement
 
 interface SVGRectElement : SVGGeometryElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength rx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength ry;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength height;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength rx;
+    [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength ry;
 };
diff --git a/core/svg/SVGSVGElement.idl b/core/svg/SVGSVGElement.idl
index 0ad5d7a..b05a259 100644
--- a/core/svg/SVGSVGElement.idl
+++ b/core/svg/SVGSVGElement.idl
@@ -22,16 +22,13 @@
 
 // http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSVGElement
 
-[
-    TypeChecking=Interface,
-] interface SVGSVGElement : SVGGraphicsElement {
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength height;
+interface SVGSVGElement : SVGGraphicsElement {
+    [MeasureAs=SVG1DOMSVGElement] readonly attribute SVGAnimatedLength x;
+    [MeasureAs=SVG1DOMSVGElement] readonly attribute SVGAnimatedLength y;
+    [MeasureAs=SVG1DOMSVGElement] readonly attribute SVGAnimatedLength width;
+    [MeasureAs=SVG1DOMSVGElement] readonly attribute SVGAnimatedLength height;
     // TODO(philipj): viewport should be a DOMRectReadOnly.
-    readonly attribute SVGRect viewport;
+    [Measure] readonly attribute SVGRect viewport;
     // TODO(philipj): useCurrentView and currentView have been removed:
     // https://github.com/w3c/svgwg/commit/4c26fd36937a65192024208d85c144a21071b057
     [Measure] readonly attribute boolean useCurrentView;
@@ -40,37 +37,35 @@
     // TODO(philipj): currentTranslate should be a DOMPointReadOnly.
     [ImplementedAs=currentTranslateFromJavascript] readonly attribute SVGPoint currentTranslate;
 
-    [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGSVGElementSuspendRedraw] unsigned long suspendRedraw(unsigned long maxWaitMilliseconds);
-    [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGSVGElementUnsuspendRedraw] void unsuspendRedraw(unsigned long suspendHandleId);
-    [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGSVGElementUnsuspendRedrawAll] void unsuspendRedrawAll();
-    [RuntimeEnabled=SVG1DOM, DeprecateAs=SVGSVGElementForceRedraw] void forceRedraw();
-    void pauseAnimations();
-    void unpauseAnimations();
-    boolean animationsPaused();
-    float getCurrentTime();
-    void setCurrentTime(float seconds);
+    [MeasureAs=SVGSVGElementSuspendRedraw] unsigned long suspendRedraw(unsigned long maxWaitMilliseconds);
+    [MeasureAs=SVGSVGElementUnsuspendRedraw] void unsuspendRedraw(unsigned long suspendHandleId);
+    [MeasureAs=SVGSVGElementUnsuspendRedrawAll] void unsuspendRedrawAll();
+    [MeasureAs=SVGSVGElementForceRedraw] void forceRedraw();
+
+    [RuntimeEnabled=smil] void pauseAnimations();
+    [RuntimeEnabled=smil] void unpauseAnimations();
+    [RuntimeEnabled=smil] boolean animationsPaused();
+    [RuntimeEnabled=smil] float getCurrentTime();
+    [RuntimeEnabled=smil] void setCurrentTime(float seconds);
+
     // TODO(philipj): The rect arguments should be DOMRectReadOnly.
     NodeList getIntersectionList(SVGRect rect, SVGElement? referenceElement);
     NodeList getEnclosureList(SVGRect rect, SVGElement? referenceElement);
     boolean checkIntersection(SVGElement element, SVGRect rect);
     boolean checkEnclosure(SVGElement element, SVGRect rect);
     void deselectAll();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGNumber createSVGNumber();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGLength createSVGLength();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGAngle createSVGAngle();
+    [Measure] SVGNumber createSVGNumber();
+    [Measure] SVGLength createSVGLength();
+    [Measure] SVGAngle createSVGAngle();
     // TODO(philipj): SVGPoint/Matrix/Rect should be DOMPoint/Matrix/Rect.
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGPoint createSVGPoint();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGMatrix createSVGMatrix();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGRect createSVGRect();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGTransform createSVGTransform();
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
+    [Measure] SVGPoint createSVGPoint();
+    [Measure] SVGMatrix createSVGMatrix();
+    [Measure] SVGRect createSVGRect();
+    [Measure] SVGTransform createSVGTransform();
+    [Measure] SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
 
     // TODO(philipj): The following was part of SVG 1.1:
     // http://www.w3.org/TR/SVG11/struct.html#InterfaceSVGSVGElement
-    [Measure] readonly attribute float pixelUnitToMillimeterX;
-    [Measure] readonly attribute float pixelUnitToMillimeterY;
-    [Measure] readonly attribute float screenPixelToMillimeterX;
-    [Measure] readonly attribute float screenPixelToMillimeterY;
     [Measure] Element getElementById(DOMString elementId);
 };
 
diff --git a/core/svg/SVGStopElement.idl b/core/svg/SVGStopElement.idl
index ed21e23..a8406d4 100644
--- a/core/svg/SVGStopElement.idl
+++ b/core/svg/SVGStopElement.idl
@@ -26,5 +26,5 @@
 // http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGStopElement
 
 interface SVGStopElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumber offset;
+    [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedNumber offset;
 };
diff --git a/core/svg/SVGStringList.idl b/core/svg/SVGStringList.idl
index d4f5b7b..7241243 100644
--- a/core/svg/SVGStringList.idl
+++ b/core/svg/SVGStringList.idl
@@ -26,10 +26,8 @@
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGStringList
 
 [
-    TypeChecking=Interface,
     SetWrapperReferenceTo(SVGElement contextElement),
     ImplementedAs=SVGStringListTearOff,
-    RuntimeEnabled=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGStringList {
     readonly attribute unsigned long length;
diff --git a/core/svg/SVGTests.idl b/core/svg/SVGTests.idl
index c9f8ce6..1a76c1e 100644
--- a/core/svg/SVGTests.idl
+++ b/core/svg/SVGTests.idl
@@ -29,12 +29,7 @@
 [
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface SVGTests {
-
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGStringList requiredFeatures;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGStringList requiredExtensions;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGStringList systemLanguage;
-
-    // TODO(philipj): The following was part of SVG 1.1:
-    // http://www.w3.org/TR/SVG11/types.html#InterfaceSVGTests
-    [Measure] boolean hasExtension(DOMString extension);
+    [MeasureAs=SVG1DOMSVGTests] readonly attribute SVGStringList requiredFeatures;
+    [MeasureAs=SVG1DOMSVGTests] readonly attribute SVGStringList requiredExtensions;
+    [MeasureAs=SVG1DOMSVGTests] readonly attribute SVGStringList systemLanguage;
 };
diff --git a/core/svg/SVGTextContentElement.idl b/core/svg/SVGTextContentElement.idl
index c2a284f..77a7baa 100644
--- a/core/svg/SVGTextContentElement.idl
+++ b/core/svg/SVGTextContentElement.idl
@@ -25,16 +25,14 @@
 
 // http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextContentElement
 
-[
-    TypeChecking=Interface,
-] interface SVGTextContentElement : SVGGraphicsElement {
+interface SVGTextContentElement : SVGGraphicsElement {
     // lengthAdjust Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short LENGTHADJUST_UNKNOWN          = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short LENGTHADJUST_SPACING          = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short LENGTHADJUST_SPACINGANDGLYPHS = 2;
+    [MeasureAs=SVG1DOMText] const unsigned short LENGTHADJUST_UNKNOWN          = 0;
+    [MeasureAs=SVG1DOMText] const unsigned short LENGTHADJUST_SPACING          = 1;
+    [MeasureAs=SVG1DOMText] const unsigned short LENGTHADJUST_SPACINGANDGLYPHS = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength      textLength;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration lengthAdjust;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLength      textLength;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedEnumeration lengthAdjust;
 
     long getNumberOfChars();
     float getComputedTextLength();
diff --git a/core/svg/SVGTextPathElement.idl b/core/svg/SVGTextPathElement.idl
index 93bb43c..6d47b57 100644
--- a/core/svg/SVGTextPathElement.idl
+++ b/core/svg/SVGTextPathElement.idl
@@ -27,18 +27,18 @@
 
 interface SVGTextPathElement : SVGTextContentElement {
     // textPath Method Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_METHODTYPE_UNKNOWN   = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_METHODTYPE_ALIGN     = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_METHODTYPE_STRETCH   = 2;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_METHODTYPE_UNKNOWN   = 0;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_METHODTYPE_ALIGN     = 1;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_METHODTYPE_STRETCH   = 2;
 
     // textPath Spacing Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_SPACINGTYPE_UNKNOWN  = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_SPACINGTYPE_AUTO     = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short TEXTPATH_SPACINGTYPE_EXACT    = 2;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_SPACINGTYPE_UNKNOWN  = 0;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_SPACINGTYPE_AUTO     = 1;
+    [MeasureAs=SVG1DOMText] const unsigned short TEXTPATH_SPACINGTYPE_EXACT    = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength startOffset;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration method;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedEnumeration spacing;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLength startOffset;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedEnumeration method;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedEnumeration spacing;
 };
 
 SVGTextPathElement implements SVGURIReference;
diff --git a/core/svg/SVGTextPositioningElement.idl b/core/svg/SVGTextPositioningElement.idl
index 07640e3..f389dfa 100644
--- a/core/svg/SVGTextPositioningElement.idl
+++ b/core/svg/SVGTextPositioningElement.idl
@@ -26,9 +26,9 @@
 // http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextPositioningElement
 
 interface SVGTextPositioningElement : SVGTextContentElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLengthList x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLengthList y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLengthList dx;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLengthList dy;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedNumberList rotate;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLengthList x;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLengthList y;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLengthList dx;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLengthList dy;
+    [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedNumberList rotate;
 };
diff --git a/core/svg/SVGTransform.idl b/core/svg/SVGTransform.idl
index 4a6ce72..dd594e1 100644
--- a/core/svg/SVGTransform.idl
+++ b/core/svg/SVGTransform.idl
@@ -21,13 +21,9 @@
 
 // http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGTransform
 
-// TODO(philipj): SVGTransform should have constructors. crbug.com/366541
 [
     ImplementedAs=SVGTransformTearOff,
-    MeasureAs=SVG1DOM,
-    RuntimeEnabled=SVG1DOM,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface SVGTransform {
     // Transform Types
diff --git a/core/svg/SVGTransformList.idl b/core/svg/SVGTransformList.idl
index 6f6451e..2ffb5bc 100644
--- a/core/svg/SVGTransformList.idl
+++ b/core/svg/SVGTransformList.idl
@@ -29,9 +29,6 @@
 [
     ImplementedAs=SVGTransformListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface,
-    RuntimeEnabled=SVG1DOM,
-    MeasureAs=SVG1DOM,
     WillBeGarbageCollected,
 ] interface SVGTransformList {
     readonly attribute unsigned long length;
diff --git a/core/svg/SVGURIReference.idl b/core/svg/SVGURIReference.idl
index 3f9e860..18932b0 100644
--- a/core/svg/SVGURIReference.idl
+++ b/core/svg/SVGURIReference.idl
@@ -29,5 +29,5 @@
 [
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface SVGURIReference {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedString href;
+    [MeasureAs=SVG1DOMUriReference] readonly attribute SVGAnimatedString href;
 };
diff --git a/core/svg/SVGUnitTypes.idl b/core/svg/SVGUnitTypes.idl
index 5e497de..2b42b50 100644
--- a/core/svg/SVGUnitTypes.idl
+++ b/core/svg/SVGUnitTypes.idl
@@ -30,7 +30,7 @@
     WillBeGarbageCollected
 ] interface SVGUnitTypes {
     // Unit Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_UNIT_TYPE_USERSPACEONUSE    = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
+    const unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
+    const unsigned short SVG_UNIT_TYPE_USERSPACEONUSE    = 1;
+    const unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
 };
diff --git a/core/svg/SVGUseElement.idl b/core/svg/SVGUseElement.idl
index 03065a4..316ee3b 100644
--- a/core/svg/SVGUseElement.idl
+++ b/core/svg/SVGUseElement.idl
@@ -26,10 +26,10 @@
 // http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGUseElement
 
 interface SVGUseElement : SVGGraphicsElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength   x;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength   y;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength   width;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGAnimatedLength   height;
+    [MeasureAs=SVG1DOMUseElement] readonly attribute SVGAnimatedLength   x;
+    [MeasureAs=SVG1DOMUseElement] readonly attribute SVGAnimatedLength   y;
+    [MeasureAs=SVG1DOMUseElement] readonly attribute SVGAnimatedLength   width;
+    [MeasureAs=SVG1DOMUseElement] readonly attribute SVGAnimatedLength   height;
 };
 
 SVGUseElement implements SVGURIReference;
diff --git a/core/svg/SVGViewElement.idl b/core/svg/SVGViewElement.idl
index 45ae255..147ad37 100644
--- a/core/svg/SVGViewElement.idl
+++ b/core/svg/SVGViewElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/SVG2/linking.html#InterfaceSVGViewElement
 
 interface SVGViewElement : SVGElement {
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] readonly attribute SVGStringList viewTarget;
+    [Measure] readonly attribute SVGStringList viewTarget;
 };
 
 SVGViewElement implements SVGFitToViewBox;
diff --git a/core/svg/SVGZoomAndPan.idl b/core/svg/SVGZoomAndPan.idl
index 7fa9063..624eae4 100644
--- a/core/svg/SVGZoomAndPan.idl
+++ b/core/svg/SVGZoomAndPan.idl
@@ -31,9 +31,9 @@
 ] interface SVGZoomAndPan {
 
     // Zoom and Pan Types
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM] const unsigned short SVG_ZOOMANDPAN_MAGNIFY = 2;
+    const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
+    const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
+    const unsigned short SVG_ZOOMANDPAN_MAGNIFY = 2;
 
-    [RuntimeEnabled=SVG1DOM, MeasureAs=SVG1DOM, RaisesException=Setter] attribute unsigned short zoomAndPan;
+    [MeasureAs=SVG1DOMZoomAndPan, RaisesException=Setter] attribute unsigned short zoomAndPan;
 };
diff --git a/core/testing/DictionaryTest.idl b/core/testing/DictionaryTest.idl
index d03a78d..699e669 100644
--- a/core/testing/DictionaryTest.idl
+++ b/core/testing/DictionaryTest.idl
@@ -7,7 +7,10 @@
 ] interface DictionaryTest {
     void set(optional InternalDictionary testingDictionary);
     InternalDictionary get();
+    [CallWith=ScriptState] object getDictionaryMemberProperties();
 
     void setDerived(InternalDictionaryDerived derived);
     InternalDictionaryDerived getDerived();
+
+    [CallWith=ExecutionContext, RaisesException] DOMString stringFromIterable(Dictionary iterableDictionary);
 };
diff --git a/core/testing/InternalDictionary.idl b/core/testing/InternalDictionary.idl
index b35e9a5..982650b 100644
--- a/core/testing/InternalDictionary.idl
+++ b/core/testing/InternalDictionary.idl
@@ -8,8 +8,8 @@
     long longMember;
     [Clamp] long longMemberWithClamp;
     [EnforceRange] long longMemberWithEnforceRange;
-    // We don't want to add a UseCounter feature for testing, so using KeyboardEventKeyLocation.
-    [DeprecateAs=KeyboardEventKeyLocation, ImplementedAs=longMember] long deprecateLongMember;
+    // We don't want to add a UseCounter feature for testing, so using PrefixedStorageInfo.
+    [DeprecateAs=PrefixedStorageInfo, ImplementedAs=longMember] long deprecateLongMember;
     long longMemberWithDefault = 42;
     long? longOrNullMember;
     long? longOrNullMemberWithDefault = null;
@@ -34,4 +34,5 @@
     (double or DOMString) doubleOrStringMember;
     sequence<(double or DOMString)> doubleOrStringSequenceMember;
     EventTarget? eventTargetOrNullMember = null;
+    Dictionary dictionaryMember;
 };
diff --git a/core/testing/InternalSettings.idl b/core/testing/InternalSettings.idl
index c95af21..ed536e6 100644
--- a/core/testing/InternalSettings.idl
+++ b/core/testing/InternalSettings.idl
@@ -53,11 +53,13 @@
     [RaisesException] void setAvailableHoverTypes(DOMString types);
     [RaisesException] void setPrimaryHoverType(DOMString type);
     [RaisesException] void setImageAnimationPolicy(DOMString policy);
+    [RaisesException] void setCompositorWorkerEnabled(boolean enabled);
 
     // FIXME: The following are RuntimeEnabledFeatures and likely
     // cannot be changed after process start.  These setters should
     // be removed or moved onto internals.runtimeFlags:
     void setAuthorShadowDOMForAnyElementEnabled(boolean enabled);
+    void setCSSStickyPositionEnabled(boolean enabled);
     void setLangAttributeAwareFormControlUIEnabled(boolean enabled);
     void setOverlayScrollbarsEnabled(boolean enabled);
     void setExperimentalContentSecurityPolicyFeaturesEnabled(boolean enabled);
diff --git a/core/testing/Internals.idl b/core/testing/Internals.idl
index 23c3d70..dc69202 100644
--- a/core/testing/Internals.idl
+++ b/core/testing/Internals.idl
@@ -27,41 +27,40 @@
 [
     DoNotCheckConstants,
     GarbageCollected,
-    TypeChecking=Interface,
     ConstructorCallWith=ScriptState,
 ] interface Internals {
     DOMString address(Node node);
 
     GCObservation observeGC(any observed);
 
-    [RaisesException, TypeChecking=Interface] DOMString elementLayoutTreeAsText(Element element);
+    [RaisesException] DOMString elementLayoutTreeAsText(Element element);
     boolean isPreloaded(DOMString url);
     boolean isPreloadedBy(DOMString url, Document document);
     boolean isLoadingFromMemoryCache(DOMString url);
 
-    [TypeChecking=Interface] boolean isSharingStyle(Element element1, Element element2);
+    boolean isSharingStyle(Element element1, Element element2);
 
-    [TypeChecking=Interface] CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
+    CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
 
-    [TypeChecking=Interface] ShadowRoot createUserAgentShadowRoot(Element host);
+    ShadowRoot createUserAgentShadowRoot(Element host);
 
-    [TypeChecking=Interface] ShadowRoot shadowRoot(Element host);
-    [TypeChecking=Interface] ShadowRoot youngestShadowRoot(Element host);
-    [TypeChecking=Interface] ShadowRoot oldestShadowRoot(Element host);
-    [RaisesException, TypeChecking=Interface] ShadowRoot youngerShadowRoot(Node root);
+    ShadowRoot shadowRoot(Element host);
+    ShadowRoot youngestShadowRoot(Element host);
+    ShadowRoot oldestShadowRoot(Element host);
+    [RaisesException] ShadowRoot youngerShadowRoot(Node root);
 
-    [RaisesException, TypeChecking=Interface] DOMString shadowRootType(Node root);
+    [RaisesException] DOMString shadowRootType(Node root);
     [RaisesException] boolean hasShadowInsertionPoint(Node root);
     [RaisesException] boolean hasContentElement(Node root);
-    [RaisesException, TypeChecking=Interface] unsigned long countElementShadow(Node Root);
-    [TypeChecking=Interface] DOMString shadowPseudoId(Element element);
-    [RaisesException, TypeChecking=Interface] boolean isValidContentSelect(Element contentElement);
-    [TypeChecking=Interface] Node treeScopeRootNode(Node node);
-    [TypeChecking=Interface] Node parentTreeScope(Node node);
-    [RaisesException, TypeChecking=Interface] boolean hasSelectorForIdInShadow(Element host, DOMString id);
-    [RaisesException, TypeChecking=Interface] boolean hasSelectorForClassInShadow(Element host, DOMString className);
-    [RaisesException, TypeChecking=Interface] boolean hasSelectorForAttributeInShadow(Element host, DOMString attributeName);
-    [RaisesException, TypeChecking=Interface] unsigned short compareTreeScopePosition(Node treeScope1, Node treeScope2);
+    [RaisesException] unsigned long countElementShadow(Node Root);
+    DOMString shadowPseudoId(Element element);
+    [RaisesException] boolean isValidContentSelect(Element contentElement);
+    Node treeScopeRootNode(Node node);
+    Node parentTreeScope(Node node);
+    [RaisesException] boolean hasSelectorForIdInShadow(Element host, DOMString id);
+    [RaisesException] boolean hasSelectorForClassInShadow(Element host, DOMString className);
+    [RaisesException] boolean hasSelectorForAttributeInShadow(Element host, DOMString attributeName);
+    [RaisesException] unsigned short compareTreeScopePosition(Node treeScope1, Node treeScope2);
     [RaisesException] unsigned long updateStyleAndReturnAffectedElementCount();
     [RaisesException] unsigned long needsLayoutCount();
     [RaisesException] unsigned long hitTestCount(Document document);
@@ -72,21 +71,28 @@
     // Animation testing.
     [RaisesException] void pauseAnimations(double pauseTime);
     bool isCompositedAnimation(Animation animation);
+    void disableCompositedAnimation(Animation animation);
+    void disableCSSAdditiveAnimations();
 
     // Modifies m_desiredFrameStartTime in BitmapImage to advance the next frame time
     // for testing whether animated images work properly.
     [RaisesException] void advanceTimeForImage(Element image, double deltaTimeInSeconds);
 
-    [RaisesException, TypeChecking=Interface] Node nextSiblingInComposedTree(Node node);
-    [RaisesException, TypeChecking=Interface] Node firstChildInComposedTree(Node node);
-    [RaisesException, TypeChecking=Interface] Node lastChildInComposedTree(Node node);
-    [RaisesException, TypeChecking=Interface] Node nextInComposedTree(Node node);
-    [RaisesException, TypeChecking=Interface] Node previousInComposedTree(Node node);
+    // Advances an animated image. For BitmapImage (e.g., animated gifs) this
+    // will advance to the next frame. For SVGImage, this will trigger an
+    // animation update for CSS and advance the SMIL timeline by one frame.
+    [RaisesException] void advanceImageAnimation(Element image);
+
+    [RaisesException] Node nextSiblingInFlatTree(Node node);
+    [RaisesException] Node firstChildInFlatTree(Node node);
+    [RaisesException] Node lastChildInFlatTree(Node node);
+    [RaisesException] Node nextInFlatTree(Node node);
+    [RaisesException] Node previousInFlatTree(Node node);
 
     DOMString visiblePlaceholder(Element element);
 
-    [TypeChecking=Interface] void selectColorInColorChooser(Element element, DOMString colorValue);
-    [TypeChecking=Interface] void endColorChooser(Element element);
+    void selectColorInColorChooser(Element element, DOMString colorValue);
+    void endColorChooser(Element element);
 
     // If the argument is omitted, the top-level document is used.
     boolean hasAutofocusRequest(optional Document document);
@@ -96,42 +102,39 @@
 
     [RaisesException] ClientRect absoluteCaretBounds();
 
-    [TypeChecking=Interface] ClientRect boundingBox(Element element);
+    ClientRect boundingBox(Element element);
 
-    [RaisesException, TypeChecking=Interface] unsigned long markerCountForNode(Node node, DOMString markerType);
-    [TypeChecking=Interface] unsigned long activeMarkerCountForNode(Node node);
-    [RaisesException, TypeChecking=Interface] Range markerRangeForNode(Node node, DOMString markerType, unsigned long index);
-    [RaisesException, TypeChecking=Interface] DOMString markerDescriptionForNode(Node node, DOMString markerType, unsigned long index);
-    [TypeChecking=Interface] void addTextMatchMarker(Range range, boolean isActive);
-    [TypeChecking=Interface] void setMarkersActive(Node node, unsigned long startOffset, unsigned long endOffset, boolean active);
+    [RaisesException] unsigned long markerCountForNode(Node node, DOMString markerType);
+    unsigned long activeMarkerCountForNode(Node node);
+    [RaisesException] Range markerRangeForNode(Node node, DOMString markerType, unsigned long index);
+    [RaisesException] DOMString markerDescriptionForNode(Node node, DOMString markerType, unsigned long index);
+    void addTextMatchMarker(Range range, boolean isActive);
+    void setMarkersActive(Node node, unsigned long startOffset, unsigned long endOffset, boolean active);
     void setMarkedTextMatchesAreHighlighted(Document document, boolean highlight);
 
-    [RaisesException, TypeChecking=Interface] void setFrameViewPosition(Document document, long x, long y);
+    [RaisesException] void setFrameViewPosition(Document document, long x, long y);
 
-    [RaisesException, TypeChecking=Interface] DOMString viewportAsText(Document document,
-                                                                       float devicePixelRatio,
-                                                                       long availableWidth,
-                                                                       long availableHeight);
+    [RaisesException] DOMString viewportAsText(Document document,
+                                               float devicePixelRatio,
+                                               long availableWidth,
+                                               long availableHeight);
 
-    [RaisesException, TypeChecking=Interface] boolean wasLastChangeUserEdit(Element textField);
-    [RaisesException, TypeChecking=Interface] boolean elementShouldAutoComplete(Element inputElement);
-    [RaisesException, TypeChecking=Interface] DOMString suggestedValue(Element inputElement);
-    [RaisesException, TypeChecking=Interface] void setSuggestedValue(Element inputElement, DOMString value);
-    [RaisesException, TypeChecking=Interface] void setEditingValue(Element inputElement, DOMString value);
-    [RaisesException, TypeChecking=Interface] void setAutofilled(Element inputElement, boolean enabled);
+    [RaisesException] boolean elementShouldAutoComplete(Element inputElement);
+    [RaisesException] DOMString suggestedValue(Element inputElement);
+    [RaisesException] void setSuggestedValue(Element inputElement, DOMString value);
+    [RaisesException] void setEditingValue(Element inputElement, DOMString value);
+    [RaisesException] void setAutofilled(Element inputElement, boolean enabled);
 
-    [RaisesException, TypeChecking=Interface] void scrollElementToRect(Element element, long x, long y, long w, long h);
+    Range rangeFromLocationAndLength(Element scope, long rangeLocation, long rangeLength);
+    unsigned long locationFromRange(Element scope, Range range);
+    unsigned long lengthFromRange(Element scope, Range range);
+    DOMString rangeAsText(Range range);
 
-    [TypeChecking=Interface] Range rangeFromLocationAndLength(Element scope, long rangeLocation, long rangeLength);
-    [TypeChecking=Interface] unsigned long locationFromRange(Element scope, Range range);
-    [TypeChecking=Interface] unsigned long lengthFromRange(Element scope, Range range);
-    [TypeChecking=Interface] DOMString rangeAsText(Range range);
-
-    [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] 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);
+    [RaisesException] DOMPoint touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
+    [RaisesException] Node touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
+    [RaisesException] DOMPoint touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
+    [RaisesException] Node touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
+    [RaisesException] ClientRect bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document document);
 
     [RaisesException] long lastSpellCheckRequestSequence(Document document);
     [RaisesException] long lastSpellCheckProcessedSequence(Document document);
@@ -139,57 +142,56 @@
     sequence<DOMString> userPreferredLanguages();
     void setUserPreferredLanguages(sequence<DOMString> languages);
 
-    [TypeChecking=Interface] unsigned long activeDOMObjectCount(Document document);
-    [TypeChecking=Interface] unsigned long wheelEventHandlerCount(Document document);
-    [TypeChecking=Interface] unsigned long scrollEventHandlerCount(Document document);
-    [TypeChecking=Interface] unsigned long touchEventHandlerCount(Document document);
-    [RaisesException, TypeChecking=Interface] LayerRectList touchEventTargetLayerRects(Document document);
+    unsigned long activeDOMObjectCount(Document document);
+    unsigned long wheelEventHandlerCount(Document document);
+    unsigned long scrollEventHandlerCount(Document document);
+    unsigned long touchEventHandlerCount(Document document);
+    [RaisesException] LayerRectList touchEventTargetLayerRects(Document document);
 
-    [RaisesException, TypeChecking=Interface] boolean executeCommand(Document document, DOMString name, DOMString value);
+    [RaisesException] boolean executeCommand(Document document, DOMString name, DOMString value);
 
     DOMString htmlNamespace();
     sequence<DOMString> htmlTags();
     DOMString svgNamespace();
     sequence<DOMString> svgTags();
 
-    [RaisesException, TypeChecking=Interface] NodeList nodesFromRect(Document document, long x, long y,
+    [RaisesException] NodeList nodesFromRect(Document document, long x, long y,
         unsigned long topPadding, unsigned long rightPadding, unsigned long bottomPadding, unsigned long leftPadding,
         boolean ignoreClipping, boolean allowChildFrameContent);
 
-    [TypeChecking=Interface] boolean hasSpellingMarker(Document document, long from, long length);
-    [TypeChecking=Interface] boolean hasGrammarMarker(Document document, long from, long length);
+    boolean hasSpellingMarker(Document document, long from, long length);
+    boolean hasGrammarMarker(Document document, long from, long length);
     void setContinuousSpellCheckingEnabled(boolean enabled);
 
-    [TypeChecking=Interface] boolean isOverwriteModeEnabled(Document document);
-    [TypeChecking=Interface] void toggleOverwriteModeEnabled(Document document);
+    boolean isOverwriteModeEnabled(Document document);
+    void toggleOverwriteModeEnabled(Document document);
 
-    [TypeChecking=Interface] unsigned long numberOfScrollableAreas(Document document);
+    unsigned long numberOfScrollableAreas(Document document);
 
-    [TypeChecking=Interface] boolean isPageBoxVisible(Document document, long pageNumber);
+    boolean isPageBoxVisible(Document document, long pageNumber);
 
     readonly attribute InternalSettings settings;
     readonly attribute InternalRuntimeFlags runtimeFlags;
     readonly attribute unsigned long workerThreadCount;
 
     // Flags for layerTreeAsText.
-    // The values of these constants must be kept in sync with the values of LayerTreeAsTextBehaviorFlags in GraphicsLayerClient.h.
+    // The values of these constants must be kept in sync with the values of LayerTreeFlags in GraphicsLayerClient.h.
+    const unsigned short LAYER_TREE_INCLUDES_DEBUG_INFO = 1;
     const unsigned short LAYER_TREE_INCLUDES_REPAINT_RECTS = 2;
     const unsigned short LAYER_TREE_INCLUDES_PAINTING_PHASES = 4;
     const unsigned short LAYER_TREE_INCLUDES_ROOT_LAYER = 8;
     const unsigned short LAYER_TREE_INCLUDES_CLIP_AND_SCROLL_PARENTS = 16;
-    const unsigned short LAYER_TREE_INCLUDES_SCROLL_BLOCKS_ON = 32;
-    const unsigned short LAYER_TREE_INCLUDES_PAINT_INVALIDATION_OBJECTS = 64;
-    const unsigned short LAYER_TREE_INCLUDES_COMPOSITING_REASONS = 128;
-    [RaisesException, TypeChecking=Interface] DOMString layerTreeAsText(Document document, optional unsigned short flags);
-    [RaisesException, TypeChecking=Interface] DOMString elementLayerTreeAsText(Element element, optional unsigned short flags);
+    const unsigned short LAYER_TREE_INCLUDES_PAINT_INVALIDATION_OBJECTS = 32;
+    const unsigned short LAYER_TREE_INCLUDES_COMPOSITING_REASONS = 64;
+    [RaisesException] DOMString layerTreeAsText(Document document, optional unsigned short flags);
+    [RaisesException] DOMString elementLayerTreeAsText(Element element, optional unsigned short flags);
 
-    [RaisesException, TypeChecking=Interface] boolean scrollsWithRespectTo(Element element1, Element element2);
+    [RaisesException] boolean scrollsWithRespectTo(Element element1, Element element2);
 
-    [TypeChecking=Interface] DOMString scrollingStateTreeAsText(Document document);
-    [RaisesException, TypeChecking=Interface] DOMString mainThreadScrollingReasons(Document document);
-    [RaisesException, TypeChecking=Interface] ClientRectList nonFastScrollableRects(Document document);
+    DOMString scrollingStateTreeAsText(Document document);
+    [RaisesException] DOMString mainThreadScrollingReasons(Document document);
+    [RaisesException] ClientRectList nonFastScrollableRects(Document document);
 
-    [TypeChecking=Interface] void garbageCollectDocumentResources(Document document);
     void evictAllResources();
 
     unsigned long numberOfLiveNodes();
@@ -199,22 +201,22 @@
     unsigned long[] setMemoryCacheCapacities(unsigned long minDeadBytes, unsigned long maxDeadBytes, unsigned long totalBytes);
 
     DOMString counterValue(Element element);
-    long pageNumber(Element element, optional float pageWidth, optional float pageHeight);
+    [RaisesException] long pageNumber(Element element, optional float pageWidth = 800, optional float pageHeight = 600);
     DOMString[] shortcutIconURLs(Document document);
     DOMString[] allIconURLs(Document document);
-    long numberOfPages(optional double pageWidthInPixels, optional double pageHeightInPixels);
+    [RaisesException] long numberOfPages(optional double pageWidthInPixels = 800, optional double pageHeightInPixels = 600);
     [RaisesException] DOMString pageProperty(DOMString propertyName, long pageNumber);
     [RaisesException] DOMString pageSizeAndMarginsInPixels(long pageIndex, long width, long height, long marginTop, long marginRight, long marginBottom, long marginLeft);
 
-    [RaisesException] void setDeviceScaleFactor(float scaleFactor);
     [RaisesException] void setPageScaleFactor(float scaleFactor);
     [RaisesException] void setPageScaleFactorLimits(float minScaleFactor, float maxScaleFactor);
 
-    [RaisesException, TypeChecking=Interface] void setIsCursorVisible(Document document, boolean isVisible);
+    [RaisesException] void setIsCursorVisible(Document document, boolean isVisible);
 
-    [TypeChecking=Interface] double effectiveMediaVolume(HTMLMediaElement mediaElement);
-    [TypeChecking=Interface] void mediaPlayerRemoteRouteAvailabilityChanged(HTMLMediaElement mediaElement, boolean available);
-    [TypeChecking=Interface] void mediaPlayerPlayingRemotelyChanged(HTMLMediaElement mediaElement, boolean remote);
+    double effectiveMediaVolume(HTMLMediaElement mediaElement);
+    void mediaPlayerRemoteRouteAvailabilityChanged(HTMLMediaElement mediaElement, boolean available);
+    void mediaPlayerPlayingRemotelyChanged(HTMLMediaElement mediaElement, boolean remote);
+    void setAllowHiddenVolumeControls(HTMLMediaElement mediaElement, boolean allow);
 
     void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme);
     void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme, sequence<DOMString> policyAreas);
@@ -229,50 +231,62 @@
 
     DOMString[] getReferencedFilePaths();
 
-    // These functions both reset the tracked repaint rects. They are inteded to be used in the following order:
-    //  startTrackingRepaints, repaintRectsAsText, stopTrackingRepaints.
-    [RaisesException, TypeChecking=Interface] void startTrackingRepaints(Document document);
-    [RaisesException, TypeChecking=Interface] void stopTrackingRepaints(Document document);
+    // These functions both reset the tracked repaint rects. They are intended to be used in the following order:
+    //  startTrackingRepaints(), repaintRectsAsText(), stopTrackingRepaints().
+    // TODO(wangxianzhu): Remove these functions when we no longer use repaint rects.
+    [RaisesException] void startTrackingRepaints(Document document);
+    [RaisesException] void stopTrackingRepaints(Document document);
 
     // |node| should be Document, HTMLIFrameElement, or unspecified.
     // If |node| is an HTMLIFrameElement, it assumes node.contentDocument is
     // specified without security checks. Unspecified means this document.
     [RaisesException] void updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks(optional Node? node = null);
 
-    [RaisesException, TypeChecking=Interface] void forceFullRepaint(Document document);
+    [RaisesException] void forceFullRepaint(Document document);
+
+    // These functions both reset the tracked paint invalidation objects. They are intended to be used in the following order:
+    //  startTrackingPaintInvalidationObjects(), trackedPaintInvalidationObjects(), stopTrackingPaintInvalidationObjects().
+    void startTrackingPaintInvalidationObjects();
+    void stopTrackingPaintInvalidationObjects();
+
+    // Returns a list of debug strings for objects that were invalidated between
+    // startTrackingPaintInvalidationObjects() and stopTrackingPaintInvalidationObjects().
+    // If an object is invalidated multiple times, it will appear in the list multiple times.
+    DOMString[] trackedPaintInvalidationObjects();
 
     // Returns a list of draggable/non-draggable regions in the document.
-    [RaisesException, TypeChecking=Interface] ClientRectList draggableRegions(Document document);
-    [RaisesException, TypeChecking=Interface] ClientRectList nonDraggableRegions(Document document);
+    [RaisesException] ClientRectList draggableRegions(Document document);
+    [RaisesException] ClientRectList nonDraggableRegions(Document document);
 
     // Returns a string with information about the mouse cursor used at the specified client location.
-    [TypeChecking=Interface] DOMString getCurrentCursorInfo();
+    DOMString getCurrentCursorInfo();
 
     readonly attribute boolean cursorUpdatePending;
 
-    [TypeChecking=Interface] DOMString markerTextForListItem(Element element);
+    DOMString markerTextForListItem(Element element);
 
     SerializedScriptValue deserializeBuffer(ArrayBuffer buffer);
     ArrayBuffer serializeObject(SerializedScriptValue obj);
 
     void forceReload(boolean endToEnd);
 
-    [TypeChecking=Interface] DOMString getImageSourceURL(Element element);
+    DOMString getImageSourceURL(Element element);
 
-    [TypeChecking=Interface] DOMString selectMenuListText(HTMLSelectElement select);
-    [TypeChecking=Interface] boolean isSelectPopupVisible(Node node);
+    DOMString selectMenuListText(HTMLSelectElement select);
+    boolean isSelectPopupVisible(Node node);
     boolean selectPopupItemStyleIsRtl(Node select, long itemIndex);
     long selectPopupItemStyleFontHeight(Node select, long itemIndex);
+    void resetTypeAheadSession(HTMLSelectElement select);
 
     [RaisesException] ClientRect selectionBounds();
 
     boolean loseSharedGraphicsContext3D();
 
-    [RaisesException, TypeChecking=Interface] void forceCompositingUpdate(Document document);
+    [RaisesException] void forceCompositingUpdate(Document document);
 
     void setZoomFactor(float factor);
 
-    [RaisesException, TypeChecking=Interface] void setShouldRevealPassword(Element element, boolean reveal);
+    [RaisesException] void setShouldRevealPassword(Element element, boolean reveal);
 
     [CallWith=ScriptState] Promise createResolvedPromise(any value);
     [CallWith=ScriptState] Promise createRejectedPromise(any reason);
@@ -291,35 +305,37 @@
     void setFocused(boolean focused);
     void setInitialFocus(boolean reverse);
 
-    [TypeChecking=Interface] boolean ignoreLayoutWithPendingStylesheets(Document document);
+    boolean ignoreLayoutWithPendingStylesheets(Document document);
 
     // These functions are for testing NetInfo. You must call setNetworkStateNotifierTestOnly(true)
     // before calling setNetworkConnectionInfo.
     void setNetworkStateNotifierTestOnly(boolean testOnly);
-    [RaisesException] void setNetworkConnectionInfo(DOMString type);
+    [RaisesException] void setNetworkConnectionInfo(DOMString type, double downlinkMaxMbps);
 
     // This function is for testing HitRegions on Canvas2D.
     unsigned long countHitRegions(CanvasRenderingContext2D context);
 
-    [TypeChecking=Interface] boolean isInCanvasFontCache(Document document, DOMString fontString);
-    [TypeChecking=Interface] unsigned long canvasFontCacheMaxFonts();
-
-    [TypeChecking=Interface] ClientRect boundsInViewportSpace(Element element);
-
-    [RaisesException, TypeChecking=Interface] void forcePluginPlaceholder(HTMLElement plugin, DocumentFragment fragment);
-    [RaisesException, TypeChecking=Interface] void forcePluginPlaceholder(HTMLElement plugin, PluginPlaceholderOptions options);
+    boolean isInCanvasFontCache(Document document, DOMString fontString);
+    unsigned long canvasFontCacheMaxFonts();
 
     DictionaryTest dictionaryTest();
     UnionTypesTest unionTypesTest();
-
+    [RaisesException] void setScrollChain(ScrollState scrollState, Element[] elements);
     void forceBlinkGCWithoutV8GC();
 
     DOMString selectedHTMLForClipboard();
     DOMString selectedTextForClipboard();
 
     void setVisualViewportOffset(long x, long y);
+    int visualViewportHeight();
+    int visualViewportWidth();
+    double visualViewportScrollX();
+    double visualViewportScrollY();
+
+    bool magnifyScaleAroundAnchor(float offset, float x, float y);
 
     boolean isUseCounted(Document document, long useCounterId);
+    boolean isCSSPropertyUseCounted(Document document, DOMString propertyName);
 
     iterable<long>;
 
@@ -327,5 +343,20 @@
     [Unscopeable] DOMString unscopeableMethod();
 
     ClientRectList focusRingRects(Element element);
+    ClientRectList outlineRects(Element element);
     void setCapsLockState(boolean enabled);
+
+    // Returns whether the scrollbar was able to be shown or hidden; not all platforms
+    // support overlay scrollbars.
+    bool setScrollbarVisibilityInScrollableArea(Node node, boolean visible);
+
+    void forceRestrictIFramePermissions();
+    [RaisesException] double monotonicTimeToZeroBasedDocumentTime(double platformTime);
+
+    void setMediaElementNetworkState(HTMLMediaElement element, long state);
+
+    // TODO(liberato): remove once autoplay gesture override experiment concludes.
+    void triggerAutoplayViewportCheck(HTMLMediaElement mediaElement);
+
+    int getScrollAnimationState(Node node);
 };
diff --git a/core/testing/PluginPlaceholderOptions.idl b/core/testing/PluginPlaceholderOptions.idl
deleted file mode 100644
index c478c29..0000000
--- a/core/testing/PluginPlaceholderOptions.idl
+++ /dev/null
@@ -1,8 +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.
-
-dictionary PluginPlaceholderOptions {
-    DOMString message;
-    boolean closeable;
-};
diff --git a/core/testing/PrivateScriptTest.idl b/core/testing/PrivateScriptTest.idl
index f2dd041..8e6d976 100644
--- a/core/testing/PrivateScriptTest.idl
+++ b/core/testing/PrivateScriptTest.idl
@@ -4,7 +4,6 @@
 
 [
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface PrivateScriptTest {
     [ImplementedInPrivateScript] void doNothing();
     [ImplementedInPrivateScript] short return123();
diff --git a/core/testing/TypeConversions.idl b/core/testing/TypeConversions.idl
index fbe1673..a937e5e 100644
--- a/core/testing/TypeConversions.idl
+++ b/core/testing/TypeConversions.idl
@@ -47,18 +47,10 @@
     [EnforceRange, ImplementedAs=testUnsignedShort] attribute unsigned short testEnforceRangeUnsignedShort;
 
     attribute ByteString testByteString;
-    [ImplementedAs=testByteString, TreatReturnedNullStringAs=Null] attribute ByteString testByteStringTreatReturnedNullStringAsNullAttribute;
-    [ImplementedAs=testByteString, TreatReturnedNullStringAs=Undefined] attribute ByteString testByteStringTreatReturnedNullStringAsUndefinedAttribute;
-    [ImplementedAs=testByteString] ByteString? getTestByteStringTreatReturnedNullStringAsNullMethod();
-    [ImplementedAs=testByteString, TreatReturnedNullStringAs=Undefined] ByteString getTestByteStringTreatReturnedNullStringAsUndefinedMethod();
     void setTestByteString(ByteString byteString);
     [ImplementedAs=setTestByteString] void setTestByteStringDefaultNull(optional ByteString byteString = null);
 
     attribute USVString testUSVString;
-    [ImplementedAs=testUSVString, TreatReturnedNullStringAs=Null] attribute USVString testUSVStringTreatReturnedNullStringAsNullAttribute;
-    [ImplementedAs=testUSVString, TreatReturnedNullStringAs=Undefined] attribute USVString testUSVStringTreatReturnedNullStringAsUndefinedAttribute;
-    [ImplementedAs=testUSVString] USVString? getTestUSVStringTreatReturnedNullStringAsNullMethod();
-    [ImplementedAs=testUSVString, TreatReturnedNullStringAs=Undefined] USVString getTestUSVStringTreatReturnedNullStringAsUndefinedMethod();
     void setTestUSVString(USVString usvString);
     [ImplementedAs=setTestUSVString] void setTestUSVStringDefaultNull(optional USVString usvString = null);
 };
diff --git a/core/timing/ConsoleMemory.idl b/core/timing/ConsoleMemory.idl
index 2cf01b6..4a19192 100644
--- a/core/timing/ConsoleMemory.idl
+++ b/core/timing/ConsoleMemory.idl
@@ -7,5 +7,5 @@
 
 partial interface Console {
     // We can't make the attribute readonly as it breaks existing code that relies on being able to assign to console.memory in strict mode. Instead, the setter just ignores the passed value.  http://crbug.com/468611
-    [Measure] attribute MemoryInfo memory;
+    [Measure, LegacyInterfaceTypeChecking] attribute MemoryInfo memory;
 };
diff --git a/core/timing/Performance.idl b/core/timing/Performance.idl
index 6a8fab6..44eccbc 100644
--- a/core/timing/Performance.idl
+++ b/core/timing/Performance.idl
@@ -35,7 +35,9 @@
 // would allow the WorkerPerformance interface to be merged into this.
 // TODO(philipj): None of the optional DOMString arguments in this interface
 // should have a default value.
-interface Performance : EventTarget {
+[
+  GarbageCollected
+] interface Performance : EventTarget {
     DOMHighResTimeStamp now();
 
     // Performance Timeline
@@ -47,19 +49,19 @@
 
     // Resource Timing
     // https://w3c.github.io/resource-timing/#extensions-performance-interface
-    // TODO(philipj): Unprefix these APIs.
-    [MeasureAs=PrefixedPerformanceClearResourceTimings] void webkitClearResourceTimings();
-    [MeasureAs=PrefixedPerformanceSetResourceTimingBufferSize] void webkitSetResourceTimingBufferSize(unsigned long maxSize);
-    attribute EventHandler onwebkitresourcetimingbufferfull;
+    void clearResourceTimings();
+    void setResourceTimingBufferSize(unsigned long maxSize);
+    attribute EventHandler onresourcetimingbufferfull;
+
+    // TODO(ksakamoto): Remove these prefixed APIs.
+    [DeprecateAs=PrefixedPerformanceClearResourceTimings, ImplementedAs=clearResourceTimings] void webkitClearResourceTimings();
+    [DeprecateAs=PrefixedPerformanceSetResourceTimingBufferSize, ImplementedAs=setResourceTimingBufferSize] void webkitSetResourceTimingBufferSize(unsigned long maxSize);
+    [DeprecateAs=PrefixedPerformanceResourceTimingBufferFull] attribute EventHandler onwebkitresourcetimingbufferfull;
 
     // Navigation Timing
-    // http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute
-    // TODO(philipj): The Navigation Timing Rec. defines the (not partial)
-    // Performance interface, while https://w3c.github.io/navigation-timing/ has
-    // changed the interface in an incompatible way:
-    // https://github.com/w3c/navigation-timing/issues/22
-    [Measure] readonly attribute PerformanceTiming timing;
-    [Measure] readonly attribute PerformanceNavigation navigation;
+    // https://w3c.github.io/navigation-timing/#extensions-to-the-performance-interface
+    [SameObject, Measure] readonly attribute PerformanceTiming timing;
+    [SameObject, Measure] readonly attribute PerformanceNavigation navigation;
 
     // User Timing
     // https://w3c.github.io/user-timing/#extensions-performance-interface
diff --git a/core/timing/PerformanceNavigation.idl b/core/timing/PerformanceNavigation.idl
index 4ed6c06..30ee7b2 100644
--- a/core/timing/PerformanceNavigation.idl
+++ b/core/timing/PerformanceNavigation.idl
@@ -28,13 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/navigation-timing/#sec-navigation-info-interface
-
-// TODO(philipj): This interface been morphed into PerformanceNavigationTiming
-// in the latest spec:
-// https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming
+// https://w3c.github.io/navigation-timing/#the-performancenavigation-interface
 
 [
+    Exposed=Window,
     GarbageCollected
 ] interface PerformanceNavigation {
     const unsigned short TYPE_NAVIGATE = 0;
@@ -43,4 +40,5 @@
     const unsigned short TYPE_RESERVED = 255;
     readonly attribute unsigned short type;
     readonly attribute unsigned short redirectCount;
+    // TODO(philipj): serializer = {attribute};
 };
diff --git a/core/timing/PerformanceObserver.idl b/core/timing/PerformanceObserver.idl
new file mode 100644
index 0000000..de04cb9
--- /dev/null
+++ b/core/timing/PerformanceObserver.idl
@@ -0,0 +1,16 @@
+// Copyright 2015 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://w3c.github.io/performance-timeline/#idl-def-PerformanceObserverCallback
+callback PerformanceObserverCallback = void (PerformanceObserverEntryList entries, PerformanceObserver observer);
+
+// http://w3c.github.io/performance-timeline/#the-performance-observer-interface
+[
+    CustomConstructor(PerformanceObserverCallback callback),
+    RuntimeEnabled=PerformanceObserver,
+    GarbageCollected,
+] interface PerformanceObserver {
+    [RaisesException] void observe(PerformanceObserverInit options);
+    void disconnect();
+};
diff --git a/core/timing/PerformanceObserverEntryList.idl b/core/timing/PerformanceObserverEntryList.idl
new file mode 100644
index 0000000..0d34346
--- /dev/null
+++ b/core/timing/PerformanceObserverEntryList.idl
@@ -0,0 +1,16 @@
+// Copyright 2015 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://w3c.github.io/performance-timeline/#the-performance-observer-interface
+
+[
+    RuntimeEnabled=PerformanceObserver,
+    Exposed=(Window,Worker),
+    GarbageCollected,
+] interface PerformanceObserverEntryList {
+    // TODO(philipj): getEntries() should take an optional FilterOptions argument.
+    sequence<PerformanceEntry> getEntries();
+    sequence<PerformanceEntry> getEntriesByType(DOMString entryType);
+    sequence<PerformanceEntry> getEntriesByName(DOMString name, optional DOMString entryType = null);
+};
diff --git a/core/timing/PerformanceObserverInit.idl b/core/timing/PerformanceObserverInit.idl
new file mode 100644
index 0000000..635a31c
--- /dev/null
+++ b/core/timing/PerformanceObserverInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/performance-timeline/#the-performance-observer-interface
+[
+    RuntimeEnabled=PerformanceObserver,
+] dictionary PerformanceObserverInit {
+    required sequence<DOMString> entryTypes;
+};
diff --git a/core/timing/PerformanceTiming.idl b/core/timing/PerformanceTiming.idl
index 10fc224..2a7bcc7 100644
--- a/core/timing/PerformanceTiming.idl
+++ b/core/timing/PerformanceTiming.idl
@@ -28,13 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface
-
-// TODO(philipj): This interface been morphed into PerformanceNavigationTiming
-// in the latest spec:
-// https://w3c.github.io/navigation-timing/#sec-PerformanceNavigationTiming
+// https://w3c.github.io/navigation-timing/#the-performancetiming-interface
 
 [
+    Exposed=Window,
     GarbageCollected
 ] interface PerformanceTiming {
     readonly attribute unsigned long long navigationStart;
@@ -58,7 +55,5 @@
     readonly attribute unsigned long long domComplete;
     readonly attribute unsigned long long loadEventStart;
     readonly attribute unsigned long long loadEventEnd;
-
-    // TODO(philipj): This serializer is not defined in the spec.
     serializer = {attribute};
 };
diff --git a/core/timing/WindowPerformance.idl b/core/timing/WindowPerformance.idl
index 9418d5d..209a4cd 100644
--- a/core/timing/WindowPerformance.idl
+++ b/core/timing/WindowPerformance.idl
@@ -2,11 +2,10 @@
 // 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/navigation-timing/#sec-window.performance-attribute
+// https://w3c.github.io/hr-time/#the-performance-interface
 
-// TODO(philipj): Window.performance should be in High Resolution Time:
-// https://github.com/w3c/hr-time/issues/9
-
+// TODO(philipj): This should be a GlobalPerformance interface implemented by
+// Window and WorkerGlobalScope.
 [
     ImplementedAs=DOMWindowPerformance,
 ] partial interface Window {
diff --git a/core/timing/WorkerGlobalScopePerformance.idl b/core/timing/WorkerGlobalScopePerformance.idl
index 1682a6e..d283fd8 100644
--- a/core/timing/WorkerGlobalScopePerformance.idl
+++ b/core/timing/WorkerGlobalScopePerformance.idl
@@ -28,9 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// TODO(philipj): There is no spec for WorkerGlobalScope.performance:
-// https://github.com/w3c/hr-time/issues/10
+// https://w3c.github.io/hr-time/#the-performance-interface
 
+// TODO(philipj): This should be a GlobalPerformance interface implemented by
+// Window and WorkerGlobalScope.
 partial interface WorkerGlobalScope {
     readonly attribute WorkerPerformance performance;
 };
diff --git a/core/timing/WorkerPerformance.idl b/core/timing/WorkerPerformance.idl
index 07c17c4..b3ac8ac 100644
--- a/core/timing/WorkerPerformance.idl
+++ b/core/timing/WorkerPerformance.idl
@@ -48,10 +48,9 @@
 
     // Resource Timing
     // https://w3c.github.io/resource-timing/#extensions-performance-interface
-    // TODO(philipj): Unprefix these APIs.
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline, MeasureAs=PrefixedPerformanceClearResourceTimings] void webkitClearResourceTimings();
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline, MeasureAs=PrefixedPerformanceSetResourceTimingBufferSize] void webkitSetResourceTimingBufferSize(unsigned long maxSize);
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] attribute EventHandler onwebkitresourcetimingbufferfull;
+    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void clearResourceTimings();
+    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void setResourceTimingBufferSize(unsigned long maxSize);
+    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] attribute EventHandler onresourcetimingbufferfull;
 
     // User Timing
     // https://w3c.github.io/user-timing/#extensions-performance-interface
diff --git a/core/workers/AbstractWorker.idl b/core/workers/AbstractWorker.idl
index ee524ab..c88428d 100644
--- a/core/workers/AbstractWorker.idl
+++ b/core/workers/AbstractWorker.idl
@@ -35,7 +35,7 @@
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
     Exposed=(Window,Worker),
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface AbstractWorker {
     attribute EventHandler onerror;
 };
diff --git a/core/workers/SharedWorker.idl b/core/workers/SharedWorker.idl
index 3e94cab..3cb45e7 100644
--- a/core/workers/SharedWorker.idl
+++ b/core/workers/SharedWorker.idl
@@ -32,10 +32,11 @@
 // https://html.spec.whatwg.org/#shared-workers-and-the-sharedworker-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     // TODO(philipj): The name argument should not have a default null value.
     Constructor(DOMString scriptURL, optional DOMString name = null),
     ConstructorCallWith=ExecutionContext,
+    GarbageCollected,
     // TODO(philipj): Exposed=(Window,Worker),
     RaisesException=Constructor,
     RuntimeEnabled=SharedWorker,
diff --git a/core/workers/Worker.idl b/core/workers/Worker.idl
index cd657ab..70e5235 100644
--- a/core/workers/Worker.idl
+++ b/core/workers/Worker.idl
@@ -28,9 +28,10 @@
 // https://html.spec.whatwg.org/#dedicated-workers-and-the-worker-interface
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString scriptUrl),
     ConstructorCallWith=ExecutionContext,
+    GarbageCollected,
     // TODO(philipj): Exposed=(Window,Worker),
     RaisesException=Constructor,
 ] interface Worker : EventTarget {
diff --git a/core/xml/DocumentXPathEvaluator.idl b/core/xml/DocumentXPathEvaluator.idl
index 12c03ff..5f47dc4 100644
--- a/core/xml/DocumentXPathEvaluator.idl
+++ b/core/xml/DocumentXPathEvaluator.idl
@@ -19,9 +19,7 @@
 
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 
-[
-    TypeChecking=Interface,
-] partial interface Document {
+partial interface Document {
     [MeasureAs=DocumentXPathCreateExpression, RaisesException] XPathExpression createExpression(DOMString expression, optional XPathNSResolver? resolver = null);
 
     [MeasureAs=DocumentXPathCreateNSResolver] XPathNSResolver createNSResolver(Node nodeResolver);
diff --git a/core/xml/XMLSerializer.idl b/core/xml/XMLSerializer.idl
index ee2e83c..9995b0e 100644
--- a/core/xml/XMLSerializer.idl
+++ b/core/xml/XMLSerializer.idl
@@ -23,7 +23,6 @@
 [
     Constructor,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface XMLSerializer {
     DOMString serializeToString(Node root);
 };
diff --git a/core/xml/XPathEvaluator.idl b/core/xml/XPathEvaluator.idl
index 70f258f..0210849 100644
--- a/core/xml/XPathEvaluator.idl
+++ b/core/xml/XPathEvaluator.idl
@@ -29,7 +29,6 @@
     Constructor,
     GarbageCollected,
     Measure,
-    TypeChecking=Interface,
 ] interface XPathEvaluator {
     [Measure, RaisesException] XPathExpression createExpression(DOMString expression, optional XPathNSResolver? resolver = null);
 
diff --git a/core/xml/XPathExpression.idl b/core/xml/XPathExpression.idl
index 397fb25..3effc99 100644
--- a/core/xml/XPathExpression.idl
+++ b/core/xml/XPathExpression.idl
@@ -22,7 +22,6 @@
 
 [
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface XPathExpression {
      [RaisesException] XPathResult evaluate(Node contextNode, optional unsigned short type = 0, optional object? inResult = null);
 };
diff --git a/core/xml/XSLTProcessor.idl b/core/xml/XSLTProcessor.idl
index 221628f..b7b5158 100644
--- a/core/xml/XSLTProcessor.idl
+++ b/core/xml/XSLTProcessor.idl
@@ -36,7 +36,6 @@
     ConstructorCallWith=Document,
     RuntimeEnabled=XSLT,
     MeasureAs=XSLTProcessor,
-    TypeChecking=Interface,
 ] interface XSLTProcessor {
 
     void importStylesheet(Node style);
diff --git a/core/xmlhttprequest/XMLHttpRequest.idl b/core/xmlhttprequest/XMLHttpRequest.idl
index da14664..28d9452 100644
--- a/core/xmlhttprequest/XMLHttpRequest.idl
+++ b/core/xmlhttprequest/XMLHttpRequest.idl
@@ -41,11 +41,9 @@
 // TODO(philipj): Most DOMString types in the XMLHttpRequest interface should be
 // either ByteString or USVString.
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ScriptState,
-    // TODO(philipj): The spec has Exposed=(Window,Worker)
-    // https://github.com/whatwg/xhr/issues/19
     Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface XMLHttpRequest : XMLHttpRequestEventTarget {
     // event handler
diff --git a/core/xmlhttprequest/XMLHttpRequestEventTarget.idl b/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
index 6854477..154a1a5 100644
--- a/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
+++ b/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
@@ -28,8 +28,6 @@
 
 [
     GarbageCollected,
-    // TODO(philipj): The spec has Exposed=(Window,Worker)
-    // https://github.com/whatwg/xhr/issues/19
     Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface XMLHttpRequestEventTarget : EventTarget {
     // event handlers
diff --git a/core/xmlhttprequest/XMLHttpRequestProgressEvent.idl b/core/xmlhttprequest/XMLHttpRequestProgressEvent.idl
deleted file mode 100644
index 950a854..0000000
--- a/core/xmlhttprequest/XMLHttpRequestProgressEvent.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2008, 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.
- */
-
-// TODO(philipj): Remove this interface together with position/totalSize.
-interface XMLHttpRequestProgressEvent : ProgressEvent {
-     [DeprecateAs=XHRProgressEventPosition] readonly attribute unsigned long long position;
-     [DeprecateAs=XHRProgressEventTotalSize] readonly attribute unsigned long long totalSize;
-};
diff --git a/core/xmlhttprequest/XMLHttpRequestUpload.idl b/core/xmlhttprequest/XMLHttpRequestUpload.idl
index a5ac933..325a6ff 100644
--- a/core/xmlhttprequest/XMLHttpRequestUpload.idl
+++ b/core/xmlhttprequest/XMLHttpRequestUpload.idl
@@ -28,7 +28,7 @@
 
 // https://xhr.spec.whatwg.org/#xmlhttprequestupload
 
-// TODO(philipj): The spec has Exposed=(Window,Worker)
-// https://github.com/whatwg/xhr/issues/19
-interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {
+[
+    Exposed=(Window,DedicatedWorker,SharedWorker)
+] interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {
 };
diff --git a/modules/README b/modules/README
deleted file mode 100644
index 630832e..0000000
--- a/modules/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This directory contains a copy of WebKit/WebCore IDL files.
-See the attached LICENSE-* files in this directory.
-
-Please do not modify the files here.  They are periodically copied
-using the script: $DART_ROOT/sdk/lib/html/scripts/idlsync.py
-
-The current version corresponds to:
-URL: https://src.chromium.org/blink/branches/dart/2454_1
-Current revision: 202759
diff --git a/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl b/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
index a530d62..b8a3195 100644
--- a/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
+++ b/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
@@ -6,6 +6,5 @@
 
 partial interface HTMLMediaElement {
     [RuntimeEnabled=AudioOutputDevices] readonly attribute DOMString sinkId;
-    [RuntimeEnabled=AudioOutputDevices, TypeChecking=Interface, CallWith=ScriptState] Promise<void> setSinkId(DOMString sinkId);
+    [RuntimeEnabled=AudioOutputDevices, CallWith=ScriptState] Promise<void> setSinkId(DOMString sinkId);
 };
-
diff --git a/modules/background_sync/PeriodicSyncEvent.idl b/modules/background_sync/PeriodicSyncEvent.idl
deleted file mode 100644
index 826fb6c..0000000
--- a/modules/background_sync/PeriodicSyncEvent.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2015 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.
-
-[
-    Constructor(DOMString type, PeriodicSyncEventInit init),
-    Exposed=ServiceWorker,
-    RuntimeEnabled=BackgroundSync,
-] interface PeriodicSyncEvent : ExtendableEvent {
-    readonly attribute PeriodicSyncRegistration registration;
-};
diff --git a/modules/background_sync/PeriodicSyncManager.idl b/modules/background_sync/PeriodicSyncManager.idl
deleted file mode 100644
index 44c3f76..0000000
--- a/modules/background_sync/PeriodicSyncManager.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2015 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.
-
-[
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=BackgroundSync,
-    TypeChecking=Interface,
-] interface PeriodicSyncManager {
-    [CallWith=ScriptState,ImplementedAs=registerFunction] Promise<PeriodicSyncRegistration> register([RuntimeEnabled=BackgroundSyncV2] optional PeriodicSyncRegistrationOptions options);
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<PeriodicSyncRegistration> getRegistration(DOMString tag);
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<sequence<PeriodicSyncRegistration>> getRegistrations();
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<SyncPermissionState> permissionState();
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute unsigned long minPossiblePeriod;
-};
diff --git a/modules/background_sync/PeriodicSyncRegistration.idl b/modules/background_sync/PeriodicSyncRegistration.idl
deleted file mode 100644
index 4cc19f6..0000000
--- a/modules/background_sync/PeriodicSyncRegistration.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2015 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 SyncNetworkState {
-  "any",
-  "avoid-cellular",
-  "online"
-};
-
-enum SyncPowerState {
-  "auto",
-  "avoid-draining"
-};
-
-[
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=BackgroundSync,
-] interface PeriodicSyncRegistration {
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute DOMString tag;
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute unsigned long minPeriod;
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute SyncNetworkState networkState;
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute SyncPowerState powerState;
-    [CallWith=ScriptState] Promise<boolean> unregister();
-};
diff --git a/modules/background_sync/PeriodicSyncRegistrationOptions.idl b/modules/background_sync/PeriodicSyncRegistrationOptions.idl
deleted file mode 100644
index 97c0a82..0000000
--- a/modules/background_sync/PeriodicSyncRegistrationOptions.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 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=BackgroundSync,
-] dictionary PeriodicSyncRegistrationOptions {
-    DOMString tag;
-    unsigned long minPeriod = 0;
-    SyncNetworkState networkState = "network-online";
-    SyncPowerState powerState = "auto";
-};
diff --git a/modules/background_sync/ServiceWorkerGlobalScopeSync.idl b/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
index f8a766a..0860b81 100644
--- a/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
+++ b/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
@@ -6,5 +6,4 @@
     RuntimeEnabled=BackgroundSync,
 ] partial interface ServiceWorkerGlobalScope {
     attribute EventHandler onsync;
-    attribute EventHandler onperiodicsync;
 };
diff --git a/modules/background_sync/ServiceWorkerRegistrationSync.idl b/modules/background_sync/ServiceWorkerRegistrationSync.idl
index ee4ad72..0620451 100644
--- a/modules/background_sync/ServiceWorkerRegistrationSync.idl
+++ b/modules/background_sync/ServiceWorkerRegistrationSync.idl
@@ -7,5 +7,4 @@
     RuntimeEnabled=BackgroundSync,
 ] partial interface ServiceWorkerRegistration {
     [MeasureAs=BackgroundSync] readonly attribute SyncManager sync;
-    [MeasureAs=BackgroundSync] readonly attribute PeriodicSyncManager periodicSync;
 };
diff --git a/modules/background_sync/SyncEvent.idl b/modules/background_sync/SyncEvent.idl
index ae8a874..f663de0 100644
--- a/modules/background_sync/SyncEvent.idl
+++ b/modules/background_sync/SyncEvent.idl
@@ -7,5 +7,6 @@
     Exposed=ServiceWorker,
     RuntimeEnabled=BackgroundSync,
 ] interface SyncEvent : ExtendableEvent {
-    readonly attribute SyncRegistration registration;
+    readonly attribute DOMString tag;
+    readonly attribute boolean lastChance;
 };
diff --git a/modules/background_sync/SyncEventInit.idl b/modules/background_sync/SyncEventInit.idl
index a7d2f51..1a2a804 100644
--- a/modules/background_sync/SyncEventInit.idl
+++ b/modules/background_sync/SyncEventInit.idl
@@ -3,5 +3,6 @@
 // found in the LICENSE file.
 
 dictionary SyncEventInit : ExtendableEventInit {
-    required SyncRegistration registration;
+    required DOMString tag;
+    boolean lastChance = false;
 };
diff --git a/modules/background_sync/SyncManager.idl b/modules/background_sync/SyncManager.idl
index a8a9962..16899c1 100644
--- a/modules/background_sync/SyncManager.idl
+++ b/modules/background_sync/SyncManager.idl
@@ -12,10 +12,7 @@
     Exposed=(Window,ServiceWorker),
     GarbageCollected,
     RuntimeEnabled=BackgroundSync,
-    TypeChecking=Interface,
 ] interface SyncManager {
-    [CallWith=ScriptState,ImplementedAs=registerFunction] Promise<SyncRegistration> register([RuntimeEnabled=BackgroundSyncV2] optional SyncRegistrationOptions options);
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<SyncRegistration> getRegistration(DOMString tag);
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<sequence<SyncRegistration>> getRegistrations();
-    [RuntimeEnabled=BackgroundSyncV2, CallWith=ScriptState] Promise<SyncPermissionState> permissionState();
+    [MeasureAs=BackgroundSyncRegister,CallWith=(ScriptState,ExecutionContext),ImplementedAs=registerFunction] Promise<void> register(DOMString tag);
+    [CallWith=ScriptState] Promise<sequence<DOMString>> getTags();
 };
diff --git a/modules/background_sync/SyncRegistration.idl b/modules/background_sync/SyncRegistration.idl
deleted file mode 100644
index 171e3e4..0000000
--- a/modules/background_sync/SyncRegistration.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 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.
-
-[
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=BackgroundSync,
-] interface SyncRegistration {
-    [RuntimeEnabled=BackgroundSyncV2] readonly attribute DOMString tag;
-    [CallWith=ScriptState] Promise<boolean> unregister();
-};
diff --git a/modules/battery/BatteryManager.idl b/modules/battery/BatteryManager.idl
index 1237a51..26eebff 100644
--- a/modules/battery/BatteryManager.idl
+++ b/modules/battery/BatteryManager.idl
@@ -4,7 +4,7 @@
 
 // https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html#batterymanager-interface
 [
-    ActiveDOMObject
+    DependentLifetime
 ] interface BatteryManager : EventTarget {
     readonly attribute boolean charging;
     readonly attribute unrestricted double chargingTime;
diff --git a/modules/battery/testing/InternalsBattery.idl b/modules/battery/testing/InternalsBattery.idl
new file mode 100644
index 0000000..69256c9
--- /dev/null
+++ b/modules/battery/testing/InternalsBattery.idl
@@ -0,0 +1,9 @@
+// Copyright 2016 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.
+
+// TODO(yukishiino): Remove this API once JS bindings of Mojo services get
+// available.
+partial interface Internals {
+    void updateBatteryStatus(boolean charging, float chargingTime, float dischargingTime, float level);
+};
diff --git a/modules/bluetooth/Bluetooth.idl b/modules/bluetooth/Bluetooth.idl
index 28cf361..4055338 100644
--- a/modules/bluetooth/Bluetooth.idl
+++ b/modules/bluetooth/Bluetooth.idl
@@ -8,6 +8,8 @@
     GarbageCollected,
     NoInterfaceObject,
     RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
 ] interface Bluetooth {
     [CallWith=ScriptState, RaisesException] Promise<BluetoothDevice> requestDevice (
         RequestDeviceOptions options
diff --git a/modules/bluetooth/BluetoothAdvertisingData.idl b/modules/bluetooth/BluetoothAdvertisingData.idl
new file mode 100644
index 0000000..818e5b4
--- /dev/null
+++ b/modules/bluetooth/BluetoothAdvertisingData.idl
@@ -0,0 +1,20 @@
+// Copyright 2015 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://webbluetoothcg.github.io/web-bluetooth/#bluetoothadvertisingdata
+
+// Implement BluetoothAdvertisingData interface: http://crbug.com/542756
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothAdvertisingData {
+    // readonly attribute unsigned short? appearance;
+    readonly attribute byte? txPower;
+    readonly attribute byte? rssi;
+    // readonly attribute ManufacturerDataMap manufacturerData;
+    // readonly attribute ServiceDataMap  serviceData;
+};
diff --git a/modules/bluetooth/BluetoothCharacteristicProperties.idl b/modules/bluetooth/BluetoothCharacteristicProperties.idl
new file mode 100644
index 0000000..ca87d7d
--- /dev/null
+++ b/modules/bluetooth/BluetoothCharacteristicProperties.idl
@@ -0,0 +1,24 @@
+// Copyright 2015 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://webbluetoothcg.github.io/web-bluetooth/#characteristicproperties
+
+// Implement BluetoothCharacteristicProperties interface: http://crbug.com/483345
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothCharacteristicProperties {
+    readonly attribute boolean broadcast;
+    readonly attribute boolean read;
+    readonly attribute boolean writeWithoutResponse;
+    readonly attribute boolean write;
+    readonly attribute boolean notify;
+    readonly attribute boolean indicate;
+    readonly attribute boolean authenticatedSignedWrites;
+    readonly attribute boolean reliableWrite;
+    readonly attribute boolean writableAuxiliaries;
+};
diff --git a/modules/bluetooth/BluetoothDevice.idl b/modules/bluetooth/BluetoothDevice.idl
index 70ba6f8..13ac479 100644
--- a/modules/bluetooth/BluetoothDevice.idl
+++ b/modules/bluetooth/BluetoothDevice.idl
@@ -13,22 +13,27 @@
 
 [
     GarbageCollected,
+    DependentLifetime,
     RuntimeEnabled=WebBluetooth,
-] interface BluetoothDevice
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothDevice : EventTarget
 // Implement ServiceEventHandlers interface: http://crbug.com/421670
-// : ServiceEventHandlers 
+// : ServiceEventHandlers
 {
 // Implement BluetoothDevice interface: http://crbug.com/421668
-    readonly    attribute DOMString                  instanceID;
+    [DeprecateAs=BluetoothDeviceInstanceId, ImplementedAs=id] readonly attribute DOMString instanceID;
+    readonly    attribute DOMString id;
     readonly    attribute DOMString?                 name;
-//    readonly    attribute BluetoothAdvertisingData   adData;
+    readonly    attribute BluetoothAdvertisingData   adData;
     readonly    attribute unsigned long?             deviceClass;
     readonly    attribute VendorIDSource?            vendorIDSource;
     readonly    attribute unsigned long?             vendorID;
     readonly    attribute unsigned long?             productID;
     readonly    attribute unsigned long?             productVersion;
-    readonly    attribute boolean                    paired;
-//    readonly    attribute BluetoothGATTRemoteServer? gattServer;
+    readonly    attribute BluetoothRemoteGATTServer  gatt;
     readonly    attribute UUID[]                     uuids;
-    [CallWith=ScriptState] Promise<BluetoothGATTRemoteServer> connectGATT ();
+    [CallWith=ScriptState, DeprecateAs=BluetoothDeviceConnectGATT] Promise<BluetoothRemoteGATTServer> connectGATT ();
+
+    attribute EventHandler ongattserverdisconnected;
 };
diff --git a/modules/bluetooth/BluetoothGATTCharacteristic.idl b/modules/bluetooth/BluetoothGATTCharacteristic.idl
deleted file mode 100644
index c3e0eea..0000000
--- a/modules/bluetooth/BluetoothGATTCharacteristic.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattcharacteristic
-
-// Implement BluetoothGATTCharacteristic interface: https://crbug.com/483344
-
-[
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-] interface BluetoothGATTCharacteristic {//: CharacteristicEventHandlers {
-    // TODO(ortuno): Add test to make sure service matches the service
-    // used to call getCharacteristic.
-    // readonly    attribute BluetoothGATTService     service;
-    readonly    attribute UUID                   uuid;
-    // readonly    attribute CharacteristicProperties properties;
-    // readonly    attribute ArrayBuffer?             value;
-    // Promise<BluetoothGATTDescriptor>           getDescriptor(BluetoothDescriptorUUID descriptor);
-    // Promise<sequence<BluetoothGATTDescriptor>> getDescriptors(optional BluetoothDescriptorUUID descriptor);
-    [CallWith=ScriptState] Promise<ArrayBuffer> readValue();
-    [CallWith=ScriptState] Promise<void>        writeValue(BufferSource value);
-    // Promise<void>                              startNotifications();
-    // Promise<void>                              stopNotifications();
-};
diff --git a/modules/bluetooth/BluetoothGATTRemoteServer.idl b/modules/bluetooth/BluetoothGATTRemoteServer.idl
deleted file mode 100644
index 9f94604..0000000
--- a/modules/bluetooth/BluetoothGATTRemoteServer.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattremoteserver
-
-// Implement BluetoothGATTRemoteServer interface: https://crbug.com/476735
-
-[
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-] interface BluetoothGATTRemoteServer
-// Implement ServiceEventHandlers interface: http://crbug.com/421670
-// : ServiceEventHandlers 
-{
-  // readonly attribute BluetoothDevice      device;
-    readonly attribute boolean                           connected;
-  // void                                    disconnect ();
-    [CallWith=ScriptState, RaisesException] Promise<BluetoothGATTService> getPrimaryService (BluetoothServiceUUID service);
-  // Promise<sequence<BluetoothGATTService>> getPrimaryServices (optional BluetoothServiceUUID service);
-};
diff --git a/modules/bluetooth/BluetoothGATTService.idl b/modules/bluetooth/BluetoothGATTService.idl
deleted file mode 100644
index b6cef73..0000000
--- a/modules/bluetooth/BluetoothGATTService.idl
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattservice
-
-// Implement BluetoothGATTService interface: https://crbug.com/483342
-
-[
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-] interface BluetoothGATTService { // : ServiceEventHandlers {
-    readonly    attribute UUID            uuid;
-    readonly    attribute boolean         isPrimary;
-    // TODO(ortuno): Once device is implemented test that it matches
-    // the original device.
-    // readonly    attribute BluetoothDevice device;
-    [RaisesException, CallWith=ScriptState] Promise<BluetoothGATTCharacteristic>           getCharacteristic(BluetoothCharacteristicUUID characteristic);
-    // Promise<sequence<BluetoothGATTCharacteristic>> getCharacteristics(optional BluetoothCharacteristicUUID characteristic);
-    // Promise<BluetoothGATTService>                  getIncludedService(BluetoothServiceUUID service);
-    // Promise<sequence<BluetoothGATTService>>        getIncludedServices(optional BluetoothServiceUUID service);
-};
diff --git a/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl b/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
new file mode 100644
index 0000000..16c2dd2
--- /dev/null
+++ b/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
@@ -0,0 +1,32 @@
+// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattcharacteristic
+
+// Implement BluetoothRemoteGATTCharacteristic interface: https://crbug.com/483344
+
+[
+    GarbageCollected,
+    DependentLifetime,
+    RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothRemoteGATTCharacteristic : EventTarget {//: CharacteristicEventHandlers {
+    // TODO(ortuno): Add test to make sure service matches the service
+    // used to call getCharacteristic.
+    // readonly    attribute BluetoothRemoteGATTService     service;
+    readonly    attribute UUID                  uuid;
+    readonly    attribute BluetoothCharacteristicProperties properties;
+    readonly    attribute DataView?             value;
+    // Promise<BluetoothRemoteGATTDescriptor>           getDescriptor(BluetoothDescriptorUUID descriptor);
+    // Promise<sequence<BluetoothRemoteGATTDescriptor>> getDescriptors(optional BluetoothDescriptorUUID descriptor);
+    [CallWith=ScriptState] Promise<DataView>    readValue();
+    [CallWith=ScriptState] Promise<void>        writeValue(BufferSource value);
+    [CallWith=ScriptState] Promise<void>        startNotifications();
+    [CallWith=ScriptState] Promise<void>        stopNotifications();
+
+    // TODO(ortuno): Move this to CharacteristicEventHandlers.
+    // http://crbug.com/537459
+    attribute EventHandler oncharacteristicvaluechanged;
+};
diff --git a/modules/bluetooth/BluetoothRemoteGATTServer.idl b/modules/bluetooth/BluetoothRemoteGATTServer.idl
new file mode 100644
index 0000000..5e26954
--- /dev/null
+++ b/modules/bluetooth/BluetoothRemoteGATTServer.idl
@@ -0,0 +1,22 @@
+// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattremoteserver
+
+// Implement BluetoothGATTRemoteServer interface: https://crbug.com/476735
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothRemoteGATTServer
+{
+    readonly attribute BluetoothDevice                   device;
+    readonly attribute boolean                           connected;
+    [CallWith=ScriptState] Promise<BluetoothRemoteGATTServer>             connect();
+    [CallWith=ScriptState] void                                           disconnect();
+    [CallWith=ScriptState, RaisesException] Promise<BluetoothRemoteGATTService> getPrimaryService (BluetoothServiceUUID service);
+  // Promise<sequence<BluetoothRemoteGATTService>> getPrimaryServices (optional BluetoothServiceUUID service);
+};
diff --git a/modules/bluetooth/BluetoothRemoteGATTService.idl b/modules/bluetooth/BluetoothRemoteGATTService.idl
new file mode 100644
index 0000000..85ce907
--- /dev/null
+++ b/modules/bluetooth/BluetoothRemoteGATTService.idl
@@ -0,0 +1,24 @@
+// Copyright 2015 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://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattservice
+
+// Implement BluetoothRemoteGATTService interface: https://crbug.com/483342
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
+] interface BluetoothRemoteGATTService { // : ServiceEventHandlers {
+    readonly    attribute UUID            uuid;
+    readonly    attribute boolean         isPrimary;
+    // TODO(ortuno): Once device is implemented test that it matches
+    // the original device.
+    // readonly    attribute BluetoothDevice device;
+    [RaisesException, CallWith=ScriptState] Promise<BluetoothRemoteGATTCharacteristic>           getCharacteristic(BluetoothCharacteristicUUID characteristic);
+    [RaisesException, CallWith=ScriptState] Promise<sequence<BluetoothRemoteGATTCharacteristic>> getCharacteristics(optional BluetoothCharacteristicUUID characteristic);
+    // Promise<BluetoothRemoteGATTService>                  getIncludedService(BluetoothServiceUUID service);
+    // Promise<sequence<BluetoothRemoteGATTService>>        getIncludedServices(optional BluetoothServiceUUID service);
+};
diff --git a/modules/bluetooth/BluetoothScanFilter.idl b/modules/bluetooth/BluetoothScanFilter.idl
index 7ab4f9e..b8e7447 100644
--- a/modules/bluetooth/BluetoothScanFilter.idl
+++ b/modules/bluetooth/BluetoothScanFilter.idl
@@ -6,4 +6,6 @@
 
 dictionary BluetoothScanFilter {
     sequence<BluetoothServiceUUID> services;
+    DOMString name;
+    DOMString namePrefix;
 };
diff --git a/modules/bluetooth/BluetoothUUID.idl b/modules/bluetooth/BluetoothUUID.idl
index 456dd8e..a064b3d 100644
--- a/modules/bluetooth/BluetoothUUID.idl
+++ b/modules/bluetooth/BluetoothUUID.idl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://webbluetoothcg.github.io/web-bluetooth/#idl-def-bluetoothuuid
+// https://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothuuid
 
 // Implement BluetoothUUID: http://crbug.com/491441
 // Significant TODOs remain in BluetoothUUID.cpp.
@@ -10,6 +10,8 @@
 [
     GarbageCollected,
     RuntimeEnabled=WebBluetooth,
+    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+    // OriginTrialEnabled=WebBluetooth,
 ] interface BluetoothUUID {
     [RaisesException] static UUID getService((DOMString or unsigned long) name);
     [RaisesException] static UUID getCharacteristic((DOMString or unsigned long) name);
diff --git a/modules/bluetooth/NavigatorBluetooth.idl b/modules/bluetooth/NavigatorBluetooth.idl
index 671f652..e7c777c 100644
--- a/modules/bluetooth/NavigatorBluetooth.idl
+++ b/modules/bluetooth/NavigatorBluetooth.idl
@@ -7,5 +7,11 @@
 [
     RuntimeEnabled=WebBluetooth,
 ] partial interface Navigator {
-    readonly attribute Bluetooth bluetooth;
+    // Experimental Framework doesn't support adding bindings to partial
+    // interfaces yet, so we add it to the bluetooth attribute instead.
+    // https://crbug.com/585656
+    [
+        // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
+        // OriginTrialEnabled=WebBluetooth
+    ] readonly attribute Bluetooth bluetooth;
 };
diff --git a/modules/cachestorage/Cache.idl b/modules/cachestorage/Cache.idl
index 8446938..6bd3c42 100644
--- a/modules/cachestorage/Cache.idl
+++ b/modules/cachestorage/Cache.idl
@@ -7,16 +7,11 @@
 [
     GarbageCollected,
     Exposed=(Window,Worker),
-    TypeChecking=Interface,
 ] interface Cache {
     [CallWith=ScriptState, RaisesException] Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
-
-    // FIXME: Implement matchAll(): http://crbug.com/428363
-    // FIXME: First argument of matchAll() should be optional: http://crbug.com/425459
-    // [CallWith=ScriptState, RaisesException] Promise<sequence<Response>> matchAll(RequestInfo request, optional CacheQueryOptions options);
-
+    [CallWith=ScriptState, RaisesException] Promise<sequence<Response>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
     [CallWith=ScriptState, RaisesException] Promise<void> add(RequestInfo request);
-    [RuntimeEnabled=ServiceWorkerCacheAddAll, CallWith=ScriptState, RaisesException] Promise<void> addAll(sequence<RequestInfo> requests);
+    [CallWith=ScriptState, RaisesException] Promise<void> addAll(sequence<RequestInfo> requests);
     [CallWith=ScriptState, RaisesException] Promise<void> put(RequestInfo request, Response response);
     [CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] Promise<boolean> delete(RequestInfo request, optional CacheQueryOptions options);
     [CallWith=ScriptState, RaisesException] Promise<sequence<Response>> keys(optional RequestInfo request, optional CacheQueryOptions options);
diff --git a/modules/cachestorage/CacheStorage.idl b/modules/cachestorage/CacheStorage.idl
index d0924ad..5749c17 100644
--- a/modules/cachestorage/CacheStorage.idl
+++ b/modules/cachestorage/CacheStorage.idl
@@ -6,11 +6,10 @@
 [
     GarbageCollected,
     Exposed=(Window,Worker),
-    TypeChecking=Interface,
 ] interface CacheStorage {
-  [CallWith=ScriptState] Promise<boolean> has(DOMString cacheName);
-  [CallWith=ScriptState] Promise<Cache> open(DOMString cacheName);
-  [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise<boolean> delete(DOMString cacheName);
-  [CallWith=ScriptState] Promise<sequence<DOMString>> keys();
+  [CallWith=ScriptState, RaisesException] Promise<boolean> has(DOMString cacheName);
+  [CallWith=ScriptState, RaisesException] Promise<Cache> open(DOMString cacheName);
+  [CallWith=ScriptState, RaisesException, ImplementedAs=deleteFunction] Promise<boolean> delete(DOMString cacheName);
+  [CallWith=ScriptState, RaisesException] Promise<sequence<DOMString>> keys();
   [CallWith=ScriptState, RaisesException] Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
 };
diff --git a/modules/cachestorage/WorkerCacheStorage.idl b/modules/cachestorage/WorkerCacheStorage.idl
index 483f399..5916e88 100644
--- a/modules/cachestorage/WorkerCacheStorage.idl
+++ b/modules/cachestorage/WorkerCacheStorage.idl
@@ -7,5 +7,5 @@
     RuntimeEnabled=GlobalCacheStorage,
     ImplementedAs=GlobalCacheStorage,
 ] partial interface WorkerGlobalScope {
-  [Unforgeable, MeasureAs=GlobalCacheStorage, RuntimeEnabled=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
+    [Unforgeable, MeasureAs=GlobalCacheStorage, RuntimeEnabled=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
 };
diff --git a/modules/canvas2d/CanvasRenderingContext2D.idl b/modules/canvas2d/CanvasRenderingContext2D.idl
index d366967..a2a897c 100644
--- a/modules/canvas2d/CanvasRenderingContext2D.idl
+++ b/modules/canvas2d/CanvasRenderingContext2D.idl
@@ -25,7 +25,6 @@
 
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvasrenderingcontext2d
 
-// FIXME: float => double throughout
 typedef (HTMLImageElement or
          HTMLVideoElement or
          HTMLCanvasElement or
@@ -33,10 +32,10 @@
          ImageBitmap) CanvasImageSource;
 
 enum CanvasFillRule { "nonzero", "evenodd" };
+enum ImageSmoothingQuality {"low", "medium", "high"};
 
 [
     SetWrapperReferenceFrom=canvas,
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface CanvasRenderingContext2D {
     // back-reference to the canvas
@@ -48,39 +47,40 @@
 
     // transformations (default transform is the identity matrix)
     [RuntimeEnabled=ExperimentalCanvasFeatures] attribute SVGMatrix currentTransform;
-    void scale(unrestricted float x, unrestricted float y);
-    void rotate(unrestricted float angle);
-    void translate(unrestricted float x, unrestricted float y);
-    void transform(unrestricted float a, unrestricted float b, unrestricted float c, unrestricted float d, unrestricted float e, unrestricted float f);
-    void setTransform(unrestricted float a, unrestricted float b, unrestricted float c, unrestricted float d, unrestricted float e, unrestricted float f);
+    void scale(unrestricted double x, unrestricted double y);
+    void rotate(unrestricted double angle);
+    void translate(unrestricted double x, unrestricted double y);
+    void transform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
+    void setTransform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
     void resetTransform();
 
     // compositing
-    attribute unrestricted float globalAlpha; // (default 1.0)
-    [TreatNullAs=NullString] attribute DOMString globalCompositeOperation; // (default source-over)
-    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString filter; // (default 'none') 
+    attribute unrestricted double globalAlpha; // (default 1.0)
+    attribute DOMString globalCompositeOperation; // (default source-over)
+    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString filter; // (default 'none')
 
     // image smoothing
     [ImplementedAs=imageSmoothingEnabled, DeprecateAs=PrefixedImageSmoothingEnabled] attribute boolean webkitImageSmoothingEnabled;
-    [MeasureAs=UnprefixedImageSmoothingEnabled] attribute boolean imageSmoothingEnabled;
+    [MeasureAs=UnprefixedImageSmoothingEnabled] attribute boolean imageSmoothingEnabled; // (default True)
+    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute ImageSmoothingQuality imageSmoothingQuality; // (default "low")
 
     // colors and styles (see also the CanvasDrawingStyles interface)
     attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
     attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
-    CanvasGradient createLinearGradient(float x0, float y0, float x1, float y1);
-    [RaisesException] CanvasGradient createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1);
-    [RaisesException] CanvasPattern createPattern(CanvasImageSource image, DOMString? repetitionType);
+    CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1);
+    [RaisesException] CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
+    [RaisesException] CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=NullString] DOMString repetitionType);
 
     // shadows
-    attribute unrestricted float shadowOffsetX;
-    attribute unrestricted float shadowOffsetY;
-    attribute unrestricted float shadowBlur;
-    [TreatNullAs=NullString] attribute DOMString shadowColor;
+    attribute unrestricted double shadowOffsetX;
+    attribute unrestricted double shadowOffsetY;
+    attribute unrestricted double shadowBlur;
+    attribute DOMString shadowColor;
 
     // rects
-    void clearRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
-    void fillRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
-    void strokeRect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
+    void clearRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    void fillRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    void strokeRect(unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
 
     // path API (see also CanvasPathMethods)
     void beginPath();
@@ -95,20 +95,20 @@
     [RuntimeEnabled=ExperimentalCanvasFeatures] void scrollPathIntoView(optional Path2D path);
     void clip(optional CanvasFillRule winding);
     void clip(Path2D path, optional CanvasFillRule winding);
-    boolean isPointInPath(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);
-    boolean isPointInStroke(Path2D path, unrestricted float x, unrestricted float y);
+    boolean isPointInPath(unrestricted double x, unrestricted double y, optional CanvasFillRule winding);
+    boolean isPointInPath(Path2D path, unrestricted double x, unrestricted double y, optional CanvasFillRule winding);
+    boolean isPointInStroke(unrestricted double x, unrestricted double y);
+    boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y);
 
     // text (see also the CanvasDrawingStyles interface)
-    void fillText(DOMString text, unrestricted float x, unrestricted float y, optional unrestricted float maxWidth);
-    void strokeText(DOMString text, unrestricted float x, unrestricted float y, optional unrestricted float maxWidth);
+    void fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
+    void strokeText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
     TextMetrics measureText(DOMString text);
 
     // drawing images
-    [RaisesException] void drawImage(CanvasImageSource image, unrestricted float x, unrestricted float y);
-    [RaisesException] void drawImage(CanvasImageSource image, unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
-    [RaisesException] void drawImage(CanvasImageSource image, unrestricted float sx, unrestricted float sy, unrestricted float sw, unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
+    [RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y);
+    [RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    [RaisesException] void drawImage(CanvasImageSource image, unrestricted double sx, unrestricted double sy, unrestricted double sw, unrestricted double sh, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
 
     // hit regions
     [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void addHitRegion(optional HitRegionOptions options);
@@ -117,10 +117,10 @@
 
     // pixel manipulation
     ImageData createImageData(ImageData imagedata);
-    [RaisesException] ImageData createImageData(float sw, float sh);
-    [RaisesException] ImageData getImageData(float sx, float sy, float sw, float sh);
-    void putImageData(ImageData imagedata, float dx, float dy);
-    void putImageData(ImageData imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
+    [RaisesException] ImageData createImageData(double sw, double sh);
+    [RaisesException] ImageData getImageData(double sx, double sy, double sw, double sh);
+    [RaisesException] void putImageData(ImageData imagedata, double dx, double dy);
+    [RaisesException] void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight);
 
     // Context state
     // Should be merged with WebGL counterpart in CanvasRenderingContext, once no-longer experimental
@@ -130,15 +130,15 @@
 
     // FIXME: factor out to CanvasDrawingStyles
     // line caps/joins
-    attribute unrestricted float lineWidth; // (default 1)
-    [TreatNullAs=NullString] attribute DOMString lineCap; // "butt", "round", "square" (default "butt")
-    [TreatNullAs=NullString] attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter")
-    attribute unrestricted float miterLimit; // (default 10)
+    attribute unrestricted double lineWidth; // (default 1)
+    attribute DOMString lineCap; // "butt", "round", "square" (default "butt")
+    attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter")
+    attribute unrestricted double miterLimit; // (default 10)
 
     // dashed lines
-    void setLineDash(sequence<unrestricted float> dash);
-    sequence<unrestricted float> getLineDash();
-    attribute unrestricted float lineDashOffset;
+    void setLineDash(sequence<unrestricted double> dash);
+    sequence<unrestricted double> getLineDash();
+    attribute unrestricted double lineDashOffset;
 
     // text
     attribute DOMString font; // (default 10px sans-serif)
diff --git a/modules/canvas2d/Path2D.idl b/modules/canvas2d/Path2D.idl
index f77f06d..8f8a2a1 100644
--- a/modules/canvas2d/Path2D.idl
+++ b/modules/canvas2d/Path2D.idl
@@ -35,7 +35,7 @@
     GarbageCollected,
 ] interface Path2D {
 
-    [RuntimeEnabled=ExperimentalCanvasFeatures, TypeChecking=Interface] void addPath(Path2D path, optional SVGMatrix? transform);
+    [RuntimeEnabled=ExperimentalCanvasFeatures] void addPath(Path2D path, optional SVGMatrix? transform);
 };
 
 Path2D implements CanvasPathMethods;
diff --git a/modules/canvas2d/TouchHitRegion.idl b/modules/canvas2d/TouchHitRegion.idl
new file mode 100644
index 0000000..50c6a92
--- /dev/null
+++ b/modules/canvas2d/TouchHitRegion.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://html.spec.whatwg.org/multipage/scripting.html#Touch-partial
+
+[
+    RuntimeEnabled=ExperimentalCanvasFeatures
+] partial interface Touch {
+    readonly attribute DOMString? region;
+};
diff --git a/modules/compositorworker/CompositorWorker.idl b/modules/compositorworker/CompositorWorker.idl
index e6f67c4..c7a57ed 100644
--- a/modules/compositorworker/CompositorWorker.idl
+++ b/modules/compositorworker/CompositorWorker.idl
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString scriptUrl),
     ConstructorCallWith=ExecutionContext,
+    GarbageCollected,
     RaisesException=Constructor,
     RuntimeEnabled=CompositorWorker,
-    WillBeGarbageCollected,
 ] interface CompositorWorker : EventTarget {
     attribute EventHandler onmessage;
     [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
diff --git a/modules/compositorworker/CompositorWorkerGlobalScope.idl b/modules/compositorworker/CompositorWorkerGlobalScope.idl
index 217c4b8..f51d663 100644
--- a/modules/compositorworker/CompositorWorkerGlobalScope.idl
+++ b/modules/compositorworker/CompositorWorkerGlobalScope.idl
@@ -6,7 +6,6 @@
     Exposed=CompositorWorker,
     Global=CompositorWorker,
     RuntimeEnabled=CompositorWorker,
-    TypeChecking=Interface,
 ] interface CompositorWorkerGlobalScope : WorkerGlobalScope {
     [PostMessage, RaisesException] void postMessage(any message, optional sequence<Transferable> transfer);
     attribute EventHandler onmessage;
diff --git a/modules/credentialmanager/Credential.idl b/modules/credentialmanager/Credential.idl
index 960a16b..27a73ae 100644
--- a/modules/credentialmanager/Credential.idl
+++ b/modules/credentialmanager/Credential.idl
@@ -6,7 +6,8 @@
 
 [
     RuntimeEnabled=CredentialManager,
-    GarbageCollected
+    GarbageCollected,
+    Exposed=Window
 ] interface Credential {
     readonly attribute DOMString id;
     readonly attribute DOMString type;
diff --git a/modules/credentialmanager/CredentialRequestOptions.idl b/modules/credentialmanager/CredentialRequestOptions.idl
index 2a70c7f..0e5902a 100644
--- a/modules/credentialmanager/CredentialRequestOptions.idl
+++ b/modules/credentialmanager/CredentialRequestOptions.idl
@@ -8,5 +8,5 @@
     FederatedCredentialRequestOptions federated;
 
     boolean password = false;
-    boolean suppressUI = false;
+    boolean unmediated = false;
 };
diff --git a/modules/credentialmanager/CredentialsContainer.idl b/modules/credentialmanager/CredentialsContainer.idl
index da5846d..dc7c109 100644
--- a/modules/credentialmanager/CredentialsContainer.idl
+++ b/modules/credentialmanager/CredentialsContainer.idl
@@ -6,8 +6,7 @@
     RuntimeEnabled=CredentialManager,
     GarbageCollected
 ] interface CredentialsContainer {
-    [CallWith=ScriptState] Promise request(optional CredentialRequestOptions options);
-    [CallWith=ScriptState, TypeChecking=Interface] Promise notifySignedIn(Credential credential);
-    [CallWith=ScriptState] Promise requireUserMediation();
+    [CallWith=ScriptState, MeasureAs=CredentialManagerGet] Promise get(optional CredentialRequestOptions options);
+    [CallWith=ScriptState, MeasureAs=CredentialManagerStore] Promise store(Credential credential);
+    [CallWith=ScriptState, MeasureAs=CredentialManagerRequireUserMediation] Promise requireUserMediation();
 };
-
diff --git a/modules/credentialmanager/FederatedCredential.idl b/modules/credentialmanager/FederatedCredential.idl
index 848ed8d..f72009a 100644
--- a/modules/credentialmanager/FederatedCredential.idl
+++ b/modules/credentialmanager/FederatedCredential.idl
@@ -7,7 +7,8 @@
 [
     RuntimeEnabled=CredentialManager,
     RaisesException=Constructor,
-    Constructor(FederatedCredentialData data)
+    Constructor(FederatedCredentialData data),
+    Exposed=Window
 ] interface FederatedCredential : Credential {
     readonly attribute USVString provider;
 
diff --git a/modules/credentialmanager/FederatedCredentialRequestOptions.idl b/modules/credentialmanager/FederatedCredentialRequestOptions.idl
index 1039962..d1eea0f 100644
--- a/modules/credentialmanager/FederatedCredentialRequestOptions.idl
+++ b/modules/credentialmanager/FederatedCredentialRequestOptions.idl
@@ -5,6 +5,6 @@
 // https://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-federatedcredentialrequestoptions
 
 dictionary FederatedCredentialRequestOptions {
-    sequence<USVString> providers;
+    sequence<DOMString> providers;
     sequence<DOMString> protocols;
 };
diff --git a/modules/credentialmanager/FormDataOptions.idl b/modules/credentialmanager/FormDataOptions.idl
new file mode 100644
index 0000000..76ddd9c
--- /dev/null
+++ b/modules/credentialmanager/FormDataOptions.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-formdataoptions
+
+dictionary FormDataOptions {
+    DOMString idName = "username";
+    DOMString passwordName = "password";
+};
diff --git a/modules/credentialmanager/PasswordCredential.idl b/modules/credentialmanager/PasswordCredential.idl
index 929aed3..2e91a60 100644
--- a/modules/credentialmanager/PasswordCredential.idl
+++ b/modules/credentialmanager/PasswordCredential.idl
@@ -2,11 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+typedef (FormData or URLSearchParams) CredentialBodyType;
+
 [
     RuntimeEnabled=CredentialManager,
     RaisesException=Constructor,
-    Constructor(DOMString id, DOMString password, optional DOMString name, optional DOMString iconURL)
+    Constructor(PasswordCredentialData data),
+    Exposed=Window,
 ] interface PasswordCredential : Credential {
-    readonly attribute DOMString password;
-    readonly attribute FormData formData;
+    attribute USVString idName;
+    attribute USVString passwordName;
+    attribute CredentialBodyType? additionalData;
 };
diff --git a/modules/crypto/Crypto.idl b/modules/crypto/Crypto.idl
index 27182ef..b754187 100644
--- a/modules/crypto/Crypto.idl
+++ b/modules/crypto/Crypto.idl
@@ -34,4 +34,3 @@
 
     readonly attribute SubtleCrypto subtle;
 };
-
diff --git a/modules/crypto/SubtleCrypto.idl b/modules/crypto/SubtleCrypto.idl
index 007f368..04beea2 100644
--- a/modules/crypto/SubtleCrypto.idl
+++ b/modules/crypto/SubtleCrypto.idl
@@ -37,7 +37,6 @@
 [
     GarbageCollected,
     Exposed=(Window,Worker),
-    TypeChecking=Interface,
 ] interface SubtleCrypto {
     [CallWith=ScriptState, MeasureAs=SubtleCryptoEncrypt] Promise encrypt(AlgorithmIdentifier algorithm, CryptoKey key, BufferSource data);
     [CallWith=ScriptState, MeasureAs=SubtleCryptoDecrypt] Promise decrypt(AlgorithmIdentifier algorithm, CryptoKey key, BufferSource data);
diff --git a/modules/device_orientation/DeviceAcceleration.idl b/modules/device_orientation/DeviceAcceleration.idl
index 827bc46..1b2c23e 100644
--- a/modules/device_orientation/DeviceAcceleration.idl
+++ b/modules/device_orientation/DeviceAcceleration.idl
@@ -23,6 +23,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+
 [
     GarbageCollected,
     NoInterfaceObject
diff --git a/modules/device_orientation/DeviceMotionEvent.idl b/modules/device_orientation/DeviceMotionEvent.idl
index c75497a..138f704 100644
--- a/modules/device_orientation/DeviceMotionEvent.idl
+++ b/modules/device_orientation/DeviceMotionEvent.idl
@@ -23,11 +23,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+
+// TODO(philipj): DeviceMotionEvent should have a constructor.
 interface DeviceMotionEvent : Event {
-    readonly attribute DeviceAcceleration acceleration;
-    readonly attribute DeviceAcceleration accelerationIncludingGravity;
-    readonly attribute DeviceRotationRate rotationRate;
+    readonly attribute DeviceAcceleration? acceleration;
+    readonly attribute DeviceAcceleration? accelerationIncludingGravity;
+    readonly attribute DeviceRotationRate? rotationRate;
     readonly attribute double? interval;
+
+    // TODO(philipj): The init*Event() methods are not in the spec:
+    // https://github.com/w3c/deviceorientation/issues/18
     [Custom, Measure] void initDeviceMotionEvent([Default=Undefined] optional DOMString type,
                                                  [Default=Undefined] optional boolean bubbles,
                                                  [Default=Undefined] optional boolean cancelable,
diff --git a/modules/device_orientation/DeviceOrientationEvent.idl b/modules/device_orientation/DeviceOrientationEvent.idl
index ab9840d..e8e0c9d 100644
--- a/modules/device_orientation/DeviceOrientationEvent.idl
+++ b/modules/device_orientation/DeviceOrientationEvent.idl
@@ -23,11 +23,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation
+
+// TODO(philipj): DeviceOrientationEvent should have a constructor.
 interface DeviceOrientationEvent : Event {
     readonly attribute double? alpha;
     readonly attribute double? beta;
     readonly attribute double? gamma;
+    // TODO(philipj): absolute should not be nullable.
     readonly attribute boolean? absolute;
+
+    // TODO(philipj): The init*Event() methods are not in the spec:
+    // https://github.com/w3c/deviceorientation/issues/18
     [Measure] void initDeviceOrientationEvent([Default=Undefined] optional DOMString type,
                                               [Default=Undefined] optional boolean bubbles,
                                               [Default=Undefined] optional boolean cancelable,
diff --git a/modules/device_orientation/DeviceRotationRate.idl b/modules/device_orientation/DeviceRotationRate.idl
index 117c8b6..a8c780b 100644
--- a/modules/device_orientation/DeviceRotationRate.idl
+++ b/modules/device_orientation/DeviceRotationRate.idl
@@ -23,6 +23,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+
 [
     GarbageCollected,
     NoInterfaceObject
diff --git a/modules/device_orientation/WindowDeviceOrientation.idl b/modules/device_orientation/WindowDeviceOrientation.idl
index 8a7d18a..ccbcf55 100644
--- a/modules/device_orientation/WindowDeviceOrientation.idl
+++ b/modules/device_orientation/WindowDeviceOrientation.idl
@@ -6,4 +6,5 @@
     ImplementedAs=DOMWindowDeviceOrientation
 ] partial interface Window {
     attribute EventHandler ondeviceorientation;
+    [RuntimeEnabled=DeviceOrientationAbsolute] attribute EventHandler ondeviceorientationabsolute;
 };
diff --git a/modules/encoding/TextEncoder.idl b/modules/encoding/TextEncoder.idl
index 8812f04..8730de4 100644
--- a/modules/encoding/TextEncoder.idl
+++ b/modules/encoding/TextEncoder.idl
@@ -31,6 +31,7 @@
 [
     Exposed=(Window,Worker),
     Constructor(optional DOMString utfLabel = "utf-8"),
+    ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
     GarbageCollected,
     MeasureAs=TextEncoderConstructor
diff --git a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
index e79fe27..f096397 100644
--- a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
+++ b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
@@ -3,16 +3,7 @@
 // found in the LICENSE file.
 
 partial interface HTMLMediaElement {
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, DeprecateAs=PrefixedMediaGenerateKeyRequest] void webkitGenerateKeyRequest([TreatUndefinedAs=NullString] DOMString? keySystem, optional Uint8Array initData);
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, DeprecateAs=PrefixedMediaAddKey] void webkitAddKey([TreatUndefinedAs=NullString] DOMString? keySystem, Uint8Array key, optional Uint8Array initData, optional DOMString sessionId = null);
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, DeprecateAs=PrefixedMediaCancelKeyRequest] void webkitCancelKeyRequest([TreatUndefinedAs=NullString] DOMString? keySystem, optional DOMString sessionId = null);
-
-    [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitkeyadded;
-    [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitkeyerror;
-    [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitkeymessage;
-    [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitneedkey;
-
     [RuntimeEnabled=EncryptedMedia] readonly attribute MediaKeys mediaKeys;
-    [RuntimeEnabled=EncryptedMedia, TypeChecking=Interface, CallWith=ScriptState] Promise setMediaKeys(MediaKeys? mediaKeys);
+    [RuntimeEnabled=EncryptedMedia, CallWith=ScriptState] Promise setMediaKeys(MediaKeys? mediaKeys);
     [RuntimeEnabled=EncryptedMedia] attribute EventHandler onencrypted;
 };
diff --git a/modules/encryptedmedia/MediaKeySession.idl b/modules/encryptedmedia/MediaKeySession.idl
index 3af0cea..5c3e214 100644
--- a/modules/encryptedmedia/MediaKeySession.idl
+++ b/modules/encryptedmedia/MediaKeySession.idl
@@ -24,10 +24,9 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
-    TypeChecking=Interface
 ] interface MediaKeySession : EventTarget {
     // session properties
     readonly attribute DOMString sessionId;
diff --git a/modules/encryptedmedia/MediaKeyStatusMap.idl b/modules/encryptedmedia/MediaKeyStatusMap.idl
index 41e9853..e5956a2 100644
--- a/modules/encryptedmedia/MediaKeyStatusMap.idl
+++ b/modules/encryptedmedia/MediaKeyStatusMap.idl
@@ -7,8 +7,9 @@
 enum MediaKeyStatus {
     "usable",
     "expired",
+    "released",
+    "output-restricted",
     "output-downscaled",
-    "output-not-allowed",
     "status-pending",
     "internal-error"
 };
diff --git a/modules/encryptedmedia/MediaKeySystemAccess.idl b/modules/encryptedmedia/MediaKeySystemAccess.idl
index 48c2d2c..02069e7 100644
--- a/modules/encryptedmedia/MediaKeySystemAccess.idl
+++ b/modules/encryptedmedia/MediaKeySystemAccess.idl
@@ -7,7 +7,6 @@
 [
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
-    TypeChecking=Interface
 ] interface MediaKeySystemAccess {
     readonly attribute DOMString keySystem;
     MediaKeySystemConfiguration getConfiguration();
diff --git a/modules/encryptedmedia/MediaKeys.idl b/modules/encryptedmedia/MediaKeys.idl
index 7913a47..8bf9389 100644
--- a/modules/encryptedmedia/MediaKeys.idl
+++ b/modules/encryptedmedia/MediaKeys.idl
@@ -29,10 +29,9 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
-    TypeChecking=Interface
 ] interface MediaKeys {
     [CallWith=ScriptState, RaisesException] MediaKeySession createSession(optional MediaKeySessionType sessionType = "temporary");
 
diff --git a/modules/fetch/Body.idl b/modules/fetch/Body.idl
index 25cca48..f943545 100644
--- a/modules/fetch/Body.idl
+++ b/modules/fetch/Body.idl
@@ -7,9 +7,8 @@
 [
     Exposed=ServiceWorker,
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface Body {
     readonly attribute boolean bodyUsed;
     [CallWith=ScriptState] Promise<ArrayBuffer> arrayBuffer();
diff --git a/modules/fetch/Headers.idl b/modules/fetch/Headers.idl
index e17dba9..6ea05d7 100644
--- a/modules/fetch/Headers.idl
+++ b/modules/fetch/Headers.idl
@@ -12,7 +12,6 @@
     Exposed=(Window,Worker),
     RaisesException=Constructor,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface Headers {
     [RaisesException] void append(ByteString name, ByteString value);
     [ImplementedAs=remove, RaisesException] void delete(ByteString key);
diff --git a/modules/fetch/Request.idl b/modules/fetch/Request.idl
index f545af9..7fe8fed 100644
--- a/modules/fetch/Request.idl
+++ b/modules/fetch/Request.idl
@@ -13,25 +13,26 @@
     "prefetch", "script", "serviceworker", "sharedworker",
     "subresource", "style", "track", "video", "worker", "xmlhttprequest", "xslt"
 };
-enum RequestMode { "same-origin", "no-cors", "cors" };
+enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
 enum RequestCredentials { "omit", "same-origin", "include" };
+enum RequestRedirect { "follow", "error", "manual" };
 
 [
     Constructor(RequestInfo input, optional Dictionary requestInitDict),
     ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
     RaisesException=Constructor,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface Request {
     readonly attribute ByteString method;
     readonly attribute USVString url;
     readonly attribute Headers headers;
-    [DeprecateAs=FetchAPIRequestContext] readonly attribute RequestContext context;
     readonly attribute DOMString referrer;
     readonly attribute RequestMode mode;
     readonly attribute RequestCredentials credentials;
+    readonly attribute RequestRedirect redirect;
+    readonly attribute DOMString integrity;
 
     [RaisesException] Request clone();
 };
diff --git a/modules/fetch/Response.idl b/modules/fetch/Response.idl
index 5deaa68..cd8a275 100644
--- a/modules/fetch/Response.idl
+++ b/modules/fetch/Response.idl
@@ -4,19 +4,17 @@
 
 // http://fetch.spec.whatwg.org/#response-class
 
-enum ResponseType { "basic", "cors", "default", "error", "opaque" };
-
-// FIXME: Add union type: URLSearchParams
-typedef (Blob or ArrayBuffer or ArrayBufferView or FormData or USVString) BodyInit;
+enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredirect" };
 
 [
-    Constructor(optional BodyInit body, optional Dictionary responseInitDict),
-    ConstructorCallWith=ExecutionContext,
+    // TODO(yhirano): We use "any" for body because the IDL processor doesn't
+    // recognize ReadableStream implemented with V8 extras. Fix it.
+    Constructor(optional any body, optional Dictionary responseInitDict),
+    ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
     RaisesException=Constructor,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface Response {
     [CallWith=ExecutionContext] static Response error();
     [CallWith=ExecutionContext, RaisesException] static Response redirect(USVString url, optional unsigned short status = 302);
@@ -29,7 +27,7 @@
 
     [RaisesException] Response clone();
 
-    readonly attribute ReadableByteStream body;
+    [ImplementedAs=bodyWithUseCounter] readonly attribute ReadableByteStream body;
 };
 
 Response implements Body;
diff --git a/modules/filesystem/DOMFileSystem.idl b/modules/filesystem/DOMFileSystem.idl
index 80f5032..1652123 100644
--- a/modules/filesystem/DOMFileSystem.idl
+++ b/modules/filesystem/DOMFileSystem.idl
@@ -31,7 +31,7 @@
 
 [
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface DOMFileSystem {
     readonly attribute DOMString name;
diff --git a/modules/filesystem/WorkerGlobalScopeFileSystem.idl b/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
similarity index 94%
rename from modules/filesystem/WorkerGlobalScopeFileSystem.idl
rename to modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
index f01817a..d050cd6 100644
--- a/modules/filesystem/WorkerGlobalScopeFileSystem.idl
+++ b/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
@@ -24,7 +24,8 @@
  *
  */
 
-partial interface WorkerGlobalScope {
+[ImplementedAs=WorkerGlobalScopeFileSystem]
+partial interface DedicatedWorkerGlobalScope {
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
 
@@ -32,6 +33,4 @@
     [RuntimeEnabled=FileSystem, RaisesException, MeasureAs=RequestFileSystemSyncWorker] DOMFileSystemSync webkitRequestFileSystemSync(unsigned short type, long long size);
     [RuntimeEnabled=FileSystem] void webkitResolveLocalFileSystemURL(DOMString url, EntryCallback successCallback, optional ErrorCallback errorCallback);
     [RuntimeEnabled=FileSystem, RaisesException] EntrySync webkitResolveLocalFileSystemSyncURL(DOMString url);
-
-    [RuntimeEnabled=FileSystem] attribute FileErrorConstructor FileError;
 };
diff --git a/modules/filesystem/FileEntry.idl b/modules/filesystem/FileEntry.idl
index 818b759..a8382ea 100644
--- a/modules/filesystem/FileEntry.idl
+++ b/modules/filesystem/FileEntry.idl
@@ -32,5 +32,5 @@
     NoInterfaceObject
 ] interface FileEntry : Entry {
     void createWriter(FileWriterCallback successCallback, optional ErrorCallback errorCallback);
-    void file(FileCallback successCallback, optional ErrorCallback errorCallback);
+    void file(BlobCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/FileWriter.idl b/modules/filesystem/FileWriter.idl
index 4cac0d0..0e07baf 100644
--- a/modules/filesystem/FileWriter.idl
+++ b/modules/filesystem/FileWriter.idl
@@ -31,14 +31,14 @@
 
 [
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface FileWriter : EventTarget {
     // ready states
     const unsigned short INIT = 0;
     const unsigned short WRITING = 1;
     const unsigned short DONE = 2;
-    readonly attribute unsigned short readyState;
+    [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
 
     // async write/modify methods
     [RaisesException] void write(Blob data);
diff --git a/modules/filesystem/WorkerGlobalScopeFileSystem.idl b/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
similarity index 94%
copy from modules/filesystem/WorkerGlobalScopeFileSystem.idl
copy to modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
index f01817a..b01deac 100644
--- a/modules/filesystem/WorkerGlobalScopeFileSystem.idl
+++ b/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
@@ -24,7 +24,8 @@
  *
  */
 
-partial interface WorkerGlobalScope {
+[ImplementedAs=WorkerGlobalScopeFileSystem]
+partial interface SharedWorkerGlobalScope {
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
 
@@ -32,6 +33,4 @@
     [RuntimeEnabled=FileSystem, RaisesException, MeasureAs=RequestFileSystemSyncWorker] DOMFileSystemSync webkitRequestFileSystemSync(unsigned short type, long long size);
     [RuntimeEnabled=FileSystem] void webkitResolveLocalFileSystemURL(DOMString url, EntryCallback successCallback, optional ErrorCallback errorCallback);
     [RuntimeEnabled=FileSystem, RaisesException] EntrySync webkitResolveLocalFileSystemSyncURL(DOMString url);
-
-    [RuntimeEnabled=FileSystem] attribute FileErrorConstructor FileError;
 };
diff --git a/modules/geolocation/testing/InternalsGeolocation.idl b/modules/geolocation/testing/InternalsGeolocation.idl
index 1619c21..ac6b2d3 100644
--- a/modules/geolocation/testing/InternalsGeolocation.idl
+++ b/modules/geolocation/testing/InternalsGeolocation.idl
@@ -28,9 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    TypeChecking=Interface
-] partial interface Internals {
+partial interface Internals {
     void setGeolocationClientMock(Document document);
     void setGeolocationPosition(Document document, double latitude, double longitude, double accuracy);
     void setGeolocationPositionUnavailableError(Document document, DOMString message);
diff --git a/modules/imagebitmap/ImageBitmapRenderingContext.idl b/modules/imagebitmap/ImageBitmapRenderingContext.idl
new file mode 100644
index 0000000..ac6f794
--- /dev/null
+++ b/modules/imagebitmap/ImageBitmapRenderingContext.idl
@@ -0,0 +1,14 @@
+// Copyright 2016 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=ExperimentalCanvasFeatures,
+    SetWrapperReferenceFrom=canvas,
+    WillBeGarbageCollected,
+] interface ImageBitmapRenderingContext {
+    // back-reference to the canvas
+    readonly attribute HTMLCanvasElement canvas;
+
+    void transferImageBitmap(ImageBitmap bitmap);
+};
diff --git a/modules/imagebitmap/WindowImageBitmapFactories.idl b/modules/imagebitmap/WindowImageBitmapFactories.idl
deleted file mode 100644
index b265a6d..0000000
--- a/modules/imagebitmap/WindowImageBitmapFactories.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2013, 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.
- */
-
-// https://html.spec.whatwg.org/#imagebitmapfactories
-
-// TODO(philipj): This should be part of the ImageBitmapFactories interface.
-[
-    RuntimeEnabled=ExperimentalCanvasFeatures,
-    TypeChecking=Interface,
-] partial interface Window {
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLImageElement image);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLImageElement image, long sx, long sy, long sw, long sh);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLVideoElement video);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLVideoElement video, long sx, long sy, long sw, long sh);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(CanvasRenderingContext2D context);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(CanvasRenderingContext2D context, long sx, long sy, long sw, long sh);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLCanvasElement canvas);
-    [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLCanvasElement canvas, long sx, long sy, long sw, long sh);
-};
diff --git a/modules/indexeddb/IDBDatabase.idl b/modules/indexeddb/IDBDatabase.idl
index 1df577e..b6d72d4 100644
--- a/modules/indexeddb/IDBDatabase.idl
+++ b/modules/indexeddb/IDBDatabase.idl
@@ -28,12 +28,11 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface IDBDatabase : EventTarget {
     readonly attribute DOMString name;
-    // TODO(jsbell): DOMString version is non-standard, to support databases created with old API.
-    readonly attribute (unsigned long long or DOMString) version;
+    readonly attribute unsigned long long version;
     [Measure] readonly attribute DOMStringList objectStoreNames;
 
     [RaisesException] IDBObjectStore createObjectStore(DOMString name, optional IDBObjectStoreParameters options);
diff --git a/modules/indexeddb/IDBIndex.idl b/modules/indexeddb/IDBIndex.idl
index ac023ed..e2e17b7 100644
--- a/modules/indexeddb/IDBIndex.idl
+++ b/modules/indexeddb/IDBIndex.idl
@@ -38,9 +38,9 @@
     [CallWith=ScriptState, RaisesException] IDBRequest get(any key);
     [CallWith=ScriptState, RaisesException] IDBRequest getKey(any key);
     // TODO(cmumford): 0xFFFFFFFF is not necessary. Remove once crbug.com/335871 is fixed.
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest getAll([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
+    [CallWith=ScriptState, RaisesException] IDBRequest getAll([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
     // TODO(cmumford): 0xFFFFFFFF is not necessary. Remove once crbug.com/335871 is fixed.
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest getAllKeys([Default=Undefined] optional any range, [EnforceRange] optional unsigned long maxCount = 0xFFFFFFFF);
+    [CallWith=ScriptState, RaisesException] IDBRequest getAllKeys([Default=Undefined] optional any range, [EnforceRange] optional unsigned long maxCount = 0xFFFFFFFF);
     [CallWith=ScriptState, RaisesException] IDBRequest count([Default=Undefined] optional any key);
     [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
     [CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
diff --git a/modules/indexeddb/IDBObjectStore.idl b/modules/indexeddb/IDBObjectStore.idl
index ae4fc4f..3422d7c 100644
--- a/modules/indexeddb/IDBObjectStore.idl
+++ b/modules/indexeddb/IDBObjectStore.idl
@@ -41,14 +41,12 @@
     [CallWith=ScriptState, RaisesException] IDBRequest clear();
     [CallWith=ScriptState, RaisesException] IDBRequest get(any key);
     // TODO(cmumford): 0xFFFFFFFF is not necessary. Remove once crbug.com/335871 is fixed.
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest getAll([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
-    // TODO(cmumford): Standardize or eventually remove. More info at:
-    // https://w3c.github.io/IndexedDB/#widl-IDBObjectStore-getAllKeys-IDBRequest-any-query-unsigned-long-count
+    [CallWith=ScriptState, RaisesException] IDBRequest getAll([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
     // TODO(cmumford): 0xFFFFFFFF is not necessary. Remove once crbug.com/335871 is fixed.
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest getAllKeys([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
+    [CallWith=ScriptState, RaisesException] IDBRequest getAllKeys([Default=Undefined] optional any range, optional unsigned long maxCount = 0xFFFFFFFF);
     [CallWith=ScriptState, RaisesException] IDBRequest count([Default=Undefined] optional any key);
     [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
+    [CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
     [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, (DOMString or sequence<DOMString>) keyPath, optional IDBIndexParameters options);
     [RaisesException] IDBIndex index(DOMString name);
     [RaisesException] void deleteIndex(DOMString name);
diff --git a/modules/indexeddb/IDBRequest.idl b/modules/indexeddb/IDBRequest.idl
index 42694a9..0620d7f 100644
--- a/modules/indexeddb/IDBRequest.idl
+++ b/modules/indexeddb/IDBRequest.idl
@@ -38,11 +38,11 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface IDBRequest : EventTarget {
     [RaisesException=Getter, CachedAttribute=isResultDirty] readonly attribute any result;
-    [RaisesException=Getter, Measure] readonly attribute DOMError error;
+    [RaisesException=Getter] readonly attribute DOMException error;
 
     readonly attribute any source;
     readonly attribute IDBTransaction transaction;
diff --git a/modules/indexeddb/IDBTransaction.idl b/modules/indexeddb/IDBTransaction.idl
index 7f56759..abe303d 100644
--- a/modules/indexeddb/IDBTransaction.idl
+++ b/modules/indexeddb/IDBTransaction.idl
@@ -1,4 +1,4 @@
- /*
+/*
  * Copyright (C) 2010 Google Inc. All rights reserved.
  * Copyright (C) 2011 Apple Inc. All rights reserved.
  *
@@ -36,15 +36,15 @@
 
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected
 ] interface IDBTransaction : EventTarget {
 
     // Properties
-    [RuntimeEnabled=IndexedDBExperimental, Measure] readonly attribute DOMStringList objectStoreNames;
+    [Measure] readonly attribute DOMStringList objectStoreNames;
     readonly attribute IDBTransactionMode mode;
     readonly attribute IDBDatabase db;
-    [Measure] readonly attribute DOMError error;
+    readonly attribute DOMException error;
 
     // Methods
     [RaisesException] IDBObjectStore objectStore (DOMString name);
diff --git a/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl b/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
new file mode 100644
index 0000000..69c5fef
--- /dev/null
+++ b/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://www.w3.org/TR/mediacapture-fromelement/#the-canvascapturemediastream
+[
+    RuntimeEnabled=MediaCaptureFromCanvas
+] interface CanvasCaptureMediaStreamTrack : MediaStreamTrack {
+    readonly attribute HTMLCanvasElement canvas;
+    void requestFrame ();
+};
diff --git a/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl b/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl
new file mode 100644
index 0000000..ca2cc74
--- /dev/null
+++ b/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://www.w3.org/TR/mediacapture-fromelement/#html-canvas-element-media-capture-extensions
+[
+    RuntimeEnabled=MediaCaptureFromCanvas
+] partial interface HTMLCanvasElement {
+    [RaisesException] MediaStream captureStream (optional double frameRate);
+};
diff --git a/modules/mediacapturefromelement/HTMLMediaElementCapture.idl b/modules/mediacapturefromelement/HTMLMediaElementCapture.idl
new file mode 100644
index 0000000..059f3d1
--- /dev/null
+++ b/modules/mediacapturefromelement/HTMLMediaElementCapture.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-fromelement/#html-media-element-media-capture-extensions
+
+[
+    RuntimeEnabled=MediaCaptureFromVideo
+] partial interface HTMLMediaElement {
+    [RaisesException] MediaStream captureStream();
+    // TODO(mcasas): Implement captureStreamUntilEnded() http://crbug.com/575495.
+};
diff --git a/modules/mediarecorder/BlobEvent.idl b/modules/mediarecorder/BlobEvent.idl
new file mode 100644
index 0000000..5d46d57
--- /dev/null
+++ b/modules/mediarecorder/BlobEvent.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-record/MediaRecorder.html#blob-event
+
+[
+    Constructor(DOMString type, BlobEventInit eventInitDict),
+    RuntimeEnabled=MediaRecorder
+]
+interface BlobEvent : Event {
+    readonly attribute Blob data;
+};
diff --git a/modules/mediarecorder/BlobEventInit.idl b/modules/mediarecorder/BlobEventInit.idl
new file mode 100644
index 0000000..23fe9bd
--- /dev/null
+++ b/modules/mediarecorder/BlobEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-record/MediaRecorder.html#blobeventinit
+
+dictionary BlobEventInit : EventInit {
+    required Blob data;
+};
diff --git a/modules/mediarecorder/MediaRecorder.idl b/modules/mediarecorder/MediaRecorder.idl
new file mode 100644
index 0000000..aa15744
--- /dev/null
+++ b/modules/mediarecorder/MediaRecorder.idl
@@ -0,0 +1,38 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-record/MediaRecorder.html#MediaRecorderAPI
+
+enum RecordingState { "inactive", "recording", "paused" };
+
+[
+    GarbageCollected,
+    DependentLifetime,
+    Constructor(MediaStream stream, optional MediaRecorderOptions options),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    RuntimeEnabled=MediaRecorder,
+] interface MediaRecorder : EventTarget {
+    readonly attribute MediaStream stream;
+    readonly attribute DOMString mimeType;
+    readonly attribute RecordingState state;
+
+    attribute EventHandler onstart;
+    attribute EventHandler onstop;
+    attribute EventHandler ondataavailable;
+    attribute EventHandler onpause;
+    attribute EventHandler onresume;
+    attribute EventHandler onerror;
+    attribute boolean ignoreMutedMedia;
+    readonly attribute unsigned long videoBitsPerSecond;
+    readonly attribute unsigned long audioBitsPerSecond;
+
+    [RaisesException] void start(optional long timeslice);
+    [RaisesException] void stop();
+    [RaisesException] void pause();
+    [RaisesException] void resume();
+    [RaisesException] void requestData();
+
+    static boolean isTypeSupported(DOMString type);
+};
diff --git a/modules/mediarecorder/MediaRecorderOptions.idl b/modules/mediarecorder/MediaRecorderOptions.idl
new file mode 100644
index 0000000..40da2b0
--- /dev/null
+++ b/modules/mediarecorder/MediaRecorderOptions.idl
@@ -0,0 +1,14 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-record/MediaRecorder.html#MediaRecorderOptions
+
+dictionary MediaRecorderOptions {
+    DOMString mimeType;  // Encoding mimeType.
+
+    // TODO(mcasas): Consider changing the following options to signed: https://github.com/w3c/mediacapture-record/issues/48, and/or using [EnforceRange]/[Clamp].
+    unsigned long audioBitsPerSecond;
+    unsigned long videoBitsPerSecond;
+    unsigned long bitsPerSecond;
+};
diff --git a/modules/mediasession/HTMLMediaElementMediaSession.idl b/modules/mediasession/HTMLMediaElementMediaSession.idl
index 14b2fe5..a32ece1 100644
--- a/modules/mediasession/HTMLMediaElementMediaSession.idl
+++ b/modules/mediasession/HTMLMediaElementMediaSession.idl
@@ -5,8 +5,7 @@
 // https://mediasession.spec.whatwg.org/#extensions-to-the-htmlmediaelement-interface
 
 [
-    TypeChecking=Interface,
     RuntimeEnabled=MediaSession,
 ] partial interface HTMLMediaElement {
-    attribute MediaSession? session;
+    [RaisesException=Setter] attribute MediaSession? session;
 };
diff --git a/modules/mediasession/MediaMetadata.idl b/modules/mediasession/MediaMetadata.idl
new file mode 100644
index 0000000..03f0d45
--- /dev/null
+++ b/modules/mediasession/MediaMetadata.idl
@@ -0,0 +1,15 @@
+// Copyright 2015 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://mediasession.spec.whatwg.org/#the-mediametadata-interface
+
+[
+    Constructor(MediaMetadataInit metadata),
+    GarbageCollected,
+    RuntimeEnabled=MediaSession,
+] interface MediaMetadata {
+    readonly attribute DOMString title;
+    readonly attribute DOMString artist;
+    readonly attribute DOMString album;
+};
diff --git a/modules/mediasession/MediaMetadataInit.idl b/modules/mediasession/MediaMetadataInit.idl
new file mode 100644
index 0000000..60377cd
--- /dev/null
+++ b/modules/mediasession/MediaMetadataInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://mediasession.spec.whatwg.org/#the-mediametadata-interface
+
+dictionary MediaMetadataInit {
+    DOMString title = "";
+    DOMString artist = "";
+    DOMString album = "";
+};
diff --git a/modules/mediasession/MediaSession.idl b/modules/mediasession/MediaSession.idl
index 235604b..b09cbc3 100644
--- a/modules/mediasession/MediaSession.idl
+++ b/modules/mediasession/MediaSession.idl
@@ -6,9 +6,13 @@
 
 [
     Constructor(),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
     GarbageCollected,
     RuntimeEnabled=MediaSession,
 ] interface MediaSession {
-    void activate();
-    void deactivate();
+    attribute MediaMetadata? metadata;
+
+    [CallWith=ScriptState] Promise<void> activate();
+    [CallWith=ScriptState] Promise<void> deactivate();
 };
diff --git a/modules/mediasource/MediaSource.idl b/modules/mediasource/MediaSource.idl
index 244160b..253faa0 100644
--- a/modules/mediasource/MediaSource.idl
+++ b/modules/mediasource/MediaSource.idl
@@ -36,11 +36,10 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
     RuntimeEnabled=MediaSource,
-    TypeChecking=Interface,
 ] 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 6329078..a3f206e 100644
--- a/modules/mediasource/SourceBuffer.idl
+++ b/modules/mediasource/SourceBuffer.idl
@@ -36,15 +36,12 @@
 };
 
 [
-    ActiveDOMObject,
-    NoInterfaceObject,
+    DependentLifetime,
     RuntimeEnabled=MediaSource,
-    TypeChecking=Interface,
 ] interface SourceBuffer : EventTarget {
 
     // Gets or sets the AppendMode.
-    // FIXME: Remove MediaSourceExperimental once mode attribute is implemented and stabilized. See http://crbug.com/249422.
-    [RaisesException=Setter, RuntimeEnabled=MediaSourceExperimental] attribute AppendMode mode;
+    [RaisesException=Setter] attribute AppendMode mode;
 
     readonly attribute boolean updating;
 
@@ -74,4 +71,3 @@
     // the initialization segment algorithm.
     [RaisesException=Setter, RuntimeEnabled=MediaSourceExperimental] attribute TrackDefaultList trackDefaults;
 };
-
diff --git a/modules/mediasource/SourceBufferList.idl b/modules/mediasource/SourceBufferList.idl
index eb4db73..2cd26cc 100644
--- a/modules/mediasource/SourceBufferList.idl
+++ b/modules/mediasource/SourceBufferList.idl
@@ -30,7 +30,6 @@
 
 [
     GarbageCollected,
-    NoInterfaceObject,
     RuntimeEnabled=MediaSource,
 ] interface SourceBufferList : EventTarget {
     readonly attribute unsigned long length;
diff --git a/modules/mediasource/URLMediaSource.idl b/modules/mediasource/URLMediaSource.idl
index 92c7e37..db0aa53 100644
--- a/modules/mediasource/URLMediaSource.idl
+++ b/modules/mediasource/URLMediaSource.idl
@@ -30,8 +30,6 @@
 
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-URL
 
-[
-    TypeChecking=Interface,
-] partial interface URL {
+partial interface URL {
     [CallWith=ExecutionContext] static DOMString? createObjectURL(MediaSource source);
 };
diff --git a/modules/mediastream/ConstrainBooleanParameters.idl b/modules/mediastream/ConstrainBooleanParameters.idl
new file mode 100644
index 0000000..c8e9677
--- /dev/null
+++ b/modules/mediastream/ConstrainBooleanParameters.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainBooleanParameters
+
+dictionary ConstrainBooleanParameters {
+    boolean exact;
+    boolean ideal;
+};
diff --git a/modules/mediastream/ConstrainDOMStringParameters.idl b/modules/mediastream/ConstrainDOMStringParameters.idl
new file mode 100644
index 0000000..93bc42e
--- /dev/null
+++ b/modules/mediastream/ConstrainDOMStringParameters.idl
@@ -0,0 +1,14 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainLongRange
+
+dictionary ConstrainDOMStringParameters {
+  sequence<DOMString> exact;
+  sequence<DOMString> ideal;
+  // The spec says that the members should be:
+  //  (DOMString or sequence<DOMString>) exact;
+  //  (DOMString or sequence<DOMString>) ideal;
+  // This is blocked on https://crbug.com/524424
+};
diff --git a/modules/mediastream/ConstrainDoubleRange.idl b/modules/mediastream/ConstrainDoubleRange.idl
new file mode 100644
index 0000000..15e92f2
--- /dev/null
+++ b/modules/mediastream/ConstrainDoubleRange.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainDoubleRange
+
+dictionary ConstrainDoubleRange : DoubleRange {
+    double exact;
+    double ideal;
+};
diff --git a/modules/mediastream/ConstrainLongRange.idl b/modules/mediastream/ConstrainLongRange.idl
new file mode 100644
index 0000000..a894734
--- /dev/null
+++ b/modules/mediastream/ConstrainLongRange.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainLongRange
+
+dictionary ConstrainLongRange : LongRange {
+    long exact;
+    long ideal;
+};
diff --git a/modules/mediastream/DoubleRange.idl b/modules/mediastream/DoubleRange.idl
new file mode 100644
index 0000000..424dfb0
--- /dev/null
+++ b/modules/mediastream/DoubleRange.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-DoubleRange
+
+dictionary DoubleRange {
+    double max;
+    double min;
+};
diff --git a/modules/mediastream/LongRange.idl b/modules/mediastream/LongRange.idl
new file mode 100644
index 0000000..d6dc0a4
--- /dev/null
+++ b/modules/mediastream/LongRange.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-LongRange
+
+dictionary LongRange {
+    long max;
+    long min;
+};
diff --git a/modules/mediastream/MediaDeviceInfo.idl b/modules/mediastream/MediaDeviceInfo.idl
index 4d441f4..34b0e0c 100644
--- a/modules/mediastream/MediaDeviceInfo.idl
+++ b/modules/mediastream/MediaDeviceInfo.idl
@@ -37,4 +37,5 @@
     readonly attribute MediaDeviceKind kind;
     readonly attribute DOMString label;
     readonly attribute DOMString groupId;
+    serializer = {attribute};
 };
diff --git a/modules/mediastream/MediaDevices.idl b/modules/mediastream/MediaDevices.idl
index 38c43de..f7aa991 100644
--- a/modules/mediastream/MediaDevices.idl
+++ b/modules/mediastream/MediaDevices.idl
@@ -8,9 +8,9 @@
 
 [
     GarbageCollected,
-    RuntimeEnabled=EnumerateDevices
+    RuntimeEnabled=MediaDevices
 ]
 interface MediaDevices {
-    [RuntimeEnabled=EnumerateDevices, TypeChecking=Interface, CallWith=ScriptState] Promise<sequence<MediaDeviceInfo>> enumerateDevices();
-    [CallWith=ScriptState, RaisesException] Promise<MediaStream> getUserMedia(Dictionary options);
+    [CallWith=ScriptState, MeasureAs=MediaDevicesEnumerateDevices] Promise<sequence<MediaDeviceInfo>> enumerateDevices();
+    [RuntimeEnabled=GetUserMedia, CallWith=ScriptState, RaisesException] Promise<MediaStream> getUserMedia(MediaStreamConstraints options);
 };
diff --git a/modules/mediastream/MediaStream.idl b/modules/mediastream/MediaStream.idl
index 1a042b7..146dff1 100644
--- a/modules/mediastream/MediaStream.idl
+++ b/modules/mediastream/MediaStream.idl
@@ -22,7 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStream
+// http://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaStream
 
 [
     GarbageCollected,
@@ -32,8 +32,6 @@
     ConstructorCallWith=ExecutionContext,
     NoInterfaceObject,
 ] interface MediaStream : EventTarget {
-    // DEPRECATED
-    [DeprecateAs=MediaStreamLabel] readonly attribute DOMString label;
 
     readonly attribute DOMString id;
 
@@ -45,18 +43,13 @@
     [RaisesException] void removeTrack(MediaStreamTrack track);
     MediaStreamTrack getTrackById(DOMString trackId);
     [CallWith=ExecutionContext] MediaStream clone();
-    // DEPRECATED
-    [DeprecateAs=MediaStreamEnded] readonly attribute boolean ended;
 
     readonly attribute boolean active;
 
-    // DEPRECATED
-    [DeprecateAs=MediaStreamStop] void stop();
-
     attribute EventHandler onactive;
     attribute EventHandler oninactive;
     //  DEPRECATED
-    attribute EventHandler onended;
+    [MeasureAs=MediaStreamOnEnded] attribute EventHandler onended;
 
     attribute EventHandler onaddtrack;
     attribute EventHandler onremovetrack;
diff --git a/modules/mediastream/MediaStreamConstraints.idl b/modules/mediastream/MediaStreamConstraints.idl
new file mode 100644
index 0000000..b5a8fee
--- /dev/null
+++ b/modules/mediastream/MediaStreamConstraints.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaStreamConstraints
+
+dictionary MediaStreamConstraints {
+  (boolean or MediaTrackConstraintSet) video;
+  (boolean or MediaTrackConstraintSet) audio;
+};
diff --git a/modules/mediastream/MediaStreamTrack.idl b/modules/mediastream/MediaStreamTrack.idl
index b707a46..1c7f1fd 100644
--- a/modules/mediastream/MediaStreamTrack.idl
+++ b/modules/mediastream/MediaStreamTrack.idl
@@ -24,16 +24,17 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject
+    DependentLifetime
 ] interface MediaStreamTrack : EventTarget {
     readonly attribute DOMString kind;
     readonly attribute DOMString id;
     readonly attribute DOMString label;
     attribute boolean enabled;
     readonly attribute boolean muted;
+    readonly attribute boolean remote;
     readonly attribute DOMString readyState;
 
-    [CallWith=ExecutionContext, RaisesException, MeasureAs=MediaStreamTrackGetSources] static void getSources(MediaStreamTrackSourcesCallback callback);
+    [CallWith=ExecutionContext, RaisesException, DeprecateAs=MediaStreamTrackGetSources] static void getSources(MediaStreamTrackSourcesCallback callback);
     [ImplementedAs=stopTrack, RaisesException] void stop();
     [CallWith=ExecutionContext] MediaStreamTrack clone();
 
diff --git a/modules/mediastream/MediaTrackConstraintSet.idl b/modules/mediastream/MediaTrackConstraintSet.idl
new file mode 100644
index 0000000..04a3f33
--- /dev/null
+++ b/modules/mediastream/MediaTrackConstraintSet.idl
@@ -0,0 +1,36 @@
+// Copyright 2015 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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaTrackConstraintSet
+
+typedef ConstrainLongRange ConstrainLong;
+typedef ConstrainDoubleRange ConstrainDouble;
+typedef ConstrainBooleanParameters ConstrainBoolean;
+typedef ConstrainDOMStringParameters ConstrainDOMString;
+// The spec says that the typedefs should be:
+// typedef (long or ConstrainLongRange) ConstrainLong;
+// typedef (double or ConstrainDoubleRange) ConstrainDouble;
+// typedef (boolean or ConstrainBooleanParameters) ConstrainBoolean;
+// typedef (DOMString or sequence<DOMString> or ConstrainDomStringParameters) ConstrainDomString;
+// This is blocked on https://crbug.com/524424
+
+dictionary MediaTrackConstraintSet {
+    [RuntimeEnabled=MediaConstraints] ConstrainLong width;
+    [RuntimeEnabled=MediaConstraints] ConstrainLong height;
+    [RuntimeEnabled=MediaConstraints] ConstrainDouble aspectRatio;
+    [RuntimeEnabled=MediaConstraints] ConstrainDouble frameRate;
+    [RuntimeEnabled=MediaConstraints] ConstrainDOMString facingMode;
+    [RuntimeEnabled=MediaConstraints] ConstrainDouble volume;
+    [RuntimeEnabled=MediaConstraints] ConstrainLong sampleRate;
+    [RuntimeEnabled=MediaConstraints] ConstrainLong sampleSize;
+    [RuntimeEnabled=MediaConstraints] ConstrainBoolean echoCancellation;
+    [RuntimeEnabled=MediaConstraints] ConstrainDouble latency;
+    [RuntimeEnabled=MediaConstraints] ConstrainLong channelCount;
+    [RuntimeEnabled=MediaConstraints] ConstrainDOMString deviceId;
+    [RuntimeEnabled=MediaConstraints] ConstrainDOMString groupId;
+    // The "mandatory" and "_optional" members are retained for conformance
+    // with https://www.w3.org/TR/2013/WD-mediacapture-streams-20130903/
+    Dictionary mandatory;
+    sequence<Dictionary> _optional;
+};
diff --git a/modules/mediastream/NavigatorMediaStream.idl b/modules/mediastream/NavigatorMediaStream.idl
index f8c0199..9453f9f 100644
--- a/modules/mediastream/NavigatorMediaStream.idl
+++ b/modules/mediastream/NavigatorMediaStream.idl
@@ -18,7 +18,7 @@
  */
 
 partial interface Navigator {
-    [RaisesException] void webkitGetUserMedia(Dictionary options,
+    [RaisesException] void webkitGetUserMedia(MediaStreamConstraints options,
                                               NavigatorUserMediaSuccessCallback successCallback,
                                               NavigatorUserMediaErrorCallback errorCallback);
 };
diff --git a/modules/mediastream/NavigatorUserMedia.idl b/modules/mediastream/NavigatorUserMedia.idl
index 8c38ca1..c3ba9f0 100644
--- a/modules/mediastream/NavigatorUserMedia.idl
+++ b/modules/mediastream/NavigatorUserMedia.idl
@@ -5,6 +5,6 @@
 // http://w3c.github.io/mediacapture-main/#navigatorusermedia
 
 partial interface Navigator {
-    [RuntimeEnabled=EnumerateDevices] readonly attribute MediaDevices mediaDevices;
+    [RuntimeEnabled=MediaDevices] readonly attribute MediaDevices mediaDevices;
 };
 
diff --git a/modules/mediastream/RTCErrorCallback.idl b/modules/mediastream/RTCCertificate.idl
similarity index 83%
rename from modules/mediastream/RTCErrorCallback.idl
rename to modules/mediastream/RTCCertificate.idl
index bb7414b..b6e9a4a 100644
--- a/modules/mediastream/RTCErrorCallback.idl
+++ b/modules/mediastream/RTCCertificate.idl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2015 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -28,7 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-callback interface RTCErrorCallback {
-    void handleEvent(DOMString errorInformation);
+// https://w3c.github.io/webrtc-pc/#rtccertificate-interface
+[
+    GarbageCollected,
+] interface RTCCertificate {
+    // The expiration time in ms relative to epoch, 1970-01-01T00:00:00Z.
+    readonly attribute DOMTimeStamp expires;
 };
-
diff --git a/modules/mediastream/RTCDTMFSender.idl b/modules/mediastream/RTCDTMFSender.idl
index c6f6076..25cd3e5 100644
--- a/modules/mediastream/RTCDTMFSender.idl
+++ b/modules/mediastream/RTCDTMFSender.idl
@@ -26,7 +26,7 @@
 [
     GarbageCollected,
     NoInterfaceObject,
-    ActiveDOMObject
+    DependentLifetime
 ] interface RTCDTMFSender : EventTarget {
     readonly attribute boolean canInsertDTMF;
     readonly attribute MediaStreamTrack track;
diff --git a/modules/mediastream/RTCDataChannel.idl b/modules/mediastream/RTCDataChannel.idl
index 83f0472..ee017de 100644
--- a/modules/mediastream/RTCDataChannel.idl
+++ b/modules/mediastream/RTCDataChannel.idl
@@ -38,7 +38,9 @@
     readonly attribute unsigned short id;
     readonly attribute DOMString readyState;
     readonly attribute unsigned long bufferedAmount;
+             attribute unsigned long bufferedAmountLowThreshold;
              attribute EventHandler onopen;
+             attribute EventHandler onbufferedamountlow;
              attribute EventHandler onerror;
              attribute EventHandler onclose;
     void close();
diff --git a/modules/mediastream/RTCIceCandidate.idl b/modules/mediastream/RTCIceCandidate.idl
index d6ce94d..d3bce54 100644
--- a/modules/mediastream/RTCIceCandidate.idl
+++ b/modules/mediastream/RTCIceCandidate.idl
@@ -33,8 +33,8 @@
     Constructor(RTCIceCandidateInit candidateInitDict),
     RaisesException=Constructor
 ] interface RTCIceCandidate {
-    [TreatNullAs=NullString] attribute DOMString candidate;
-    [TreatNullAs=NullString] attribute DOMString sdpMid;
+    attribute DOMString candidate;
+    attribute DOMString sdpMid;
     attribute unsigned short sdpMLineIndex;
     serializer = {attribute};
 };
diff --git a/modules/mediastream/RTCPeerConnection.idl b/modules/mediastream/RTCPeerConnection.idl
index fa54946..8938088 100644
--- a/modules/mediastream/RTCPeerConnection.idl
+++ b/modules/mediastream/RTCPeerConnection.idl
@@ -28,56 +28,106 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://w3c.github.io/webrtc-pc/#state-definitions
+
+enum RTCSignalingState {
+    "stable",
+    "have-local-offer",
+    "have-remote-offer",
+    "have-local-pranswer",
+    "have-remote-pranswer",
+    "closed"
+};
+
+enum RTCIceGatheringState {
+    "new",
+    "gathering",
+    "complete"
+};
+
+enum RTCIceConnectionState {
+    "new",
+    "checking",
+    "connected",
+    "completed",
+    "failed",
+    "disconnected",
+    "closed"
+};
+
+// https://w3c.github.io/webrtc-pc/#interface-definition
+
+// TODO(guidou): Many types are of the wrong type in this interface:
+//  * Dictionary -> specific dictionary types like RTCConfiguration
+//  * VoidCallback -> VoidFunction
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
+    // TODO(guidou): There should only be one constructor argument, and it
+    // should be optional.
     Constructor(Dictionary rtcConfiguration, optional Dictionary mediaConstraints),
     ConstructorCallWith=ExecutionContext,
     NoInterfaceObject,
     RaisesException=Constructor,
 ] interface RTCPeerConnection : EventTarget {
-    [RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary rtcOfferOptions);
-
-    [RaisesException] void createAnswer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary mediaConstraints);
-
-    [RaisesException] void setLocalDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback);
-    [RaisesException=Getter] readonly attribute RTCSessionDescription localDescription;
-
-    [RaisesException] void setRemoteDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback);
-    [RaisesException=Getter] readonly attribute RTCSessionDescription remoteDescription;
-
-    readonly attribute DOMString signalingState;
-
-    [RaisesException] void updateIce(optional Dictionary configuration, optional Dictionary mediaConstraints);
-
-    // DEPRECATED
-    [RaisesException] void addIceCandidate(RTCIceCandidate candidate);
-
-    [RaisesException] void addIceCandidate(RTCIceCandidate candidate, VoidCallback successCallback, RTCErrorCallback failureCallback);
-
-    readonly attribute DOMString iceGatheringState;
-    readonly attribute DOMString iceConnectionState;
-
-    sequence<MediaStream> getLocalStreams();
-    sequence<MediaStream> getRemoteStreams();
-    MediaStream getStreamById(DOMString streamId);
-
-    [TypeChecking=Interface, RaisesException] void addStream(MediaStream? stream, optional Dictionary mediaConstraints);
-    [TypeChecking=Interface, RaisesException] void removeStream(MediaStream? stream);
-
-    void getStats(RTCStatsCallback successCallback, [Default=Undefined] optional MediaStreamTrack selector);
-
-    [RaisesException] RTCDataChannel createDataChannel([TreatUndefinedAs=NullString] DOMString? label, optional Dictionary options);
-
-    [RaisesException] RTCDTMFSender createDTMFSender(MediaStreamTrack track);
-
+    // Promise<RTCSessionDescription> createOffer(optional RTCOfferOptions options);
+    // Promise<RTCSessionDescription> createAnswer(optional RTCAnswerOptions options);
+    [CallWith=ScriptState] Promise<void> setLocalDescription(RTCSessionDescriptionInit description);
+    readonly attribute RTCSessionDescription? localDescription;
+    // readonly attribute RTCSessionDescription? currentLocalDescription;
+    // readonly attribute RTCSessionDescription? pendingLocalDescription;
+    [CallWith=ScriptState] Promise<void> setRemoteDescription(RTCSessionDescriptionInit description);
+    readonly attribute RTCSessionDescription? remoteDescription;
+    // readonly attribute RTCSessionDescription? currentRemoteDescription;
+    // readonly attribute RTCSessionDescription? pendingRemoteDescription;
+    [CallWith=ScriptState] Promise<void> addIceCandidate ((RTCIceCandidateInit or RTCIceCandidate) candidate);
+    readonly attribute RTCSignalingState signalingState;
+    readonly attribute RTCIceGatheringState iceGatheringState;
+    readonly attribute RTCIceConnectionState iceConnectionState;
+    // readonly attribute boolean? canTrickleIceCandidates;
+    // RTCConfiguration getConfiguration();
+    // void setConfiguration(RTCConfiguration configuration);
+    // TODO(guidou): close() should never throw an exception.
     [RaisesException] void close();
-
     attribute EventHandler onnegotiationneeded;
     attribute EventHandler onicecandidate;
     attribute EventHandler onsignalingstatechange;
+    attribute EventHandler oniceconnectionstatechange;
+    // attribute EventHandler onicegatheringstatechange;
+
+    // https://w3c.github.io/webrtc-pc/#legacy-interface-extensions
+    // These methods return or will be changed to return Promise<void> because
+    // having Promise-based versions requires that all overloads return Promises.
+    [CallWith=ExecutionContext, RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional Dictionary rtcOfferOptions);
+    // TODO(guidou): There should be no mediaConstraints argument.
+    [CallWith=ExecutionContext, RaisesException] void createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional Dictionary mediaConstraints);
+    [CallWith=ScriptState] Promise<void> setLocalDescription(RTCSessionDescription description, VoidCallback successCallback, [Default=Undefined] optional RTCPeerConnectionErrorCallback failureCallback);
+    // TODO(guidou): The failureCallback argument should be non-optional.
+    [CallWith=ScriptState] Promise<void> setRemoteDescription(RTCSessionDescription description, VoidCallback successCallback, [Default=Undefined] optional RTCPeerConnectionErrorCallback failureCallback);
+    [CallWith=ScriptState] Promise<void> addIceCandidate(RTCIceCandidate candidate, VoidCallback successCallback, RTCPeerConnectionErrorCallback failureCallback);
+    // TODO(guidou): The selector argument should the first (nullable,
+    // non-optional) argument, and there should be a third failureCallback
+    // argument.
+    [CallWith=ExecutionContext, LegacyInterfaceTypeChecking] void getStats(RTCStatsCallback successCallback, [Default=Undefined] optional MediaStreamTrack selector);
+
+    // https://w3c.github.io/webrtc-pc/#peer-to-peer-data-api
+    // TODO(guidou): The label argument should have [TreatNullAs=EmptyString]
+    // and be non-nullable.
+    [RaisesException] RTCDataChannel createDataChannel([TreatUndefinedAs=NullString] DOMString? label, optional Dictionary options);
+    attribute EventHandler ondatachannel;
+
+    // Non-standard or removed from the spec:
+    [CallWith=ExecutionContext, RaisesException] void updateIce(optional Dictionary configuration, optional Dictionary mediaConstraints);
+    sequence<MediaStream> getLocalStreams();
+    sequence<MediaStream> getRemoteStreams();
+    MediaStream getStreamById(DOMString streamId);
+    [CallWith=ExecutionContext, RaisesException] void addStream(MediaStream? stream, optional Dictionary mediaConstraints);
+    [RaisesException] void removeStream(MediaStream? stream);
+    [RaisesException] RTCDTMFSender createDTMFSender(MediaStreamTrack track);
     attribute EventHandler onaddstream;
     attribute EventHandler onremovestream;
-    attribute EventHandler oniceconnectionstatechange;
-    attribute EventHandler ondatachannel;
+
+    // Certificate management
+    // http://w3c.github.io/webrtc-pc/#sec.cert-mgmt
+    [RaisesException, CallWith=ScriptState] static Promise<RTCCertificate> generateCertificate(AlgorithmIdentifier keygenAlgorithm);
 };
diff --git a/modules/mediastream/RTCPeerConnectionErrorCallback.idl b/modules/mediastream/RTCPeerConnectionErrorCallback.idl
new file mode 100644
index 0000000..c159a9f
--- /dev/null
+++ b/modules/mediastream/RTCPeerConnectionErrorCallback.idl
@@ -0,0 +1,10 @@
+// Copyright 2016 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://w3c.github.io/webrtc-pc/#rtcpeerconnectionerrorcallback
+
+callback interface RTCPeerConnectionErrorCallback {
+    void handleEvent(DOMException exception);
+};
+
diff --git a/modules/navigatorconnect/CrossOriginConnectEvent.idl b/modules/navigatorconnect/CrossOriginConnectEvent.idl
deleted file mode 100644
index 88823e3..0000000
--- a/modules/navigatorconnect/CrossOriginConnectEvent.idl
+++ /dev/null
@@ -1,14 +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://mkruisselbrink.github.io/navigator-connect/#idl-def-CrossOriginConnectEvent
-[
-    Exposed=ServiceWorker,
-    RuntimeEnabled=NavigatorConnect,
-    TypeChecking=Interface
-] interface CrossOriginConnectEvent : Event {
-    readonly attribute CrossOriginServiceWorkerClient client;
-
-    [CallWith=ScriptState, RaisesException] void acceptConnection(Promise<boolean> shouldAccept);
-};
diff --git a/modules/navigatorconnect/ServicePortCollection.idl b/modules/navigatorconnect/ServicePortCollection.idl
index 31372cf..bcdc2b0 100644
--- a/modules/navigatorconnect/ServicePortCollection.idl
+++ b/modules/navigatorconnect/ServicePortCollection.idl
@@ -6,9 +6,7 @@
 [
     Exposed=(Window,Worker),
     GarbageCollected,
-    TypeChecking=Interface,
     RuntimeEnabled=NavigatorConnect,
-    TypeChecking=Interface,
 ]  interface ServicePortCollection : EventTarget {
     [CallWith=ScriptState, RaisesException] Promise<ServicePort> connect(DOMString url, optional ServicePortConnectOptions options);
     [CallWith=ScriptState] Promise<ServicePort> match(ServicePortMatchOptions options);
diff --git a/modules/navigatorconnect/ServicePortConnectEvent.idl b/modules/navigatorconnect/ServicePortConnectEvent.idl
index 799c4bb..27fd436 100644
--- a/modules/navigatorconnect/ServicePortConnectEvent.idl
+++ b/modules/navigatorconnect/ServicePortConnectEvent.idl
@@ -6,7 +6,6 @@
 [
     Exposed=ServiceWorker,
     RuntimeEnabled=NavigatorConnect,
-    TypeChecking=Interface,
     Constructor(DOMString type, optional ServicePortConnectEventInit eventInitDict),
 ] interface ServicePortConnectEvent : ExtendableEvent {
     readonly attribute DOMString targetURL;
diff --git a/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl b/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl
index c9dc163..fe645ae 100644
--- a/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl
+++ b/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl
@@ -7,6 +7,5 @@
 [
     RuntimeEnabled=NavigatorConnect,
 ] partial interface ServiceWorkerGlobalScope {
-    attribute EventHandler oncrossoriginconnect;
     attribute EventHandler oncrossoriginmessage;
 };
diff --git a/modules/netinfo/NetworkInformation.idl b/modules/netinfo/NetworkInformation.idl
index 166c2b5..c45ccdb 100644
--- a/modules/netinfo/NetworkInformation.idl
+++ b/modules/netinfo/NetworkInformation.idl
@@ -7,18 +7,23 @@
     "bluetooth",
     "ethernet",
     "wifi",
+    "wimax",
     "other",
     "none",
     "unknown"
 };
 
+typedef unrestricted double Megabit;
+
 [
     RuntimeEnabled=NetworkInformation,
     Exposed=(Window,Worker),
     GarbageCollected,
-    ActiveDOMObject
+    DependentLifetime
 ] interface NetworkInformation : EventTarget {
-    readonly attribute ConnectionType type;
-    attribute EventHandler ontypechange;
+    [MeasureAs=NetInfoType] readonly attribute ConnectionType type;
+    [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoDownlinkMax] readonly attribute Megabit downlinkMax;
+    [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoOnChange] attribute EventHandler onchange;
+    [MeasureAs=NetInfoOnTypeChange] attribute EventHandler ontypechange;
 };
 
diff --git a/modules/nfc/MessageCallback.idl b/modules/nfc/MessageCallback.idl
new file mode 100644
index 0000000..edbffe5
--- /dev/null
+++ b/modules/nfc/MessageCallback.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#idl-def-messagecallback
+
+callback interface MessageCallback {
+    void handleMessage(NFCMessage message);
+};
diff --git a/modules/nfc/NFC.idl b/modules/nfc/NFC.idl
new file mode 100644
index 0000000..bb0f520
--- /dev/null
+++ b/modules/nfc/NFC.idl
@@ -0,0 +1,17 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#the-nfc-interface
+
+typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage;
+
+[
+  GarbageCollected,
+  RuntimeEnabled=WebNFC,
+] interface NFC {
+    [CallWith=ScriptState] Promise<void> push (NFCPushMessage message, optional NFCPushOptions options);
+    [CallWith=ScriptState] Promise<void> cancelPush (optional NFCPushTarget target = "any");
+    [CallWith=ScriptState] Promise<long> watch (MessageCallback callback, optional NFCWatchOptions options);
+    [CallWith=ScriptState] Promise<void> cancelWatch (optional long id);
+};
diff --git a/modules/nfc/NFCMessage.idl b/modules/nfc/NFCMessage.idl
new file mode 100644
index 0000000..5cea9c7
--- /dev/null
+++ b/modules/nfc/NFCMessage.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#the-nfcmessage-dictionary
+
+dictionary NFCMessage {
+    sequence<NFCRecord> data;
+    USVString url;
+};
diff --git a/modules/nfc/NFCPushOptions.idl b/modules/nfc/NFCPushOptions.idl
new file mode 100644
index 0000000..c7c78fb
--- /dev/null
+++ b/modules/nfc/NFCPushOptions.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#the-nfcpushoptions-dictionary
+
+enum NFCPushTarget { "tag", "peer", "any" };
+
+dictionary NFCPushOptions {
+    NFCPushTarget target = "any";
+    unrestricted double timeout; // in ms
+    boolean ignoreRead = true;
+};
diff --git a/modules/nfc/NFCRecord.idl b/modules/nfc/NFCRecord.idl
new file mode 100644
index 0000000..48bfd24
--- /dev/null
+++ b/modules/nfc/NFCRecord.idl
@@ -0,0 +1,17 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#the-nfcrecord-dictionary
+
+enum NFCRecordType { "empty", "text", "url", "json", "opaque" };
+
+// TODO(shalamov): This is blocked by https://crbug.com/524424
+// typedef (DOMString or unrestricted double or ArrayBuffer or Dictionary) NFCRecordData;
+typedef any NFCRecordData;
+
+dictionary NFCRecord {
+    NFCRecordType recordType;
+    USVString mediaType;
+    NFCRecordData data;
+};
diff --git a/modules/nfc/NFCWatchOptions.idl b/modules/nfc/NFCWatchOptions.idl
new file mode 100644
index 0000000..8a4722d
--- /dev/null
+++ b/modules/nfc/NFCWatchOptions.idl
@@ -0,0 +1,14 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/#the-nfcwatchoptions-dictionary
+
+enum NFCWatchMode { "web-nfc-only", "any" };
+
+dictionary NFCWatchOptions {
+    USVString url = "";
+    NFCRecordType? recordType;
+    USVString mediaType = "";
+    NFCWatchMode mode = "web-nfc-only";
+};
diff --git a/modules/nfc/NavigatorNFC.idl b/modules/nfc/NavigatorNFC.idl
new file mode 100644
index 0000000..1b6d2e6
--- /dev/null
+++ b/modules/nfc/NavigatorNFC.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://w3c.github.io/web-nfc/
+
+[
+  RuntimeEnabled=WebNFC,
+] partial interface Navigator {
+    readonly attribute NFC nfc;
+};
diff --git a/modules/notifications/Notification.idl b/modules/notifications/Notification.idl
index 0ad1096..8ad23a1 100644
--- a/modules/notifications/Notification.idl
+++ b/modules/notifications/Notification.idl
@@ -29,9 +29,19 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://notifications.spec.whatwg.org/#enumdef-notificationpermission
+
+enum NotificationPermission {
+    "default",
+    "denied",
+    "granted"
+};
+
+// https://notifications.spec.whatwg.org/#api
+
 [
     GarbageCollected,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor(DOMString title, optional NotificationOptions options),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
@@ -39,10 +49,11 @@
     RaisesException=Constructor,
     RuntimeEnabled=Notifications,
 ] interface Notification : EventTarget {
-    [CallWith=ExecutionContext, MeasureAs=NotificationPermission] static readonly attribute DOMString permission;
-    [CallWith=ExecutionContext, MeasureAs=NotificationPermissionRequested] static void requestPermission(optional NotificationPermissionCallback callback);
+    [CallWith=ExecutionContext, MeasureAs=NotificationPermission] static readonly attribute NotificationPermission permission;
 
-    // FIXME: Implement the Notification.get() method.
+    [CallWith=ScriptState, Exposed=Window, MeasureAs=NotificationPermissionRequested] static Promise<NotificationPermission> requestPermission(optional NotificationPermissionCallback deprecatedCallback);
+
+    static readonly attribute unsigned long maxActions;
 
     attribute EventHandler onclick;
     [MeasureAs=NotificationShowEvent] attribute EventHandler onshow;
@@ -54,11 +65,19 @@
     readonly attribute DOMString lang;
     readonly attribute DOMString body;
     readonly attribute DOMString tag;
-    readonly attribute DOMString icon;
+    readonly attribute USVString icon;
 
     [RuntimeEnabled=NotificationExperimental] readonly attribute sequence<unsigned long>? vibrate;
+    readonly attribute DOMTimeStamp timestamp;
+    readonly attribute boolean renotify;
     readonly attribute boolean silent;
-    [CallWith=ScriptState] readonly attribute any data;
+    readonly attribute boolean requireInteraction;
+    [CallWith=ScriptState, SameObject] readonly attribute any data;
+
+    // TODO(johnme): Ship once Blink supports FrozenArray (https://crbug.com/515920)
+    // and we've implemented the additional Object.freeze described in
+    // https://notifications.spec.whatwg.org/#dom-notification-actions
+    [RuntimeEnabled=NotificationExperimental] readonly attribute sequence<NotificationAction> actions;
 
     [MeasureAs=NotificationClosed] void close();
 };
diff --git a/modules/notifications/NotificationAction.idl b/modules/notifications/NotificationAction.idl
new file mode 100644
index 0000000..be78856
--- /dev/null
+++ b/modules/notifications/NotificationAction.idl
@@ -0,0 +1,11 @@
+// Copyright 2015 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://notifications.spec.whatwg.org/#dictdef-notificationaction
+
+dictionary NotificationAction {
+    required DOMString action;
+    required DOMString title;
+    [RuntimeEnabled=NotificationActionIcons] USVString icon;
+};
diff --git a/modules/notifications/NotificationEvent.idl b/modules/notifications/NotificationEvent.idl
index 89bc93f..4261777 100644
--- a/modules/notifications/NotificationEvent.idl
+++ b/modules/notifications/NotificationEvent.idl
@@ -5,10 +5,10 @@
 // https://notifications.spec.whatwg.org/#service-worker-api
 
 [
-    Constructor(DOMString type, optional NotificationEventInit eventInitDict),
+    Constructor(DOMString type, NotificationEventInit eventInitDict),
     Exposed=ServiceWorker,
-    RuntimeEnabled=ServiceWorkerNotifications,
-    TypeChecking=Interface,
+    RuntimeEnabled=Notifications,
 ] interface NotificationEvent : ExtendableEvent {
     readonly attribute Notification notification;
+    readonly attribute DOMString action;
 };
diff --git a/modules/notifications/NotificationEventInit.idl b/modules/notifications/NotificationEventInit.idl
index 47ce14a..79ab16b 100644
--- a/modules/notifications/NotificationEventInit.idl
+++ b/modules/notifications/NotificationEventInit.idl
@@ -5,5 +5,6 @@
 // https://notifications.spec.whatwg.org/#notificationevent
 
 dictionary NotificationEventInit : ExtendableEventInit {
-    Notification notification;
+    required Notification notification;
+    DOMString action = "";
 };
diff --git a/modules/notifications/NotificationOptions.idl b/modules/notifications/NotificationOptions.idl
index 364907e..9b1ded4 100644
--- a/modules/notifications/NotificationOptions.idl
+++ b/modules/notifications/NotificationOptions.idl
@@ -2,7 +2,7 @@
 // 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
+// https://notifications.spec.whatwg.org/#api
 
 enum NotificationDirection {
     "auto",
@@ -15,9 +15,13 @@
     DOMString lang = "";
     DOMString body = "";
     DOMString tag = "";
-    DOMString icon;
+    USVString icon;
     // TODO(sh919.park): vibrate should be ([Clamp] unsigned long or sequence<unsigned long>)
     (unsigned long or sequence<unsigned long>) vibrate;
+    DOMTimeStamp timestamp;
+    boolean renotify = false;
     boolean silent = false;
+    boolean requireInteraction = false;
     any data = null;
+    sequence<NotificationAction> actions = [];
 };
diff --git a/modules/notifications/NotificationPermissionCallback.idl b/modules/notifications/NotificationPermissionCallback.idl
index 09f7a1b..a596669 100644
--- a/modules/notifications/NotificationPermissionCallback.idl
+++ b/modules/notifications/NotificationPermissionCallback.idl
@@ -23,6 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://notifications.spec.whatwg.org/#api
+
 callback interface NotificationPermissionCallback {
     void handleEvent(DOMString permission);
 };
diff --git a/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl b/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
index b2a61e5..45f2c54 100644
--- a/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
+++ b/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
@@ -5,8 +5,8 @@
 // https://notifications.spec.whatwg.org/#service-worker-api
 
 [
-    RuntimeEnabled=ServiceWorkerNotifications,
+    RuntimeEnabled=Notifications,
 ] partial interface ServiceWorkerGlobalScope {
     attribute EventHandler onnotificationclick;
-    attribute EventHandler onnotificationerror;
+    attribute EventHandler onnotificationclose;
 };
diff --git a/modules/notifications/ServiceWorkerRegistrationNotifications.idl b/modules/notifications/ServiceWorkerRegistrationNotifications.idl
index fed85c5..bb5330b 100644
--- a/modules/notifications/ServiceWorkerRegistrationNotifications.idl
+++ b/modules/notifications/ServiceWorkerRegistrationNotifications.idl
@@ -6,7 +6,7 @@
 
 [
     Exposed=(Window, ServiceWorker),
-    RuntimeEnabled=ServiceWorkerNotifications
+    RuntimeEnabled=Notifications
 ] partial interface ServiceWorkerRegistration {
     [CallWith=ScriptState, RaisesException] Promise showNotification(DOMString title, optional NotificationOptions options);
     [CallWith=ScriptState] Promise<sequence<Notification>> getNotifications(optional GetNotificationOptions filter);
diff --git a/modules/permissions/PermissionStatus.idl b/modules/permissions/PermissionStatus.idl
index 61354cb..e62fa89 100644
--- a/modules/permissions/PermissionStatus.idl
+++ b/modules/permissions/PermissionStatus.idl
@@ -12,13 +12,11 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     Exposed=(Window,Worker),
     RuntimeEnabled=Permissions,
 ] interface PermissionStatus : EventTarget {
-    [DeprecateAs=PermissionStatusStatus, ImplementedAs=state] readonly attribute PermissionState status;
-
     readonly attribute PermissionState state;
              attribute EventHandler onchange;
 };
diff --git a/modules/permissions/Permissions.idl b/modules/permissions/Permissions.idl
index ccf21eb..9f2306a 100644
--- a/modules/permissions/Permissions.idl
+++ b/modules/permissions/Permissions.idl
@@ -10,5 +10,8 @@
     GarbageCollected,
     RuntimeEnabled=Permissions
 ] interface Permissions {
-    [CallWith=ScriptState, Measure] Promise<PermissionStatus> query(object permission);
+    [CallWith=ScriptState, Measure] Promise<PermissionStatus> query(Dictionary permission);
+    [RuntimeEnabled=PermissionsRequestRevoke, CallWith=ScriptState, Measure] Promise<PermissionStatus> request(Dictionary permissions);
+    [RuntimeEnabled=PermissionsRequestRevoke, CallWith=ScriptState, Measure] Promise<PermissionStatus> revoke(Dictionary permission);
+    [RuntimeEnabled=PermissionsRequestRevoke, CallWith=ScriptState, Measure] Promise<sequence<PermissionStatus>> requestAll(sequence<Dictionary> permissions);
 };
diff --git a/modules/presentation/DefaultSessionStartEvent.idl b/modules/presentation/DefaultSessionStartEvent.idl
deleted file mode 100644
index 70bdf7e..0000000
--- a/modules/presentation/DefaultSessionStartEvent.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2015 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://w3c.github.io/presentation-api/#interface-defaultsessionstartevent
-
-[
-    Constructor(DOMString type, optional DefaultSessionStartEventInit eventInitDict),
-    RuntimeEnabled=Presentation
-] interface DefaultSessionStartEvent : Event {
-    [SameObject] readonly attribute PresentationSession session;
-};
diff --git a/modules/presentation/DefaultSessionStartEventInit.idl b/modules/presentation/DefaultSessionStartEventInit.idl
deleted file mode 100644
index 90f9db3..0000000
--- a/modules/presentation/DefaultSessionStartEventInit.idl
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2015 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://w3c.github.io/presentation-api/#interface-defaultsessionstartevent
-
-dictionary DefaultSessionStartEventInit : EventInit {
-    PresentationSession session;
-};
diff --git a/modules/presentation/Presentation.idl b/modules/presentation/Presentation.idl
index 2ec7725..968abde 100644
--- a/modules/presentation/Presentation.idl
+++ b/modules/presentation/Presentation.idl
@@ -7,16 +7,9 @@
 [
     GarbageCollected,
     RuntimeEnabled=Presentation
-] interface Presentation : EventTarget {
-    // This API used by controlling browsing context.
-    [CallWith=ScriptState] Promise<PresentationSession> startSession(DOMString url);
-    // TODO(avayvod): The |presentationId| argument should not be optional.
-    [CallWith=ScriptState] Promise<PresentationSession> joinSession(DOMString url, [Default=Undefined] optional DOMString presentationId);
-    [CallWith=ScriptState] Promise<PresentationAvailability> getAvailability(DOMString url);
-    attribute EventHandler ondefaultsessionstart;
+] interface Presentation {
+    [MeasureAs=PresentationDefaultRequest] attribute PresentationRequest? defaultRequest;
 
-    // This API used by presenting browsing context.
-    // TODO(avayvod): The spec has |getSession()| and |getSessions()| instead.
-    readonly attribute PresentationSession? session;
-    // TODO(avayvod): attribute EventHandler onsessionavailable;
+    // This API is available on the receiving browsing context.
+    [RuntimeEnabled=PresentationReceiver, SameObject] readonly attribute PresentationReceiver? receiver;
 };
diff --git a/modules/presentation/PresentationAvailability.idl b/modules/presentation/PresentationAvailability.idl
index 4afd903..a1c72cb 100644
--- a/modules/presentation/PresentationAvailability.idl
+++ b/modules/presentation/PresentationAvailability.idl
@@ -5,7 +5,7 @@
 // https://w3c.github.io/presentation-api/#interface-presentationavailability
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
     RuntimeEnabled=Presentation,
 ] interface PresentationAvailability : EventTarget {
diff --git a/modules/presentation/PresentationConnection.idl b/modules/presentation/PresentationConnection.idl
new file mode 100644
index 0000000..0210567
--- /dev/null
+++ b/modules/presentation/PresentationConnection.idl
@@ -0,0 +1,33 @@
+// 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://w3c.github.io/presentation-api/#interface-presentationconnection
+
+enum PresentationConnectionState {
+    "connected",
+    "closed",
+    "terminated"
+};
+
+[
+    GarbageCollected,
+    RuntimeEnabled=Presentation
+] interface PresentationConnection : EventTarget {
+    readonly attribute DOMString? id;
+    readonly attribute PresentationConnectionState state;
+    [MeasureAs=PresentationConnectionClose] void close();
+    [MeasureAs=PresentationConnectionTerminate] void terminate();
+    [DeprecateAs=PresentationConnectionStateChangeEventListener] attribute EventHandler onstatechange;
+    attribute EventHandler onconnect;
+    attribute EventHandler onclose;
+    attribute EventHandler onterminate;
+
+    // Communication
+    attribute BinaryType binaryType;
+    attribute EventHandler onmessage;
+    [RaisesException, MeasureAs=PresentationConnectionSend] void send(DOMString message);
+    [RaisesException, MeasureAs=PresentationConnectionSend] void send(Blob data);
+    [RaisesException, MeasureAs=PresentationConnectionSend] void send(ArrayBuffer data);
+    [RaisesException, MeasureAs=PresentationConnectionSend] void send(ArrayBufferView data);
+};
diff --git a/modules/presentation/PresentationConnectionAvailableEvent.idl b/modules/presentation/PresentationConnectionAvailableEvent.idl
new file mode 100644
index 0000000..a937e2e
--- /dev/null
+++ b/modules/presentation/PresentationConnectionAvailableEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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://w3c.github.io/presentation-api/#interface-presentationconnectionavailableeevent
+
+[
+    Constructor(DOMString type, PresentationConnectionAvailableEventInit eventInitDict),
+    RuntimeEnabled=Presentation
+] interface PresentationConnectionAvailableEvent : Event {
+    [SameObject] readonly attribute PresentationConnection connection;
+};
diff --git a/modules/presentation/PresentationConnectionAvailableEventInit.idl b/modules/presentation/PresentationConnectionAvailableEventInit.idl
new file mode 100644
index 0000000..1f28673
--- /dev/null
+++ b/modules/presentation/PresentationConnectionAvailableEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://w3c.github.io/presentation-api/#idl-def-presentationconnectionavailableeventinit
+
+dictionary PresentationConnectionAvailableEventInit : EventInit {
+    required PresentationConnection connection;
+};
diff --git a/modules/presentation/PresentationConnectionCloseEvent.idl b/modules/presentation/PresentationConnectionCloseEvent.idl
new file mode 100644
index 0000000..88f004b
--- /dev/null
+++ b/modules/presentation/PresentationConnectionCloseEvent.idl
@@ -0,0 +1,15 @@
+// Copyright 2016 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://w3c.github.io/presentation-api/#interface-presentationconnectioncloseevent
+
+enum PresentationConnectionCloseReason { "error", "closed", "wentaway" };
+
+[
+    Constructor(DOMString type, PresentationConnectionCloseEventInit eventInitDict),
+    RuntimeEnabled=Presentation
+] interface PresentationConnectionCloseEvent : Event {
+    readonly attribute PresentationConnectionCloseReason reason;
+    readonly attribute DOMString message;
+};
diff --git a/modules/presentation/PresentationConnectionCloseEventInit.idl b/modules/presentation/PresentationConnectionCloseEventInit.idl
new file mode 100644
index 0000000..f56dbab
--- /dev/null
+++ b/modules/presentation/PresentationConnectionCloseEventInit.idl
@@ -0,0 +1,8 @@
+// Copyright 2016 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.
+
+dictionary PresentationConnectionCloseEventInit : EventInit {
+    required PresentationConnectionCloseReason reason;
+    DOMString message;
+};
diff --git a/modules/presentation/PresentationReceiver.idl b/modules/presentation/PresentationReceiver.idl
new file mode 100644
index 0000000..4039cec
--- /dev/null
+++ b/modules/presentation/PresentationReceiver.idl
@@ -0,0 +1,15 @@
+// Copyright 2015 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://w3c.github.io/presentation-api/#interface-presentation
+
+[
+    GarbageCollected,
+    RuntimeEnabled=PresentationReceiver
+] interface PresentationReceiver : EventTarget {
+    [CallWith=ScriptState] Promise<PresentationConnection> getConnection();
+    [CallWith=ScriptState] Promise<sequence<PresentationConnection>> getConnections();
+
+    attribute EventHandler onconnectionavailable;
+};
diff --git a/modules/presentation/PresentationRequest.idl b/modules/presentation/PresentationRequest.idl
new file mode 100644
index 0000000..dc92159
--- /dev/null
+++ b/modules/presentation/PresentationRequest.idl
@@ -0,0 +1,22 @@
+// Copyright 2015 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.
+
+// TODO(mlamouri): double-check link after spec changes have landed.
+// https://w3c.github.io/presentation-api/#interface-presentationrequest
+
+[
+    Constructor(DOMString url),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    DependentLifetime,
+    GarbageCollected,
+    RuntimeEnabled=Presentation,
+    MeasureAs=PresentationRequestConstructor
+] interface PresentationRequest : EventTarget {
+    [CallWith=ScriptState, MeasureAs=PresentationRequestStart] Promise<PresentationConnection> start();
+    [CallWith=ScriptState, MeasureAs=PresentationRequestReconnect] Promise<PresentationConnection> reconnect(DOMString id);
+    [CallWith=ScriptState, MeasureAs=PresentationRequestGetAvailability] Promise<PresentationAvailability> getAvailability();
+
+    attribute EventHandler onconnectionavailable;
+};
diff --git a/modules/presentation/PresentationSession.idl b/modules/presentation/PresentationSession.idl
deleted file mode 100644
index 493f8ca..0000000
--- a/modules/presentation/PresentationSession.idl
+++ /dev/null
@@ -1,28 +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.
-
-// https://w3c.github.io/presentation-api/#interface-presentationsession
-
-enum PresentationSessionState {
-    "connected",
-    "disconnected"
-};
-
-[
-    GarbageCollected,
-    RuntimeEnabled=Presentation
-] interface PresentationSession : EventTarget {
-    readonly attribute DOMString? id;
-    readonly attribute PresentationSessionState state;
-    void close();
-    attribute EventHandler onstatechange;
-
-    // Communication
-    attribute BinaryType binaryType;
-    attribute EventHandler onmessage;
-    [RaisesException] void send(DOMString message);
-    [RaisesException] void send(Blob data);
-    [RaisesException] void send(ArrayBuffer data);
-    [RaisesException] void send(ArrayBufferView data);
-};
diff --git a/modules/push_messaging/PushEventInit.idl b/modules/push_messaging/PushEventInit.idl
index aa921f4..a5672f8 100644
--- a/modules/push_messaging/PushEventInit.idl
+++ b/modules/push_messaging/PushEventInit.idl
@@ -4,6 +4,9 @@
 
 // https://w3c.github.io/push-api/#idl-def-PushEvent
 
+// TODO(peter): Use BufferSource when union types can refer to other union types.
+typedef (ArrayBuffer or ArrayBufferView or USVString) PushMessageDataInit;
+
 dictionary PushEventInit : ExtendableEventInit {
-    PushMessageData data;
+    PushMessageDataInit data;
 };
diff --git a/modules/push_messaging/PushMessageData.idl b/modules/push_messaging/PushMessageData.idl
index fab3d5a..9af96db 100644
--- a/modules/push_messaging/PushMessageData.idl
+++ b/modules/push_messaging/PushMessageData.idl
@@ -7,7 +7,6 @@
 typedef object JSON;
 
 [
-    Constructor(USVString message),
     Exposed=ServiceWorker,
     GarbageCollected,
     RuntimeEnabled=PushMessagingData,
diff --git a/modules/push_messaging/PushSubscription.idl b/modules/push_messaging/PushSubscription.idl
index 0575d1f..469bd8c 100644
--- a/modules/push_messaging/PushSubscription.idl
+++ b/modules/push_messaging/PushSubscription.idl
@@ -4,13 +4,20 @@
 
 // https://w3c.github.io/push-api/#pushsubscription-interface
 
+enum PushEncryptionKeyName {
+    "p256dh",
+    "auth"
+};
+
 [
     Exposed=(Window,ServiceWorker),
     GarbageCollected,
     RuntimeEnabled=PushMessaging,
 ] interface PushSubscription {
     readonly attribute USVString endpoint;
+
+    [RuntimeEnabled=PushMessagingData] ArrayBuffer? getKey(PushEncryptionKeyName name);
     [CallWith=ScriptState] Promise<boolean> unsubscribe();
 
-    serializer = { attribute };
+    serializer;
 };
diff --git a/modules/quota/NavigatorStorageQuota.idl b/modules/quota/NavigatorStorageQuota.idl
index 21c6e6f..26483d3 100644
--- a/modules/quota/NavigatorStorageQuota.idl
+++ b/modules/quota/NavigatorStorageQuota.idl
@@ -17,9 +17,16 @@
  * Boston, MA 02110-1301, USA.
  */
 
+// This partial interface is a merge of three different partial interfaces
+// related to storage.
 partial interface Navigator {
+    // http://www.w3.org/TR/2012/WD-quota-api-20120703/#idl-def-StorageQuotaEnvironment
     [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitTemporaryStorage;
     [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitPersistentStorage;
 
+    // http://www.w3.org/TR/2015/WD-quota-api-20150409/#accessing-storagequota-interface
     [RuntimeEnabled=QuotaPromise] readonly attribute StorageQuota storageQuota;
+
+    // https://storage.spec.whatwg.org/#api
+    [RuntimeEnabled=DurableStorage] readonly attribute StorageManager storage;
 };
diff --git a/modules/quota/StorageManager.idl b/modules/quota/StorageManager.idl
new file mode 100644
index 0000000..7d48dac
--- /dev/null
+++ b/modules/quota/StorageManager.idl
@@ -0,0 +1,18 @@
+// Copyright 2015 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://storage.spec.whatwg.org/#storagemanager
+
+enum PersistentStoragePermission { "default", "denied", "granted" };
+
+[
+    Exposed=(Window,Worker),
+    GarbageCollected,
+    RuntimeEnabled=DurableStorage,
+] interface StorageManager {
+    [Exposed=Window, CallWith=ScriptState] Promise<boolean> requestPersistent();
+    [CallWith=ScriptState] Promise<PersistentStoragePermission> persistentPermission();
+
+    // TODO(dgrogan): Implement estimate() and persistentEstimate().
+};
diff --git a/modules/quota/WorkerNavigatorStorageQuota.idl b/modules/quota/WorkerNavigatorStorageQuota.idl
index c47cb53..cb14bb6 100644
--- a/modules/quota/WorkerNavigatorStorageQuota.idl
+++ b/modules/quota/WorkerNavigatorStorageQuota.idl
@@ -17,7 +17,13 @@
  * Boston, MA 02110-1301, USA.
  */
 
+// This partial interface is a merge of two different partial interfaces
+// related to storage.
 partial interface WorkerNavigator {
+    // http://www.w3.org/TR/2012/WD-quota-api-20120703/#idl-def-StorageQuotaEnvironment
     [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitTemporaryStorage;
     [MeasureAs=PrefixedStorageQuota] readonly attribute DeprecatedStorageQuota webkitPersistentStorage;
+
+    // https://storage.spec.whatwg.org/#api
+    [RuntimeEnabled=DurableStorage] readonly attribute StorageManager storage;
 };
diff --git a/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl b/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl
new file mode 100644
index 0000000..87e23c7
--- /dev/null
+++ b/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://w3c.github.io/remote-playback/#extension-to-the-htmlmediaelement
+
+partial interface HTMLMediaElement {
+    [Reflect] attribute boolean disableRemotePlayback;
+};
diff --git a/modules/serviceworkers/Client.idl b/modules/serviceworkers/Client.idl
index 134e68a..01dd03e 100644
--- a/modules/serviceworkers/Client.idl
+++ b/modules/serviceworkers/Client.idl
@@ -6,7 +6,6 @@
 [
     Exposed=ServiceWorker,
     GarbageCollected,
-    TypeChecking=Interface,
     ImplementedAs=ServiceWorkerClient,
 ] interface Client {
     [RuntimeEnabled=ServiceWorkerClientAttributes] readonly attribute USVString url;
diff --git a/modules/serviceworkers/Clients.idl b/modules/serviceworkers/Clients.idl
index bf85fb3..df84bec 100644
--- a/modules/serviceworkers/Clients.idl
+++ b/modules/serviceworkers/Clients.idl
@@ -6,9 +6,9 @@
 [
     Exposed=ServiceWorker,
     GarbageCollected,
-    TypeChecking=Interface,
     ImplementedAs=ServiceWorkerClients,
 ] interface Clients {
+    [RuntimeEnabled=ServiceWorkerClientsGetID, CallWith=ScriptState] Promise<any> get(DOMString id);
     [CallWith=ScriptState] Promise<sequence<Client>> matchAll(optional ClientQueryOptions options);
     [RuntimeEnabled=ServiceWorkerClientAttributes, CallWith=ScriptState] Promise<WindowClient?> openWindow(USVString url);
     [CallWith=ScriptState] Promise<void> claim();
diff --git a/modules/serviceworkers/ExtendableEvent.idl b/modules/serviceworkers/ExtendableEvent.idl
index df1bc88..6bef9da 100644
--- a/modules/serviceworkers/ExtendableEvent.idl
+++ b/modules/serviceworkers/ExtendableEvent.idl
@@ -32,7 +32,6 @@
 [
     Constructor(DOMString type, optional ExtendableEventInit eventInitDict),
     Exposed=ServiceWorker,
-    TypeChecking=Interface,
 ] interface ExtendableEvent : Event {
-    [CallWith=ScriptState, RaisesException] void waitUntil(any value);
+    [CallWith=ScriptState, RaisesException] void waitUntil(Promise<any> f);
 };
diff --git a/modules/serviceworkers/ExtendableMessageEvent.idl b/modules/serviceworkers/ExtendableMessageEvent.idl
new file mode 100644
index 0000000..6da6bbf
--- /dev/null
+++ b/modules/serviceworkers/ExtendableMessageEvent.idl
@@ -0,0 +1,21 @@
+// Copyright 2016 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#extendablemessage-event-section
+
+[
+    // TODO(bashi): Stop using CustomConstructor once we solve reference
+    // circulation between Blink and V8. http://crbug.com/501866
+    // Constructor should be:
+    // Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict),
+    CustomConstructor,
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ServiceWorkerExtendableMessageEvent,
+] interface ExtendableMessageEvent : ExtendableEvent {
+    [Custom=Getter] readonly attribute any data;
+    readonly attribute DOMString origin;
+    readonly attribute DOMString lastEventId;
+    [SameObject] readonly attribute (Client or ServiceWorker or MessagePort)? source;
+    [SameObject] readonly attribute MessagePort[]? ports;
+};
diff --git a/modules/serviceworkers/ExtendableMessageEventInit.idl b/modules/serviceworkers/ExtendableMessageEventInit.idl
new file mode 100644
index 0000000..9d3bbe0
--- /dev/null
+++ b/modules/serviceworkers/ExtendableMessageEventInit.idl
@@ -0,0 +1,15 @@
+// Copyright 2016 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#extendablemessage-event-section
+
+[
+    RuntimeEnabled=ServiceWorkerExtendableMessageEvent,
+] dictionary ExtendableMessageEventInit : ExtendableEventInit {
+     any data;
+     DOMString origin;
+     DOMString lastEventId;
+     (Client or ServiceWorker or MessagePort)? source;
+     sequence<MessagePort>? ports;
+};
diff --git a/modules/serviceworkers/FetchEvent.idl b/modules/serviceworkers/FetchEvent.idl
index ffa53ec..e8f4551 100644
--- a/modules/serviceworkers/FetchEvent.idl
+++ b/modules/serviceworkers/FetchEvent.idl
@@ -4,12 +4,12 @@
 
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
 [
-    Constructor(DOMString type, optional FetchEventInit eventInitDict),
+    Constructor(DOMString type, FetchEventInit eventInitDict),
     Exposed=ServiceWorker,
-    TypeChecking=Interface,
 ] interface FetchEvent : ExtendableEvent {
-    readonly attribute Request request;
+    [SameObject] readonly attribute Request request;
+    readonly attribute DOMString? clientId;
     readonly attribute boolean isReload;
 
-    [CallWith=ScriptState, RaisesException] void respondWith(any value);
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<Response> r);
 };
diff --git a/modules/serviceworkers/FetchEventInit.idl b/modules/serviceworkers/FetchEventInit.idl
index cac8bbe..80da60f 100644
--- a/modules/serviceworkers/FetchEventInit.idl
+++ b/modules/serviceworkers/FetchEventInit.idl
@@ -5,6 +5,7 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
 
 dictionary FetchEventInit : ExtendableEventInit {
-  Request request;
-  boolean isReload = false;    
+  required Request request;
+  DOMString? clientId = null;
+  boolean isReload = false;
 };
diff --git a/modules/serviceworkers/InstallEvent.idl b/modules/serviceworkers/InstallEvent.idl
new file mode 100644
index 0000000..dc9ee12
--- /dev/null
+++ b/modules/serviceworkers/InstallEvent.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
+[
+    Constructor(DOMString type, optional ExtendableEventInit eventInitDict),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ForeignFetch,
+] interface InstallEvent : ExtendableEvent {
+  [CallWith=ExecutionContext, RaisesException] void registerForeignFetchScopes(sequence<USVString> subScopes, (USVString or sequence<USVString>) origins);
+};
diff --git a/modules/serviceworkers/NavigatorServiceWorker.idl b/modules/serviceworkers/NavigatorServiceWorker.idl
index b7c95b3..7ffe838 100644
--- a/modules/serviceworkers/NavigatorServiceWorker.idl
+++ b/modules/serviceworkers/NavigatorServiceWorker.idl
@@ -4,5 +4,5 @@
 
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#navigator-service-worker
 partial interface Navigator {
-    [RaisesException] readonly attribute ServiceWorkerContainer serviceWorker;
+    [RaisesException, CallWith=ExecutionContext] readonly attribute ServiceWorkerContainer serviceWorker;
 };
diff --git a/modules/serviceworkers/ServiceWorker.idl b/modules/serviceworkers/ServiceWorker.idl
index 4efa439..12f157b 100644
--- a/modules/serviceworkers/ServiceWorker.idl
+++ b/modules/serviceworkers/ServiceWorker.idl
@@ -39,8 +39,8 @@
 };
 
 [
-    ActiveDOMObject,
-    TypeChecking=Interface,
+    DependentLifetime,
+    GarbageCollected,
 ] interface ServiceWorker : EventTarget {
 
     [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
diff --git a/modules/serviceworkers/ServiceWorkerContainer.idl b/modules/serviceworkers/ServiceWorkerContainer.idl
index 7f1322d..bc58128 100644
--- a/modules/serviceworkers/ServiceWorkerContainer.idl
+++ b/modules/serviceworkers/ServiceWorkerContainer.idl
@@ -31,7 +31,6 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-interface
 [
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface ServiceWorkerContainer : EventTarget {
     [Unforgeable] readonly attribute ServiceWorker? controller;
     [CallWith=ScriptState] readonly attribute Promise<ServiceWorkerRegistration> ready;
diff --git a/modules/serviceworkers/ServiceWorkerGlobalScope.idl b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
index 2319e5b..df412a7 100644
--- a/modules/serviceworkers/ServiceWorkerGlobalScope.idl
+++ b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
@@ -33,16 +33,11 @@
 [
     Exposed=ServiceWorker,
     Global=(Worker,ServiceWorker),
-    TypeChecking=Interface,
 ] interface ServiceWorkerGlobalScope : WorkerGlobalScope {
 
   readonly attribute Clients clients;
   readonly attribute ServiceWorkerRegistration registration;
 
-  // https://github.com/mkruisselbrink/navigator-connect/blob/gh-pages/docs/api-idea.md#persisted-messageports
-  // TODO(mek): Link to actual spec when this is added there, and decide if this is the right place for this.
-  [RuntimeEnabled=NavigatorConnect] readonly attribute StashedPortCollection ports;
-
   [CallWith=ScriptState, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
 
   [RaisesException] void close();
@@ -53,4 +48,5 @@
   attribute EventHandler onfetch;
   attribute EventHandler oninstall;
   attribute EventHandler onmessage;
+  [RuntimeEnabled=ForeignFetch] attribute EventHandler onforeignfetch;
 };
diff --git a/modules/serviceworkers/ServiceWorkerMessageEvent.idl b/modules/serviceworkers/ServiceWorkerMessageEvent.idl
index 711f643..f110925 100644
--- a/modules/serviceworkers/ServiceWorkerMessageEvent.idl
+++ b/modules/serviceworkers/ServiceWorkerMessageEvent.idl
@@ -5,7 +5,11 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#serviceworkermessage-event-interface
 
 [
-    Constructor(DOMString type, optional ServiceWorkerMessageEventInit eventInitDict),
+    // TODO(bashi): Stop using CustomConstructor once we solve reference
+    // circulation between Blink and V8. http://crbug.com/501866
+    // Constructor should be:
+    // Constructor(DOMString type, optional ServiceWorkerMessageEventInit eventInitDict),
+    CustomConstructor,
     Exposed=(Window, Worker),
 ] interface ServiceWorkerMessageEvent : Event {
     [Custom=Getter] readonly attribute any data;
diff --git a/modules/serviceworkers/ServiceWorkerRegistration.idl b/modules/serviceworkers/ServiceWorkerRegistration.idl
index c88cb42..97d7b82 100644
--- a/modules/serviceworkers/ServiceWorkerRegistration.idl
+++ b/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -5,9 +5,8 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-registration-obj
 [
     Exposed=(Window,Worker),
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
-    TypeChecking=Interface,
 ] interface ServiceWorkerRegistration : EventTarget {
     [Unforgeable] readonly attribute ServiceWorker? installing;
     [Unforgeable] readonly attribute ServiceWorker? waiting;
@@ -15,7 +14,7 @@
 
     readonly attribute USVString scope;
 
-    [CallWith=ScriptState, RaisesException] void update();
+    [CallWith=ScriptState] Promise<void> update();
     [CallWith=ScriptState] Promise<boolean> unregister();
 
     attribute EventHandler onupdatefound;
diff --git a/modules/serviceworkers/StashedMessagePort.idl b/modules/serviceworkers/StashedMessagePort.idl
deleted file mode 100644
index beab9cb..0000000
--- a/modules/serviceworkers/StashedMessagePort.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2015 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://github.com/mkruisselbrink/navigator-connect/blob/gh-pages/docs/api-idea.md#persisted-messageports
-// TODO(mek): Link to actual spec when this is added there.
-[
-    Exposed=ServiceWorker,
-    RuntimeEnabled=NavigatorConnect,
-    GarbageCollected,
-] interface StashedMessagePort : MessagePort {
-    readonly attribute DOMString name;
-};
diff --git a/modules/serviceworkers/StashedPortCollection.idl b/modules/serviceworkers/StashedPortCollection.idl
deleted file mode 100644
index 08ffeb0..0000000
--- a/modules/serviceworkers/StashedPortCollection.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2015 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://github.com/mkruisselbrink/navigator-connect/blob/gh-pages/docs/api-idea.md#persisted-messageports
-// TODO(mek): Link to actual spec when this is added there.
-[
-    Exposed=ServiceWorker,
-    GarbageCollected,
-    RuntimeEnabled=NavigatorConnect,
-    TypeChecking=Interface,
-] interface StashedPortCollection : EventTarget {
-    [CallWith=ScriptState] StashedMessagePort add(USVString name, MessagePort port);
-    // Promise<sequence<StashedMessagePort>> match(UVString name);
-    attribute EventHandler onmessage;
-};
diff --git a/modules/serviceworkers/WindowClient.idl b/modules/serviceworkers/WindowClient.idl
index 3af859b..3639408 100644
--- a/modules/serviceworkers/WindowClient.idl
+++ b/modules/serviceworkers/WindowClient.idl
@@ -15,10 +15,10 @@
     Exposed=ServiceWorker,
     RuntimeEnabled=ServiceWorkerClientAttributes,
     GarbageCollected,
-    TypeChecking=Interface,
     ImplementedAs=ServiceWorkerWindowClient,
 ] interface WindowClient : Client {
     readonly attribute VisibilityState visibilityState;
     readonly attribute boolean focused;
     [CallWith=ScriptState] Promise<WindowClient> focus();
+    [RuntimeEnabled=ServiceWorkerWindowClientNavigate, CallWith=ScriptState] Promise<WindowClient> navigate(USVString url);
 };
diff --git a/modules/speech/SpeechRecognition.idl b/modules/speech/SpeechRecognition.idl
index 71854f7..cbd14c2 100644
--- a/modules/speech/SpeechRecognition.idl
+++ b/modules/speech/SpeechRecognition.idl
@@ -26,17 +26,16 @@
 [
     GarbageCollected,
     NoInterfaceObject,
-    ActiveDOMObject,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
 ] interface SpeechRecognition : EventTarget {
-    attribute SpeechGrammarList grammars;
+    [LegacyInterfaceTypeChecking] attribute SpeechGrammarList grammars;
     attribute DOMString lang;
-    attribute DOMString serviceURI;
     attribute boolean continuous;
     attribute boolean interimResults;
     attribute unsigned long maxAlternatives;
-    [RuntimeEnabled=MediaStreamSpeech] attribute MediaStreamTrack audioTrack;
+    [RuntimeEnabled=MediaStreamSpeech, LegacyInterfaceTypeChecking] attribute MediaStreamTrack audioTrack;
 
     [RaisesException] void start();
     [ImplementedAs=stopFunction] void stop();
diff --git a/modules/speech/SpeechSynthesis.idl b/modules/speech/SpeechSynthesis.idl
index 98b53de..17fa33a 100644
--- a/modules/speech/SpeechSynthesis.idl
+++ b/modules/speech/SpeechSynthesis.idl
@@ -31,7 +31,7 @@
     readonly attribute boolean speaking;
     readonly attribute boolean paused;
 
-    [RaisesException] void speak(SpeechSynthesisUtterance utterance);
+    void speak(SpeechSynthesisUtterance utterance);
     void cancel();
     void pause();
     void resume();
diff --git a/modules/speech/SpeechSynthesisUtterance.idl b/modules/speech/SpeechSynthesisUtterance.idl
index 7278056..872fa89 100644
--- a/modules/speech/SpeechSynthesisUtterance.idl
+++ b/modules/speech/SpeechSynthesisUtterance.idl
@@ -31,7 +31,7 @@
 ] interface SpeechSynthesisUtterance : EventTarget {
     attribute DOMString text;
     attribute DOMString lang;
-    attribute SpeechSynthesisVoice voice;
+    [LegacyInterfaceTypeChecking] attribute SpeechSynthesisVoice voice;
     attribute float volume;
     attribute float rate;
     attribute float pitch;
diff --git a/modules/storage/Storage.idl b/modules/storage/Storage.idl
index 63f4d5a..d972137 100644
--- a/modules/storage/Storage.idl
+++ b/modules/storage/Storage.idl
@@ -23,21 +23,26 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://html.spec.whatwg.org/multipage/webstorage.html#the-storage-interface
+
 [
     GarbageCollected
 ] interface Storage {
-    [NotEnumerable, RaisesException] getter DOMString (unsigned long index);
-    [RaisesException] setter DOMString (unsigned long index, DOMString value);
-    [RaisesException] deleter boolean (unsigned long index);
+    // TODO(philipj): [NotEnumerable] should not be used anywhere in this interface.
+    [NotEnumerable, RaisesException=Getter] readonly attribute unsigned long length;
+    [NotEnumerable, RaisesException] DOMString? key(unsigned long index);
+    [LogActivity, NotEnumerable, RaisesException] DOMString? getItem(DOMString key);
+    [LogActivity, NotEnumerable, RaisesException] void setItem(DOMString key, DOMString value);
+    [LogActivity, NotEnumerable, RaisesException] void removeItem(DOMString key);
+    [LogActivity, NotEnumerable, RaisesException] void clear();
 
+    // TODO(philipj): Merge these into getItem/setItem/removeItem.
     [RaisesException] getter DOMString (DOMString name);
     [RaisesException] setter DOMString (DOMString name, DOMString value);
     [RaisesException] deleter boolean (DOMString name);
 
-    [NotEnumerable, RaisesException=Getter] readonly attribute unsigned long length;
-    [NotEnumerable, RaisesException] DOMString? key(unsigned long index);
-    [LogActivity, NotEnumerable, RaisesException] DOMString? getItem(DOMString key);
-    [LogActivity, NotEnumerable, RaisesException] void setItem(DOMString key, DOMString data);
-    [LogActivity, NotEnumerable, RaisesException] void removeItem(DOMString key);
-    [LogActivity, NotEnumerable, RaisesException] void clear();
+    // Non-standard APIs
+    [NotEnumerable, RaisesException] getter DOMString (unsigned long index);
+    [RaisesException] setter DOMString (unsigned long index, DOMString value);
+    [RaisesException] deleter boolean (unsigned long index);
 };
diff --git a/modules/storage/StorageEvent.idl b/modules/storage/StorageEvent.idl
index af603e4..bcf9162 100644
--- a/modules/storage/StorageEvent.idl
+++ b/modules/storage/StorageEvent.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/html5/webstorage/#the-storage-event
+// https://html.spec.whatwg.org/multipage/webstorage.html#the-storageevent-interface
 
 [
     Constructor(DOMString type, optional StorageEventInit eventInitDict),
@@ -34,15 +34,13 @@
     readonly attribute DOMString url;
     readonly attribute Storage? storageArea;
 
-    [Measure] void initStorageEvent([Default=Undefined] optional DOMString typeArg,
-                                    [Default=Undefined] optional boolean canBubbleArg,
-                                    [Default=Undefined] optional boolean cancelableArg,
-                                    [Default=Undefined] optional DOMString keyArg,
-                                    [Default=Undefined] optional DOMString? oldValueArg,
-                                    [Default=Undefined] optional DOMString? newValueArg,
-                                    [Default=Undefined] optional DOMString urlArg,
-                                    [Default=Undefined] optional Storage storageAreaArg);
-
-    // Needed once we support init<blank>EventNS
-    // void initStorageEventNS(DOMString namespaceURI, DOMString typeArg, boolean canBubbleArg, boolean cancelableArg, DOMString keyArg, DOMString oldValueArg, DOMString newValueArg, DOMString urlArg, Storage storageAreaArg);
+    // Non-standard API
+    [Measure, LegacyInterfaceTypeChecking] void initStorageEvent([Default=Undefined] optional DOMString typeArg,
+                                                                 [Default=Undefined] optional boolean canBubbleArg,
+                                                                 [Default=Undefined] optional boolean cancelableArg,
+                                                                 [Default=Undefined] optional DOMString keyArg,
+                                                                 [Default=Undefined] optional DOMString? oldValueArg,
+                                                                 [Default=Undefined] optional DOMString? newValueArg,
+                                                                 [Default=Undefined] optional DOMString urlArg,
+                                                                 [Default=Undefined] optional Storage storageAreaArg);
 };
diff --git a/modules/storage/StorageEventInit.idl b/modules/storage/StorageEventInit.idl
index 72f18be..3f58958 100644
--- a/modules/storage/StorageEventInit.idl
+++ b/modules/storage/StorageEventInit.idl
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://dev.w3.org/html5/webstorage/#the-storage-event
+// https://html.spec.whatwg.org/multipage/webstorage.html#the-storageevent-interface
 
 dictionary StorageEventInit : EventInit {
     DOMString? key;
diff --git a/modules/vr/HMDVRDevice.idl b/modules/vr/HMDVRDevice.idl
index 99d6858..2737c66 100644
--- a/modules/vr/HMDVRDevice.idl
+++ b/modules/vr/HMDVRDevice.idl
@@ -13,7 +13,6 @@
 // http://mozvr.github.io/webvr-spec/webvr.html#hmdvrdevice
 [
     RuntimeEnabled=WebVR,
-    TypeChecking=Interface
 ] interface HMDVRDevice : VRDevice {
     VREyeParameters getEyeParameters(VREye whichEye);
     void setFieldOfView(optional VRFieldOfView leftFov, optional VRFieldOfView rightFov);
diff --git a/modules/vr/VRFieldOfView.idl b/modules/vr/VRFieldOfView.idl
index ba5e102..23049d2 100644
--- a/modules/vr/VRFieldOfView.idl
+++ b/modules/vr/VRFieldOfView.idl
@@ -6,7 +6,6 @@
 [
     RuntimeEnabled=WebVR,
     GarbageCollected,
-    TypeChecking=Interface,
     Constructor(optional VRFieldOfViewInit fov),
 ] interface VRFieldOfView {
     attribute double upDegrees;
@@ -14,4 +13,3 @@
     attribute double leftDegrees;
     attribute double rightDegrees;
 };
-
diff --git a/modules/background_sync/SyncRegistrationOptions.idl b/modules/wake_lock/ScreenWakeLock.idl
similarity index 63%
copy from modules/background_sync/SyncRegistrationOptions.idl
copy to modules/wake_lock/ScreenWakeLock.idl
index 6e1abbc..38b8d26 100644
--- a/modules/background_sync/SyncRegistrationOptions.idl
+++ b/modules/wake_lock/ScreenWakeLock.idl
@@ -2,8 +2,6 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    RuntimeEnabled=BackgroundSyncV2,
-] dictionary SyncRegistrationOptions {
-    DOMString tag;
+[RuntimeEnabled=WakeLock] partial interface Screen {
+    attribute boolean keepAwake;
 };
diff --git a/modules/webaudio/AnalyserNode.idl b/modules/webaudio/AnalyserNode.idl
index f066b8c..854920e 100644
--- a/modules/webaudio/AnalyserNode.idl
+++ b/modules/webaudio/AnalyserNode.idl
@@ -22,9 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO,
-] interface AnalyserNode : AudioNode {
+interface AnalyserNode : AudioNode {
     [RaisesException=Setter] attribute unsigned long fftSize;
     readonly attribute unsigned long frequencyBinCount;
 
diff --git a/modules/webaudio/AudioBuffer.idl b/modules/webaudio/AudioBuffer.idl
index 3999ff6..155a9c6 100644
--- a/modules/webaudio/AudioBuffer.idl
+++ b/modules/webaudio/AudioBuffer.idl
@@ -28,7 +28,6 @@
 
 [
     GarbageCollected,
-    Conditional=WEB_AUDIO
 ] interface AudioBuffer {
     readonly attribute long length; // in sample-frames
     readonly attribute double duration; // in seconds
diff --git a/modules/webaudio/AudioBufferCallback.idl b/modules/webaudio/AudioBufferCallback.idl
index aa1c383..35241eb 100644
--- a/modules/webaudio/AudioBufferCallback.idl
+++ b/modules/webaudio/AudioBufferCallback.idl
@@ -22,8 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] callback interface AudioBufferCallback {
+callback interface AudioBufferCallback {
     void handleEvent(AudioBuffer audioBuffer);
+    void handleEvent(DOMException exception);
 };
diff --git a/modules/webaudio/AudioBufferSourceNode.idl b/modules/webaudio/AudioBufferSourceNode.idl
index de711d4..3daec8c 100644
--- a/modules/webaudio/AudioBufferSourceNode.idl
+++ b/modules/webaudio/AudioBufferSourceNode.idl
@@ -23,10 +23,7 @@
  */
 
 // A cached (non-streamed), memory-resident audio source
-[
-    Conditional=WEB_AUDIO,
-    TypeChecking=Interface,
-] interface AudioBufferSourceNode : AudioSourceNode {
+interface AudioBufferSourceNode : AudioSourceNode {
     [RaisesException=Setter] attribute AudioBuffer buffer;
 
     readonly attribute AudioParam playbackRate;
diff --git a/modules/webaudio/AudioContext.idl b/modules/webaudio/AudioContext.idl
index 63617aa..b56876e 100644
--- a/modules/webaudio/AudioContext.idl
+++ b/modules/webaudio/AudioContext.idl
@@ -31,10 +31,10 @@
 
 [
     GarbageCollected,
-    ActiveDOMObject,
-    Conditional=WEB_AUDIO,
+    DependentLifetime,
     Constructor,
     ConstructorCallWith=Document,
+    ImplementedAs=AbstractAudioContext,
     NoInterfaceObject,
     RaisesException=Constructor,
 ] interface AudioContext : EventTarget {
@@ -56,29 +56,30 @@
     [RaisesException] AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate);
 
     // Asynchronous audio file data decoding.
-    [RaisesException, MeasureAs=AudioContextDecodeAudioData] void decodeAudioData(ArrayBuffer audioData, AudioBufferCallback successCallback, optional AudioBufferCallback errorCallback);
+    [RaisesException, MeasureAs=AudioContextDecodeAudioData, CallWith=ScriptState] Promise<AudioBuffer> decodeAudioData(ArrayBuffer audioData, optional AudioBufferCallback successCallback, optional AudioBufferCallback errorCallback);
 
     // Sources
     [RaisesException, MeasureAs=AudioContextCreateBufferSource] AudioBufferSourceNode createBufferSource();
 
     [RaisesException, MeasureAs=AudioContextCreateMediaElementSource] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);
 
-    [RaisesException, MeasureAs=AudioContextCreateMediaStreamSource, RaisesException] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
+    [RaisesException, MeasureAs=AudioContextCreateMediaStreamSource] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
     [RaisesException, MeasureAs=AudioContextCreateMediaStreamDestination] MediaStreamAudioDestinationNode createMediaStreamDestination();
 
     // Processing nodes
     [RaisesException, MeasureAs=AudioContextCreateGain] GainNode createGain();
     [RaisesException, MeasureAs=AudioContextCreateDelay] DelayNode createDelay(optional double maxDelayTime);
     [RaisesException, MeasureAs=AudioContextCreateBiquadFilter] BiquadFilterNode createBiquadFilter();
+    [RaisesException, MeasureAs=AudioContextCreateIIRFilter] IIRFilterNode createIIRFilter(sequence<double> feedForward, sequence<double> feedBack);
     [RaisesException, MeasureAs=AudioContextCreateWaveShaper] WaveShaperNode createWaveShaper();
     [RaisesException, MeasureAs=AudioContextCreatePanner] PannerNode createPanner();
     [RaisesException, MeasureAs=AudioContextCreateConvolver] ConvolverNode createConvolver();
     [RaisesException, MeasureAs=AudioContextCreateDynamicsCompressor] DynamicsCompressorNode createDynamicsCompressor();
     [RaisesException, MeasureAs=AudioContextCreateAnalyser] AnalyserNode createAnalyser();
-    [RaisesException, MeasureAs=AudioContextCreateScriptProcessor, RaisesException] ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize, optional unsigned long numberOfInputChannels, optional unsigned long numberOfOutputChannels);
+    [RaisesException, MeasureAs=AudioContextCreateScriptProcessor] ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize, optional unsigned long numberOfInputChannels, optional unsigned long numberOfOutputChannels);
     [RaisesException, MeasureAs=AudioContextCreateStereoPanner] StereoPannerNode createStereoPanner();
     [RaisesException, MeasureAs=AudioContextCreateOscillator] OscillatorNode createOscillator();
-    [RaisesException, MeasureAs=AudioContextCreatePeriodicWave, RaisesException] PeriodicWave createPeriodicWave(Float32Array real, Float32Array imag);
+    [RaisesException, MeasureAs=AudioContextCreatePeriodicWave] PeriodicWave createPeriodicWave(Float32Array real, Float32Array imag, optional Dictionary options);
 
     // Channel splitting and merging
     [RaisesException, MeasureAs=AudioContextCreateChannelSplitter] ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs);
diff --git a/modules/webaudio/AudioDestinationNode.idl b/modules/webaudio/AudioDestinationNode.idl
index e85caef..f638bb2 100644
--- a/modules/webaudio/AudioDestinationNode.idl
+++ b/modules/webaudio/AudioDestinationNode.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface AudioDestinationNode : AudioNode {
+interface AudioDestinationNode : AudioNode {
     readonly attribute unsigned long maxChannelCount;
 };
diff --git a/modules/webaudio/AudioListener.idl b/modules/webaudio/AudioListener.idl
index 4783450..843e290 100644
--- a/modules/webaudio/AudioListener.idl
+++ b/modules/webaudio/AudioListener.idl
@@ -28,7 +28,6 @@
 
 [
     GarbageCollected,
-    Conditional=WEB_AUDIO,
 ] interface AudioListener {
     [DeprecateAs=AudioListenerDopplerFactor] attribute float dopplerFactor;  // same as OpenAL (default 1.0)
     [DeprecateAs=AudioListenerSpeedOfSound] attribute float speedOfSound;   // in meters / second (default 343.3)
diff --git a/modules/webaudio/AudioNode.idl b/modules/webaudio/AudioNode.idl
index 56c3425..7dbb3a8 100644
--- a/modules/webaudio/AudioNode.idl
+++ b/modules/webaudio/AudioNode.idl
@@ -36,19 +36,17 @@
 // http://webaudio.github.io/web-audio-api/#idl-def-AudioNode
 
 [
-    Conditional=WEB_AUDIO,
     GarbageCollected,
-    TypeChecking=Interface
 ] interface AudioNode : EventTarget {
-    [RaisesException] void connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
-    [RaisesException] void connect(AudioParam destination, optional unsigned long output = 0);
+    [RaisesException, MeasureAs=AudioNodeConnectToAudioNode] AudioNode connect(AudioNode destination, optional unsigned long output = 0, optional unsigned long input = 0);
+    [RaisesException, MeasureAs=AudioNodeConnectToAudioParam] void connect(AudioParam destination, optional unsigned long output = 0);
     void disconnect();
-    [RaisesException] void disconnect(unsigned long output);
-    [RaisesException] void disconnect(AudioNode destination);
-    [RaisesException] void disconnect(AudioNode destination, unsigned long output);
-    [RaisesException] void disconnect(AudioNode destination, unsigned long output, unsigned long input);
-    [RaisesException] void disconnect(AudioParam destination);
-    [RaisesException] void disconnect(AudioParam destination, unsigned long output);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioNode] void disconnect(unsigned long output);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioNode] void disconnect(AudioNode destination);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioNode] void disconnect(AudioNode destination, unsigned long output);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioNode] void disconnect(AudioNode destination, unsigned long output, unsigned long input);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioParam] void disconnect(AudioParam destination);
+    [RaisesException, MeasureAs=AudioNodeDisconnectFromAudioParam] void disconnect(AudioParam destination, unsigned long output);
     readonly attribute AudioContext  context;
     readonly attribute unsigned long numberOfInputs;
     readonly attribute unsigned long numberOfOutputs;
diff --git a/modules/webaudio/AudioParam.idl b/modules/webaudio/AudioParam.idl
index 7b499f4..02501ec 100644
--- a/modules/webaudio/AudioParam.idl
+++ b/modules/webaudio/AudioParam.idl
@@ -28,24 +28,23 @@
 
 [
     GarbageCollected,
-    Conditional=WEB_AUDIO,
 ] interface AudioParam {
     attribute float value;
     readonly attribute float defaultValue;
 
     // Parameter automation.
-    [RaisesException] void setValueAtTime(float value, double time);
-    [RaisesException] void linearRampToValueAtTime(float value, double time);
-    [RaisesException] void exponentialRampToValueAtTime(float value, double time);
+    [RaisesException, MeasureAs=AudioParamSetValueAtTime] AudioParam setValueAtTime(float value, double time);
+    [RaisesException, MeasureAs=AudioParamLinearRampToValueAtTime] AudioParam linearRampToValueAtTime(float value, double time);
+    [RaisesException, MeasureAs=AudioParamExponentialRampToValueAtTime] AudioParam exponentialRampToValueAtTime(float value, double time);
 
     // Exponentially approach the target with a rate having the given time constant.
-    [RaisesException] void setTargetAtTime(float target, double time, double timeConstant);
+    [RaisesException, MeasureAs=AudioParamSetTargetAtTime] AudioParam 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.
-    [RaisesException] void setValueCurveAtTime(Float32Array values, double time, double duration);
+    [RaisesException, MeasureAs=AudioParamSetValueCurveAtTime] AudioParam setValueCurveAtTime(Float32Array values, double time, double duration);
 
     // Cancels all scheduled parameter changes with times greater than or equal to startTime.
-    [RaisesException] void cancelScheduledValues(double startTime);
+    [RaisesException, MeasureAs=AudioParamCancelScheduledValues] AudioParam cancelScheduledValues(double startTime);
 
 };
diff --git a/modules/webaudio/AudioProcessingEvent.idl b/modules/webaudio/AudioProcessingEvent.idl
index 2b81282..b897a7f 100644
--- a/modules/webaudio/AudioProcessingEvent.idl
+++ b/modules/webaudio/AudioProcessingEvent.idl
@@ -22,9 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface AudioProcessingEvent : Event {
+interface AudioProcessingEvent : Event {
     readonly attribute double playbackTime;
     readonly attribute AudioBuffer inputBuffer;
     readonly attribute AudioBuffer outputBuffer;
diff --git a/modules/webaudio/AudioSourceNode.idl b/modules/webaudio/AudioSourceNode.idl
index 7a69b79..04bc6ee 100644
--- a/modules/webaudio/AudioSourceNode.idl
+++ b/modules/webaudio/AudioSourceNode.idl
@@ -28,6 +28,6 @@
 
 [
     NoInterfaceObject,
-    Conditional=WEB_AUDIO
+    DependentLifetime
 ] interface AudioSourceNode : AudioNode {
 };
diff --git a/modules/webaudio/BiquadFilterNode.idl b/modules/webaudio/BiquadFilterNode.idl
index 9783ab2..0a16aab 100644
--- a/modules/webaudio/BiquadFilterNode.idl
+++ b/modules/webaudio/BiquadFilterNode.idl
@@ -33,9 +33,7 @@
     "allpass"
 };
 
-[
-    Conditional=WEB_AUDIO
-] interface BiquadFilterNode : AudioNode {
+interface BiquadFilterNode : AudioNode {
     attribute BiquadFilterType type;
 
     readonly attribute AudioParam frequency; // in Hertz
diff --git a/modules/webaudio/ChannelMergerNode.idl b/modules/webaudio/ChannelMergerNode.idl
index e79ce5a..5d27dde 100644
--- a/modules/webaudio/ChannelMergerNode.idl
+++ b/modules/webaudio/ChannelMergerNode.idl
@@ -26,7 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface ChannelMergerNode : AudioNode {
+interface ChannelMergerNode : AudioNode {
 };
diff --git a/modules/webaudio/ChannelSplitterNode.idl b/modules/webaudio/ChannelSplitterNode.idl
index eabfba1..413ee74 100644
--- a/modules/webaudio/ChannelSplitterNode.idl
+++ b/modules/webaudio/ChannelSplitterNode.idl
@@ -22,7 +22,5 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface ChannelSplitterNode : AudioNode {
+interface ChannelSplitterNode : AudioNode {
 };
diff --git a/modules/webaudio/ConvolverNode.idl b/modules/webaudio/ConvolverNode.idl
index fe0544b..e797e5c 100644
--- a/modules/webaudio/ConvolverNode.idl
+++ b/modules/webaudio/ConvolverNode.idl
@@ -23,9 +23,7 @@
  */
 
 // A linear convolution effect
-[
-    Conditional=WEB_AUDIO
-] interface ConvolverNode : AudioNode {
-    [RaisesException=Setter] attribute AudioBuffer buffer;
+interface ConvolverNode : AudioNode {
+    [RaisesException=Setter] attribute AudioBuffer? buffer;
     attribute boolean normalize;
 };
diff --git a/modules/webaudio/DelayNode.idl b/modules/webaudio/DelayNode.idl
index b5cb6eb..a6a0f18 100644
--- a/modules/webaudio/DelayNode.idl
+++ b/modules/webaudio/DelayNode.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface DelayNode : AudioNode {
+interface DelayNode : AudioNode {
     readonly attribute AudioParam delayTime;
 };
diff --git a/modules/webaudio/DynamicsCompressorNode.idl b/modules/webaudio/DynamicsCompressorNode.idl
index 6be99d0..b6a6633 100644
--- a/modules/webaudio/DynamicsCompressorNode.idl
+++ b/modules/webaudio/DynamicsCompressorNode.idl
@@ -22,9 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface DynamicsCompressorNode : AudioNode {
+interface DynamicsCompressorNode : AudioNode {
     readonly attribute AudioParam threshold; // in Decibels
     readonly attribute AudioParam knee; // in Decibels
     readonly attribute AudioParam ratio; // unit-less
diff --git a/modules/webaudio/GainNode.idl b/modules/webaudio/GainNode.idl
index 0f1a88e..60f5fdd 100644
--- a/modules/webaudio/GainNode.idl
+++ b/modules/webaudio/GainNode.idl
@@ -22,9 +22,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface GainNode : AudioNode {
+interface GainNode : AudioNode {
     // FIXME: eventually it will be interesting to remove the readonly restriction, but need to properly deal with thread safety here.
     readonly attribute AudioParam gain;
 };
diff --git a/modules/webaudio/IIRFilterNode.idl b/modules/webaudio/IIRFilterNode.idl
new file mode 100644
index 0000000..313e516
--- /dev/null
+++ b/modules/webaudio/IIRFilterNode.idl
@@ -0,0 +1,9 @@
+// Copyright 2016 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.
+
+interface IIRFilterNode : AudioNode {
+    [RaisesException] void getFrequencyResponse(Float32Array frequencyHz,
+                                                Float32Array magResponse,
+                                                Float32Array phaseResponse);
+};
\ No newline at end of file
diff --git a/modules/webaudio/MediaElementAudioSourceNode.idl b/modules/webaudio/MediaElementAudioSourceNode.idl
index 196eddd..8f96e41 100644
--- a/modules/webaudio/MediaElementAudioSourceNode.idl
+++ b/modules/webaudio/MediaElementAudioSourceNode.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface MediaElementAudioSourceNode : AudioSourceNode {
+interface MediaElementAudioSourceNode : AudioSourceNode {
     readonly attribute HTMLMediaElement mediaElement;
 };
diff --git a/modules/webaudio/MediaStreamAudioDestinationNode.idl b/modules/webaudio/MediaStreamAudioDestinationNode.idl
index 6bca078..971e607 100644
--- a/modules/webaudio/MediaStreamAudioDestinationNode.idl
+++ b/modules/webaudio/MediaStreamAudioDestinationNode.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface MediaStreamAudioDestinationNode : AudioNode {
+interface MediaStreamAudioDestinationNode : AudioNode {
     readonly attribute MediaStream stream;
 };
diff --git a/modules/webaudio/MediaStreamAudioSourceNode.idl b/modules/webaudio/MediaStreamAudioSourceNode.idl
index 78f29df..6da028b 100644
--- a/modules/webaudio/MediaStreamAudioSourceNode.idl
+++ b/modules/webaudio/MediaStreamAudioSourceNode.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface MediaStreamAudioSourceNode : AudioSourceNode {
+interface MediaStreamAudioSourceNode : AudioSourceNode {
     readonly attribute MediaStream mediaStream;
 };
diff --git a/modules/webaudio/OfflineAudioCompletionEvent.idl b/modules/webaudio/OfflineAudioCompletionEvent.idl
index a3fbc72..6529fac 100644
--- a/modules/webaudio/OfflineAudioCompletionEvent.idl
+++ b/modules/webaudio/OfflineAudioCompletionEvent.idl
@@ -22,8 +22,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    Conditional=WEB_AUDIO
-] interface OfflineAudioCompletionEvent : Event {
+interface OfflineAudioCompletionEvent : Event {
     readonly attribute AudioBuffer renderedBuffer;
 };
diff --git a/modules/webaudio/OfflineAudioContext.idl b/modules/webaudio/OfflineAudioContext.idl
index 4c225d9..1f91f8f 100644
--- a/modules/webaudio/OfflineAudioContext.idl
+++ b/modules/webaudio/OfflineAudioContext.idl
@@ -23,7 +23,6 @@
  */
 
 [
-    Conditional=WEB_AUDIO,
     Constructor(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate),
     ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
@@ -31,5 +30,7 @@
 ] interface OfflineAudioContext : AudioContext {
     // Offline rendering
     attribute EventHandler oncomplete;
-    [CallWith=ScriptState,ImplementedAs=startOfflineRendering] Promise<AudioBuffer> startRendering();
+    [CallWith=ScriptState, ImplementedAs=startOfflineRendering, MeasureAs=OfflineAudioContextStartRendering] Promise<AudioBuffer> startRendering();
+    [CallWith=ScriptState, ImplementedAs=suspendContext, MeasureAs=OfflineAudioContextSuspend] Promise<void> suspend(double suspendTime);
+    [CallWith=ScriptState, ImplementedAs=resumeContext, MeasureAs=OfflineAudioContextResume] Promise<void> resume();
 };
diff --git a/modules/webaudio/OscillatorNode.idl b/modules/webaudio/OscillatorNode.idl
index 203abfe..0440252 100644
--- a/modules/webaudio/OscillatorNode.idl
+++ b/modules/webaudio/OscillatorNode.idl
@@ -31,9 +31,7 @@
 };
 
 // OscillatorNode is an audio generator of periodic waveforms.
-[
-    Conditional=WEB_AUDIO,
-] interface OscillatorNode : AudioSourceNode {
+interface OscillatorNode : AudioSourceNode {
 
     [RaisesException=Setter] attribute OscillatorType type;
 
diff --git a/modules/webaudio/PannerNode.idl b/modules/webaudio/PannerNode.idl
index 4cb9ae5..d69f4d6 100644
--- a/modules/webaudio/PannerNode.idl
+++ b/modules/webaudio/PannerNode.idl
@@ -35,7 +35,6 @@
 
 [
     NoInterfaceObject,
-    Conditional=WEB_AUDIO,
 ] interface PannerNode : AudioNode {
     // Default model for stereo is equalpower.
     attribute PanningModelType panningModel;
diff --git a/modules/webaudio/PeriodicWave.idl b/modules/webaudio/PeriodicWave.idl
index 46a5474..bf70cbd 100644
--- a/modules/webaudio/PeriodicWave.idl
+++ b/modules/webaudio/PeriodicWave.idl
@@ -24,8 +24,7 @@
 
 // PeriodicWave represents a periodic audio waveform given by its Fourier coefficients.
 [
-    GarbageCollected,
-    Conditional=WEB_AUDIO
+    GarbageCollected
 ] interface PeriodicWave {
 
 };
diff --git a/modules/webaudio/ScriptProcessorNode.idl b/modules/webaudio/ScriptProcessorNode.idl
index bc000b9..382e384 100644
--- a/modules/webaudio/ScriptProcessorNode.idl
+++ b/modules/webaudio/ScriptProcessorNode.idl
@@ -23,9 +23,7 @@
  */
 
 // For real-time audio stream synthesis/processing in JavaScript
-[
-    Conditional=WEB_AUDIO
-] interface ScriptProcessorNode : AudioNode {
+interface ScriptProcessorNode : AudioNode {
     // Rendering callback
     attribute EventHandler onaudioprocess;
 
diff --git a/modules/webaudio/StereoPannerNode.idl b/modules/webaudio/StereoPannerNode.idl
index 74f2354..d0a7776 100644
--- a/modules/webaudio/StereoPannerNode.idl
+++ b/modules/webaudio/StereoPannerNode.idl
@@ -4,7 +4,6 @@
 
 [
     NoInterfaceObject,
-    Conditional=WEB_AUDIO
 ] interface StereoPannerNode : AudioNode {
 
     readonly attribute AudioParam pan;
diff --git a/modules/webaudio/WaveShaperNode.idl b/modules/webaudio/WaveShaperNode.idl
index 5028567..aeca5fb 100644
--- a/modules/webaudio/WaveShaperNode.idl
+++ b/modules/webaudio/WaveShaperNode.idl
@@ -28,9 +28,7 @@
     "4x"
 };
 
-[
-    Conditional=WEB_AUDIO
-] interface WaveShaperNode : AudioNode {
-    [RaisesException=Setter] attribute Float32Array curve;
+interface WaveShaperNode : AudioNode {
+    [RaisesException=Setter] attribute Float32Array? curve;
     attribute OverSampleType oversample;
 };
diff --git a/modules/webaudio/WindowWebAudio.idl b/modules/webaudio/WindowWebAudio.idl
index 01e4618..0a5bb07 100644
--- a/modules/webaudio/WindowWebAudio.idl
+++ b/modules/webaudio/WindowWebAudio.idl
@@ -5,8 +5,8 @@
 [
     ImplementedAs=DOMWindowWebAudio,
 ] partial interface Window {
-    [MeasureAs=AudioContext, Conditional=WEB_AUDIO, RuntimeEnabled=WebAudio] attribute AudioContextConstructor AudioContext;
-    [MeasureAs=OfflineAudioContext, Conditional=WEB_AUDIO, RuntimeEnabled=WebAudio] attribute OfflineAudioContextConstructor OfflineAudioContext;
-    [DeprecateAs=PrefixedAudioContext, Conditional=WEB_AUDIO, RuntimeEnabled=WebAudio] attribute AudioContextConstructor webkitAudioContext;
-    [DeprecateAs=PrefixedOfflineAudioContext, Conditional=WEB_AUDIO, RuntimeEnabled=WebAudio] attribute OfflineAudioContextConstructor webkitOfflineAudioContext;
+    [MeasureAs=AudioContext] attribute AudioContextConstructor AudioContext;
+    [MeasureAs=OfflineAudioContext] attribute OfflineAudioContextConstructor OfflineAudioContext;
+    [DeprecateAs=PrefixedAudioContext] attribute AudioContextConstructor webkitAudioContext;
+    [DeprecateAs=PrefixedOfflineAudioContext] attribute OfflineAudioContextConstructor webkitOfflineAudioContext;
 };
diff --git a/modules/webgl/ANGLEInstancedArrays.idl b/modules/webgl/ANGLEInstancedArrays.idl
index 217396c..eb8853a 100644
--- a/modules/webgl/ANGLEInstancedArrays.idl
+++ b/modules/webgl/ANGLEInstancedArrays.idl
@@ -31,8 +31,7 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface ANGLEInstancedArrays {
     const unsigned long VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
diff --git a/modules/webgl/CHROMIUMSubscribeUniform.idl b/modules/webgl/CHROMIUMSubscribeUniform.idl
index 3ae4f0e..16b6f28 100644
--- a/modules/webgl/CHROMIUMSubscribeUniform.idl
+++ b/modules/webgl/CHROMIUMSubscribeUniform.idl
@@ -7,8 +7,7 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface CHROMIUMSubscribeUniform {
     const GLenum SUBSCRIBED_VALUES_BUFFER_CHROMIUM =      0x924B;
diff --git a/modules/webgl/CHROMIUMValuebuffer.idl b/modules/webgl/CHROMIUMValuebuffer.idl
index 82b4003..a7277aa 100644
--- a/modules/webgl/CHROMIUMValuebuffer.idl
+++ b/modules/webgl/CHROMIUMValuebuffer.idl
@@ -4,6 +4,6 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface CHROMIUMValuebuffer {
 };
diff --git a/modules/webgl/EXTBlendMinMax.idl b/modules/webgl/EXTBlendMinMax.idl
index fbf002c..773c314 100644
--- a/modules/webgl/EXTBlendMinMax.idl
+++ b/modules/webgl/EXTBlendMinMax.idl
@@ -5,8 +5,7 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface EXTBlendMinMax {
     const unsigned long MIN_EXT              = 0x8007;
diff --git a/modules/webgl/EXTColorBufferFloat.idl b/modules/webgl/EXTColorBufferFloat.idl
new file mode 100644
index 0000000..f528ec7
--- /dev/null
+++ b/modules/webgl/EXTColorBufferFloat.idl
@@ -0,0 +1,10 @@
+// Copyright 2015 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,
+    GarbageCollected,
+    SetWrapperReferenceFrom=canvas,
+] interface EXTColorBufferFloat {
+};
diff --git a/modules/webgl/EXTDisjointTimerQuery.idl b/modules/webgl/EXTDisjointTimerQuery.idl
new file mode 100644
index 0000000..6da8e5b
--- /dev/null
+++ b/modules/webgl/EXTDisjointTimerQuery.idl
@@ -0,0 +1,29 @@
+// Copyright 2015 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.
+
+typedef unsigned long long GLuint64EXT;
+
+[
+    DoNotCheckConstants,
+    NoInterfaceObject,
+    GarbageCollected,
+    SetWrapperReferenceFrom=canvas,
+] interface EXTDisjointTimerQuery {
+    const GLenum QUERY_COUNTER_BITS_EXT      = 0x8864;
+    const GLenum CURRENT_QUERY_EXT           = 0x8865;
+    const GLenum QUERY_RESULT_EXT            = 0x8866;
+    const GLenum QUERY_RESULT_AVAILABLE_EXT  = 0x8867;
+    const GLenum TIME_ELAPSED_EXT            = 0x88BF;
+    const GLenum TIMESTAMP_EXT               = 0x8E28;
+    const GLenum GPU_DISJOINT_EXT            = 0x8FBB;
+
+    WebGLTimerQueryEXT createQueryEXT();
+    void deleteQueryEXT([Default=Undefined] WebGLTimerQueryEXT? query);
+    boolean isQueryEXT([Default=Undefined] WebGLTimerQueryEXT? query);
+    void beginQueryEXT(GLenum target, [Default=Undefined] WebGLTimerQueryEXT? query);
+    void endQueryEXT(GLenum target);
+    void queryCounterEXT([Default=Undefined] WebGLTimerQueryEXT? query, GLenum target);
+    [CallWith=ScriptState] any getQueryEXT(GLenum target, GLenum pname);
+    [CallWith=ScriptState] any getQueryObjectEXT([Default=Undefined] WebGLTimerQueryEXT? query, GLenum pname);
+};
diff --git a/modules/webgl/EXTFragDepth.idl b/modules/webgl/EXTFragDepth.idl
index a91c7ab..caadf78 100644
--- a/modules/webgl/EXTFragDepth.idl
+++ b/modules/webgl/EXTFragDepth.idl
@@ -25,7 +25,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface EXTFragDepth {
 };
diff --git a/modules/webgl/EXTShaderTextureLOD.idl b/modules/webgl/EXTShaderTextureLOD.idl
index a8103b0..5c0b9eb 100644
--- a/modules/webgl/EXTShaderTextureLOD.idl
+++ b/modules/webgl/EXTShaderTextureLOD.idl
@@ -4,7 +4,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface EXTShaderTextureLOD {
 };
diff --git a/modules/webgl/EXTTextureFilterAnisotropic.idl b/modules/webgl/EXTTextureFilterAnisotropic.idl
index 33ab206..5c08b8b 100644
--- a/modules/webgl/EXTTextureFilterAnisotropic.idl
+++ b/modules/webgl/EXTTextureFilterAnisotropic.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface EXTTextureFilterAnisotropic {
     const unsigned long TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
diff --git a/modules/webgl/EXTsRGB.idl b/modules/webgl/EXTsRGB.idl
index e4545e5..b8af673 100644
--- a/modules/webgl/EXTsRGB.idl
+++ b/modules/webgl/EXTsRGB.idl
@@ -5,7 +5,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface EXTsRGB {
     const unsigned long SRGB_EXT                                     = 0x8C40;
diff --git a/modules/webgl/OESElementIndexUint.idl b/modules/webgl/OESElementIndexUint.idl
index 2fda077..6c8f5c6 100644
--- a/modules/webgl/OESElementIndexUint.idl
+++ b/modules/webgl/OESElementIndexUint.idl
@@ -25,7 +25,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESElementIndexUint {
 };
diff --git a/modules/webgl/OESStandardDerivatives.idl b/modules/webgl/OESStandardDerivatives.idl
index 19e9367..bb64a4c 100644
--- a/modules/webgl/OESStandardDerivatives.idl
+++ b/modules/webgl/OESStandardDerivatives.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESStandardDerivatives {
     const unsigned long FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
diff --git a/modules/webgl/OESTextureFloat.idl b/modules/webgl/OESTextureFloat.idl
index 5ccdca0..fe24758 100644
--- a/modules/webgl/OESTextureFloat.idl
+++ b/modules/webgl/OESTextureFloat.idl
@@ -25,7 +25,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESTextureFloat {
 };
diff --git a/modules/webgl/OESTextureFloatLinear.idl b/modules/webgl/OESTextureFloatLinear.idl
index bb39e3d..0c305b7 100644
--- a/modules/webgl/OESTextureFloatLinear.idl
+++ b/modules/webgl/OESTextureFloatLinear.idl
@@ -25,7 +25,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESTextureFloatLinear {
 };
diff --git a/modules/webgl/OESTextureHalfFloat.idl b/modules/webgl/OESTextureHalfFloat.idl
index 062b1ca..1a9ebf3 100644
--- a/modules/webgl/OESTextureHalfFloat.idl
+++ b/modules/webgl/OESTextureHalfFloat.idl
@@ -28,7 +28,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESTextureHalfFloat {
     const GLenum HALF_FLOAT_OES                 = 0x8D61;
diff --git a/modules/webgl/OESTextureHalfFloatLinear.idl b/modules/webgl/OESTextureHalfFloatLinear.idl
index 7e78d0e..7c147d9 100644
--- a/modules/webgl/OESTextureHalfFloatLinear.idl
+++ b/modules/webgl/OESTextureHalfFloatLinear.idl
@@ -25,7 +25,7 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESTextureHalfFloatLinear {
 };
diff --git a/modules/webgl/OESVertexArrayObject.idl b/modules/webgl/OESVertexArrayObject.idl
index e2751cd..ebe9285 100644
--- a/modules/webgl/OESVertexArrayObject.idl
+++ b/modules/webgl/OESVertexArrayObject.idl
@@ -26,14 +26,13 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface OESVertexArrayObject {
     const unsigned long VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
     WebGLVertexArrayObjectOES createVertexArrayOES();
-    void deleteVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
+    [CallWith=ScriptState] void deleteVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
     boolean isVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
-    void bindVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
+    [CallWith=ScriptState] void bindVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
 };
diff --git a/modules/webgl/PRESUBMIT.py b/modules/webgl/PRESUBMIT.py
new file mode 100644
index 0000000..923a26b
--- /dev/null
+++ b/modules/webgl/PRESUBMIT.py
@@ -0,0 +1,41 @@
+# Copyright (c) 2016 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.
+
+"""Top-level presubmit script for gpu.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into depot_tools.
+"""
+
+
+import re
+
+
+def PostUploadHook(cl, change, output_api):
+    """git cl upload will call this hook after the issue is created/modified.
+
+    This hook adds extra try bots list to the CL description in order to run
+    extra GPU tests in addition to CQ try bots.
+    """
+    rietveld_obj = cl.RpcServer()
+    issue = cl.issue
+    description = rietveld_obj.get_description(issue)
+    if re.search(r'^CQ_INCLUDE_TRYBOTS=.*', description, re.M | re.I):
+        return []
+
+    bots = [
+        'tryserver.chromium.win:win_optional_gpu_tests_rel',
+        'tryserver.chromium.mac:mac_optional_gpu_tests_rel',
+    ]
+
+    results = []
+    new_description = description
+    new_description += '\nCQ_INCLUDE_TRYBOTS=%s' % ';'.join(bots)
+    results.append(output_api.PresubmitNotifyResult(
+        'Automatically added optional GPU tests to run on CQ.'))
+
+    if new_description != description:
+        rietveld_obj.update_description(issue, new_description)
+
+    return results
diff --git a/modules/webgl/WebGL2RenderingContext.idl b/modules/webgl/WebGL2RenderingContext.idl
index 164b8b7..a3387bf 100644
--- a/modules/webgl/WebGL2RenderingContext.idl
+++ b/modules/webgl/WebGL2RenderingContext.idl
@@ -6,7 +6,6 @@
     RuntimeEnabled=UnsafeES3APIs,
     DoNotCheckConstants,
     SetWrapperReferenceFrom=canvas,
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface WebGL2RenderingContext { };
 WebGL2RenderingContext implements WebGLRenderingContextBase;
diff --git a/modules/webgl/WebGL2RenderingContextBase.idl b/modules/webgl/WebGL2RenderingContextBase.idl
index 928b3a3..cb2eaf0 100644
--- a/modules/webgl/WebGL2RenderingContextBase.idl
+++ b/modules/webgl/WebGL2RenderingContextBase.idl
@@ -297,20 +297,18 @@
     const GLenum MAX_ELEMENT_INDEX                             = 0x8D6B;
     const GLenum NUM_SAMPLE_COUNTS                             = 0x9380;
     const GLenum TEXTURE_IMMUTABLE_LEVELS                      = 0x82DF;
-
-    // FIXME: This currently differs from the WebGL2 spec.
-    const GLuint TIMEOUT_IGNORED                               = 0xFFFFFFFF;
+    const GLint TIMEOUT_IGNORED                                = -1;
 
     /* WebGL-specific enums */
     const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL                 = 0x9247;
 
     /* Buffer objects */
     void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
-    void getBufferSubData(GLenum target, GLintptr offset, ArrayBuffer returnedData);
+    void getBufferSubData(GLenum target, GLintptr offset, ArrayBuffer? returnedData);
 
     /* Framebuffer objects */
     void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-    void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture texture, GLint level, GLint layer);
+    [CallWith=ScriptState] void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level, GLint layer);
     [CallWith=ScriptState] any getInternalformatParameter(GLenum target, GLenum internalformat, GLenum pname);
     void invalidateFramebuffer(GLenum target, sequence<GLenum> attachments);
     void invalidateSubFramebuffer (GLenum target, sequence<GLenum> attachments, GLint x, GLint y, GLsizei width, GLsizei height);
@@ -320,14 +318,17 @@
     void renderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
 
     /* Texture objects */
+    void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLintptr offset);
     void texStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
     void texStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
     void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, ImageData? data);
+    void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLintptr offset);
+    void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, ArrayBufferView? pixels);
+    void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, ImageData? data);
     [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLImageElement? image);
     [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLCanvasElement? canvas);
     [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, HTMLVideoElement? video);
+    [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLenum format, GLenum type, ImageBitmap? bitmap);
     void copyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
     void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, ArrayBufferView data);
     void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, ArrayBufferView data);
@@ -340,10 +341,14 @@
     void uniform2ui(WebGLUniformLocation? location, GLuint v0, GLuint v1);
     void uniform3ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2);
     void uniform4ui(WebGLUniformLocation? location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
-    void uniform1uiv(WebGLUniformLocation? location, sequence<GLuint> value);
-    void uniform2uiv(WebGLUniformLocation? location, sequence<GLuint> value);
-    void uniform3uiv(WebGLUniformLocation? location, sequence<GLuint> value);
-    void uniform4uiv(WebGLUniformLocation? location, sequence<GLuint> value);
+    void uniform1uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v);
+    void uniform1uiv(WebGLUniformLocation? location, sequence<GLuint> v);
+    void uniform2uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v);
+    void uniform2uiv(WebGLUniformLocation? location, sequence<GLuint> v);
+    void uniform3uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v);
+    void uniform3uiv(WebGLUniformLocation? location, sequence<GLuint> v);
+    void uniform4uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v);
+    void uniform4uiv(WebGLUniformLocation? location, sequence<GLuint> v);
     void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
     void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
     void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
@@ -358,8 +363,10 @@
     void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
 
     void vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
+    void vertexAttribI4iv(GLuint index, Int32Array v);
     void vertexAttribI4iv(GLuint index, sequence<GLint> v);
     void vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+    void vertexAttribI4uiv(GLuint index, Uint32Array v);
     void vertexAttribI4uiv(GLuint index, sequence<GLuint> v);
     void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
 
@@ -401,10 +408,10 @@
     WebGLSync fenceSync(GLenum condition, GLbitfield flags);
     GLboolean isSync(WebGLSync? sync);
     void deleteSync(WebGLSync? sync);
-    GLenum clientWaitSync(WebGLSync? sync, GLbitfield flags, GLuint timeout);
-    void waitSync(WebGLSync? sync, GLbitfield flags, GLuint timeout);
+    GLenum clientWaitSync(WebGLSync? sync, GLbitfield flags, GLint64 timeout);
+    void waitSync(WebGLSync? sync, GLbitfield flags, GLint64 timeout);
 
-    [CallWith=ScriptState] any getSyncParameter(WebGLSync sync, GLenum pname);
+    [CallWith=ScriptState] any getSyncParameter(WebGLSync? sync, GLenum pname);
 
     /* Transform Feedback */
     WebGLTransformFeedback createTransformFeedback();
@@ -423,16 +430,19 @@
     void bindBufferRange(GLenum target, GLuint index, WebGLBuffer? buffer, GLintptr offset, GLsizeiptr size);
     [CallWith=ScriptState] any getIndexedParameter(GLenum target, GLuint index);
     sequence<GLuint>? getUniformIndices(WebGLProgram? program, sequence<DOMString> uniformNames);
-    sequence<GLint>? getActiveUniforms(WebGLProgram? program, sequence<GLuint> uniformIndices, GLenum pname);
+    [CallWith=ScriptState] any getActiveUniforms(WebGLProgram? program, sequence<GLuint> uniformIndices, GLenum pname);
     GLuint getUniformBlockIndex(WebGLProgram? program, DOMString uniformBlockName);
     [CallWith=ScriptState] any getActiveUniformBlockParameter(WebGLProgram? program, GLuint uniformBlockIndex, GLenum pname);
-    DOMString getActiveUniformBlockName(WebGLProgram? program, GLuint uniformBlockIndex);
+    DOMString? getActiveUniformBlockName(WebGLProgram? program, GLuint uniformBlockIndex);
     void uniformBlockBinding(WebGLProgram? program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
 
     /* Vertex Array Objects */
     WebGLVertexArrayObject createVertexArray();
-    void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
+    [CallWith=ScriptState] void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
     GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
-    void bindVertexArray(WebGLVertexArrayObject? vertexArray);
+    [CallWith=ScriptState] void bindVertexArray(WebGLVertexArrayObject? vertexArray);
+
+    /* Reading */
+    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset);
 };
 WebGL2RenderingContextBase implements WebGLRenderingContextBase;
diff --git a/modules/webgl/WebGLActiveInfo.idl b/modules/webgl/WebGLActiveInfo.idl
index f4aa739..e22a5bd 100644
--- a/modules/webgl/WebGLActiveInfo.idl
+++ b/modules/webgl/WebGLActiveInfo.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLActiveInfo {
     readonly attribute long size;
     readonly attribute unsigned long type;
diff --git a/modules/webgl/WebGLBuffer.idl b/modules/webgl/WebGLBuffer.idl
index aecd6b0..826f3a0 100644
--- a/modules/webgl/WebGLBuffer.idl
+++ b/modules/webgl/WebGLBuffer.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLBuffer {
 };
diff --git a/modules/webgl/WebGLCompressedTextureASTC.idl b/modules/webgl/WebGLCompressedTextureASTC.idl
new file mode 100644
index 0000000..43db7d6
--- /dev/null
+++ b/modules/webgl/WebGLCompressedTextureASTC.idl
@@ -0,0 +1,40 @@
+// Copyright 2015 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,
+    DoNotCheckConstants,
+    GarbageCollected,
+    SetWrapperReferenceFrom=canvas,
+] interface WebGLCompressedTextureASTC {
+    /* Compressed Texture Formats */
+    const unsigned long COMPRESSED_RGBA_ASTC_4x4_KHR           = 0x93B0;
+    const unsigned long COMPRESSED_RGBA_ASTC_5x4_KHR           = 0x93B1;
+    const unsigned long COMPRESSED_RGBA_ASTC_5x5_KHR           = 0x93B2;
+    const unsigned long COMPRESSED_RGBA_ASTC_6x5_KHR           = 0x93B3;
+    const unsigned long COMPRESSED_RGBA_ASTC_6x6_KHR           = 0x93B4;
+    const unsigned long COMPRESSED_RGBA_ASTC_8x5_KHR           = 0x93B5;
+    const unsigned long COMPRESSED_RGBA_ASTC_8x6_KHR           = 0x93B6;
+    const unsigned long COMPRESSED_RGBA_ASTC_8x8_KHR           = 0x93B7;
+    const unsigned long COMPRESSED_RGBA_ASTC_10x5_KHR          = 0x93B8;
+    const unsigned long COMPRESSED_RGBA_ASTC_10x6_KHR          = 0x93B9;
+    const unsigned long COMPRESSED_RGBA_ASTC_10x8_KHR          = 0x93BA;
+    const unsigned long COMPRESSED_RGBA_ASTC_10x10_KHR         = 0x93BB;
+    const unsigned long COMPRESSED_RGBA_ASTC_12x10_KHR         = 0x93BC;
+    const unsigned long COMPRESSED_RGBA_ASTC_12x12_KHR         = 0x93BD;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR   = 0x93D0;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR   = 0x93D1;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR   = 0x93D2;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR   = 0x93D3;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR   = 0x93D4;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR   = 0x93D5;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR   = 0x93D6;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR   = 0x93D7;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR  = 0x93D8;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR  = 0x93D9;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR  = 0x93DA;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 0x93DB;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 0x93DC;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 0x93DD;
+};
diff --git a/modules/webgl/WebGLCompressedTextureATC.idl b/modules/webgl/WebGLCompressedTextureATC.idl
index 25355c2..1bb3fe7 100644
--- a/modules/webgl/WebGLCompressedTextureATC.idl
+++ b/modules/webgl/WebGLCompressedTextureATC.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLCompressedTextureATC {
     /* Compressed Texture Formats */
diff --git a/modules/webgl/WebGLCompressedTextureETC1.idl b/modules/webgl/WebGLCompressedTextureETC1.idl
index db8ed21..65f8321 100644
--- a/modules/webgl/WebGLCompressedTextureETC1.idl
+++ b/modules/webgl/WebGLCompressedTextureETC1.idl
@@ -5,7 +5,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLCompressedTextureETC1 {
     /* Compressed Texture Formats */
diff --git a/modules/webgl/WebGLCompressedTexturePVRTC.idl b/modules/webgl/WebGLCompressedTexturePVRTC.idl
index 731bab6..29c09ff 100644
--- a/modules/webgl/WebGLCompressedTexturePVRTC.idl
+++ b/modules/webgl/WebGLCompressedTexturePVRTC.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLCompressedTexturePVRTC {
     /* Compressed Texture Formats */
diff --git a/modules/webgl/WebGLCompressedTextureS3TC.idl b/modules/webgl/WebGLCompressedTextureS3TC.idl
index e5465c3..36f76b7 100644
--- a/modules/webgl/WebGLCompressedTextureS3TC.idl
+++ b/modules/webgl/WebGLCompressedTextureS3TC.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLCompressedTextureS3TC {
     /* Compressed Texture Formats */
diff --git a/modules/webgl/WebGLDebugRendererInfo.idl b/modules/webgl/WebGLDebugRendererInfo.idl
index ac4f2e1..635f2ec 100644
--- a/modules/webgl/WebGLDebugRendererInfo.idl
+++ b/modules/webgl/WebGLDebugRendererInfo.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLDebugRendererInfo {
     const unsigned long UNMASKED_VENDOR_WEBGL = 0x9245;
diff --git a/modules/webgl/WebGLDebugShaders.idl b/modules/webgl/WebGLDebugShaders.idl
index 770c12d..9196da9 100644
--- a/modules/webgl/WebGLDebugShaders.idl
+++ b/modules/webgl/WebGLDebugShaders.idl
@@ -25,8 +25,7 @@
 
 [
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLDebugShaders {
     DOMString? getTranslatedShaderSource(WebGLShader? shader);
diff --git a/modules/webgl/WebGLDepthTexture.idl b/modules/webgl/WebGLDepthTexture.idl
index 773819b..d1b2ca9 100644
--- a/modules/webgl/WebGLDepthTexture.idl
+++ b/modules/webgl/WebGLDepthTexture.idl
@@ -26,7 +26,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLDepthTexture {
     const unsigned long UNSIGNED_INT_24_8_WEBGL = 0x84FA;
diff --git a/modules/webgl/WebGLDrawBuffers.idl b/modules/webgl/WebGLDrawBuffers.idl
index 0a907aa..b39138b 100644
--- a/modules/webgl/WebGLDrawBuffers.idl
+++ b/modules/webgl/WebGLDrawBuffers.idl
@@ -28,7 +28,7 @@
 [
     NoInterfaceObject,
     DoNotCheckConstants,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLDrawBuffers {
     const GLenum COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
diff --git a/modules/webgl/WebGLFramebuffer.idl b/modules/webgl/WebGLFramebuffer.idl
index 354f82f..b41a0d2 100644
--- a/modules/webgl/WebGLFramebuffer.idl
+++ b/modules/webgl/WebGLFramebuffer.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLFramebuffer {
 };
diff --git a/modules/webgl/WebGLLoseContext.idl b/modules/webgl/WebGLLoseContext.idl
index 8e3a5d2..bfcc898 100644
--- a/modules/webgl/WebGLLoseContext.idl
+++ b/modules/webgl/WebGLLoseContext.idl
@@ -25,8 +25,7 @@
 
 [
     NoInterfaceObject,
-    TypeChecking=Interface,
-    WillBeGarbageCollected,
+    GarbageCollected,
     SetWrapperReferenceFrom=canvas,
 ] interface WebGLLoseContext {
     void loseContext();
diff --git a/modules/webgl/WebGLProgram.idl b/modules/webgl/WebGLProgram.idl
index b637b22..10042da 100644
--- a/modules/webgl/WebGLProgram.idl
+++ b/modules/webgl/WebGLProgram.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLProgram {
 };
diff --git a/modules/webgl/WebGLQuery.idl b/modules/webgl/WebGLQuery.idl
index 257b911..725f0b9 100644
--- a/modules/webgl/WebGLQuery.idl
+++ b/modules/webgl/WebGLQuery.idl
@@ -4,6 +4,6 @@
 
 [
     RuntimeEnabled=UnsafeES3APIs,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface WebGLQuery {
-};
\ No newline at end of file
+};
diff --git a/modules/webgl/WebGLRenderbuffer.idl b/modules/webgl/WebGLRenderbuffer.idl
index 2e6792f..98fa819 100644
--- a/modules/webgl/WebGLRenderbuffer.idl
+++ b/modules/webgl/WebGLRenderbuffer.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLRenderbuffer {
 };
diff --git a/modules/webgl/WebGLRenderingContext.idl b/modules/webgl/WebGLRenderingContext.idl
index f0eb42f..20922a2 100644
--- a/modules/webgl/WebGLRenderingContext.idl
+++ b/modules/webgl/WebGLRenderingContext.idl
@@ -28,7 +28,6 @@
 [
     DoNotCheckConstants,
     SetWrapperReferenceFrom=canvas,
-    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface WebGLRenderingContext { };
 WebGLRenderingContext implements WebGLRenderingContextBase;
diff --git a/modules/webgl/WebGLRenderingContextBase.idl b/modules/webgl/WebGLRenderingContextBase.idl
index d0a3dd1..2bad45c 100644
--- a/modules/webgl/WebGLRenderingContextBase.idl
+++ b/modules/webgl/WebGLRenderingContextBase.idl
@@ -41,11 +41,10 @@
 typedef unrestricted float GLclampf;
 
 [
-    // FIXME: [DoNotCheckConstants] and [TypeChecking=Interface] should be applied
-    // to members and not need to be put on implementing interface
+    // FIXME: [DoNotCheckConstants] 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, // need to put on implementing interface
     WillBeGarbageCollected,
 ] interface WebGLRenderingContextBase {
 
@@ -474,12 +473,12 @@
     readonly attribute GLsizei drawingBufferHeight;
 
     void activeTexture(GLenum texture);
-    void attachShader(WebGLProgram? program, WebGLShader? shader);
+    [CallWith=ScriptState] void attachShader(WebGLProgram? program, WebGLShader? shader);
     void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name);
-    void bindBuffer(GLenum target, WebGLBuffer? buffer);
-    void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
-    void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
-    void bindTexture(GLenum target, WebGLTexture? texture);
+    [CallWith=ScriptState] void bindBuffer(GLenum target, WebGLBuffer? buffer);
+    [CallWith=ScriptState] void bindFramebuffer(GLenum target, WebGLFramebuffer? framebuffer);
+    [CallWith=ScriptState] void bindRenderbuffer(GLenum target, WebGLRenderbuffer? renderbuffer);
+    [CallWith=ScriptState] void bindTexture(GLenum target, WebGLTexture? texture);
     void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
     void blendEquation(GLenum mode);
     void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
@@ -490,7 +489,7 @@
     void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
     void bufferData(GLenum target, ArrayBufferView data, GLenum usage);
     void bufferData(GLenum target, ArrayBuffer? data, GLenum usage);
-    void bufferSubData(GLenum target, GLintptr offset, ArrayBufferView data);
+    void bufferSubData(GLenum target, GLintptr offset, [FlexibleArrayBufferView] ArrayBufferView data);
     void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer? data);
 
     GLenum checkFramebufferStatus(GLenum target);
@@ -502,9 +501,9 @@
     void compileShader(WebGLShader? shader);
 
     void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
-                              GLsizei width, GLsizei height, GLint border, ArrayBufferView? data);
+                              GLsizei width, GLsizei height, GLint border, ArrayBufferView data);
     void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
-                                 GLsizei width, GLsizei height, GLenum format, ArrayBufferView? data);
+                                 GLsizei width, GLsizei height, GLenum format, ArrayBufferView data);
 
     void copyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
     void copyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
@@ -528,7 +527,7 @@
     void depthFunc(GLenum func);
     void depthMask(GLboolean flag);
     void depthRange(GLclampf zNear, GLclampf zFar);
-    void detachShader(WebGLProgram? program, WebGLShader? shader);
+    [CallWith=ScriptState] void detachShader(WebGLProgram? program, WebGLShader? shader);
     void disable(GLenum cap);
     void disableVertexAttribArray(GLuint index);
     void drawArrays(GLenum mode, GLint first, GLsizei count);
@@ -538,8 +537,8 @@
     void enableVertexAttribArray(GLuint index);
     void finish();
     void flush();
-    void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
-    void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
+    [CallWith=ScriptState] void framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
+    [CallWith=ScriptState] void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
     void frontFace(GLenum mode);
     void generateMipmap(GLenum target);
 
@@ -581,7 +580,7 @@
 
     [CallWith=ScriptState] any getVertexAttrib(GLuint index, GLenum pname);
 
-    GLsizeiptr getVertexAttribOffset(GLuint index, GLenum pname);
+    GLintptr getVertexAttribOffset(GLuint index, GLenum pname);
 
     void hint(GLenum target, GLenum mode);
     GLboolean isBuffer(WebGLBuffer? buffer);
@@ -616,28 +615,31 @@
     // Supported forms:
     // FIXME: should be union type
     // https://www.khronos.org/bugzilla/show_bug.cgi?id=1172
-    [RaisesException] void texImage2D(
-        GLenum target, GLint level, GLenum internalformat,
+    void texImage2D(
+        GLenum target, GLint level, GLint internalformat,
         GLsizei width, GLsizei height, GLint border,
         GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texImage2D(
-        GLenum target, GLint level, GLenum internalformat,
+    void texImage2D(
+        GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, ImageData? pixels);
     [RaisesException] void texImage2D(
-        GLenum target, GLint level, GLenum internalformat,
+        GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLImageElement image);
     [RaisesException] void texImage2D(
-        GLenum target, GLint level, GLenum internalformat,
+        GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLCanvasElement canvas);
     [RaisesException] void texImage2D(
-        GLenum target, GLint level, GLenum internalformat,
+        GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texImage2D(
+        GLenum target, GLint level, GLint internalformat,
+        GLenum format, GLenum type, ImageBitmap bitmap);
 
-    [RaisesException] void texSubImage2D(
+    void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLsizei width, GLsizei height,
         GLenum format, GLenum type, ArrayBufferView? pixels);
-    [RaisesException] void texSubImage2D(
+    void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLenum format, GLenum type, ImageData? pixels);
     [RaisesException] void texSubImage2D(
@@ -649,30 +651,33 @@
     [RaisesException] void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texSubImage2D(
+        GLenum target, GLint level, GLint xoffset, GLint yoffset,
+        GLenum format, GLenum type, ImageBitmap bitmap);
 
     void uniform1f(WebGLUniformLocation? location, GLfloat x);
-    void uniform1fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform1fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v);
     void uniform1fv(WebGLUniformLocation? location, sequence<GLfloat> v);
     void uniform1i(WebGLUniformLocation? location, GLint x);
-    void uniform1iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform1iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v);
     void uniform1iv(WebGLUniformLocation? location, sequence<GLint> v);
     void uniform2f(WebGLUniformLocation? location, GLfloat x, GLfloat y);
-    void uniform2fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform2fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v);
     void uniform2fv(WebGLUniformLocation? location, sequence<GLfloat> v);
     void uniform2i(WebGLUniformLocation? location, GLint x, GLint y);
-    void uniform2iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform2iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v);
     void uniform2iv(WebGLUniformLocation? location, sequence<GLint> v);
     void uniform3f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z);
-    void uniform3fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform3fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v);
     void uniform3fv(WebGLUniformLocation? location, sequence<GLfloat> v);
     void uniform3i(WebGLUniformLocation? location, GLint x, GLint y, GLint z);
-    void uniform3iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform3iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v);
     void uniform3iv(WebGLUniformLocation? location, sequence<GLint> v);
     void uniform4f(WebGLUniformLocation? location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-    void uniform4fv(WebGLUniformLocation? location, Float32Array v);
+    void uniform4fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v);
     void uniform4fv(WebGLUniformLocation? location, sequence<GLfloat> v);
     void uniform4i(WebGLUniformLocation? location, GLint x, GLint y, GLint z, GLint w);
-    void uniform4iv(WebGLUniformLocation? location, Int32Array v);
+    void uniform4iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v);
     void uniform4iv(WebGLUniformLocation? location, sequence<GLint> v);
 
     void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
@@ -682,7 +687,7 @@
     void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
     void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array);
 
-    void useProgram(WebGLProgram? program);
+    [CallWith=ScriptState] void useProgram(WebGLProgram? program);
     void validateProgram(WebGLProgram? program);
 
     void vertexAttrib1f(GLuint indx, GLfloat x);
@@ -697,8 +702,8 @@
     void vertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
     void vertexAttrib4fv(GLuint indx, Float32Array values);
     void vertexAttrib4fv(GLuint indx, sequence<GLfloat> values);
-    void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized,
-                             GLsizei stride, GLintptr offset);
+    [CallWith=ScriptState] void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized,
+                                                    GLsizei stride, GLintptr offset);
 
     void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
 };
diff --git a/modules/webgl/WebGLSampler.idl b/modules/webgl/WebGLSampler.idl
index 565f3d6..30e10e2 100644
--- a/modules/webgl/WebGLSampler.idl
+++ b/modules/webgl/WebGLSampler.idl
@@ -4,6 +4,6 @@
 
 [
     RuntimeEnabled=UnsafeES3APIs,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface WebGLSampler {
-};
\ No newline at end of file
+};
diff --git a/modules/webgl/WebGLShader.idl b/modules/webgl/WebGLShader.idl
index 1d48fd6..2d17020 100644
--- a/modules/webgl/WebGLShader.idl
+++ b/modules/webgl/WebGLShader.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLShader {
 };
diff --git a/modules/webgl/WebGLShaderPrecisionFormat.idl b/modules/webgl/WebGLShaderPrecisionFormat.idl
index f9531c5..20364ed 100644
--- a/modules/webgl/WebGLShaderPrecisionFormat.idl
+++ b/modules/webgl/WebGLShaderPrecisionFormat.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLShaderPrecisionFormat {
     readonly attribute long rangeMin;
     readonly attribute long rangeMax;
diff --git a/modules/webgl/WebGLSync.idl b/modules/webgl/WebGLSync.idl
index a401e20..1ba4a8e 100644
--- a/modules/webgl/WebGLSync.idl
+++ b/modules/webgl/WebGLSync.idl
@@ -4,6 +4,6 @@
 
 [
     RuntimeEnabled=UnsafeES3APIs,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface WebGLSync {
-};
\ No newline at end of file
+};
diff --git a/modules/webgl/WebGLTexture.idl b/modules/webgl/WebGLTexture.idl
index 7a1583c..850e448 100644
--- a/modules/webgl/WebGLTexture.idl
+++ b/modules/webgl/WebGLTexture.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLTexture {
 };
diff --git a/modules/background_sync/SyncRegistrationOptions.idl b/modules/webgl/WebGLTimerQueryEXT.idl
similarity index 63%
rename from modules/background_sync/SyncRegistrationOptions.idl
rename to modules/webgl/WebGLTimerQueryEXT.idl
index 6e1abbc..d6223da 100644
--- a/modules/background_sync/SyncRegistrationOptions.idl
+++ b/modules/webgl/WebGLTimerQueryEXT.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=BackgroundSyncV2,
-] dictionary SyncRegistrationOptions {
-    DOMString tag;
+    NoInterfaceObject,
+    GarbageCollected,
+] interface WebGLTimerQueryEXT {
 };
diff --git a/modules/webgl/WebGLTransformFeedback.idl b/modules/webgl/WebGLTransformFeedback.idl
index bdf26ab..88f4617 100644
--- a/modules/webgl/WebGLTransformFeedback.idl
+++ b/modules/webgl/WebGLTransformFeedback.idl
@@ -4,6 +4,6 @@
 
 [
     RuntimeEnabled=UnsafeES3APIs,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface WebGLTransformFeedback {
-};
\ No newline at end of file
+};
diff --git a/modules/webgl/WebGLUniformLocation.idl b/modules/webgl/WebGLUniformLocation.idl
index bac3601..dd6a43e 100644
--- a/modules/webgl/WebGLUniformLocation.idl
+++ b/modules/webgl/WebGLUniformLocation.idl
@@ -25,6 +25,6 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLUniformLocation {
 };
diff --git a/modules/webgl/WebGLVertexArrayObject.idl b/modules/webgl/WebGLVertexArrayObject.idl
index bb7ad25..4a29ca9 100644
--- a/modules/webgl/WebGLVertexArrayObject.idl
+++ b/modules/webgl/WebGLVertexArrayObject.idl
@@ -4,6 +4,6 @@
 
 [
     RuntimeEnabled=UnsafeES3APIs,
-    WillBeGarbageCollected
+    GarbageCollected
 ] interface WebGLVertexArrayObject {
 };
diff --git a/modules/webgl/WebGLVertexArrayObjectOES.idl b/modules/webgl/WebGLVertexArrayObjectOES.idl
index 2a9e5bc..e1a533f 100644
--- a/modules/webgl/WebGLVertexArrayObjectOES.idl
+++ b/modules/webgl/WebGLVertexArrayObjectOES.idl
@@ -25,6 +25,6 @@
 
 [
     NoInterfaceObject,
-    WillBeGarbageCollected,
+    GarbageCollected,
 ] interface WebGLVertexArrayObjectOES {
 };
diff --git a/modules/webmidi/MIDIAccess.idl b/modules/webmidi/MIDIAccess.idl
index a65381d..7cebf53 100644
--- a/modules/webmidi/MIDIAccess.idl
+++ b/modules/webmidi/MIDIAccess.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
 ] interface MIDIAccess : EventTarget {
     readonly attribute MIDIInputMap inputs;
     readonly attribute MIDIOutputMap outputs;
diff --git a/modules/webmidi/MIDIOptions.idl b/modules/webmidi/MIDIOptions.idl
index 4be1426..9df8a96 100644
--- a/modules/webmidi/MIDIOptions.idl
+++ b/modules/webmidi/MIDIOptions.idl
@@ -6,4 +6,5 @@
 
 dictionary MIDIOptions {
     boolean sysex;
+    // TODO(crbug.com/502127): Add bool software to follow the latest spec.
 };
diff --git a/modules/webmidi/MIDIPort.idl b/modules/webmidi/MIDIPort.idl
index 726fd01..0f44867 100644
--- a/modules/webmidi/MIDIPort.idl
+++ b/modules/webmidi/MIDIPort.idl
@@ -45,7 +45,7 @@
 };
 
 [
-    ActiveDOMObject,
+    DependentLifetime,
     GarbageCollected,
 ] interface MIDIPort : EventTarget {
     readonly attribute MIDIPortConnectionState connection;
diff --git a/modules/websockets/WebSocket.idl b/modules/websockets/WebSocket.idl
index 47a8c2e..ee12816 100644
--- a/modules/websockets/WebSocket.idl
+++ b/modules/websockets/WebSocket.idl
@@ -34,12 +34,10 @@
 enum BinaryType { "blob", "arraybuffer" };
 
 [
-    ActiveDOMObject,
-    // FIXME: Spec has DOMString[]. https://www.w3.org/Bugs/Public/show_bug.cgi?id=28102
+    DependentLifetime,
     Constructor(DOMString url, optional (DOMString or sequence<DOMString>) protocols),
     ConstructorCallWith=ExecutionContext,
     Exposed=(Window,Worker),
-    TypeChecking=Interface,
     RaisesException=Constructor,
     GarbageCollected,
     ImplementedAs=DOMWebSocket,
diff --git a/modules/webusb/NavigatorUSB.idl b/modules/webusb/NavigatorUSB.idl
new file mode 100644
index 0000000..d916a0e
--- /dev/null
+++ b/modules/webusb/NavigatorUSB.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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://wicg.github.io/webusb/#device-enumeration
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] partial interface Navigator {
+    readonly attribute USB usb;
+};
diff --git a/modules/webusb/USB.idl b/modules/webusb/USB.idl
new file mode 100644
index 0000000..2c7489c
--- /dev/null
+++ b/modules/webusb/USB.idl
@@ -0,0 +1,16 @@
+// Copyright 2015 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://wicg.github.io/webusb/#device-enumeration
+
+[
+    GarbageCollected,
+    NoInterfaceObject,
+    RuntimeEnabled=WebUSB,
+] interface USB : EventTarget {
+    attribute EventHandler onconnect;
+    attribute EventHandler ondisconnect;
+    [CallWith=ScriptState] Promise<sequence<USBDevice>> getDevices();
+    [CallWith=ScriptState] Promise<sequence<USBDevice>> requestDevice(USBDeviceRequestOptions options);
+};
diff --git a/modules/webusb/USBAlternateInterface.idl b/modules/webusb/USBAlternateInterface.idl
new file mode 100644
index 0000000..cbf37fa
--- /dev/null
+++ b/modules/webusb/USBAlternateInterface.idl
@@ -0,0 +1,19 @@
+// Copyright 2015 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://wicg.github.io/webusb/#interfaces
+
+[
+    Constructor(USBInterface deviceInterface, octet alternateSetting),
+    RaisesException=Constructor,
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBAlternateInterface {
+    readonly attribute octet alternateSetting;
+    readonly attribute octet interfaceClass;
+    readonly attribute octet interfaceSubclass;
+    readonly attribute octet interfaceProtocol;
+    readonly attribute DOMString? interfaceName;
+    readonly attribute sequence<USBEndpoint> endpoints;
+};
diff --git a/modules/webusb/USBConfiguration.idl b/modules/webusb/USBConfiguration.idl
new file mode 100644
index 0000000..3cd0ec9
--- /dev/null
+++ b/modules/webusb/USBConfiguration.idl
@@ -0,0 +1,16 @@
+// Copyright 2015 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://wicg.github.io/webusb/#configurations
+
+[
+    Constructor(USBDevice device, octet configurationValue),
+    RaisesException=Constructor,
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBConfiguration {
+    readonly attribute octet configurationValue;
+    readonly attribute DOMString? configurationName;
+    readonly attribute sequence<USBInterface> interfaces;
+};
diff --git a/modules/webusb/USBConnectionEvent.idl b/modules/webusb/USBConnectionEvent.idl
new file mode 100644
index 0000000..beaba0e
--- /dev/null
+++ b/modules/webusb/USBConnectionEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2015 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://wicg.github.io/webusb/#events
+
+[
+    Constructor(DOMString type, optional USBConnectionEventInit eventInitDict),
+    RuntimeEnabled=WebUSB,
+] interface USBConnectionEvent : Event {
+    readonly attribute USBDevice device;
+};
diff --git a/modules/background_sync/PeriodicSyncEventInit.idl b/modules/webusb/USBConnectionEventInit.idl
similarity index 60%
rename from modules/background_sync/PeriodicSyncEventInit.idl
rename to modules/webusb/USBConnectionEventInit.idl
index 60d2b72..797cf73 100644
--- a/modules/background_sync/PeriodicSyncEventInit.idl
+++ b/modules/webusb/USBConnectionEventInit.idl
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-dictionary PeriodicSyncEventInit : ExtendableEventInit {
-    required PeriodicSyncRegistration registration;
+// http://wicg.github.io/webusb/#events
+
+dictionary USBConnectionEventInit : EventInit {
+    USBDevice device;
 };
diff --git a/modules/webusb/USBControlTransferParameters.idl b/modules/webusb/USBControlTransferParameters.idl
new file mode 100644
index 0000000..9c7d550
--- /dev/null
+++ b/modules/webusb/USBControlTransferParameters.idl
@@ -0,0 +1,24 @@
+// Copyright 2015 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 USBRequestType {
+    "standard",
+    "class",
+    "vendor"
+};
+
+enum USBRecipient {
+    "device",
+    "interface",
+    "endpoint",
+    "other",
+};
+
+dictionary USBControlTransferParameters {
+    required USBRequestType requestType;
+    required USBRecipient recipient;
+    required octet request;
+    required unsigned short value;
+    required unsigned short index;
+};
diff --git a/modules/webusb/USBDevice.idl b/modules/webusb/USBDevice.idl
new file mode 100644
index 0000000..6d38461
--- /dev/null
+++ b/modules/webusb/USBDevice.idl
@@ -0,0 +1,51 @@
+// Copyright 2015 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://wicg.github.io/webusb/#idl-def-usbtransferstatus
+
+enum USBTransferStatus {
+    "ok",
+    "stall",
+    "babble"
+};
+
+// http://wicg.github.io/webusb/#device-usage
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBDevice {
+    readonly attribute DOMString guid;
+    readonly attribute octet usbVersionMajor;
+    readonly attribute octet usbVersionMinor;
+    readonly attribute octet usbVersionSubminor;
+    readonly attribute octet deviceClass;
+    readonly attribute octet deviceSubclass;
+    readonly attribute octet deviceProtocol;
+    readonly attribute unsigned short vendorId;
+    readonly attribute unsigned short productId;
+    readonly attribute octet deviceVersionMajor;
+    readonly attribute octet deviceVersionMinor;
+    readonly attribute octet deviceVersionSubminor;
+    readonly attribute DOMString? manufacturerName;
+    readonly attribute DOMString? productName;
+    readonly attribute DOMString? serialNumber;
+    readonly attribute sequence<USBConfiguration> configurations;
+
+    [CallWith=ScriptState] Promise<void> open();
+    [CallWith=ScriptState] Promise<void> close();
+    [CallWith=ScriptState] Promise<void> getConfiguration();
+    [CallWith=ScriptState] Promise<void> setConfiguration(octet configurationValue);
+    [CallWith=ScriptState] Promise<void> claimInterface(octet interfaceNumber);
+    [CallWith=ScriptState] Promise<void> releaseInterface(octet interfaceNumber);
+    [CallWith=ScriptState] Promise<void> setInterface(octet interfaceNumber, octet alternateSetting);
+    [CallWith=ScriptState] Promise<USBInTransferResult> controlTransferIn(USBControlTransferParameters setup, unsigned short length);
+    [CallWith=ScriptState] Promise<USBOutTransferResult> controlTransferOut(USBControlTransferParameters setup, optional BufferSource data);
+    [CallWith=ScriptState] Promise<void> clearHalt(octet endpointNumber);
+    [CallWith=ScriptState] Promise<USBInTransferResult> transferIn(octet endpointNumber, unsigned long length);
+    [CallWith=ScriptState] Promise<USBOutTransferResult> transferOut(octet endpointNumber, BufferSource data);
+    [CallWith=ScriptState] Promise<USBIsochronousInTransferResult>  isochronousTransferIn(octet endpointNumber, sequence<unsigned long> packetLengths);
+    [CallWith=ScriptState] Promise<UsbIsochronousOutTransferResult> isochronousTransferOut(octet endpointNumber, BufferSource data, sequence<unsigned long> packetLengths);
+    [CallWith=ScriptState] Promise<void> reset();
+};
diff --git a/modules/webusb/USBDeviceFilter.idl b/modules/webusb/USBDeviceFilter.idl
new file mode 100644
index 0000000..5d59379
--- /dev/null
+++ b/modules/webusb/USBDeviceFilter.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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://wicg.github.io/webusb/#device-enumeration
+
+dictionary USBDeviceFilter {
+    unsigned short vendorId;
+    unsigned short productId;
+    octet classCode;
+    octet subclassCode;
+    octet protocolCode;
+};
diff --git a/modules/webusb/USBDeviceRequestOptions.idl b/modules/webusb/USBDeviceRequestOptions.idl
new file mode 100644
index 0000000..eea3c39
--- /dev/null
+++ b/modules/webusb/USBDeviceRequestOptions.idl
@@ -0,0 +1,9 @@
+// Copyright 2015 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://wicg.github.io/webusb/#device-enumeration
+
+dictionary USBDeviceRequestOptions {
+    required sequence<USBDeviceFilter> filters;
+};
diff --git a/modules/webusb/USBEndpoint.idl b/modules/webusb/USBEndpoint.idl
new file mode 100644
index 0000000..9124e6d
--- /dev/null
+++ b/modules/webusb/USBEndpoint.idl
@@ -0,0 +1,28 @@
+// Copyright 2015 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://wicg.github.io/webusb/#endpoints
+
+enum USBDirection {
+    "in",
+    "out"
+};
+
+enum USBEndpointType {
+    "bulk",
+    "interrupt",
+    "isochronous"
+};
+
+[
+    Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
+    RaisesException=Constructor,
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBEndpoint {
+    readonly attribute octet endpointNumber;
+    readonly attribute USBDirection direction;
+    readonly attribute USBEndpointType type;
+    readonly attribute unsigned long packetSize;
+};
diff --git a/modules/webusb/USBInTransferResult.idl b/modules/webusb/USBInTransferResult.idl
new file mode 100644
index 0000000..2251b1d
--- /dev/null
+++ b/modules/webusb/USBInTransferResult.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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://wicg.github.io/webusb/#idl-def-usbintransferresult
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBInTransferResult {
+    readonly attribute DataView data;
+    readonly attribute USBTransferStatus status;
+};
diff --git a/modules/webusb/USBInterface.idl b/modules/webusb/USBInterface.idl
new file mode 100644
index 0000000..54e3734
--- /dev/null
+++ b/modules/webusb/USBInterface.idl
@@ -0,0 +1,15 @@
+// Copyright 2015 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://wicg.github.io/webusb/#interfaces
+
+[
+    Constructor(USBConfiguration configuration, octet interfaceNumber),
+    RaisesException=Constructor,
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBInterface {
+    readonly attribute octet interfaceNumber;
+    readonly attribute sequence<USBAlternateInterface> alternates;
+};
diff --git a/modules/webusb/USBIsochronousInTransferPacket.idl b/modules/webusb/USBIsochronousInTransferPacket.idl
new file mode 100644
index 0000000..3129bde
--- /dev/null
+++ b/modules/webusb/USBIsochronousInTransferPacket.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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://wicg.github.io/webusb/#idl-def-usbisochronousintransferpacket
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBIsochronousInTransferPacket {
+    readonly attribute USBTransferStatus status;
+    readonly attribute DataView data;
+};
diff --git a/modules/webusb/USBIsochronousInTransferResult.idl b/modules/webusb/USBIsochronousInTransferResult.idl
new file mode 100644
index 0000000..139856f
--- /dev/null
+++ b/modules/webusb/USBIsochronousInTransferResult.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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://wicg.github.io/webusb/#idl-def-usbisochronousintransferresult
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBIsochronousInTransferResult {
+    readonly attribute DataView data;
+    readonly attribute sequence<USBIsochronousInTransferPacket> packets;
+};
diff --git a/modules/webusb/USBIsochronousOutTransferPacket.idl b/modules/webusb/USBIsochronousOutTransferPacket.idl
new file mode 100644
index 0000000..c6789c3
--- /dev/null
+++ b/modules/webusb/USBIsochronousOutTransferPacket.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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://wicg.github.io/webusb/#idl-def-usbisochronousouttransferpacket
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBIsochronousOutTransferPacket {
+    readonly attribute USBTransferStatus status;
+    readonly attribute unsigned long bytesWritten;
+};
diff --git a/modules/webusb/USBIsochronousOutTransferResult.idl b/modules/webusb/USBIsochronousOutTransferResult.idl
new file mode 100644
index 0000000..aebd8e1
--- /dev/null
+++ b/modules/webusb/USBIsochronousOutTransferResult.idl
@@ -0,0 +1,12 @@
+// Copyright 2016 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://wicg.github.io/webusb/#idl-def-usbisochronousouttransferresult
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBIsochronousOutTransferResult {
+    readonly attribute sequence<USBIsochronousOutTransferPacket> packets;
+};
diff --git a/modules/webusb/USBOutTransferResult.idl b/modules/webusb/USBOutTransferResult.idl
new file mode 100644
index 0000000..b43587a
--- /dev/null
+++ b/modules/webusb/USBOutTransferResult.idl
@@ -0,0 +1,13 @@
+// Copyright 2015 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://wicg.github.io/webusb/#idl-def-usbouttransferresult
+
+[
+    GarbageCollected,
+    RuntimeEnabled=WebUSB,
+] interface USBOutTransferResult {
+    readonly attribute unsigned long bytesWritten;
+    readonly attribute USBTransferStatus status;
+};
diff --git a/modules/worklet/WindowWorklet.idl b/modules/worklet/WindowWorklet.idl
new file mode 100644
index 0000000..8b98be2
--- /dev/null
+++ b/modules/worklet/WindowWorklet.idl
@@ -0,0 +1,10 @@
+// Copyright 2016 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.
+
+[
+    ImplementedAs=DOMWindowWorklet,
+    RuntimeEnabled=Worklet,
+] partial interface Window {
+    [CallWith=ExecutionContext] readonly attribute Worklet renderWorklet;
+};
diff --git a/modules/worklet/Worklet.idl b/modules/worklet/Worklet.idl
new file mode 100644
index 0000000..0744c69
--- /dev/null
+++ b/modules/worklet/Worklet.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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://drafts.css-houdini.org/worklets/#worklet
+
+[
+    DependentLifetime,
+    GarbageCollected,
+    RuntimeEnabled=Worklet,
+] interface Worklet {
+    [CallWith=ScriptState] Promise<void> import(DOMString url);
+};
diff --git a/modules/worklet/WorkletGlobalScope.idl b/modules/worklet/WorkletGlobalScope.idl
new file mode 100644
index 0000000..f3ceb1e
--- /dev/null
+++ b/modules/worklet/WorkletGlobalScope.idl
@@ -0,0 +1,13 @@
+// Copyright 2016 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://drafts.css-houdini.org/worklets/#workletglobalscope
+
+[
+    Exposed=Worklet,
+    Global=Worklet,
+    RuntimeEnabled=Worklet,
+    WillBeGarbageCollected,
+] interface WorkletGlobalScope {
+};