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 {
+};
