diff --git a/bindings/IDLExtendedAttributes.txt b/bindings/IDLExtendedAttributes.txt
index 58e04ee..e6a6cf3 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:
-#         idl-extended-attributes.md (in this directory)
+#         IDLExtendedAttributes.md (in this directory)
 #     (3) add appropriate test cases to run-bindings-tests
 #
 # The syntax of this file is as follows:
@@ -31,18 +31,24 @@
 #       arbitrary, but that "X" is standard, e.g. [Attr=X], [Attr=Foo].
 #
 
+ActiveScriptWrappable
+AllowShared
+CEReactions
+CachedAccessor
 CachedAttribute=*
-CallWith=ExecutionContext|ScriptState|ScriptArguments|ActiveWindow|FirstWindow|ThisValue
+CallWith=ExecutionContext|ScriptState|ScriptArguments|CurrentWindow|EnteredWindow|ThisValue
 CheckSecurity=Receiver|ReturnValue
 Clamp
 Constructor
 # FIXME: remove [ConstructorCallWith=Document], as can instead use
 # [ConstructorCallWith=ExecutionContext] + toDocument(executionContext)
 ConstructorCallWith=ExecutionContext|ScriptState|Document
-Custom=|Getter|Setter|LegacyCallAsFunction|VisitDOMWrapper|PropertyGetter|PropertyEnumerator|PropertyQuery|CallPrologue|CallEpilogue
+ContextEnabled=*
+CrossOrigin=|Getter|Setter
+Custom=|Getter|Setter|LegacyCallAsFunction|PropertyGetter|PropertyEnumerator|PropertyQuery|CallPrologue|CallEpilogue
 CustomConstructor
 CustomElementCallbacks
-# Dartium specific attributes.
+# FIXMEDART: Dartium specific attributes.
 # DartCustom can have no value or New if New an additional method is added (V8 will not see this method)
 DartCustom=|New|Setter|Getter
 # DartName should have the alias name to be used to resolve.
@@ -65,18 +71,18 @@
 DependentLifetime
 DeprecateAs=*
 DoNotCheckConstants
-DoNotCheckSecurity=|Setter
-DoNotCheckSignature
+DoNotTestNewObject
 EnforceRange
 Exposed=*
+FeaturePolicy=*
 FlexibleArrayBufferView
-GarbageCollected
 Global=|*
+HTMLConstructor
+ImmutablePrototype
 ImplementedAs=*
-ImplementedInPrivateScript
-Iterable
 LegacyInterfaceTypeChecking
 LegacyTreatAsPartialInterface
+LegacyUnenumerableNamedProperties
 LenientThis
 LogActivity=|GetterOnly|SetterOnly
 LogAllWorlds
@@ -84,10 +90,8 @@
 Measure
 MeasureAs=*
 NamedConstructor=*
-NoImplHeader
 NoInterfaceObject
 NotEnumerable
-OnlyExposedToPrivateScript
 OriginTrialEnabled=*
 OverrideBuiltins
 PartialInterfaceImplementedAs=*
@@ -104,15 +108,17 @@
 ReflectOnly=*
 Replaceable
 # Valid values for [RuntimeEnabled] are the Runtime Enabled Features, listed in
-# Source/core/page/RuntimeEnabledFeatures.in
+# Source/platform/runtime_enabled_features.json5
 RuntimeEnabled=*
+# Valid values for [RuntimeCallStatsCounter] are counters defined in
+# Source/platform/bindings/RuntimeCallStats.h
+RuntimeCallStatsCounter=*
 SameObject
-SetWrapperReferenceFrom=*
-SetWrapperReferenceTo=*
-SetterCallWith=ExecutionContext|ScriptArguments|ActiveWindow|FirstWindow
+SaveSameObject
+SecureContext
+SetterCallWith=ExecutionContext|ScriptArguments|CurrentWindow|EnteredWindow
 TreatNullAs=NullString|EmptyString
-TreatUndefinedAs=NullString
 URL
 Unforgeable
-Unscopeable
-WillBeGarbageCollected
+Unscopable
+WebAgentAPI
diff --git a/bindings/PRESUBMIT.py b/bindings/PRESUBMIT.py
index 605322d..32d9c44 100644
--- a/bindings/PRESUBMIT.py
+++ b/bindings/PRESUBMIT.py
@@ -32,6 +32,9 @@
 for more details about the presubmit API built into gcl.
 """
 
+# Make sure binding templates are considered as source files.
+WHITE_LIST = (r'.+\.tmpl$',)
+
 # Changes to v8/ do not change generated code or tests, so exclude from
 # _RunBindingsTests
 BLACK_LIST = (r'.*\bv8[\\\/].*',)
@@ -39,7 +42,8 @@
 def _RunBindingsTests(input_api, output_api):
     # Skip if nothing to do
     source_filter = lambda x: input_api.FilterSourceFile(
-                x, black_list=input_api.DEFAULT_BLACK_LIST + BLACK_LIST)
+        x, white_list=input_api.DEFAULT_WHITE_LIST + WHITE_LIST,
+        black_list=input_api.DEFAULT_BLACK_LIST + BLACK_LIST)
     if not input_api.AffectedFiles(file_filter=source_filter):
         return []
 
@@ -56,6 +60,8 @@
         cmd = [input_api.python_executable, run_bindings_tests_path]
     else:
         cmd = [run_bindings_tests_path]
+    if not input_api.verbose:
+        cmd.append('--suppress-diff')
     test_cmd = input_api.Command(
       name=cmd_name,
       cmd=cmd,
diff --git a/bindings/dart/gyp/scripts/build_dart_snapshot.py b/bindings/dart/gyp/scripts/build_dart_snapshot.py
deleted file mode 100755
index e9e677c..0000000
--- a/bindings/dart/gyp/scripts/build_dart_snapshot.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2011 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.
-#
-# 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.
-
-# build_dart_snapshot.py generates two C++ files: DartSnapshot.cpp
-# with a constant which is a snapshot of major DOM libs an
-# DartResolver.cpp which is a resolver for dart:html library.
-
-import os.path
-import subprocess
-import sys
-
-
-def main(args):
-    assert(len(args) >= 4)
-    dartPath = args[1]
-    dartSnapshotTemplateFile = args[2]
-    outputFilePath = args[3]
-    genSnapshotBinPath = args[4]
-    snapshottedLibPaths = args[5:]
-
-    def path(*components):
-        return os.path.abspath(os.path.join(*components))
-
-    def dartName(path):
-        # Translates <dirs>/foo_dartium.dart into foo.
-        return (os.path.splitext(os.path.split(path)[1])[0]
-                .replace('_dartium', ''))
-
-    snapshottedLibs = [(dartName(p), path(p))
-                       for p in snapshottedLibPaths]
-
-    # Generate a Dart script to build the snapshot from.
-    snapshotScriptName = os.path.join(outputFilePath, 'snapshotScript.dart')
-    with file(snapshotScriptName, 'w') as snapshotScript:
-        snapshotScript.write('library snapshot;\n')
-        for name, _ in snapshottedLibs:
-            # Skip internal libraries - they should be indirectly imported via the public ones.
-            if not name.startswith('_'):
-                snapshotScript.write('import \'dart:%(name)s\' as %(name)s;\n' % {'name': name})
-        snapshotScript.write('import \'dart:vmserviceio\';\n')
-
-    binaryVmIsolateSnapshotFile = path(outputFilePath, 'DartVmIsolateSnapshot.bin')
-    binaryIsolateSnapshotFile = path(outputFilePath, 'DartIsolateSnapshot.bin')
-
-    # Build a command to generate the snapshot bin file.
-    command = [
-        'python',
-        path(dartPath, 'runtime', 'tools', 'create_snapshot_bin.py'),
-        '--executable=%s' % path(genSnapshotBinPath),
-        '--snapshot_kind=core',
-        '--vm_output_bin=%s' % binaryVmIsolateSnapshotFile,
-        '--isolate_output_bin=%s' % binaryIsolateSnapshotFile,
-        '--script=%s' % snapshotScriptName,
-    ]
-    command.extend(['--url_mapping=dart:%s,%s' % lib for lib in snapshottedLibs])
-
-    pipe = subprocess.Popen(command,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    out, error = pipe.communicate()
-    if (pipe.returncode != 0):
-        raise Exception('Snapshot bin generation failed: %s/%s' % (out, error))
-
-    # Build a command to generate the snapshot file.
-    command = [
-        'python',
-        path(dartPath, 'runtime', 'tools', 'create_snapshot_file.py'),
-        '--input_cc=%s' % dartSnapshotTemplateFile,
-        '--vm_input_bin=%s' % binaryVmIsolateSnapshotFile,
-        '--input_bin=%s' % binaryIsolateSnapshotFile,
-        '--output=%s' % path(outputFilePath, 'DartSnapshot.bytes'),
-    ]
-
-    pipe = subprocess.Popen(command,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    out, error = pipe.communicate()
-    if (pipe.returncode != 0):
-        raise Exception('Snapshot file generation failed: %s/%s' % (out, error))
-
-    snapshotSizeInBytes = os.path.getsize(binaryIsolateSnapshotFile)
-    productDir = os.path.dirname(genSnapshotBinPath)
-    snapshotSizeOutputPath = os.path.join(productDir, 'snapshot-size.txt')
-    with file(snapshotSizeOutputPath, 'w') as snapshotSizeFile:
-        snapshotSizeFile.write('%d\n' % snapshotSizeInBytes)
-
-    return 0
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/bindings/dart/gyp/scripts/create_resources.py b/bindings/dart/gyp/scripts/create_resources.py
deleted file mode 100644
index 3b6b992..0000000
--- a/bindings/dart/gyp/scripts/create_resources.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-#
-# This python script creates string literals in a C++ source file from a C++
-# source template and one or more resource files.
-
-import os
-import sys
-from os.path import join
-import time
-from optparse import OptionParser
-import re
-from datetime import date
-
-
-def makeResources(root_dir, input_files):
-    result = ''
-    resources = []
-
-    # Write each file's contents as a byte string constant.
-    for resource_file in input_files:
-        if root_dir and resource_file.startswith(root_dir):
-            resource_file_name = resource_file[len(root_dir):]
-        else:
-            resource_file_name = resource_file
-        resource_url = '/%s' % resource_file_name
-        result += '// %s\n' % resource_file
-        result += 'const char '
-        resource_name = re.sub(r'(/|\.|-)', '_', resource_file_name) + '_'
-        result += resource_name
-        result += '[] = {\n   '
-        fileHandle = open(resource_file, 'rb')
-        lineCounter = 0
-        for byte in fileHandle.read():
-            result += r" '\x%02x'," % ord(byte)
-            lineCounter += 1
-            if lineCounter == 10:
-                result += '\n   '
-                lineCounter = 0
-        if lineCounter != 0:
-            result += '\n   '
-        result += ' 0\n};\n\n'
-        resources.append(
-            (resource_url, resource_name, os.stat(resource_file).st_size))
-
-    # Write the resource table.
-    result += 'Resources::resource_map_entry Resources::builtin_resources_[] = '
-    result += '{\n'
-    for res in resources:
-        result += '   { "%s", %s, %d },\n' % res
-    result += '};\n\n'
-    result += 'const intptr_t Resources::builtin_resources_count_ '
-    result += '= %d;\n' % len(resources)
-    return result
-
-
-def makeFile(output_file, root_dir, input_files):
-    cc_text = '''
-// Copyright (c) %d, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-''' % date.today().year
-    cc_text += '#if defined(new)\n'
-    cc_text += '#undef new\n'
-    cc_text += '#endif\n\n'
-    cc_text += '#if defined(delete)\n'
-    cc_text += '#undef delete\n'
-    cc_text += '#endif\n\n'
-    cc_text += '#ifndef NDEBUG\n'
-    cc_text += '#define DEBUG\n'
-    cc_text += '#endif\n'
-    cc_text += '#include "bin/resources.h"\n\n'
-    cc_text += 'namespace dart {\n'
-    cc_text += 'namespace bin {\n'
-    cc_text += makeResources(root_dir, input_files)
-    cc_text += '}  // namespace bin\n} // namespace dart\n'
-    open(output_file, 'w').write(cc_text)
-    return True
-
-
-def main(args):
-    try:
-        # Parse input.
-        parser = OptionParser()
-        parser.add_option("--output",
-                          action="store", type="string",
-                          help="output file name")
-        parser.add_option("--root_prefix",
-                          action="store", type="string",
-                          help="root directory for resources")
-        (options, args) = parser.parse_args()
-        if not options.output:
-            sys.stderr.write('--output not specified\n')
-            return -1
-        if len(args) == 0:
-            sys.stderr.write('No input files specified\n')
-            return -1
-
-        files = []
-        for arg in args:
-            files.append(arg)
-
-        if not makeFile(options.output, options.root_prefix, files):
-            return -1
-
-        return 0
-    except Exception, inst:
-        sys.stderr.write('create_resources.py exception\n')
-        sys.stderr.write(str(inst))
-        sys.stderr.write('\n')
-        return -1
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/bindings/dart/gyp/scripts/dart_action_derivedsourcesallinone.py b/bindings/dart/gyp/scripts/dart_action_derivedsourcesallinone.py
deleted file mode 100644
index 969ffa6..0000000
--- a/bindings/dart/gyp/scripts/dart_action_derivedsourcesallinone.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2011 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.
-#
-# 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.
-
-# dart_action_derivedsourceslist.py generates a single or several cpp files
-# that include all Dart bindings cpp files generated from idls.
-#
-# usage: dart_action_derivedsourceslist.py IDL_FILES_LIST -- OUTPUT_FILE1 OUTPUT_FILE2 ...
-#
-# Note that IDL_FILES_LIST is a text file containing the IDL file paths.
-
-import os.path
-import re
-import sys
-
-v8scriptPath = os.path.join(sys.path[0], '../../../../WebCore.gyp/scripts')
-sys.path.append(v8scriptPath)
-
-# FIXME: there are couple of very ugly hacks like duplication of main code and
-# regexp to rewrite V8 prefix to Dart. It all can be easily solved with minimal
-# modifications to action_derivedsourcesallinone.py.
-import action_derivedsourcesallinone as base
-
-
-def main(args):
-    assert(len(args) > 3)
-    inOutBreakIndex = args.index('--')
-    inputFileName = args[1]
-    outputFileNames = args[inOutBreakIndex + 1:]
-
-    inputFile = open(inputFileName, 'r')
-    idlFileNames = inputFile.read().split('\n')
-    inputFile.close()
-
-    filesMetaData = base.extractMetaData(idlFileNames)
-    for fileName in outputFileNames:
-        partition = outputFileNames.index(fileName)
-        fileContents = base.generateContent(filesMetaData, partition, len(outputFileNames))
-        # FIXME: ugly hack---change V8 prefix to Dart.
-        fileContents = re.sub('\n#include "bindings/V8', '\n#include "bindings/Dart', fileContents)
-        base.writeContent(fileContents, fileName)
-
-    return 0
-
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/bindings/dart/gyp/scripts/dart_html_lib_deps.py b/bindings/dart/gyp/scripts/dart_html_lib_deps.py
deleted file mode 100644
index ff534f0..0000000
--- a/bindings/dart/gyp/scripts/dart_html_lib_deps.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/python
-#
-# 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:
-#
-#     * 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.
-#
-# Copyright (c) 2012 The Chromium 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 fnmatch
-import os
-import sys
-
-
-def printAllFilesRecursively(directory, pattern):
-  def matches(basename): return fnmatch.fnmatch(basename, pattern)
-  for root, _, files in os.walk(directory):
-    for basename in filter(matches, files):
-      # gyp operates correctly only on /, not Windows \.
-      print os.path.join(root, basename).replace(os.sep, '/')
-
-
-
-def main(args):
-  dart_html_lib_dir = args[1]
-
-  deps = [
-      ('idl', '*.idl'),
-      ('scripts', '*.py'),
-      ('src', '*.dart'),
-      ('templates', '*.*template'),
-  ]
-
-  for directory, pattern in deps:
-    printAllFilesRecursively(os.path.join(dart_html_lib_dir, directory), pattern)
-
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/bindings/dart/gyp/scripts/generate_dart_bindings.py b/bindings/dart/gyp/scripts/generate_dart_bindings.py
deleted file mode 100755
index a57881d..0000000
--- a/bindings/dart/gyp/scripts/generate_dart_bindings.py
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/python
-#
-# 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:
-#
-#     * 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 glob
-import os.path
-import sys
-import tempfile
-
-def main(args):
-    assert(len(args) == 6)
-    idlListFileName = args[1]
-    dartiumScriptDir = args[2]
-    dartScriptDir = args[3]
-    outputFilePath = args[4]
-    featureDefines = args[5]
-
-    # Clear out any stale dart/lib/html/scripts/.pyc files that are lurking.
-    for f in glob.glob(os.path.join(dartScriptDir, '*.pyc')):
-      os.remove(f)
-
-    baseDir = os.path.dirname(dartiumScriptDir)
-    idlListFile = open(idlListFileName, 'r')
-    idlFiles = [os.path.join(baseDir, fileName.strip()) for fileName in idlListFile]
-    idlListFile.close()
-
-    def analyse(featureDef):
-      featureDef = featureDef.strip('"')
-      if '=' not in featureDef: return None
-      feature, status = featureDef.split('=')
-      if status == '1':
-        return feature
-      return None
-
-    featureDefines = filter(None, map(analyse, featureDefines.split()))
-
-    sys.path.insert(0, dartScriptDir)
-    import fremontcutbuilder
-    import dartdomgenerator
-
-    database = fremontcutbuilder.build_database(idlFiles, tempfile.mkdtemp(), feature_defines=featureDefines)
-    database.Load()
-    dartdomgenerator.GenerateFromDatabase(database, None, outputFilePath)
-    database.Delete()
-
-    return 0
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/bindings/scripts/aggregate_generated_bindings.py b/bindings/scripts/aggregate_generated_bindings.py
index 4b71743..5619f48 100755
--- a/bindings/scripts/aggregate_generated_bindings.py
+++ b/bindings/scripts/aggregate_generated_bindings.py
@@ -32,28 +32,29 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Generate aggregate .cpp files that include multiple V8 binding .cpp files.
+"""Generates a .cpp file that includes all V8 binding .cpp files for interfaces.
 
-This can be a single output file, to preserve symbol space; or multiple output
-files, to reduce maximum compilation unit size and allow parallel compilation.
+It is expected to preserve symbol space, and to be acceptable to make static
+build on Windows.
 
 Usage:
-aggregate_generated_bindings.py COMPONENT_DIR IDL_FILES_LIST -- OUTPUT_FILE1 OUTPUT_FILE2 ...
+ $ aggregate_generated_bindings.py --component COMPONENT IDL_FILES_LIST OUTPUT_FILE
 
-COMPONENT_DIR is the relative directory of a component, e.g., 'core', 'modules'.
-IDL_FILES_LIST is a text file containing the IDL file paths, so the command
-line doesn't exceed OS length limits.
-OUTPUT_FILE1 etc. are filenames of output files.
+ COMPONENT is the relative directory of a component, e.g., 'core', 'modules'.
+ IDL_FILES_LIST is a text file containing the IDL file paths
+ OUTPUT_FILE is the filename of output file.
 
-Design doc: http://www.chromium.org/developers/design-documents/idl-build
+ Design doc: http://www.chromium.org/developers/design-documents/idl-build
 """
 
 import errno
+import optparse
 import os
 import re
 import sys
-
-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
+from utilities import idl_filename_to_basename
+from utilities import read_idl_files_list_from_file
+from utilities import to_snake_case
 
 COPYRIGHT_TEMPLATE = """/*
  * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
@@ -85,49 +86,32 @@
  */
 """
 
+def parse_options():
+    parser = optparse.OptionParser()
+    parser.add_option('--component')
+    # TODO(tkent): Remove the option after the great mv. crbug.com/760462
+    parser.add_option('--snake-case-generated-files',
+                      action='store_true', default=False)
 
-def extract_meta_data(file_paths):
-    """Extracts interface name from each IDL file."""
-    meta_data_list = []
+    options, args = parser.parse_args()
+    if len(args) < 2:
+        raise Exception('Expected 2 filenames; one is for input, and the other is for output.')
 
-    for file_path in file_paths:
-        if not file_path.endswith('.idl'):
-            print 'WARNING: non-IDL file passed: "%s"' % file_path
-            continue
-        if not os.path.exists(file_path):
-            print 'WARNING: file not found: "%s"' % file_path
-            continue
-
-        idl_file_contents = get_file_contents(file_path)
-        if not should_generate_impl_file_from_idl(idl_file_contents):
-            continue
-
-        # Extract interface name from file name
-        interface_name = idl_filename_to_interface_name(file_path)
-
-        meta_data = {
-            'name': interface_name,
-        }
-        meta_data_list.append(meta_data)
-
-    return meta_data_list
+    return options, args
 
 
-def generate_content(component_dir, aggregate_partial_interfaces, files_meta_data_this_partition):
+def generate_content(component, basenames, snake_case_generated_files):
     # Add fixed content.
     output = [COPYRIGHT_TEMPLATE,
               '#define NO_IMPLICIT_ATOMICSTRING\n\n']
 
-    # List all includes.
-    files_meta_data_this_partition.sort()
-    for meta_data in files_meta_data_this_partition:
-        if aggregate_partial_interfaces:
-            cpp_filename = 'V8%sPartial.cpp' % meta_data['name']
-        else:
-            cpp_filename = 'V8%s.cpp' % meta_data['name']
-
-        output.append('#include "bindings/%s/v8/%s"\n' %
-                      (component_dir, cpp_filename))
+    basenames.sort()
+    if snake_case_generated_files:
+        output.extend('#include "bindings/%s/v8/v8_%s.cc"\n' % (component, to_snake_case(basename))
+                      for basename in basenames)
+    else:
+        output.extend('#include "bindings/%s/v8/V8%s.cpp"\n' % (component, basename)
+                      for basename in basenames)
 
     return ''.join(output)
 
@@ -141,33 +125,16 @@
         f.write(content)
 
 
-def main(args):
-    if len(args) <= 4:
-        raise Exception('Expected at least 5 arguments.')
-    component_dir = args[1]
-    input_file_name = args[2]
-    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,
-                                                   is_gyp_format=True)
-    components = set([idl_filename_to_component(filename)
-                      for filename in idl_file_names])
-    if len(components) != 1:
-        raise Exception('Cannot aggregate generated codes in different components')
-    aggregate_partial_interfaces = component_dir not in components
-
-    files_meta_data = extract_meta_data(idl_file_names)
-    total_partitions = len(output_file_names)
-    for partition, file_name in enumerate(output_file_names):
-        files_meta_data_this_partition = [
-                meta_data for meta_data in files_meta_data
-                if hash(meta_data['name']) % total_partitions == partition]
-        file_contents = generate_content(component_dir,
-                                         aggregate_partial_interfaces,
-                                         files_meta_data_this_partition)
-        write_content(file_contents, file_name)
+def main():
+    options, filenames = parse_options()
+    component = options.component
+    idl_filenames = read_idl_files_list_from_file(filenames[0],
+                                                  is_gyp_format=False)
+    basenames = [idl_filename_to_basename(file_path)
+                 for file_path in idl_filenames]
+    file_contents = generate_content(component, basenames, options.snake_case_generated_files)
+    write_content(file_contents, filenames[1])
 
 
 if __name__ == '__main__':
-    sys.exit(main(sys.argv))
+    sys.exit(main())
diff --git a/bindings/scripts/blink_idl_lexer.py b/bindings/scripts/blink_idl_lexer.py
index 31a71ff..c14b145 100644
--- a/bindings/scripts/blink_idl_lexer.py
+++ b/bindings/scripts/blink_idl_lexer.py
@@ -70,25 +70,9 @@
 from idl_parser.idl_lexer import IDLLexer
 
 LEXTAB = 'lextab'
-REMOVE_TOKENS = ['COMMENT']
 
 
 class BlinkIDLLexer(IDLLexer):
-    # ignore comments
-    def t_COMMENT(self, t):
-        r'(/\*(.|\n)*?\*/)|(//.*(\n[ \t]*//.*)*)'
-        self.AddLines(t.value.count('\n'))
-
-    # Analogs to _AddToken/_AddTokens in base lexer
-    # Needed to remove COMMENT token, since comments ignored
-    def _RemoveToken(self, token):
-        if token in self.tokens:
-            self.tokens.remove(token)
-
-    def _RemoveTokens(self, tokens):
-        for token in tokens:
-            self._RemoveToken(token)
-
     def __init__(self, debug=False, optimize=True, outputdir=None,
                  rewrite_tables=False):
         if debug:
@@ -115,8 +99,6 @@
             lextab = None
 
         IDLLexer.__init__(self)
-        # Overrides to parent class
-        self._RemoveTokens(REMOVE_TOKENS)
         # Optimized mode substantially decreases startup time (by disabling
         # error checking), and also allows use of Python's optimized mode.
         # See: Optimized Mode
diff --git a/bindings/scripts/blink_idl_parser.py b/bindings/scripts/blink_idl_parser.py
index 55c3e5f..be8030c 100644
--- a/bindings/scripts/blink_idl_parser.py
+++ b/bindings/scripts/blink_idl_parser.py
@@ -53,6 +53,7 @@
 #
 # Disable attribute validation, as lint can't import parent class to check
 # pylint: disable=E1101
+#
 
 import os.path
 import sys
@@ -67,315 +68,14 @@
 # Base parser is in Chromium src/tools/idl_parser
 tools_dir = os.path.join(module_path, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, 'tools')
 sys.path.append(tools_dir)
-from idl_parser.idl_parser import IDLParser, ListFromConcat
+from idl_parser.idl_parser import IDLParser  # pylint: disable=import-error
 from idl_parser.idl_parser import ParseFile as parse_file
 
 from blink_idl_lexer import BlinkIDLLexer
 import blink_idl_lexer
 
 
-# Explicitly set starting symbol to rule defined only in base parser.
-# BEWARE that the starting symbol should NOT be defined in both the base parser
-# and the derived one, as otherwise which is used depends on which line number
-# is lower, which is fragile. Instead, either use one in base parser or
-# create a new symbol, so that this is unambiguous.
-# FIXME: unfortunately, this doesn't work in PLY 3.4, so need to duplicate the
-# rule below.
-STARTING_SYMBOL = 'Definitions'
-
-# We ignore comments (and hence don't need 'Top') but base parser preserves them
-# FIXME: Upstream: comments should be removed in base parser
-REMOVED_RULES = ['Top',  # [0]
-                 'Comments',  # [0.1]
-                 'CommentsRest',  # [0.2]
-                ]
-
-# Remove rules from base class
-# FIXME: add a class method upstream: @classmethod IDLParser._RemoveRules
-for rule in REMOVED_RULES:
-    production_name = 'p_' + rule
-    delattr(IDLParser, production_name)
-
-
 class BlinkIDLParser(IDLParser):
-    # [1]
-    # FIXME: Need to duplicate rule for starting symbol here, with line number
-    # *lower* than in the base parser (idl_parser.py).
-    # This is a bug in PLY: it determines starting symbol by lowest line number.
-    # This can be overridden by the 'start' parameter, but as of PLY 3.4 this
-    # doesn't work correctly.
-    def p_Definitions(self, p):
-        """Definitions : ExtendedAttributeList Definition Definitions
-                       | """
-        if len(p) > 1:
-            p[2].AddChildren(p[1])
-            p[0] = ListFromConcat(p[2], p[3])
-
-    # Below are grammar rules used by yacc, given by functions named p_<RULE>.
-    # * The docstring is the production rule in BNF (grammar).
-    # * The body is the yacc action (semantics).
-    #
-    # The PLY framework builds the actual low-level parser by introspecting this
-    # parser object, selecting all attributes named p_<RULE> as grammar rules.
-    # It extracts the docstrings and uses them as the production rules, building
-    # the table of a LALR parser, and uses the body of the functions as actions.
-    #
-    # Reference:
-    # http://www.dabeaz.com/ply/ply.html#ply_nn23
-    #
-    # Review of yacc:
-    # Yacc parses a token stream, internally producing a Concrete Syntax Tree
-    # (CST), where each node corresponds to a production rule in the grammar.
-    # At each node, it runs an action, which is usually "produce a node in the
-    # Abstract Syntax Tree (AST)" or "ignore this node" (for nodes in the CST
-    # that aren't included in the AST, since only needed for parsing).
-    #
-    # The rules use pseudo-variables; in PLY syntax:
-    # p[0] is the left side: assign return value to p[0] instead of returning,
-    # p[1] ... p[n] are the right side: the values can be accessed, and they
-    # can be modified.
-    # (In yacc these are $$ and $1 ... $n.)
-    #
-    # The rules can look cryptic at first, but there are a few standard
-    # transforms from the CST to AST. With these in mind, the actions should
-    # be reasonably legible.
-    #
-    # * Ignore production
-    #   Discard this branch. Primarily used when one alternative is empty.
-    #
-    #   Sample code:
-    #   if len(p) > 1:
-    #       p[0] = ...
-    #   # Note no assignment if len(p) == 1
-    #
-    # * Eliminate singleton production
-    #   Discard this node in the CST, pass the next level down up the tree.
-    #   Used to ignore productions only necessary for parsing, but not needed
-    #   in the AST.
-    #
-    #   Sample code:
-    #   p[0] = p[1]
-    #
-    # * Build node
-    #   The key type of rule. In this parser, produces object of class IDLNode.
-    #   There are several helper functions:
-    #   * BuildProduction: actually builds an IDLNode, based on a production.
-    #   * BuildAttribute: builds an IDLAttribute, which is a temporary
-    #                     object to hold a name-value pair, which is then
-    #                     set as a Property of the IDLNode when the IDLNode
-    #                     is built.
-    #   * BuildNamed: Same as BuildProduction, and sets the 'NAME' property.
-    #   * BuildTrue: BuildAttribute with value True, for flags.
-    #   See base idl_parser.py for definitions and more examples of use.
-    #
-    #   Sample code:
-    #   # Build node of type NodeType, with value p[1], and children.
-    #   p[0] = self.BuildProduction('NodeType', p, 1, children)
-    #
-    #   # Build named node of type NodeType, with name and value p[1].
-    #   # (children optional)
-    #   p[0] = self.BuildNamed('NodeType', p, 1)
-    #
-    #   # Make a list
-    #   # Used if one node has several children.
-    #   children = ListFromConcat(p[2], p[3])
-    #   p[0] = self.BuildProduction('NodeType', p, 1, children)
-    #
-    #   # Also used to collapse the right-associative tree
-    #   # produced by parsing a list back into a single list.
-    #   """Foos : Foo Foos
-    #           |"""
-    #   if len(p) > 1:
-    #       p[0] = ListFromConcat(p[1], p[2])
-    #
-    #   # Add children.
-    #   # Primarily used to add attributes, produced via BuildTrue.
-    #   # p_StaticAttribute
-    #   """StaticAttribute : STATIC Attribute"""
-    #   p[2].AddChildren(self.BuildTrue('STATIC'))
-    #   p[0] = p[2]
-    #
-    # Numbering scheme for the rules is:
-    # [1] for Web IDL spec (or additions in base parser)
-    #     These should all be upstreamed to the base parser.
-    # [b1] for Blink IDL changes (overrides Web IDL)
-    # [b1.1] for Blink IDL additions, auxiliary rules for [b1]
-    # Numbers are as per Candidate Recommendation 19 April 2012:
-    # http://www.w3.org/TR/2012/CR-WebIDL-20120419/
-
-    # [3] Override action, since we distinguish callbacks
-    # FIXME: Upstream
-    def p_CallbackOrInterface(self, p):
-        """CallbackOrInterface : CALLBACK CallbackRestOrInterface
-                               | Interface"""
-        if len(p) > 2:
-            p[2].AddChildren(self.BuildTrue('CALLBACK'))
-            p[0] = p[2]
-        else:
-            p[0] = p[1]
-
-    # [b27] Add strings, more 'Literal' productions
-    # 'Literal's needed because integers and strings are both internally strings
-    def p_ConstValue(self, p):
-        """ConstValue : BooleanLiteral
-                      | FloatLiteral
-                      | IntegerLiteral
-                      | StringLiteral
-                      | null"""
-        # Standard is (no 'string', fewer 'Literal's):
-        # ConstValue : BooleanLiteral
-        #            | FloatLiteral
-        #            | integer
-        #            | NULL
-        p[0] = p[1]
-
-    # [b27.1]
-    def p_IntegerLiteral(self, p):
-        """IntegerLiteral : integer"""
-        p[0] = ListFromConcat(self.BuildAttribute('TYPE', 'integer'),
-                              self.BuildAttribute('NAME', p[1]))
-
-    # [b27.2]
-    def p_StringLiteral(self, p):
-        """StringLiteral : string"""
-        p[0] = ListFromConcat(self.BuildAttribute('TYPE', 'DOMString'),
-                              self.BuildAttribute('NAME', p[1]))
-
-    # [b47]
-    def p_ExceptionMember(self, p):
-        """ExceptionMember : Const
-                           | ExceptionField
-                           | Attribute
-                           | ExceptionOperation"""
-        # Standard is (no Attribute, no ExceptionOperation):
-        # ExceptionMember : Const
-        #                 | ExceptionField
-        # FIXME: In DOMException.idl, Attributes should be changed to
-        # ExceptionFields, and Attribute removed from this rule.
-        p[0] = p[1]
-
-    # [b47.1] FIXME: rename to ExceptionAttribute
-    def p_Attribute(self, p):
-        """Attribute : ReadOnly ATTRIBUTE Type identifier ';'"""
-        p[0] = self.BuildNamed('Attribute', p, 4,
-                               ListFromConcat(p[1], p[3]))
-
-    # [b47.2]
-    def p_ExceptionOperation(self, p):
-        """ExceptionOperation : Type identifier '(' ')' ';'"""
-        # Needed to handle one case in DOMException.idl:
-        # // Override in a Mozilla compatible format
-        # [NotEnumerable] DOMString toString();
-        # Limited form of Operation to prevent others from being added.
-        # FIXME: Should be a stringifier instead.
-        p[0] = self.BuildNamed('ExceptionOperation', p, 2, p[1])
-
-    # Extended attributes
-    # [b49] Override base parser: remove comment field, since comments stripped
-    # FIXME: Upstream
-    def p_ExtendedAttributeList(self, p):
-        """ExtendedAttributeList : '[' ExtendedAttribute ExtendedAttributes ']'
-                                 | '[' ']'
-                                 | """
-        if len(p) > 3:
-            items = ListFromConcat(p[2], p[3])
-            p[0] = self.BuildProduction('ExtAttributes', p, 1, items)
-
-    # Error handling for ExtendedAttributeList.
-    # We can't upstream this because we override ExtendedAttributeList.
-    def p_ExtendedAttributeListError(self, p):
-        """ExtendedAttributeList : '[' ExtendedAttribute ',' error"""
-        p[0] = self.BuildError(p, "ExtendedAttributeList")
-
-    # [b50] Allow optional trailing comma
-    # Blink-only, marked as WONTFIX in Web IDL spec:
-    # https://www.w3.org/Bugs/Public/show_bug.cgi?id=22156
-    def p_ExtendedAttributes(self, p):
-        """ExtendedAttributes : ',' ExtendedAttribute ExtendedAttributes
-                              | ','
-                              |"""
-        if len(p) > 3:
-            p[0] = ListFromConcat(p[2], p[3])
-
-    # [b51] Add ExtendedAttributeStringLiteral and ExtendedAttributeStringLiteralList
-    def p_ExtendedAttribute(self, p):
-        """ExtendedAttribute : ExtendedAttributeNoArgs
-                             | ExtendedAttributeArgList
-                             | ExtendedAttributeIdent
-                             | ExtendedAttributeIdentList
-                             | ExtendedAttributeNamedArgList
-                             | ExtendedAttributeStringLiteral
-                             | ExtendedAttributeStringLiteralList"""
-        p[0] = p[1]
-
-    # [59]
-    # FIXME: Upstream UnionType
-    def p_UnionType(self, p):
-        """UnionType : '(' UnionMemberType OR UnionMemberType UnionMemberTypes ')'"""
-        members = ListFromConcat(p[2], p[4], p[5])
-        p[0] = self.BuildProduction('UnionType', p, 1, members)
-
-    # [60]
-    def p_UnionMemberType(self, p):
-        """UnionMemberType : NonAnyType
-                           | UnionType TypeSuffix
-                           | ANY '[' ']' TypeSuffix"""
-        if len(p) == 2:
-            p[0] = self.BuildProduction('Type', p, 1, p[1])
-        elif len(p) == 3:
-            p[0] = self.BuildProduction('Type', p, 1, ListFromConcat(p[1], p[2]))
-        else:
-            any_node = ListFromConcat(self.BuildProduction('Any', p, 1), p[4])
-            p[0] = self.BuildProduction('Type', p, 1, any_node)
-
-    # [61]
-    def p_UnionMemberTypes(self, p):
-        """UnionMemberTypes : OR UnionMemberType UnionMemberTypes
-                            |"""
-        if len(p) > 2:
-            p[0] = ListFromConcat(p[2], p[3])
-
-    # [70] Override base parser to remove non-standard sized array
-    # FIXME: Upstream
-    def p_TypeSuffix(self, p):
-        """TypeSuffix : '[' ']' TypeSuffix
-                      | '?' TypeSuffixStartingWithArray
-                      |"""
-        if len(p) == 4:
-            p[0] = self.BuildProduction('Array', p, 1, p[3])
-        elif len(p) == 3:
-            p[0] = ListFromConcat(self.BuildTrue('NULLABLE'), p[2])
-
-    # Blink extension: Add support for string literal Extended Attribute values
-    def p_ExtendedAttributeStringLiteral(self, p):
-        """ExtendedAttributeStringLiteral : identifier '=' StringLiteral """
-        def unwrap_string(ls):
-            """Reach in and grab the string literal's "NAME"."""
-            return ls[1].value
-
-        value = self.BuildAttribute('VALUE', unwrap_string(p[3]))
-        p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
-
-    # Blink extension: Add support for compound Extended Attribute values over string literals ("A","B")
-    def p_ExtendedAttributeStringLiteralList(self, p):
-        """ExtendedAttributeStringLiteralList : identifier '=' '(' StringLiteralList ')' """
-        value = self.BuildAttribute('VALUE', p[4])
-        p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
-
-    # Blink extension: one or more string literals. The values aren't propagated as literals,
-    # but their by their value only.
-    def p_StringLiteralList(self, p):
-        """StringLiteralList : StringLiteral ',' StringLiteralList
-                             | StringLiteral"""
-        def unwrap_string(ls):
-            """Reach in and grab the string literal's "NAME"."""
-            return ls[1].value
-
-        if len(p) > 3:
-            p[0] = ListFromConcat(unwrap_string(p[1]), p[3])
-        else:
-            p[0] = ListFromConcat(unwrap_string(p[1]))
-
     def __init__(self,
                  # common parameters
                  debug=False,
@@ -406,10 +106,6 @@
                                        optimize=optimize)
         self.lexer = lexer
         self.tokens = lexer.KnownTokens()
-        # Using SLR (instead of LALR) generates the table faster,
-        # but produces the same output. This is ok b/c Web IDL (and Blink IDL)
-        # is an SLR grammar (as is often the case for simple LL(1) grammars).
-        #
         # Optimized mode substantially decreases startup time (by disabling
         # error checking), and also allows use of Python's optimized mode.
         # See: Using Python's Optimized Mode
@@ -420,8 +116,6 @@
         # See: CHANGES, Version 3.2
         # http://ply.googlecode.com/svn/trunk/CHANGES
         self.yaccobj = yacc.yacc(module=self,
-                                 start=STARTING_SYMBOL,
-                                 method='SLR',
                                  debug=debug,
                                  optimize=optimize,
                                  write_tables=write_tables,
diff --git a/bindings/scripts/blink_idl_parser_test.py b/bindings/scripts/blink_idl_parser_test.py
new file mode 100644
index 0000000..309b463
--- /dev/null
+++ b/bindings/scripts/blink_idl_parser_test.py
@@ -0,0 +1,21 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=no-member,relative-import
+
+"""Unit tests for blink_idl_parser.py."""
+
+import unittest
+
+from blink_idl_parser import BlinkIDLParser
+
+
+class BlinkIDLParserTest(unittest.TestCase):
+
+    def test_missing_semicolon_between_definitions(self):
+        # No semicolon after enum definition.
+        text = '''enum TestEnum { "value" } dictionary TestDictionary {};'''
+        parser = BlinkIDLParser()
+        parser.ParseText(filename='', data=text)
+        self.assertGreater(parser.GetErrors(), 0)
diff --git a/bindings/scripts/code_generator.py b/bindings/scripts/code_generator.py
new file mode 100644
index 0000000..66838f8
--- /dev/null
+++ b/bindings/scripts/code_generator.py
@@ -0,0 +1,201 @@
+# 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.
+
+# pylint: disable=import-error,print-statement,relative-import
+
+"""Plumbing for a Jinja-based code generator, including CodeGeneratorBase, a base class for all generators."""
+
+import os
+import posixpath
+import re
+import sys
+
+from idl_types import set_ancestors, IdlType
+from v8_globals import includes
+from v8_interface import constant_filters
+from v8_types import set_component_dirs
+from v8_methods import method_filters
+import v8_utilities
+from v8_utilities import capitalize
+from utilities import (idl_filename_to_component, is_valid_component_dependency,
+                       format_remove_duplicates, format_blink_cpp_source_code,
+                       to_snake_case)
+
+# Path handling for libraries and templates
+# Paths have to be normalized because Jinja uses the exact template path to
+# determine the hash used in the cache filename, and we need a pre-caching step
+# to be concurrency-safe. Use absolute path because __file__ is absolute if
+# module is imported, and relative if executed directly.
+# If paths differ between pre-caching and individual file compilation, the cache
+# is regenerated, which causes a race condition and breaks concurrent build,
+# since some compile processes will try to read the partially written cache.
+MODULE_PATH, _ = os.path.split(os.path.realpath(__file__))
+THIRD_PARTY_DIR = os.path.normpath(os.path.join(
+    MODULE_PATH, os.pardir, os.pardir, os.pardir, os.pardir))
+TEMPLATES_DIR = os.path.normpath(os.path.join(
+    MODULE_PATH, os.pardir, 'templates'))
+
+# jinja2 is in chromium's third_party directory.
+# Insert at 1 so at front to override system libraries, and
+# after path[0] == invoking script dir
+sys.path.insert(1, THIRD_PARTY_DIR)
+import jinja2
+
+
+def generate_indented_conditional(code, conditional):
+    # Indent if statement to level of original code
+    indent = re.match(' *', code).group(0)
+    return ('%sif (%s) {\n' % (indent, conditional) +
+            '  %s\n' % '\n  '.join(code.splitlines()) +
+            '%s}\n' % indent)
+
+
+# [Exposed]
+def exposed_if(code, exposed_test):
+    if not exposed_test:
+        return code
+    return generate_indented_conditional(code, 'executionContext && (%s)' % exposed_test)
+
+
+# [SecureContext]
+def secure_context_if(code, secure_context_test, test_result=None):
+    if not secure_context_test:
+        return code
+    if test_result:
+        return generate_indented_conditional(code, test_result)
+    return generate_indented_conditional(code, 'executionContext && (%s)' % secure_context_test)
+
+
+# [RuntimeEnabled]
+def runtime_enabled_if(code, name):
+    if not name:
+        return code
+
+    function = v8_utilities.runtime_enabled_function(name)
+    return generate_indented_conditional(code, function)
+
+def initialize_jinja_env(cache_dir):
+    jinja_env = jinja2.Environment(
+        loader=jinja2.FileSystemLoader(TEMPLATES_DIR),
+        # Bytecode cache is not concurrency-safe unless pre-cached:
+        # if pre-cached this is read-only, but writing creates a race condition.
+        bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
+        keep_trailing_newline=True,  # newline-terminate generated files
+        lstrip_blocks=True,  # so can indent control flow tags
+        trim_blocks=True)
+    jinja_env.filters.update({
+        'blink_capitalize': capitalize,
+        'exposed': exposed_if,
+        'format_blink_cpp_source_code': format_blink_cpp_source_code,
+        'format_remove_duplicates': format_remove_duplicates,
+        'runtime_enabled': runtime_enabled_if,
+        'runtime_enabled_function': v8_utilities.runtime_enabled_function,
+        'secure_context': secure_context_if})
+    jinja_env.filters.update(constant_filters())
+    jinja_env.filters.update(method_filters())
+    return jinja_env
+
+
+def normalize_and_sort_includes(include_paths, snake_case):
+    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)
+        if snake_case:
+            match = re.search(r'/([^/]+)\.h$', include_path)
+            if match:
+                name = match.group(1)
+                if name.lower() != name:
+                    include_path = include_path[0:match.start(1)] + to_snake_case(name) + '.h'
+        normalized_include_paths.append(include_path)
+    return sorted(normalized_include_paths)
+
+
+def render_template(template, context):
+    filename = str(template.filename)
+    filename = filename[filename.rfind('third_party'):]
+    context['jinja_template_filename'] = filename
+    return template.render(context)
+
+
+class CodeGeneratorBase(object):
+    """Base class for jinja-powered jinja template generation.
+    """
+    def __init__(self, generator_name, info_provider, cache_dir, output_dir, snake_case):
+        self.generator_name = generator_name
+        self.info_provider = info_provider
+        self.jinja_env = initialize_jinja_env(cache_dir)
+        self.output_dir = output_dir
+        self.snake_case_generated_files = snake_case
+        self.set_global_type_info()
+
+    def should_generate_code(self, definitions):
+        return definitions.interfaces or definitions.dictionaries
+
+    def set_global_type_info(self):
+        interfaces_info = self.info_provider.interfaces_info
+        set_ancestors(interfaces_info['ancestors'])
+        IdlType.set_callback_interfaces(interfaces_info['callback_interfaces'])
+        IdlType.set_dictionaries(interfaces_info['dictionaries'])
+        IdlType.set_enums(self.info_provider.enumerations)
+        IdlType.set_callback_functions(self.info_provider.callback_functions)
+        IdlType.set_implemented_as_interfaces(interfaces_info['implemented_as_interfaces'])
+        IdlType.set_garbage_collected_types(interfaces_info['garbage_collected_interfaces'])
+        set_component_dirs(interfaces_info['component_dirs'])
+
+    def render_template(self, include_paths, header_template, cpp_template,
+                        template_context, component=None):
+        template_context['code_generator'] = self.generator_name
+
+        # Add includes for any dependencies
+        template_context['header_includes'] = normalize_and_sort_includes(
+            template_context['header_includes'], self.snake_case_generated_files)
+
+        for include_path in include_paths:
+            if component:
+                dependency = idl_filename_to_component(include_path)
+                assert is_valid_component_dependency(component, dependency)
+            includes.add(include_path)
+
+        template_context['cpp_includes'] = normalize_and_sort_includes(includes, self.snake_case_generated_files)
+
+        header_text = render_template(header_template, template_context)
+        cpp_text = render_template(cpp_template, template_context)
+        return header_text, cpp_text
+
+    def generate_code(self, definitions, definition_name):
+        """Invokes code generation. The [definitions] argument is a list of definitions,
+        and the [definition_name] is the name of the definition
+        """
+        # This should be implemented in subclasses.
+        raise NotImplementedError()
+
+
+def main(argv):
+    # If file itself executed, cache templates
+    try:
+        cache_dir = argv[1]
+        dummy_filename = argv[2]
+    except IndexError:
+        print 'Usage: %s CACHE_DIR DUMMY_FILENAME' % argv[0]
+        return 1
+
+    # Cache templates
+    jinja_env = initialize_jinja_env(cache_dir)
+    template_filenames = [filename for filename in os.listdir(TEMPLATES_DIR)
+                          # Skip .svn, directories, etc.
+                          if filename.endswith(('.tmpl', '.txt'))]
+    for template_filename in template_filenames:
+        jinja_env.get_template(template_filename)
+
+    # Create a dummy file as output for the build system,
+    # since filenames of individual cache files are unpredictable and opaque
+    # (they are hashes of the template path, which varies based on environment)
+    with open(dummy_filename, 'w') as dummy_file:
+        pass  # |open| creates or touches the file
+
+
+if __name__ == '__main__':
+    sys.exit(main(sys.argv))
diff --git a/bindings/scripts/code_generator_v8.py b/bindings/scripts/code_generator_v8.py
index 381d321..c971aa9 100644
--- a/bindings/scripts/code_generator_v8.py
+++ b/bindings/scripts/code_generator_v8.py
@@ -26,6 +26,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+# pylint: disable=import-error,print-statement,relative-import
+
 """Generate Blink V8 bindings (.h and .cpp files).
 
 If run itself, caches Jinja templates (and creates dummy file for build,
@@ -45,121 +47,65 @@
 
 import os
 import posixpath
-import re
-import sys
 
-# Path handling for libraries and templates
-# Paths have to be normalized because Jinja uses the exact template path to
-# determine the hash used in the cache filename, and we need a pre-caching step
-# to be concurrency-safe. Use absolute path because __file__ is absolute if
-# module is imported, and relative if executed directly.
-# If paths differ between pre-caching and individual file compilation, the cache
-# is regenerated, which causes a race condition and breaks concurrent build,
-# since some compile processes will try to read the partially written cache.
-module_path, module_filename = os.path.split(os.path.realpath(__file__))
-third_party_dir = os.path.normpath(os.path.join(
-    module_path, os.pardir, os.pardir, os.pardir, os.pardir))
-templates_dir = os.path.normpath(os.path.join(
-    module_path, os.pardir, 'templates'))
-# Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
-module_pyname = os.path.splitext(module_filename)[0] + '.py'
-
-# jinja2 is in chromium's third_party directory.
-# Insert at 1 so at front to override system libraries, and
-# after path[0] == invoking script dir
-sys.path.insert(1, third_party_dir)
-import jinja2
-
+from code_generator import CodeGeneratorBase, render_template, normalize_and_sort_includes
 from idl_definitions import Visitor
-import idl_types
 from idl_types import IdlType
+import v8_callback_function
 import v8_callback_interface
 import v8_dictionary
-from v8_globals import includes, interfaces
+from v8_globals import includes
 import v8_interface
 import v8_types
 import v8_union
-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
+from v8_utilities import build_basename, cpp_name
+from utilities import idl_filename_to_component, is_testing_target, shorten_union_name, to_snake_case
 
 
-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)
+# Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
+MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py'
 
-
-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'] = normalize_and_sort_includes(
-        template_context['header_includes'])
-
-    for include_path in include_paths:
-        if component:
-            dependency = idl_filename_to_component(include_path)
-            assert is_valid_component_dependency(component, dependency)
-        includes.add(include_path)
-
-    template_context['cpp_includes'] = normalize_and_sort_includes(includes)
-
-    header_text = header_template.render(template_context)
-    cpp_text = cpp_template.render(template_context)
-    return header_text, cpp_text
-
-
-def set_global_type_info(info_provider):
-    interfaces_info = info_provider.interfaces_info
-    idl_types.set_ancestors(interfaces_info['ancestors'])
-    IdlType.set_callback_interfaces(interfaces_info['callback_interfaces'])
-    IdlType.set_dictionaries(interfaces_info['dictionaries'])
-    IdlType.set_enums(info_provider.enumerations)
-    IdlType.set_implemented_as_interfaces(interfaces_info['implemented_as_interfaces'])
-    IdlType.set_garbage_collected_types(interfaces_info['garbage_collected_interfaces'])
-    IdlType.set_will_be_garbage_collected_types(interfaces_info['will_be_garbage_collected_interfaces'])
-    v8_types.set_component_dirs(interfaces_info['component_dirs'])
-
-
-def should_generate_code(definitions):
-    return definitions.interfaces or definitions.dictionaries
-
-
-def depends_on_union_types(idl_type):
-    """Returns true when a given idl_type depends on union containers
-    directly.
+def depending_union_type(idl_type):
+    """Returns the union type name if the given idl_type depends on a
+    union type.
     """
-    if idl_type.is_union_type:
-        return True
-    if idl_type.is_array_or_sequence_type:
-        return idl_type.element_type.is_union_type
-    return False
+    def find_base_type(current_type):
+        if current_type.is_array_or_sequence_type:
+            return find_base_type(current_type.element_type)
+        if current_type.is_record_type:
+            # IdlRecordType.key_type is always a string type, so we only need
+            # to looking into value_type.
+            return find_base_type(current_type.value_type)
+        if current_type.is_nullable:
+            return find_base_type(current_type.inner_type)
+        return current_type
+    base_type = find_base_type(idl_type)
+    if base_type.is_union_type:
+        return base_type
+    return None
 
 
 class TypedefResolver(Visitor):
     def __init__(self, info_provider):
         self.info_provider = info_provider
+        self.additional_header_includes = set()
+        self.typedefs = {}
 
     def resolve(self, definitions, definition_name):
         """Traverse definitions and resolves typedefs with the actual types."""
         self.typedefs = {}
         for name, typedef in self.info_provider.typedefs.iteritems():
             self.typedefs[name] = typedef.idl_type
-        self.additional_includes = set()
+        self.additional_header_includes = set()
         definitions.accept(self)
         self._update_dependencies_include_paths(definition_name)
 
     def _update_dependencies_include_paths(self, definition_name):
+        if definition_name not in self.info_provider.interfaces_info:
+            return
         interface_info = self.info_provider.interfaces_info[definition_name]
-        dependencies_include_paths = interface_info['dependencies_include_paths']
-        for include_path in self.additional_includes:
-            if include_path not in dependencies_include_paths:
-                dependencies_include_paths.append(include_path)
+        interface_info['additional_header_includes'] = set(
+            self.additional_header_includes)
 
     def _resolve_typedefs(self, typed_object):
         """Resolve typedefs to actual types in the object."""
@@ -171,9 +117,12 @@
             if not idl_type:
                 continue
             resolved_idl_type = idl_type.resolve_typedefs(self.typedefs)
-            if depends_on_union_types(resolved_idl_type):
-                self.additional_includes.add(
-                    self.info_provider.include_path_for_union_types)
+            # TODO(bashi): Dependency resolution shouldn't happen here.
+            # Move this into includes_for_type() families.
+            union_type = depending_union_type(resolved_idl_type)
+            if union_type:
+                self.additional_header_includes.add(
+                    self.info_provider.include_path_for_union_types(union_type))
             # Need to re-assign the attribute, not just mutate idl_type, since
             # type(idl_type) may change.
             setattr(typed_object, attribute_name, resolved_idl_type)
@@ -182,23 +131,19 @@
         self._resolve_typedefs(typed_object)
 
 
-class CodeGeneratorBase(object):
+class CodeGeneratorV8Base(CodeGeneratorBase):
     """Base class for v8 bindings generator and IDL dictionary impl generator"""
 
-    def __init__(self, info_provider, cache_dir, output_dir):
-        self.info_provider = info_provider
-        self.jinja_env = initialize_jinja_env(cache_dir)
-        self.output_dir = output_dir
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case):
+        CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir, snake_case)
         self.typedef_resolver = TypedefResolver(info_provider)
-        set_global_type_info(info_provider)
 
     def generate_code(self, definitions, definition_name):
         """Returns .h/.cpp code as ((path, content)...)."""
         # Set local type info
-        if not should_generate_code(definitions):
+        if not self.should_generate_code(definitions):
             return set()
 
-        IdlType.set_callback_functions(definitions.callback_functions.keys())
         # Resolve typedefs
         self.typedef_resolver.resolve(definitions, definition_name)
         return self.generate_code_internal(definitions, definition_name)
@@ -207,15 +152,19 @@
         # This should be implemented in subclasses.
         raise NotImplementedError()
 
+    def get_output_basename(self, definition_name, ext, prefix=None):
+        return build_basename(definition_name, self.snake_case_generated_files, prefix=prefix, ext=ext)
 
-class CodeGeneratorV8(CodeGeneratorBase):
-    def __init__(self, info_provider, cache_dir, output_dir):
-        CodeGeneratorBase.__init__(self, info_provider, cache_dir, output_dir)
+
+class CodeGeneratorV8(CodeGeneratorV8Base):
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case):
+        CodeGeneratorV8Base.__init__(self, info_provider, cache_dir, output_dir, snake_case)
 
     def output_paths(self, definition_name):
-        header_path = posixpath.join(self.output_dir,
-                                     'V8%s.h' % definition_name)
-        cpp_path = posixpath.join(self.output_dir, 'V8%s.cpp' % definition_name)
+        header_path = posixpath.join(self.output_dir, self.get_output_basename(
+            definition_name, '.h', prefix='V8'))
+        cpp_path = posixpath.join(self.output_dir, self.get_output_basename(
+            definition_name, '.cpp', prefix='V8'))
         return header_path, cpp_path
 
     def generate_code_internal(self, definitions, definition_name):
@@ -230,49 +179,55 @@
         raise ValueError('%s is not in IDL definitions' % definition_name)
 
     def generate_interface_code(self, definitions, interface_name, interface):
-        # Store other interfaces for introspection
-        interfaces.update(definitions.interfaces)
-
         interface_info = self.info_provider.interfaces_info[interface_name]
         full_path = interface_info.get('full_path')
         component = idl_filename_to_component(full_path)
         include_paths = interface_info.get('dependencies_include_paths')
 
         # Select appropriate Jinja template and contents function
-        if interface.is_callback:
-            header_template_filename = 'callback_interface.h'
-            cpp_template_filename = 'callback_interface.cpp'
+        #
+        # A callback interface with constants needs a special handling.
+        # https://heycam.github.io/webidl/#legacy-callback-interface-object
+        if interface.is_callback and len(interface.constants) > 0:
+            header_template_filename = 'legacy_callback_interface.h.tmpl'
+            cpp_template_filename = 'legacy_callback_interface.cpp.tmpl'
+            interface_context = v8_callback_interface.legacy_callback_interface_context
+        elif interface.is_callback:
+            header_template_filename = 'callback_interface.h.tmpl'
+            cpp_template_filename = 'callback_interface.cpp.tmpl'
             interface_context = v8_callback_interface.callback_interface_context
         elif interface.is_partial:
             interface_context = v8_interface.interface_context
-            header_template_filename = 'partial_interface.h'
-            cpp_template_filename = 'partial_interface.cpp'
+            header_template_filename = 'partial_interface.h.tmpl'
+            cpp_template_filename = 'partial_interface.cpp.tmpl'
             interface_name += 'Partial'
             assert component == 'core'
             component = 'modules'
             include_paths = interface_info.get('dependencies_other_component_include_paths')
         else:
-            header_template_filename = 'interface.h'
-            cpp_template_filename = 'interface.cpp'
+            header_template_filename = 'interface.h.tmpl'
+            cpp_template_filename = 'interface.cpp.tmpl'
             interface_context = v8_interface.interface_context
 
-        template_context = interface_context(interface)
+        template_context = interface_context(interface, definitions.interfaces)
         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
         # Add the include for interface itself
         if IdlType(interface_name).is_typed_array:
-            template_context['header_includes'].add('core/dom/DOMTypedArray.h')
-        elif interface_info['include_path']:
+            template_context['header_includes'].add('core/typed_arrays/DOMTypedArray.h')
+        else:
             template_context['header_includes'].add(interface_info['include_path'])
-
+        template_context['header_includes'].update(
+            interface_info.get('additional_header_includes', []))
+        header_path, cpp_path = self.output_paths(interface_name)
+        template_context['this_include_header_name'] = posixpath.basename(header_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(
+        header_text, cpp_text = self.render_template(
             include_paths, header_template, cpp_template, template_context,
             component)
-        header_path, cpp_path = self.output_paths(interface_name)
         return (
             (header_path, header_text),
             (cpp_path, cpp_text),
@@ -280,187 +235,181 @@
 
     def generate_dictionary_code(self, definitions, dictionary_name,
                                  dictionary):
+        # pylint: disable=unused-argument
         interfaces_info = self.info_provider.interfaces_info
-        header_template = self.jinja_env.get_template('dictionary_v8.h')
-        cpp_template = self.jinja_env.get_template('dictionary_v8.cpp')
+        header_template = self.jinja_env.get_template('dictionary_v8.h.tmpl')
+        cpp_template = self.jinja_env.get_template('dictionary_v8.cpp.tmpl')
         interface_info = interfaces_info[dictionary_name]
         template_context = v8_dictionary.dictionary_context(
             dictionary, interfaces_info)
         include_paths = interface_info.get('dependencies_include_paths')
         # Add the include for interface itself
-        if interface_info['include_path']:
-            template_context['header_includes'].add(interface_info['include_path'])
+        template_context['header_includes'].add(interface_info['include_path'])
         if not is_testing_target(interface_info.get('full_path')):
             template_context['header_includes'].add(self.info_provider.include_path_for_export)
             template_context['exported'] = self.info_provider.specifier_for_export
-        header_text, cpp_text = render_template(
-            include_paths, header_template, cpp_template, template_context)
         header_path, cpp_path = self.output_paths(dictionary_name)
+        template_context['this_include_header_name'] = posixpath.basename(header_path)
+        header_text, cpp_text = self.render_template(
+            include_paths, header_template, cpp_template, template_context)
         return (
             (header_path, header_text),
             (cpp_path, cpp_text),
         )
 
 
-class CodeGeneratorDictionaryImpl(CodeGeneratorBase):
-    def __init__(self, info_provider, cache_dir, output_dir):
-        CodeGeneratorBase.__init__(self, info_provider, cache_dir, output_dir)
+class CodeGeneratorDictionaryImpl(CodeGeneratorV8Base):
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case):
+        CodeGeneratorV8Base.__init__(self, info_provider, cache_dir, output_dir, snake_case)
 
     def output_paths(self, definition_name, interface_info):
         output_dir = posixpath.join(self.output_dir,
                                     interface_info['relative_dir'])
-        header_path = posixpath.join(output_dir, '%s.h' % definition_name)
-        cpp_path = posixpath.join(output_dir, '%s.cpp' % definition_name)
+        header_path = posixpath.join(output_dir,
+                                     self.get_output_basename(definition_name, '.h'))
+        cpp_path = posixpath.join(output_dir,
+                                  self.get_output_basename(definition_name, '.cpp'))
         return header_path, cpp_path
 
     def generate_code_internal(self, definitions, definition_name):
         if not definition_name in definitions.dictionaries:
-            raise ValueError('%s is not an IDL dictionary')
+            raise ValueError('%s is not an IDL dictionary' % definition_name)
         interfaces_info = self.info_provider.interfaces_info
         dictionary = definitions.dictionaries[definition_name]
         interface_info = interfaces_info[definition_name]
-        header_template = self.jinja_env.get_template('dictionary_impl.h')
-        cpp_template = self.jinja_env.get_template('dictionary_impl.cpp')
+        header_template = self.jinja_env.get_template('dictionary_impl.h.tmpl')
+        cpp_template = self.jinja_env.get_template('dictionary_impl.cpp.tmpl')
         template_context = v8_dictionary.dictionary_impl_context(
             dictionary, interfaces_info)
         include_paths = interface_info.get('dependencies_include_paths')
-        # Add union containers header file to header_includes rather than
-        # cpp file so that union containers can be used in dictionary headers.
-        union_container_headers = [header for header in include_paths
-                                   if header.find('UnionTypes') > 0]
-        include_paths = [header for header in include_paths
-                         if header not in union_container_headers]
-        template_context['header_includes'].update(union_container_headers)
         if not is_testing_target(interface_info.get('full_path')):
             template_context['exported'] = self.info_provider.specifier_for_export
             template_context['header_includes'].add(self.info_provider.include_path_for_export)
-        header_text, cpp_text = render_template(
-            include_paths, header_template, cpp_template, template_context)
+        template_context['header_includes'].update(
+            interface_info.get('additional_header_includes', []))
         header_path, cpp_path = self.output_paths(
             cpp_name(dictionary), interface_info)
+        template_context['this_include_header_name'] = posixpath.basename(header_path)
+        header_text, cpp_text = self.render_template(
+            include_paths, header_template, cpp_template, template_context)
         return (
             (header_path, header_text),
             (cpp_path, cpp_text),
         )
 
 
-class CodeGeneratorUnionType(object):
+class CodeGeneratorUnionType(CodeGeneratorBase):
     """Generates union type container classes.
     This generator is different from CodeGeneratorV8 and
     CodeGeneratorDictionaryImpl. It assumes that all union types are already
     collected. It doesn't process idl files directly.
     """
-    def __init__(self, info_provider, cache_dir, output_dir, target_component):
-        self.info_provider = info_provider
-        self.jinja_env = initialize_jinja_env(cache_dir)
-        self.output_dir = output_dir
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case, target_component):
+        CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir, snake_case)
         self.target_component = target_component
-        set_global_type_info(info_provider)
+        # The code below duplicates parts of TypedefResolver. We do not use it
+        # directly because IdlUnionType is not a type defined in
+        # idl_definitions.py. What we do instead is to resolve typedefs in
+        # _generate_container_code() whenever a new union file is generated.
+        self.typedefs = {}
+        for name, typedef in self.info_provider.typedefs.iteritems():
+            self.typedefs[name] = typedef.idl_type
 
-    def generate_code(self):
-        union_types = self.info_provider.union_types
-        if not union_types:
-            return ()
-        header_template = self.jinja_env.get_template('union.h')
-        cpp_template = self.jinja_env.get_template('union.cpp')
-        template_context = v8_union.union_context(
-            union_types, self.info_provider.interfaces_info)
-        template_context['code_generator'] = module_pyname
-        capitalized_component = self.target_component.capitalize()
-        template_context['exported'] = self.info_provider.specifier_for_export
-        template_context['header_filename'] = 'bindings/%s/v8/UnionTypes%s.h' % (
-            self.target_component, capitalized_component)
-        template_context['macro_guard'] = 'UnionType%s_h' % capitalized_component
-        additional_header_includes = [self.info_provider.include_path_for_export]
-
-        # Add UnionTypesCore.h as a dependency when we generate modules union types
-        # because we only generate union type containers which are used by both
-        # core and modules in UnionTypesCore.h.
-        # FIXME: This is an ad hoc workaround and we need a general way to
-        # handle core <-> modules dependency.
-        if self.target_component == 'modules':
-            additional_header_includes.append(
-                'bindings/core/v8/UnionTypesCore.h')
-
+    def _generate_container_code(self, union_type):
+        union_type = union_type.resolve_typedefs(self.typedefs)
+        header_template = self.jinja_env.get_template('union_container.h.tmpl')
+        cpp_template = self.jinja_env.get_template('union_container.cpp.tmpl')
+        template_context = v8_union.container_context(
+            union_type, self.info_provider)
+        template_context['header_includes'].append(
+            self.info_provider.include_path_for_export)
         template_context['header_includes'] = normalize_and_sort_includes(
-            template_context['header_includes'] + additional_header_includes)
-
-        header_text = header_template.render(template_context)
-        cpp_text = cpp_template.render(template_context)
-        header_path = posixpath.join(self.output_dir,
-                                     'UnionTypes%s.h' % capitalized_component)
-        cpp_path = posixpath.join(self.output_dir,
-                                  'UnionTypes%s.cpp' % capitalized_component)
+            template_context['header_includes'], self.snake_case_generated_files)
+        template_context['cpp_includes'] = normalize_and_sort_includes(
+            template_context['cpp_includes'], self.snake_case_generated_files)
+        template_context['code_generator'] = self.generator_name
+        template_context['exported'] = self.info_provider.specifier_for_export
+        snake_base_name = to_snake_case(shorten_union_name(union_type))
+        template_context['this_include_header_name'] = snake_base_name
+        header_text = render_template(header_template, template_context)
+        cpp_text = render_template(cpp_template, template_context)
+        header_path = posixpath.join(self.output_dir, '%s.h' % snake_base_name)
+        cpp_path = posixpath.join(self.output_dir, '%s.cc' % snake_base_name)
         return (
             (header_path, header_text),
             (cpp_path, cpp_text),
         )
 
+    def _get_union_types_for_containers(self):
+        union_types = self.info_provider.union_types
+        if not union_types:
+            return None
+        # For container classes we strip nullable wrappers. For example,
+        # both (A or B)? and (A? or B) will become AOrB. This should be OK
+        # because container classes can handle null and it seems that
+        # distinguishing (A or B)? and (A? or B) doesn't make sense.
+        container_cpp_types = set()
+        union_types_for_containers = 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)
+        return union_types_for_containers
 
-def initialize_jinja_env(cache_dir):
-    jinja_env = jinja2.Environment(
-        loader=jinja2.FileSystemLoader(templates_dir),
-        # Bytecode cache is not concurrency-safe unless pre-cached:
-        # if pre-cached this is read-only, but writing creates a race condition.
-        bytecode_cache=jinja2.FileSystemBytecodeCache(cache_dir),
-        keep_trailing_newline=True,  # newline-terminate generated files
-        lstrip_blocks=True,  # so can indent control flow tags
-        trim_blocks=True)
-    jinja_env.filters.update({
-        'blink_capitalize': capitalize,
-        'exposed': exposed_if,
-        'runtime_enabled': runtime_enabled_if,
-        })
-    return jinja_env
+    def generate_code(self):
+        union_types = self._get_union_types_for_containers()
+        if not union_types:
+            return ()
+        outputs = set()
+        for union_type in union_types:
+            outputs.update(self._generate_container_code(union_type))
+        return outputs
 
 
-def generate_indented_conditional(code, conditional):
-    # Indent if statement to level of original code
-    indent = re.match(' *', code).group(0)
-    return ('%sif (%s) {\n' % (indent, conditional) +
-            '    %s\n' % '\n    '.join(code.splitlines()) +
-            '%s}\n' % indent)
+class CodeGeneratorCallbackFunction(CodeGeneratorBase):
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case, target_component):
+        CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider, cache_dir, output_dir, snake_case)
+        self.target_component = target_component
+        self.typedef_resolver = TypedefResolver(info_provider)
 
+    def generate_code_internal(self, callback_function, path):
+        self.typedef_resolver.resolve(callback_function, callback_function.name)
+        header_template = self.jinja_env.get_template('callback_function.h.tmpl')
+        cpp_template = self.jinja_env.get_template('callback_function.cpp.tmpl')
+        template_context = v8_callback_function.callback_function_context(
+            callback_function)
+        if not is_testing_target(path):
+            template_context['exported'] = self.info_provider.specifier_for_export
+            template_context['header_includes'].append(
+                self.info_provider.include_path_for_export)
+        template_context['header_includes'] = normalize_and_sort_includes(
+            template_context['header_includes'], self.snake_case_generated_files)
+        template_context['cpp_includes'] = normalize_and_sort_includes(
+            template_context['cpp_includes'], self.snake_case_generated_files)
+        template_context['code_generator'] = MODULE_PYNAME
+        header_text = render_template(header_template, template_context)
+        cpp_text = render_template(cpp_template, template_context)
+        snake_base_name = to_snake_case('V8%s' % callback_function.name)
+        header_path = posixpath.join(self.output_dir, '%s.h' % snake_base_name)
+        cpp_path = posixpath.join(self.output_dir, '%s.cc' % snake_base_name)
+        return (
+            (header_path, header_text),
+            (cpp_path, cpp_text),
+        )
 
-# [Exposed]
-def exposed_if(code, exposed_test):
-    if not exposed_test:
-        return code
-    return generate_indented_conditional(code, 'executionContext && (%s)' % exposed_test)
-
-
-# [RuntimeEnabled]
-def runtime_enabled_if(code, runtime_enabled_function_name):
-    if not runtime_enabled_function_name:
-        return code
-    return generate_indented_conditional(code, '%s()' % runtime_enabled_function_name)
-
-
-################################################################################
-
-def main(argv):
-    # If file itself executed, cache templates
-    try:
-        cache_dir = argv[1]
-        dummy_filename = argv[2]
-    except IndexError as err:
-        print 'Usage: %s CACHE_DIR DUMMY_FILENAME' % argv[0]
-        return 1
-
-    # Cache templates
-    jinja_env = initialize_jinja_env(cache_dir)
-    template_filenames = [filename for filename in os.listdir(templates_dir)
-                          # Skip .svn, directories, etc.
-                          if filename.endswith(('.cpp', '.h'))]
-    for template_filename in template_filenames:
-        jinja_env.get_template(template_filename)
-
-    # Create a dummy file as output for the build system,
-    # since filenames of individual cache files are unpredictable and opaque
-    # (they are hashes of the template path, which varies based on environment)
-    with open(dummy_filename, 'w') as dummy_file:
-        pass  # |open| creates or touches the file
-
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
+    # pylint: disable=W0221
+    def generate_code(self):
+        callback_functions = self.info_provider.callback_functions
+        if not callback_functions:
+            return ()
+        outputs = set()
+        for callback_function_dict in callback_functions.itervalues():
+            if callback_function_dict['component_dir'] != self.target_component:
+                continue
+            callback_function = callback_function_dict['callback_function']
+            if 'Custom' in callback_function.extended_attributes:
+                continue
+            path = callback_function_dict['full_path']
+            outputs.update(self.generate_code_internal(callback_function, path))
+        return outputs
diff --git a/bindings/scripts/code_generator_web_agent_api.py b/bindings/scripts/code_generator_web_agent_api.py
new file mode 100644
index 0000000..69d4aff
--- /dev/null
+++ b/bindings/scripts/code_generator_web_agent_api.py
@@ -0,0 +1,285 @@
+# 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.
+
+# pylint: disable=import-error,print-statement,relative-import
+
+"""Generates Web Agent API bindings.
+
+The Web Agent API bindings provide a stable, IDL-generated interface for the
+Web Agents.
+
+The Web Agents are the high-level services like Autofill,
+Autocomplete, Translate, Distiller, Phishing Detector, and others. Web Agents
+typically want to introspec the document and rendering infromation to implement
+browser features.
+
+The bindings are meant to be as simple and as ephemeral as possible, mostly just
+wrapping existing DOM classes. Their primary goal is to avoid leaking the actual
+DOM classes to the Web Agents layer.
+"""
+
+import os
+import posixpath
+import sys
+
+from code_generator import CodeGeneratorBase, render_template
+# TODO(dglazkov): Move TypedefResolver to code_generator.py
+from code_generator_v8 import TypedefResolver
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..',
+                             'third_party', 'blink', 'tools'))
+from blinkpy.common.name_style_converter import NameStyleConverter
+
+MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py'
+
+STRING_INCLUDE_PATH = 'platform/wtf/text/WTFString.h'
+WEB_AGENT_API_IDL_ATTRIBUTE = 'WebAgentAPI'
+
+
+def interface_context(idl_interface, type_resolver):
+    builder = InterfaceContextBuilder(MODULE_PYNAME, type_resolver)
+    builder.set_class_name(idl_interface.name)
+    builder.set_inheritance(idl_interface.parent)
+
+    for idl_attribute in idl_interface.attributes:
+        builder.add_attribute(idl_attribute)
+
+    for idl_operation in idl_interface.operations:
+        builder.add_operation(idl_operation)
+
+    return builder.build()
+
+
+class TypeResolver(object):
+    """Resolves Web IDL types into corresponding C++ types and include paths
+       to the generated and existing files."""
+
+    def __init__(self, interfaces_info):
+        self.interfaces_info = interfaces_info
+
+    def includes_from_interface(self, interface_name):
+        interface_info = self.interfaces_info.get(interface_name)
+        if interface_info is None:
+            raise KeyError('Unknown interface "%s".' % interface_name)
+        return set([interface_info['include_path']])
+
+    def _includes_from_type(self, idl_type):
+        if idl_type.is_void:
+            return set()
+        if idl_type.is_primitive_type:
+            return set()
+        if idl_type.is_string_type:
+            return set([STRING_INCLUDE_PATH])
+
+        # TODO(dglazkov): Handle complex/weird types.
+        return self.includes_from_interface(idl_type.base_type)
+
+    def includes_from_definition(self, idl_definition):
+        return self._includes_from_type(idl_definition.idl_type)
+
+    def type_from_definition(self, idl_definition):
+        # TODO(dglazkov): The output of this method must be a reasonable C++
+        # type that can be used directly in the jinja2 template.
+        return idl_definition.idl_type.base_type
+
+    def base_class_includes(self):
+        return set(['platform/heap/Handle.h'])
+
+
+class MethodOverloadSplitter(object):
+    """Because of union and optional types being used as arguments, some
+       operations may result in more than one generated method. This class
+       contains the logic for spliting an operation into multiple C++ overloads.
+    """
+
+    def __init__(self, idl_operation):
+        self.idl_operation = idl_operation
+
+    def _update_argument_lists(self, argument_lists, idl_types):
+        """Given a list of IdlTypes and an existing list of argument lists (yes,
+           this is a list of lists), produces a next generation of the list of
+           lists. This is where the actual splitting into overloads happens.
+        """
+        result = []
+        for argument_list in argument_lists:
+            for idl_type in idl_types:
+                new_argument_list = list(argument_list)
+                if idl_type is not None:
+                    new_argument_list.append(idl_type)
+                result.append(new_argument_list)
+        return result
+
+    def _enumerate_argument_types(self, idl_argument):
+        """Given an IdlArgument, returns a list of types that are included
+           in this argument. If optional, the list will include a 'None'."""
+        argument_type = idl_argument.idl_type
+        # TODO(dglazkov): What should we do with primitive nullable args?
+        if (argument_type.is_nullable and
+                argument_type.inner_type.is_primitive_type):
+            raise ValueError('Primitive nullable types are not supported.')
+
+        idl_types = []
+        if idl_argument.is_optional:
+            idl_types.append(None)  # None is used to convey optionality.
+        if argument_type.is_union_type:
+            idl_types = idl_types + argument_type.member_types
+        else:
+            idl_types.append(argument_type)
+        return idl_types
+
+    def split_into_overloads(self):
+        """Splits an operation into one or more overloads that correctly reflect
+           the WebIDL semantics of the operation arguments. For example,
+           running this method on an IdlOperation that represents this WebIDL
+           definition:
+
+           void addEventListener(
+                DOMString type,
+                EventListener? listener,
+                optional (AddEventListenerOptions or boolean) options)
+
+            will produce a list of 3 argument lists:
+
+            1) [DOMString, EventListener], since the third argument is optional,
+            2) [DOMString, EventListener, AddEventListenerOptions], since the
+               third argument is a union type with AddEventListenerOptions as
+               one of its member types, and
+            3) [DOMString, EventListener, boolean], since the other union member
+               type of the third argument is boolean.
+
+            This example is also captured as test in
+            MethodOverloadSplitterTest.test_split_add_event_listener.
+        """
+
+        argument_lists = [[]]
+        for idl_argument in self.idl_operation.arguments:
+            idl_types = self._enumerate_argument_types(idl_argument)
+            argument_lists = self._update_argument_lists(argument_lists,
+                                                         idl_types)
+        return argument_lists
+
+
+class InterfaceContextBuilder(object):
+    def __init__(self, code_generator, type_resolver):
+        self.result = {'code_generator': code_generator}
+        self.type_resolver = type_resolver
+
+    def set_class_name(self, class_name):
+        converter = NameStyleConverter(class_name)
+        self.result['class_name'] = converter.to_all_cases()
+        self._ensure_set('cpp_includes').update(
+            self.type_resolver.includes_from_interface(class_name))
+
+    def set_inheritance(self, base_interface):
+        if base_interface is None:
+            self._ensure_set('header_includes').update(
+                self.type_resolver.base_class_includes())
+            return
+        self.result['base_class'] = base_interface
+        self._ensure_set('header_includes').update(
+            self.type_resolver.includes_from_interface(base_interface))
+
+    def _ensure_set(self, name):
+        return self.result.setdefault(name, set())
+
+    def _ensure_list(self, name):
+        return self.result.setdefault(name, [])
+
+    def add_attribute(self, idl_attribute):
+        self._ensure_list('attributes').append(
+            self.create_attribute(idl_attribute))
+        self._ensure_set('cpp_includes').update(
+            self.type_resolver.includes_from_definition(idl_attribute))
+
+    def add_operation(self, idl_operation):
+        if not idl_operation.name:
+            return
+        overload_splitter = MethodOverloadSplitter(idl_operation)
+        overloads = overload_splitter.split_into_overloads()
+        argument_names = [argument.name for argument
+                          in idl_operation.arguments]
+        for argument_types in overloads:
+            arguments = []
+            for position, argument_type in enumerate(argument_types):
+                arguments.append(
+                    self.create_argument(argument_names[position],
+                                         argument_type))
+            self._ensure_list('methods').append(
+                self.create_method(idl_operation, arguments))
+            self._ensure_set('cpp_includes').update(
+                self.type_resolver.includes_from_definition(idl_operation))
+
+    def create_argument(self, argument_name, argument_type):
+        name_converter = NameStyleConverter(argument_name)
+        return {
+            'name': name_converter.to_snake_case(),
+            'type': argument_type.base_type,
+        }
+
+    def create_method(self, idl_operation, arguments):
+        name_converter = NameStyleConverter(idl_operation.name)
+        return_type = self.type_resolver.type_from_definition(idl_operation)
+        return {
+            'name': name_converter.to_upper_camel_case(),
+            'type': return_type,
+            'arguments': arguments
+        }
+
+    def create_attribute(self, idl_attribute):
+        name = idl_attribute.name
+        return_type = self.type_resolver.type_from_definition(idl_attribute)
+        return {
+            'name': name,
+            'type': return_type
+        }
+
+    def build(self):
+        return self.result
+
+
+class CodeGeneratorWebAgentAPI(CodeGeneratorBase):
+    def __init__(self, info_provider, cache_dir, output_dir, snake_case):
+        CodeGeneratorBase.__init__(self, MODULE_PYNAME, info_provider,
+                                   cache_dir, output_dir, snake_case)
+        self.type_resolver = TypeResolver(info_provider.interfaces_info)
+        self.typedef_resolver = TypedefResolver(info_provider)
+
+    def get_template(self, file_extension):
+        template_filename = 'web_agent_api_interface.%s.tmpl' % file_extension
+        return self.jinja_env.get_template(template_filename)
+
+    def generate_file(self, template_context, file_extension):
+        template = self.get_template(file_extension)
+        path = posixpath.join(
+            self.output_dir,
+            '%s.%s' % (template_context['class_name']['snake_case'],
+                       file_extension))
+        text = render_template(template, template_context)
+        return (path, text)
+
+    def generate_interface_code(self, interface):
+        # TODO(dglazkov): Implement callback interfaces.
+        # TODO(dglazkov): Make sure partial interfaces are handled.
+        if interface.is_callback or interface.is_partial:
+            raise ValueError('Partial or callback interfaces are not supported')
+
+        template_context = interface_context(interface, self.type_resolver)
+
+        return (
+            self.generate_file(template_context, 'h'),
+            self.generate_file(template_context, 'cc')
+        )
+
+    def generate_code(self, definitions, definition_name):
+        self.typedef_resolver.resolve(definitions, definition_name)
+
+        # TODO(dglazkov): Implement dictionaries
+        if definition_name not in definitions.interfaces:
+            return None
+
+        interface = definitions.interfaces[definition_name]
+        if WEB_AGENT_API_IDL_ATTRIBUTE not in interface.extended_attributes:
+            return None
+
+        return self.generate_interface_code(interface)
diff --git a/bindings/scripts/code_generator_web_agent_api_test.py b/bindings/scripts/code_generator_web_agent_api_test.py
new file mode 100644
index 0000000..7f7b96e
--- /dev/null
+++ b/bindings/scripts/code_generator_web_agent_api_test.py
@@ -0,0 +1,337 @@
+# 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.
+
+# pylint: disable=import-error,print-statement,relative-import,protected-access
+
+"""Unit tests for code_generator_web_agent_api.py."""
+
+import unittest
+
+from code_generator_web_agent_api import InterfaceContextBuilder
+from code_generator_web_agent_api import MethodOverloadSplitter
+from code_generator_web_agent_api import STRING_INCLUDE_PATH
+from code_generator_web_agent_api import TypeResolver
+from idl_definitions import IdlArgument
+from idl_definitions import IdlAttribute
+from idl_definitions import IdlOperation
+from idl_types import IdlType
+from idl_types import IdlNullableType
+from idl_types import IdlUnionType
+from idl_types import PRIMITIVE_TYPES
+from idl_types import STRING_TYPES
+
+
+# TODO(dglazkov): Convert to use actual objects, not stubs.
+# See http://crbug.com/673214 for more details.
+class IdlTestingHelper(object):
+    """A collection of stub makers and helper utils to make testing code
+    generation easy."""
+
+    def make_stub_idl_argument(self, name, idl_type, is_optional=False):
+        idl_argument = IdlArgument()
+        idl_argument.name = name
+        idl_argument.idl_type = idl_type
+        idl_argument.is_optional = is_optional
+        return idl_argument
+
+    def make_stub_idl_attribute(self, name, return_type):
+        idl_attribute_stub = IdlAttribute()
+        idl_attribute_stub.name = name
+        idl_attribute_stub.idl_type = IdlType(return_type)
+        return idl_attribute_stub
+
+    def make_stub_idl_operation(self, name, return_type):
+        idl_operation_stub = IdlOperation()
+        idl_operation_stub.name = name
+        idl_operation_stub.idl_type = IdlType(return_type)
+        return idl_operation_stub
+
+    def make_stub_idl_type(self, base_type):
+        return IdlType(base_type)
+
+    def make_stub_interfaces_info(self, classes_to_paths):
+        result = {}
+        for class_name, path in classes_to_paths.iteritems():
+            result[class_name] = {'include_path': path}
+        return result
+
+
+class TypeResolverTest(unittest.TestCase):
+
+    def test_includes_from_type_should_filter_primitive_types(self):
+        helper = IdlTestingHelper()
+        type_resolver = TypeResolver({})
+        for primitive_type in PRIMITIVE_TYPES:
+            idl_type = helper.make_stub_idl_type(primitive_type)
+            self.assertEqual(
+                type_resolver._includes_from_type(idl_type), set())
+
+    def test_includes_from_type_should_filter_void(self):
+        type_resolver = TypeResolver({})
+        helper = IdlTestingHelper()
+        idl_type = helper.make_stub_idl_type('void')
+        self.assertEqual(
+            type_resolver._includes_from_type(idl_type), set())
+
+    def test_includes_from_type_should_handle_string(self):
+        type_resolver = TypeResolver({})
+        helper = IdlTestingHelper()
+        for string_type in STRING_TYPES:
+            idl_type = helper.make_stub_idl_type(string_type)
+            self.assertEqual(
+                type_resolver._includes_from_type(idl_type),
+                set([STRING_INCLUDE_PATH]))
+
+
+class MethodOverloadSplitterTest(unittest.TestCase):
+
+    def test_enumerate_argument_types(self):
+        splitter = MethodOverloadSplitter(IdlOperation())
+        nullable_and_primitive = IdlArgument()
+        nullable_and_primitive.idl_type = IdlNullableType(IdlType('double'))
+        with self.assertRaises(ValueError):
+            splitter._enumerate_argument_types(nullable_and_primitive)
+
+        argument = IdlArgument()
+        foo_type = IdlType('Foo')
+        bar_type = IdlType('Bar')
+
+        argument.idl_type = foo_type
+        self.assertEqual(
+            splitter._enumerate_argument_types(argument), [foo_type])
+
+        argument.is_optional = True
+        self.assertEqual(
+            splitter._enumerate_argument_types(argument), [None, foo_type])
+
+        argument.is_optional = False
+        argument.idl_type = IdlUnionType([foo_type, bar_type])
+        self.assertEqual(
+            splitter._enumerate_argument_types(argument), [foo_type, bar_type])
+
+        argument.is_optional = True
+        self.assertEqual(
+            splitter._enumerate_argument_types(argument),
+            [None, foo_type, bar_type])
+
+    def test_update_argument_lists(self):
+        splitter = MethodOverloadSplitter(IdlOperation())
+        foo_type = IdlType('Foo')
+        bar_type = IdlType('Bar')
+        baz_type = IdlType('Baz')
+        qux_type = IdlType('Qux')
+
+        result = splitter._update_argument_lists([[]], [foo_type])
+        self.assertEqual(result, [[foo_type]])
+
+        result = splitter._update_argument_lists([[]], [foo_type, bar_type])
+        self.assertEqual(result, [[foo_type], [bar_type]])
+
+        existing_list = [[foo_type]]
+        result = splitter._update_argument_lists(existing_list, [bar_type])
+        self.assertEqual(result, [[foo_type, bar_type]])
+
+        existing_list = [[foo_type]]
+        result = splitter._update_argument_lists(existing_list,
+                                                 [None, bar_type])
+        self.assertEqual(result, [[foo_type], [foo_type, bar_type]])
+
+        existing_list = [[foo_type]]
+        result = splitter._update_argument_lists(existing_list,
+                                                 [bar_type, baz_type])
+        self.assertEqual(result, [[foo_type, bar_type], [foo_type, baz_type]])
+
+        existing_list = [[foo_type], [qux_type]]
+        result = splitter._update_argument_lists(existing_list,
+                                                 [bar_type, baz_type])
+        self.assertEqual(result, [
+            [foo_type, bar_type],
+            [foo_type, baz_type],
+            [qux_type, bar_type],
+            [qux_type, baz_type],
+        ])
+
+        existing_list = [[foo_type], [qux_type]]
+        result = splitter._update_argument_lists(existing_list,
+                                                 [None, bar_type, baz_type])
+        self.assertEqual(result, [
+            [foo_type],
+            [foo_type, bar_type],
+            [foo_type, baz_type],
+            [qux_type],
+            [qux_type, bar_type],
+            [qux_type, baz_type],
+        ])
+
+        existing_list = [[foo_type, qux_type]]
+        result = splitter._update_argument_lists(existing_list,
+                                                 [bar_type, baz_type])
+        self.assertEqual(result, [
+            [foo_type, qux_type, bar_type],
+            [foo_type, qux_type, baz_type],
+        ])
+
+    def test_split_into_overloads(self):
+        helper = IdlTestingHelper()
+        type_double = IdlType('double')
+        type_foo = IdlType('foo')
+        type_double_or_foo = IdlUnionType([type_double, type_foo])
+        idl_operation = IdlOperation()
+
+        idl_operation.arguments = []
+        splitter = MethodOverloadSplitter(idl_operation)
+        result = splitter.split_into_overloads()
+        self.assertEqual(result, [[]])
+
+        idl_operation.arguments = [
+            helper.make_stub_idl_argument(None, type_double, True)
+        ]
+        splitter = MethodOverloadSplitter(idl_operation)
+        result = splitter.split_into_overloads()
+        self.assertEqual(result, [[], [type_double]])
+
+        idl_operation.arguments = [
+            helper.make_stub_idl_argument(None, type_double_or_foo)
+        ]
+        splitter = MethodOverloadSplitter(idl_operation)
+        result = splitter.split_into_overloads()
+        self.assertEqual(result, [[type_double], [type_foo]])
+
+    def test_split_add_event_listener(self):
+        """Tests how EventTarget.addEventListener is split into respective
+           overloads. From:
+
+           void addEventListener(
+                DOMString type,
+                EventListener? listener,
+                optional (AddEventListenerOptions or boolean) options)
+
+           produces: """
+
+        helper = IdlTestingHelper()
+        type_dom_string = IdlType('DOMString')
+        type_listener = IdlType('EventListener')
+        type_options = IdlType('AddEventListenerOptions')
+        type_boolean = IdlType('boolean')
+        type_union = IdlUnionType([type_options, type_boolean])
+        idl_operation = IdlOperation()
+        idl_operation.arguments = [
+            helper.make_stub_idl_argument('type', type_dom_string),
+            helper.make_stub_idl_argument('listener', type_listener),
+            helper.make_stub_idl_argument('options', type_union,
+                                          is_optional=True)]
+        splitter = MethodOverloadSplitter(idl_operation)
+        result = splitter.split_into_overloads()
+        self.assertEqual(
+            result,
+            [[type_dom_string, type_listener],
+             [type_dom_string, type_listener, type_options],
+             [type_dom_string, type_listener, type_boolean]])
+
+
+class InterfaceContextBuilderTest(unittest.TestCase):
+
+    def test_empty(self):
+        builder = InterfaceContextBuilder('test', TypeResolver({}))
+
+        self.assertEqual({'code_generator': 'test'}, builder.build())
+
+    def test_set_name(self):
+        helper = IdlTestingHelper()
+        builder = InterfaceContextBuilder(
+            'test', TypeResolver(helper.make_stub_interfaces_info({
+                'foo': 'path_to_foo',
+            })))
+
+        builder.set_class_name('foo')
+        self.assertEqual({
+            'code_generator': 'test',
+            'cpp_includes': set(['path_to_foo']),
+            'class_name': {
+                'snake_case': 'foo',
+                'macro_case': 'FOO',
+                'upper_camel_case': 'Foo'
+            },
+        }, builder.build())
+
+    def test_set_inheritance(self):
+        helper = IdlTestingHelper()
+        builder = InterfaceContextBuilder(
+            'test', TypeResolver(helper.make_stub_interfaces_info({
+                'foo': 'path_to_foo',
+            })))
+        builder.set_inheritance('foo')
+        self.assertEqual({
+            'base_class': 'foo',
+            'code_generator': 'test',
+            'header_includes': set(['path_to_foo']),
+        }, builder.build())
+
+        builder = InterfaceContextBuilder('test', TypeResolver({}))
+        builder.set_inheritance(None)
+        self.assertEqual({
+            'code_generator': 'test',
+            'header_includes': set(['platform/heap/Handle.h']),
+        }, builder.build())
+
+    def test_add_attribute(self):
+        helper = IdlTestingHelper()
+        builder = InterfaceContextBuilder(
+            'test', TypeResolver(helper.make_stub_interfaces_info({
+                'foo': 'path_to_foo',
+                'bar': 'path_to_bar'
+            })))
+
+        attribute = helper.make_stub_idl_attribute('foo', 'bar')
+        builder.add_attribute(attribute)
+        self.assertEqual({
+            'code_generator': 'test',
+            'cpp_includes': set(['path_to_bar']),
+            'attributes': [{'name': 'foo', 'type': 'bar'}],
+        }, builder.build())
+
+    def test_add_method(self):
+        helper = IdlTestingHelper()
+        builder = InterfaceContextBuilder(
+            'test', TypeResolver(helper.make_stub_interfaces_info({
+                'foo': 'path_to_foo',
+                'bar': 'path_to_bar',
+                'garply': 'path_to_garply',
+            })))
+
+        operation = helper.make_stub_idl_operation('foo', 'bar')
+        builder.add_operation(operation)
+        self.assertEqual({
+            'code_generator': 'test',
+            'cpp_includes': set(['path_to_bar']),
+            'methods': [{
+                'arguments': [],
+                'name': 'Foo',
+                'type': 'bar'
+            }],
+        }, builder.build())
+
+        operation = helper.make_stub_idl_operation('quux', 'garply')
+        operation.arguments = [
+            helper.make_stub_idl_argument('barBaz', IdlType('qux'))
+        ]
+        builder.add_operation(operation)
+        self.assertEqual({
+            'code_generator': 'test',
+            'cpp_includes': set(['path_to_bar', 'path_to_garply']),
+            'methods': [
+                {
+                    'arguments': [],
+                    'name': 'Foo',
+                    'type': 'bar'
+                },
+                {
+                    'arguments': [
+                        {'name': 'bar_baz', 'type': 'qux'}
+                    ],
+                    'name': 'Quux',
+                    'type': 'garply'
+                }
+            ],
+        }, builder.build())
diff --git a/bindings/scripts/collect_idls_into_json.py b/bindings/scripts/collect_idls_into_json.py
deleted file mode 100644
index a03026f..0000000
--- a/bindings/scripts/collect_idls_into_json.py
+++ /dev/null
@@ -1,432 +0,0 @@
-#!/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_global_objects.py b/bindings/scripts/compute_global_objects.py
index 2e83e46..ececf61 100755
--- a/bindings/scripts/compute_global_objects.py
+++ b/bindings/scripts/compute_global_objects.py
@@ -12,12 +12,18 @@
 Design document: http://www.chromium.org/developers/design-documents/idl-build
 """
 
+# pylint: disable=relative-import
+
 import optparse
 import os
-import cPickle as pickle
 import sys
 
-from utilities import get_file_contents, idl_filename_to_interface_name, get_interface_extended_attributes_from_idl, read_file_to_list, read_pickle_files, write_pickle_file
+from utilities import get_file_contents
+from utilities import get_interface_extended_attributes_from_idl
+from utilities import get_first_interface_name_from_idl
+from utilities import read_file_to_list
+from utilities import read_pickle_files
+from utilities import write_pickle_file
 
 GLOBAL_EXTENDED_ATTRIBUTES = frozenset([
     'Global',
@@ -26,21 +32,20 @@
 
 
 def parse_options():
-    usage = 'Usage: %prog [options] [GlobalObjectsComponent.pickle]... [GlobalObjects.pickle]'
+    usage = 'Usage: %prog [options]  [GlobalObjects.pickle]'
     parser = optparse.OptionParser(usage=usage)
     parser.add_option('--idl-files-list', help='file listing IDL files')
-    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('--global-objects-component-files', action='append',
+                      help='optionally preceeded input pickle filename.')
 
     options, args = parser.parse_args()
 
     if options.idl_files_list is None:
         parser.error('Must specify a file listing IDL files using --idl-files-list.')
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether output files are only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
-    if not args:
-        parser.error('Must specify an output pickle filename as argument, '
-                     'optionally preceeded by input pickle filenames.')
+    if options.global_objects_component_files is None:
+        options.global_objects_component_files = []
+    if len(args) != 1:
+        parser.error('Must specify an output pickle filename as an argument')
 
     return options, args
 
@@ -57,10 +62,10 @@
     names; otherwise, the interface has a single global name, which is the
     interface's identifier (http://heycam.github.io/webidl/#Global).
     """
-    interface_name = idl_filename_to_interface_name(idl_filename)
     full_path = os.path.realpath(idl_filename)
     idl_file_contents = get_file_contents(full_path)
     extended_attributes = get_interface_extended_attributes_from_idl(idl_file_contents)
+    interface_name = get_first_interface_name_from_idl(idl_file_contents)
 
     global_keys = GLOBAL_EXTENDED_ATTRIBUTES.intersection(
         extended_attributes.iterkeys())
@@ -80,7 +85,7 @@
 def idl_files_to_interface_name_global_names(idl_files):
     """Yields pairs (interface_name, global_names) found in IDL files."""
     for idl_filename in idl_files:
-        interface_name = idl_filename_to_interface_name(idl_filename)
+        interface_name = get_first_interface_name_from_idl(get_file_contents(idl_filename))
         global_names = idl_file_to_global_names(idl_filename)
         if global_names:
             yield interface_name, global_names
@@ -90,11 +95,11 @@
 
 def main():
     options, args = parse_options()
-    # args = Input1, Input2, ..., Output
     output_global_objects_filename = args.pop()
     interface_name_global_names = dict_union(
         existing_interface_name_global_names
-        for existing_interface_name_global_names in read_pickle_files(args))
+        for existing_interface_name_global_names
+        in read_pickle_files(options.global_objects_component_files))
 
     # Input IDL files are passed in a file, due to OS command line length
     # limits. This is generated at GYP time, which is ok b/c files are static.
@@ -103,8 +108,7 @@
             idl_files_to_interface_name_global_names(idl_files))
 
     write_pickle_file(output_global_objects_filename,
-                      interface_name_global_names,
-                      options.write_file_only_if_changed)
+                      interface_name_global_names)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/compute_interfaces_info_individual.py b/bindings/scripts/compute_interfaces_info_individual.py
index 26af9fe..98fee87 100755
--- a/bindings/scripts/compute_interfaces_info_individual.py
+++ b/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,10 +47,16 @@
 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, merge_dict_recursively
+from utilities import idl_filename_to_component
+from utilities import idl_filename_to_basename
+from utilities import merge_dict_recursively
+from utilities import read_idl_files_list_from_file
+from utilities import shorten_union_name
+from utilities import to_snake_case
+from utilities import write_pickle_file
+
 
 module_path = os.path.dirname(__file__)
 source_path = os.path.normpath(os.path.join(module_path, os.pardir, os.pardir))
@@ -63,22 +69,20 @@
 
 
 def parse_options():
-    usage = 'Usage: %prog [options] [generated1.idl]...'
+    usage = 'Usage: %prog [options]'
     parser = optparse.OptionParser(usage=usage)
     parser.add_option('--cache-directory', help='cache directory')
     parser.add_option('--idl-files-list', help='file listing IDL files')
     parser.add_option('--interfaces-info-file', help='interface info pickle file')
     parser.add_option('--component-info-file', help='component wide info pickle file')
-    parser.add_option('--write-file-only-if-changed', type='int', help='if true, do not write an output file if it would be identical to the existing one, which avoids unnecessary rebuilds in ninja')
+    # TODO(tkent): Remove the option after the great mv. crbug.com/760462
+    parser.add_option('--snake-case-generated-files', action='store_true', default=False)
 
     options, args = parser.parse_args()
     if options.interfaces_info_file is None:
         parser.error('Must specify an output file using --interfaces-info-file.')
     if options.idl_files_list is None:
         parser.error('Must specify a file listing IDL files using --idl-files-list.')
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
     return options, args
 
 
@@ -93,7 +97,7 @@
     return relative_dir_local.replace(os.path.sep, posixpath.sep)
 
 
-def include_path(idl_filename, implemented_as=None):
+def include_path(idl_filename, snake_case_generated_files, implemented_as=None):
     """Returns relative path to header file in POSIX format; used in includes.
 
     POSIX format is used for consistency of output, so reference tests are
@@ -105,9 +109,10 @@
         relative_dir = relative_dir_posix(idl_filename, source_path)
 
     # IDL file basename is used even if only a partial interface file
-    cpp_class_name = implemented_as or idl_filename_to_interface_name(idl_filename)
-
-    return posixpath.join(relative_dir, cpp_class_name + '.h')
+    output_file_basename = implemented_as or idl_filename_to_basename(idl_filename)
+    if snake_case_generated_files:
+        output_file_basename = to_snake_case(output_file_basename)
+    return posixpath.join(relative_dir, output_file_basename + '.h')
 
 
 def get_implements_from_definitions(definitions, definition_name):
@@ -170,9 +175,10 @@
             'full_paths': [],
             'include_paths': [],
         })
-        self.enumerations = set()
+        self.enumerations = {}
         self.union_types = set()
         self.typedefs = {}
+        self.callback_functions = {}
 
     def add_paths_to_partials_dict(self, partial_interface_name, full_path,
                                    include_paths):
@@ -180,17 +186,24 @@
         paths_dict['full_paths'].append(full_path)
         paths_dict['include_paths'].extend(include_paths)
 
-    def collect_info(self, idl_filename):
+    def check_enum_consistency(self, enum):
+        existing_enum = self.enumerations.get(enum.name)
+        if not existing_enum:
+            return True
+        # TODO(bashi): Ideally we should not allow multiple enum declarations
+        # but we allow them to work around core/module separation.
+        if len(existing_enum.values) != len(enum.values):
+            return False
+        return all(value in existing_enum.values for value in enum.values)
+
+    def collect_info(self, idl_filename, snake_case_generated_files=False):
         """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, ...],
-                    },
+                    'unforgeable_attributes': [IdlAttribute, ...],
                     ...
                 }
             """
@@ -206,9 +219,7 @@
                 # 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
+            interface_info['unforgeable_attributes'] = unforgeable_attributes
             return interface_info
 
         definitions = self.reader.read_idl_file(idl_filename)
@@ -216,12 +227,19 @@
         this_union_types = collect_union_types_from_definitions(definitions)
         self.union_types.update(this_union_types)
         self.typedefs.update(definitions.typedefs)
+        for callback_function_name, callback_function in definitions.callback_functions.iteritems():
+            # Set 'component_dir' to specify a directory that callback function files belong to
+            self.callback_functions[callback_function_name] = {
+                'callback_function': callback_function,
+                'component_dir': idl_filename_to_component(idl_filename),
+                'full_path': os.path.realpath(idl_filename),
+            }
         # Check enum duplication.
-        for enum_name in definitions.enumerations.keys():
-            for defined_enum in self.enumerations:
-                if defined_enum.name == enum_name:
-                    raise Exception('Enumeration %s has multiple definitions' % enum_name)
-        self.enumerations.update(definitions.enumerations.values())
+        for enum in definitions.enumerations.values():
+            if not self.check_enum_consistency(enum):
+                raise Exception('Enumeration "%s" is defined more than once '
+                                'with different valid values' % enum.name)
+        self.enumerations.update(definitions.enumerations)
 
         if definitions.interfaces:
             definition = next(definitions.interfaces.itervalues())
@@ -259,16 +277,13 @@
         extended_attributes = definition.extended_attributes
         implemented_as = extended_attributes.get('ImplementedAs')
         full_path = os.path.realpath(idl_filename)
-        this_include_path = None if 'NoImplHeader' in extended_attributes else include_path(idl_filename, implemented_as)
+        this_include_path = include_path(idl_filename, snake_case_generated_files, implemented_as)
         if definition.is_partial:
             # We don't create interface_info for partial interfaces, but
             # adds paths to another dict.
             partial_include_paths = []
             if this_include_path:
                 partial_include_paths.append(this_include_path)
-            if this_union_types:
-                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.
@@ -295,7 +310,7 @@
         interface_info.update({
             'extended_attributes': extended_attributes,
             'full_path': full_path,
-            'has_union_types': bool(this_union_types),
+            'union_types': this_union_types,
             'implemented_as': implemented_as,
             'implemented_by_interfaces': left_interfaces,
             'implements_interfaces': right_interfaces,
@@ -320,8 +335,9 @@
     def get_component_info_as_dict(self):
         """Returns component wide information as a dict."""
         return {
+            'callback_functions': self.callback_functions,
             'enumerations': dict((enum.name, enum.values)
-                                 for enum in self.enumerations),
+                                 for enum in self.enumerations.values()),
             'typedefs': self.typedefs,
             'union_types': self.union_types,
         }
@@ -330,29 +346,22 @@
 ################################################################################
 
 def main():
-    options, args = parse_options()
+    options, _ = parse_options()
 
-    # Static IDL files are passed in a file (generated at GYP time), due to OS
-    # command line length limits
-    idl_files = read_file_to_list(options.idl_files_list)
-    # Generated IDL files are passed at the command line, since these are in the
-    # build directory, which is determined at build time, not GYP time, so these
-    # cannot be included in the file listing static files
-    idl_files.extend(args)
+    # IDL files are passed in a file, due to OS command line length limits
+    idl_files = read_idl_files_list_from_file(options.idl_files_list, is_gyp_format=False)
 
     # Compute information for individual files
     # Information is stored in global variables interfaces_info and
     # partial_interface_files.
     info_collector = InterfaceInfoCollector(options.cache_directory)
     for idl_filename in idl_files:
-        info_collector.collect_info(idl_filename)
+        info_collector.collect_info(idl_filename, options.snake_case_generated_files)
 
     write_pickle_file(options.interfaces_info_file,
-                      info_collector.get_info_as_dict(),
-                      options.write_file_only_if_changed)
+                      info_collector.get_info_as_dict())
     write_pickle_file(options.component_info_file,
-                      info_collector.get_component_info_as_dict(),
-                      options.write_file_only_if_changed)
+                      info_collector.get_component_info_as_dict())
 
 if __name__ == '__main__':
     sys.exit(main())
diff --git a/bindings/scripts/compute_interfaces_info_overall.py b/bindings/scripts/compute_interfaces_info_overall.py
index f038b76..2791a9a 100755
--- a/bindings/scripts/compute_interfaces_info_overall.py
+++ b/bindings/scripts/compute_interfaces_info_overall.py
@@ -81,17 +81,22 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-build
 """
 
-from collections import defaultdict
-import cPickle as pickle
+# pylint: disable=relative-import
+
 import optparse
 import sys
 
-from utilities import idl_filename_to_component, read_pickle_files, write_pickle_file, merge_dict_recursively
+from collections import defaultdict
+from utilities import idl_filename_to_component
+from utilities import merge_dict_recursively
+from utilities import read_pickle_files
+from utilities import shorten_union_name
+from utilities import write_pickle_file
 
 INHERITED_EXTENDED_ATTRIBUTES = set([
+    'ActiveScriptWrappable',
     'DependentLifetime',
-    'GarbageCollected',
-    'WillBeGarbageCollected',
+    'LegacyUnenumerableNamedProperties',
 ])
 
 # Main variable (filled in and exported)
@@ -114,13 +119,8 @@
 def parse_options():
     usage = 'Usage: %prog [InfoIndividual.pickle]... [Info.pickle]'
     parser = optparse.OptionParser(usage=usage)
-    parser.add_option('--write-file-only-if-changed', type='int', help='if true, do not write an output file if it would be identical to the existing one, which avoids unnecessary rebuilds in ninja')
 
-    options, args = parser.parse_args()
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
-    return options, args
+    return parser.parse_args()
 
 
 def dict_of_dicts_of_lists_update_or_append(existing, other):
@@ -168,7 +168,6 @@
     dictionaries = {}
     component_dirs = {}
     implemented_as_interfaces = {}
-    will_be_garbage_collected_interfaces = set()
     garbage_collected_interfaces = set()
     callback_interfaces = set()
 
@@ -185,17 +184,13 @@
             implemented_as_interfaces[interface_name] = interface_info['implemented_as']
 
         inherited_extended_attributes = interface_info['inherited_extended_attributes']
-        if 'WillBeGarbageCollected' in inherited_extended_attributes:
-            will_be_garbage_collected_interfaces.add(interface_name)
-        if 'GarbageCollected' in inherited_extended_attributes:
-            garbage_collected_interfaces.add(interface_name)
+        garbage_collected_interfaces.add(interface_name)
 
     interfaces_info['ancestors'] = ancestors
     interfaces_info['callback_interfaces'] = callback_interfaces
     interfaces_info['dictionaries'] = dictionaries
     interfaces_info['implemented_as_interfaces'] = implemented_as_interfaces
     interfaces_info['garbage_collected_interfaces'] = garbage_collected_interfaces
-    interfaces_info['will_be_garbage_collected_interfaces'] = will_be_garbage_collected_interfaces
     interfaces_info['component_dirs'] = component_dirs
 
 
@@ -266,12 +261,10 @@
         # However, they are needed for legacy implemented interfaces that
         # are being treated as partial interfaces, until we remove these.
         # http://crbug.com/360435
-        implemented_interfaces_include_paths = []
-        for implemented_interface_info in implemented_interfaces_info:
-            if (implemented_interface_info['is_legacy_treat_as_partial_interface'] and
-                implemented_interface_info['include_path']):
-                implemented_interfaces_include_paths.append(
-                    implemented_interface_info['include_path'])
+        implemented_interfaces_include_paths = [
+            implemented_interface_info['include_path']
+            for implemented_interface_info in implemented_interfaces_info
+            if implemented_interface_info['is_legacy_treat_as_partial_interface']]
 
         dependencies_full_paths = implemented_interfaces_full_paths
         dependencies_include_paths = implemented_interfaces_include_paths
@@ -293,10 +286,6 @@
             else:
                 dependencies_other_component_include_paths.append(include_path)
 
-        if interface_info['has_union_types']:
-            dependencies_include_paths.append(
-                'bindings/%s/v8/UnionTypes%s.h' % (component, component.capitalize()))
-
         interface_info.update({
             'dependencies_full_paths': dependencies_full_paths,
             'dependencies_include_paths': dependencies_include_paths,
@@ -309,7 +298,7 @@
     # Clean up temporary private information
     for interface_info in interfaces_info.itervalues():
         del interface_info['extended_attributes']
-        del interface_info['has_union_types']
+        del interface_info['union_types']
         del interface_info['is_legacy_treat_as_partial_interface']
 
     # Compute global_type_info to interfaces_info so that idl_compiler does
@@ -320,15 +309,13 @@
 ################################################################################
 
 def main():
-    options, args = parse_options()
+    _, args = parse_options()
     # args = Input1, Input2, ..., Output
     interfaces_info_filename = args.pop()
     info_individuals = read_pickle_files(args)
 
     compute_interfaces_info_overall(info_individuals)
-    write_pickle_file(interfaces_info_filename,
-                      interfaces_info,
-                      options.write_file_only_if_changed)
+    write_pickle_file(interfaces_info_filename, interfaces_info)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/generate_conditional_features.py b/bindings/scripts/generate_conditional_features.py
new file mode 100644
index 0000000..0028e8a
--- /dev/null
+++ b/bindings/scripts/generate_conditional_features.py
@@ -0,0 +1,250 @@
+#!/usr/bin/python
+#
+# Copyright 2017 The Chromium 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 script reads the global interface data collected by
+# compute_interfaces_info_overall.py, and writes out the code which adds
+# bindings for origin-trial-enabled features at runtime.
+
+import optparse
+import os
+import posixpath
+import sys
+from collections import defaultdict, namedtuple
+
+from code_generator import (initialize_jinja_env, normalize_and_sort_includes,
+                            render_template)
+from idl_reader import IdlReader
+from utilities import (create_component_info_provider, write_file,
+                       idl_filename_to_component)
+from v8_utilities import (binding_header_basename, v8_class_name,
+                          v8_class_name_or_partial, uncapitalize)
+
+# Make sure extension is .py, not .pyc or .pyo, so doesn't depend on caching
+MODULE_PYNAME = os.path.splitext(os.path.basename(__file__))[0] + '.py'
+
+
+ConditionalInterfaceInfo = namedtuple('ConditionalInterfaceInfo', [
+    'name', 'v8_class', 'v8_class_or_partial', 'is_global'])
+
+
+def get_install_functions(interfaces, feature_names):
+    """Construct a list of V8 bindings installation functions for each feature
+    on each interface.
+
+    interfaces is a list of ConditionalInterfaceInfo tuples
+    feature_names is a list of strings, containing names of features which can
+        be installed on those interfaces.
+    """
+    return [
+        {'condition': 'OriginTrials::%sEnabled' % uncapitalize(feature_name),
+         'name': feature_name,
+         'install_method': 'install%s' % feature_name,
+         'interface_is_global': interface_info.is_global,
+         'v8_class': interface_info.v8_class,
+         'v8_class_or_partial': interface_info.v8_class_or_partial}
+        for feature_name in feature_names
+        for interface_info in interfaces]
+
+
+def get_conditional_feature_names_from_interface(interface):
+    feature_names = set()
+    if ('OriginTrialEnabled' in interface.extended_attributes and
+            interface.is_partial):
+        feature_names.add(interface.extended_attributes['OriginTrialEnabled'])
+    for operation in interface.operations:
+        if 'OriginTrialEnabled' in operation.extended_attributes:
+            feature_names.add(
+                operation.extended_attributes['OriginTrialEnabled'])
+    for attribute in interface.attributes:
+        if 'OriginTrialEnabled' in attribute.extended_attributes:
+            feature_names.add(
+                attribute.extended_attributes['OriginTrialEnabled'])
+    return feature_names
+
+
+def read_idl_file(reader, idl_filename):
+    definitions = reader.read_idl_file(idl_filename)
+    interfaces = definitions.interfaces
+    implements = definitions.implements
+    # There should only be a single interface defined in an IDL file. Return it.
+    assert len(interfaces) == 1
+    return (interfaces.values()[0], implements)
+
+
+def interface_is_global(interface):
+    return ('Global' in interface.extended_attributes or
+            'PrimaryGlobal' in interface.extended_attributes)
+
+
+def conditional_features_info(info_provider, reader, idl_filenames, target_component, snake_case):
+    """Read a set of IDL files and compile the mapping between interfaces and
+    the conditional features defined on them.
+
+    Returns a tuple (features_for_type, types_for_feature, includes):
+      - features_for_type is a mapping of interface->feature
+      - types_for_feature is the reverse mapping: feature->interface
+      - includes is a set of header files which need to be included in the
+          generated implementation code.
+    """
+    features_for_type = defaultdict(set)
+    types_for_feature = defaultdict(set)
+    includes = set()
+
+    for idl_filename in idl_filenames:
+        interface, implements = read_idl_file(reader, idl_filename)
+        feature_names = get_conditional_feature_names_from_interface(interface)
+
+        # If this interface implements another one,
+        # it inherits any conditional features from it.
+        for implement in implements:
+            assert implement.left_interface == interface.name
+            implemented_interface, _ = read_idl_file(
+                reader,
+                info_provider.interfaces_info[implement.right_interface].get('full_path'))
+            feature_names |= get_conditional_feature_names_from_interface(implemented_interface)
+
+        feature_names = list(feature_names)
+        if feature_names:
+            is_global = interface_is_global(interface)
+            if interface.is_partial:
+                # For partial interfaces, we need to generate different
+                # includes if the parent interface is in a different
+                # component.
+                parent_interface_info = info_provider.interfaces_info[interface.name]
+                parent_interface, _ = read_idl_file(
+                    reader, parent_interface_info.get('full_path'))
+                is_global = is_global or interface_is_global(parent_interface)
+                parent_component = idl_filename_to_component(
+                    parent_interface_info.get('full_path'))
+            if interface.is_partial and target_component != parent_component:
+                includes.add('bindings/%s/v8/%s' %
+                             (parent_component, binding_header_basename(interface.name, snake_case)))
+                includes.add('bindings/%s/v8/%s' %
+                             (target_component, binding_header_basename(interface.name + 'Partial', snake_case)))
+            else:
+                includes.add('bindings/%s/v8/%s' %
+                             (target_component, binding_header_basename(interface.name, snake_case)))
+                # If this is a partial interface in the same component as
+                # its parent, then treat it as a non-partial interface.
+                interface.is_partial = False
+            interface_info = ConditionalInterfaceInfo(interface.name,
+                                                      v8_class_name(interface),
+                                                      v8_class_name_or_partial(
+                                                          interface),
+                                                      is_global)
+            for feature_name in feature_names:
+                features_for_type[interface_info].add(feature_name)
+                types_for_feature[feature_name].add(interface_info)
+
+    return features_for_type, types_for_feature, includes
+
+
+def conditional_features_context(generator_name, feature_info, snake_case):
+    context = {'code_generator': generator_name}
+
+    # Unpack the feature info tuple.
+    features_for_type, types_for_feature, includes = feature_info
+
+    # Add includes needed for cpp code and normalize.
+    includes.update([
+        'core/context_features/ContextFeatureSettings.h',
+        'core/dom/ExecutionContext.h',
+        'core/frame/Frame.h',
+        'core/origin_trials/origin_trials.h',
+        'platform/bindings/ConditionalFeatures.h',
+        'platform/bindings/ScriptState.h',
+        # TODO(iclelland): Remove the need to explicitly include this; it is
+        # here because the ContextFeatureSettings code needs it.
+        'bindings/core/v8/V8Window.h',
+    ])
+    context['includes'] = normalize_and_sort_includes(includes, snake_case)
+
+    # For each interface, collect a list of bindings installation functions to
+    # call, organized by conditional feature.
+    context['installers_by_interface'] = [
+        {'name': interface_info.name,
+         'is_global': interface_info.is_global,
+         'v8_class': interface_info.v8_class,
+         'installers': get_install_functions([interface_info], feature_names)}
+        for interface_info, feature_names in features_for_type.items()]
+    context['installers_by_interface'].sort(key=lambda x: x['name'])
+
+    # For each conditional feature, collect a list of bindings installation
+    # functions to call, organized by interface.
+    context['installers_by_feature'] = [
+        {'name': feature_name,
+         'name_constant': 'OriginTrials::k%sTrialName' % feature_name,
+         'installers': get_install_functions(interfaces, [feature_name])}
+        for feature_name, interfaces in types_for_feature.items()]
+    context['installers_by_feature'].sort(key=lambda x: x['name'])
+
+    return context
+
+
+def parse_options():
+    parser = optparse.OptionParser()
+    parser.add_option('--cache-directory',
+                      help='cache directory, defaults to output directory')
+    parser.add_option('--output-directory')
+    parser.add_option('--info-dir')
+    parser.add_option('--target-component',
+                      type='choice',
+                      choices=['Core', 'Modules'],
+                      help='target component to generate code')
+    parser.add_option('--idl-files-list')
+    # TODO(tkent): Remove the option after the great mv. crbug.com/760462
+    parser.add_option('--snake-case-generated-files',
+                      action='store_true', default=False)
+
+    options, _ = parser.parse_args()
+    if options.output_directory is None:
+        parser.error('Must specify output directory using --output-directory.')
+    return options
+
+
+def generate_conditional_features(info_provider, options, idl_filenames):
+    reader = IdlReader(info_provider.interfaces_info, options.cache_directory)
+    jinja_env = initialize_jinja_env(options.cache_directory)
+
+    # Extract the bidirectional mapping of conditional features <-> interfaces
+    # from the global info provider and the supplied list of IDL files.
+    feature_info = conditional_features_info(info_provider,
+                                             reader, idl_filenames,
+                                             options.target_component.lower(),
+                                             options.snake_case_generated_files)
+
+    # Convert that mapping into the context required for the Jinja2 templates.
+    template_context = conditional_features_context(
+        MODULE_PYNAME, feature_info, options.snake_case_generated_files)
+
+    # Generate and write out the header file
+    header_text = render_template(jinja_env.get_template(
+        'ConditionalFeaturesFor%s.h.tmpl' % options.target_component.title()), template_context)
+    header_path = posixpath.join(options.output_directory,
+                                 'ConditionalFeaturesFor%s.h' % options.target_component.title())
+    write_file(header_text, header_path)
+
+    # Generate and write out the implementation file
+    cpp_text = render_template(jinja_env.get_template(
+        'ConditionalFeaturesFor%s.cpp.tmpl' % options.target_component.title()), template_context)
+    cpp_path = posixpath.join(options.output_directory,
+                              'ConditionalFeaturesFor%s.cpp' % options.target_component.title())
+    write_file(cpp_text, cpp_path)
+
+
+def main():
+    options = parse_options()
+
+    info_provider = create_component_info_provider(
+        os.path.normpath(options.info_dir), options.target_component.lower())
+    idl_filenames = map(str.strip, open(options.idl_files_list))
+
+    generate_conditional_features(info_provider, options, idl_filenames)
+    return 0
+
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/bindings/scripts/generate_event_interfaces.py b/bindings/scripts/generate_event_interfaces.py
index 6a2cc6a..5cc29ae 100755
--- a/bindings/scripts/generate_event_interfaces.py
+++ b/bindings/scripts/generate_event_interfaces.py
@@ -28,16 +28,16 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-"""Generate event interfaces .in file (EventInterfaces.in).
+"""Generate event interfaces .json5 file (EventInterfaces.json5).
 
-The event interfaces .in file contains a list of all Event interfaces, i.e.,
+The event interfaces .json5 file contains a list of all Event interfaces, i.e.,
 all interfaces that inherit from Event, including Event itself,
 together with certain extended attributes.
 
 Paths are in POSIX format, and relative to Source/.
 
 This list is used in core/ to generate EventFactory and EventNames.
-The .in format is documented in build/scripts/in_file.py.
+The .json5 format is documented in build/scripts/json5_generator.py.
 """
 
 from optparse import OptionParser
@@ -45,7 +45,9 @@
 import posixpath
 import sys
 
-from utilities import get_file_contents, read_file_to_list, write_file, get_interface_extended_attributes_from_idl
+from utilities import (get_file_contents, get_first_interface_name_from_idl,
+                       read_file_to_list, write_file,
+                       get_interface_extended_attributes_from_idl)
 
 EXPORTED_EXTENDED_ATTRIBUTES = (
     'ImplementedAs',
@@ -59,7 +61,6 @@
     parser = OptionParser()
     parser.add_option('--event-idl-files-list', help='file listing event IDL files')
     parser.add_option('--event-interfaces-file', help='output file')
-    parser.add_option('--write-file-only-if-changed', type='int', help='if true, do not write an output file if it would be identical to the existing one, which avoids unnecessary rebuilds in ninja')
     parser.add_option('--suffix', help='specify a suffix to the namespace, i.e., "Modules". Default is None.')
 
     options, args = parser.parse_args()
@@ -67,46 +68,59 @@
         parser.error('Must specify a file listing event IDL files using --event-idl-files-list.')
     if options.event_interfaces_file is None:
         parser.error('Must specify an output file using --event-interfaces-file.')
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
     if args:
         parser.error('No arguments allowed, but %d given.' % len(args))
     return options
 
 
-def write_event_interfaces_file(event_idl_files, destination_filename, only_if_changed, suffix):
-    def extended_attribute_string(name, value):
-        if name == 'RuntimeEnabled':
-            value += 'Enabled'
-        return name + '=' + value
-
+def write_event_interfaces_file(event_idl_files, destination_filename, suffix):
     def interface_line(full_path):
-        relative_path_local, _ = os.path.splitext(os.path.relpath(full_path, source_dir))
-        relative_path_posix = relative_path_local.replace(os.sep, posixpath.sep)
+        relative_dir_local = os.path.dirname(os.path.relpath(full_path, source_dir))
+        relative_dir_posix = relative_dir_local.replace(os.sep, posixpath.sep)
 
         idl_file_contents = get_file_contents(full_path)
+        interface_name = get_first_interface_name_from_idl(idl_file_contents)
         extended_attributes = get_interface_extended_attributes_from_idl(idl_file_contents)
         extended_attributes_list = [
-            extended_attribute_string(name, extended_attributes[name])
+            (name, extended_attributes[name])
             for name in EXPORTED_EXTENDED_ATTRIBUTES
             if name in extended_attributes]
 
-        return '%s %s\n' % (relative_path_posix,
-                            ', '.join(extended_attributes_list))
+        return (posixpath.join(relative_dir_posix, interface_name),
+                extended_attributes_list)
 
-    lines = ['namespace="Event"\n']
+    lines = [
+        '{',
+        'metadata: {',
+        '  namespace: "Event",'
+    ]
     if suffix:
-        lines.append('suffix="' + suffix + '"\n')
-        lines.append('export=%s_EXPORT\n' % suffix.upper())
+        lines.append('  suffix: "' + suffix + '",')
+        lines.append('  export: "%s_EXPORT",' % suffix.upper())
     else:
-        lines.append('export=CORE_EXPORT\n')
-    lines.append('\n')
+        lines.append('  export: "CORE_EXPORT",')
+    lines.extend([
+        '},',
+        'data: ['
+    ])
     interface_lines = [interface_line(event_idl_file)
                        for event_idl_file in event_idl_files]
     interface_lines.sort()
-    lines.extend(interface_lines)
-    write_file(''.join(lines), destination_filename, only_if_changed)
+    for name, attributes in interface_lines:
+        lines.extend([
+            '  {',
+            '    name: "%s",' % name
+        ])
+        for param, value in attributes:
+            if param == 'RuntimeEnabled':
+                value += 'Enabled'
+            lines.append('    %s: "%s",' % (param, value))
+        lines.append('  },')
+    lines.extend([
+        ']',
+        '}'
+    ])
+    write_file('\n'.join(lines), destination_filename)
 
 
 ################################################################################
@@ -116,7 +130,6 @@
     event_idl_files = read_file_to_list(options.event_idl_files_list)
     write_event_interfaces_file(event_idl_files,
                                 options.event_interfaces_file,
-                                options.write_file_only_if_changed,
                                 options.suffix)
 
 
diff --git a/bindings/scripts/generate_global_constructors.py b/bindings/scripts/generate_global_constructors.py
index 6965f9a..c068fbd 100755
--- a/bindings/scripts/generate_global_constructors.py
+++ b/bindings/scripts/generate_global_constructors.py
@@ -17,17 +17,25 @@
 Design document: http://www.chromium.org/developers/design-documents/idl-build
 """
 
+# pylint: disable=relative-import
+
 import itertools
 import optparse
 import os
-import cPickle as pickle
 import re
 import sys
 
-from v8_utilities import EXPOSED_EXECUTION_CONTEXT_METHOD
-
 from collections import defaultdict
-from utilities import should_generate_impl_file_from_idl, get_file_contents, idl_filename_to_interface_name, read_file_to_list, write_file, get_interface_extended_attributes_from_idl, get_interface_exposed_arguments, is_callback_interface_from_idl
+from utilities import get_file_contents
+from utilities import get_first_interface_name_from_idl
+from utilities import get_interface_exposed_arguments
+from utilities import get_interface_extended_attributes_from_idl
+from utilities import is_non_legacy_callback_interface_from_idl
+from utilities import read_file_to_list
+from utilities import read_pickle_file
+from utilities import should_generate_impl_file_from_idl
+from utilities import write_file
+from v8_utilities import EXPOSED_EXECUTION_CONTEXT_METHOD
 
 interface_name_to_global_names = {}
 global_name_to_constructors = defaultdict(list)
@@ -42,17 +50,12 @@
     parser = optparse.OptionParser()
     parser.add_option('--idl-files-list', help='file listing IDL files')
     parser.add_option('--global-objects-file', help='pickle file of global objects')
-    parser.add_option('--write-file-only-if-changed', type='int', help='if true, do not write an output file if it would be identical to the existing one, which avoids unnecessary rebuilds in ninja')
-
     options, args = parser.parse_args()
 
     if options.idl_files_list is None:
         parser.error('Must specify a file listing IDL files using --idl-files-list.')
     if options.global_objects_file is None:
         parser.error('Must specify a pickle file of global objects using --global-objects-file.')
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether output files are only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
 
     return options, args
 
@@ -69,18 +72,16 @@
 
 
 def record_global_constructors(idl_filename):
-    interface_name = idl_filename_to_interface_name(idl_filename)
     full_path = os.path.realpath(idl_filename)
     idl_file_contents = get_file_contents(full_path)
     extended_attributes = get_interface_extended_attributes_from_idl(idl_file_contents)
+    interface_name = get_first_interface_name_from_idl(idl_file_contents)
 
     # An interface property is produced for every non-callback interface
     # that does not have [NoInterfaceObject].
-    # Callback interfaces with constants also have interface properties,
-    # but there are none of these in Blink.
     # http://heycam.github.io/webidl/#es-interfaces
     if ((not should_generate_impl_file_from_idl(idl_file_contents)) or
-        is_callback_interface_from_idl(idl_file_contents) or
+        is_non_legacy_callback_interface_from_idl(idl_file_contents) or
         'NoInterfaceObject' in extended_attributes):
         return
 
@@ -104,9 +105,9 @@
 
 def generate_global_constructors_list(interface_name, extended_attributes):
     extended_attributes_list = [
-            name + '=' + extended_attributes[name]
-            for name in 'RuntimeEnabled', 'OriginTrialEnabled'
-            if name in extended_attributes]
+        name + (('=' + extended_attributes[name]) if extended_attributes[name] else '')
+        for name in 'RuntimeEnabled', 'OriginTrialEnabled', 'ContextEnabled', 'SecureContext'
+        if name in extended_attributes]
     if extended_attributes_list:
         extended_string = '[%s] ' % ', '.join(extended_attributes_list)
     else:
@@ -131,18 +132,20 @@
     return attributes_list
 
 
-def write_global_constructors_partial_interface(interface_name, idl_filename, constructor_attributes_list, only_if_changed):
+def write_global_constructors_partial_interface(interface_name, idl_filename, constructor_attributes_list):
+    idl_basename = os.path.basename(idl_filename)
+    basename = os.path.splitext(idl_basename)[0]
     # FIXME: replace this with a simple Jinja template
-    lines = (['partial interface %s {\n' % interface_name] +
+    lines = (['[\n',
+              '    ImplementedAs=%s\n' % basename,
+              '] partial interface %s {\n' % interface_name] +
              ['    %s;\n' % constructor_attribute
               # FIXME: sort by interface name (not first by extended attributes)
               for constructor_attribute in sorted(constructor_attributes_list)] +
              ['};\n'])
-    write_file(''.join(lines), idl_filename, only_if_changed)
+    write_file(''.join(lines), idl_filename)
     header_filename = os.path.splitext(idl_filename)[0] + '.h'
-    idl_basename = os.path.basename(idl_filename)
-    write_file(HEADER_FORMAT.format(idl_basename=idl_basename),
-               header_filename, only_if_changed)
+    write_file(HEADER_FORMAT.format(idl_basename=idl_basename), header_filename)
 
 
 ################################################################################
@@ -161,8 +164,7 @@
     interface_name_idl_filename = [(args[i], args[i + 1])
                                    for i in range(0, len(args), 2)]
 
-    with open(options.global_objects_file) as global_objects_file:
-        interface_name_to_global_names.update(pickle.load(global_objects_file))
+    interface_name_to_global_names.update(read_pickle_file(options.global_objects_file))
 
     for idl_filename in idl_files:
         record_global_constructors(idl_filename)
@@ -182,10 +184,7 @@
     for interface_name, idl_filename in interface_name_idl_filename:
         constructors = interface_name_to_constructors(interface_name)
         write_global_constructors_partial_interface(
-            interface_name,
-            idl_filename,
-            constructors,
-            options.write_file_only_if_changed)
+            interface_name, idl_filename, constructors)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/generate_idl_diff.py b/bindings/scripts/generate_idl_diff.py
deleted file mode 100644
index ae98695..0000000
--- a/bindings/scripts/generate_idl_diff.py
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/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
deleted file mode 100644
index c301dce..0000000
--- a/bindings/scripts/generate_idl_diff_test.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/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 a604e57..63b782e 100755
--- a/bindings/scripts/generate_init_partial_interfaces.py
+++ b/bindings/scripts/generate_init_partial_interfaces.py
@@ -5,21 +5,24 @@
 
 """Generate initPartialInterfacesInModules(), which registers partial interfaces in modules to core interfaces."""
 
-import cPickle as pickle
+# pylint: disable=relative-import
+
 from optparse import OptionParser
 import os
 import posixpath
 import sys
-from utilities import write_file
 
-from aggregate_generated_bindings import extract_meta_data
+from utilities import get_file_contents
+from utilities import get_first_interface_name_from_idl
 from utilities import read_idl_files_list_from_file
+from utilities import should_generate_impl_file_from_idl
+from utilities import write_file
+from v8_utilities import build_basename
 
 
 _COPYRIGHT = """// 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.
-
 """
 
 _INIT_PARTIAL_INTERFACE = """%s
@@ -27,8 +30,7 @@
 
 namespace blink {
 
-void initPartialInterfacesInModules()
-{
+void InitPartialInterfacesInModules() {
 %s
 }
 
@@ -39,35 +41,65 @@
 def parse_options():
     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('--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('--output')
+    # TODO(tkent): Remove the option after the great mv. crbug.com/760462
+    parser.add_option('--snake-case-generated-files',
+                      action='store_true', default=False)
 
     options, args = parser.parse_args()
     if options.output is None:
         parser.error('Must specify output file using --output.')
     if options.idl_files_list is None:
         parser.error('Must specify a list of IDL files using --idl-files-list.')
-    if options.write_file_only_if_changed is None:
-        parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
     return options
 
 
+def extract_meta_data(file_paths):
+    """Extracts interface name from each IDL file."""
+    meta_data_list = []
+
+    for file_path in file_paths:
+        if not file_path.endswith('.idl'):
+            print 'WARNING: non-IDL file passed: "%s"' % file_path
+            continue
+        if not os.path.exists(file_path):
+            print 'WARNING: file not found: "%s"' % file_path
+            continue
+
+        idl_file_contents = get_file_contents(file_path)
+        if not should_generate_impl_file_from_idl(idl_file_contents):
+            continue
+
+        # Extract interface name from file content
+        basename = get_first_interface_name_from_idl(idl_file_contents)
+
+        meta_data = {
+            'basename': basename,
+        }
+        meta_data_list.append(meta_data)
+
+    return meta_data_list
+
+
 def main():
     options = parse_options()
 
     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']
+    interface_names = ['V8%sPartial' % meta_data['basename']
                        for meta_data in meta_data_list]
     interface_names.sort()
 
-    includes = ['#include "bindings/modules/v8/%s.h"' % interface_name
+    includes = ['#include "bindings/modules/v8/%s"' %
+                build_basename(interface_name, options.snake_case_generated_files, ext='.h')
                 for interface_name in interface_names]
-    initialize_calls = ['    %s::initialize();' % interface_name
+    initialize_calls = ['  %s::initialize();' % interface_name
                         for interface_name in interface_names]
 
     content = _INIT_PARTIAL_INTERFACE % (
@@ -75,8 +107,7 @@
         '\n'.join(includes),
         '\n'.join(initialize_calls))
 
-    write_file(content, options.output,
-               only_if_changed=options.write_file_only_if_changed)
+    write_file(content, options.output)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/generate_v8_context_snapshot_external_references.py b/bindings/scripts/generate_v8_context_snapshot_external_references.py
new file mode 100644
index 0000000..1fa3fae
--- /dev/null
+++ b/bindings/scripts/generate_v8_context_snapshot_external_references.py
@@ -0,0 +1,245 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=relative-import
+
+import argparse
+import os
+import posixpath
+
+from code_generator import initialize_jinja_env
+from idl_reader import IdlReader
+from utilities import create_component_info_provider, write_file
+import utilities
+import v8_attributes
+import v8_interface
+import v8_types
+import v8_utilities
+
+
+INCLUDES = frozenset([
+    'bindings/core/v8/GeneratedCodeHelper.h',
+    'bindings/core/v8/V8HTMLDocument.h',
+    'bindings/core/v8/V8Initializer.h',
+    'bindings/core/v8/V8Window.h',
+    'platform/bindings/DOMWrapperWorld.h',
+    'platform/bindings/V8ObjectConstructor.h',
+    'platform/bindings/V8PerIsolateData.h',
+    'platform/bindings/V8PrivateProperty.h',
+    'v8/include/v8.h'])
+
+TEMPLATE_FILE = 'external_reference_table.cpp.tmpl'
+
+WHITE_LIST_INTERFACES = frozenset([
+    'DOMMatrix',  # crbug.com/733481
+])
+
+SNAPSHOTTED_INTERFACES = frozenset([
+    'Window',
+    'EventTarget',
+    'HTMLDocument',
+    'Document',
+    'Node',
+])
+
+
+def parse_args():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--idl-files-list', type=str, required=True,
+                        help='file listing IDL files')
+    parser.add_argument('--output', type=str, required=True,
+                        help='output file path')
+    parser.add_argument('--info-dir', type=str, required=True,
+                        help='directory contains component info')
+    parser.add_argument('--cache-dir', type=str, required=True,
+                        help='cache directory')
+    parser.add_argument('--target-component', type=str, required=True,
+                        help='target component')
+    parser.add_argument('--snake-case-generated-files', action='store_true',
+                        default=False)
+    return parser.parse_known_args()
+
+
+# This class creates a Jinja template context about an interface.
+class InterfaceTemplateContextBuilder(object):
+
+    def __init__(self, opts, info_provider):
+        self._opts = opts
+        self._info_provider = info_provider
+
+    def create_interface_context(self, interface, interfaces):
+        '''Creates a Jinja context which is based on an interface.'''
+
+        name = '%s%s' % (v8_utilities.cpp_name(interface), 'Partial' if interface.is_partial else '')
+
+        # Constructors
+        constructors = any(constructor.name == 'Constructor' for constructor in interface.constructors)
+        custom_constructors = interface.custom_constructors
+        html_constructor = 'HTMLConstructor' in interface.extended_attributes
+        has_constructor_callback = constructors or custom_constructors or html_constructor
+
+        attributes = []
+        methods = []
+        has_cross_origin_indexed_getter = False
+        has_cross_origin_named_enum = False
+        has_cross_origin_named_getter = False
+        has_cross_origin_named_setter = False
+        has_origin_safe_method_setter = False
+        has_security_check = False
+        indexed_property_getter = None
+        is_global = False
+        named_property_getter = None
+        if interface.name in SNAPSHOTTED_INTERFACES:
+            attributes = [v8_attributes.attribute_context(interface, attribute, interfaces)
+                          for attribute in interface.attributes]
+            methods = v8_interface.methods_context(interface)['methods']
+            is_global = ('PrimaryGlobal' in interface.extended_attributes or
+                         'Global' in interface.extended_attributes)
+
+            named_property_getter = v8_interface.property_getter(
+                interface.named_property_getter, ['name'])
+            indexed_property_getter = v8_interface.property_getter(
+                interface.indexed_property_getter, ['index'])
+
+            if not interface.is_partial:
+                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_security_check = ('CheckSecurity' in interface.extended_attributes and
+                                      interface.name != 'EventTarget')
+                has_cross_origin_named_getter = (any(method['is_cross_origin'] for method in methods) or
+                                                 any(attribute['has_cross_origin_getter'] for attribute in attributes))
+                has_cross_origin_named_setter = any(attribute['has_cross_origin_setter'] for attribute in attributes)
+                has_cross_origin_indexed_getter = indexed_property_getter and indexed_property_getter['is_cross_origin']
+                has_cross_origin_named_enum = has_cross_origin_named_getter or has_cross_origin_named_setter
+                if named_property_getter and named_property_getter['is_cross_origin']:
+                    has_cross_origin_named_getter = True
+
+        return {
+            'attributes': attributes,
+            'has_origin_safe_method_setter': has_origin_safe_method_setter,
+            'has_constructor_callback': has_constructor_callback,
+            'has_cross_origin_named_getter': has_cross_origin_named_getter,
+            'has_cross_origin_named_setter': has_cross_origin_named_setter,
+            'has_cross_origin_named_enumerator': has_cross_origin_named_enum,
+            'has_cross_origin_indexed_getter': has_cross_origin_indexed_getter,
+            'has_security_check': has_security_check,
+            'indexed_property_getter': indexed_property_getter,
+            'indexed_property_setter': v8_interface.property_setter(interface.indexed_property_setter, interface),
+            'indexed_property_deleter': v8_interface.property_deleter(interface.indexed_property_deleter),
+            'is_array_buffer_or_view': interface.idl_type.is_array_buffer_or_view,
+            'is_callback': interface.is_callback,
+            'is_partial': interface.is_partial,
+            'is_snapshotted': interface in SNAPSHOTTED_INTERFACES,
+            'methods': methods,
+            'name': name,
+            'named_constructor': v8_interface.named_constructor_context(interface),
+            'named_property_getter': named_property_getter,
+            'named_property_setter': v8_interface.property_setter(interface.named_property_setter, interface),
+            'named_property_deleter': v8_interface.property_deleter(interface.named_property_deleter),
+            'v8_name': v8_utilities.v8_class_name_or_partial(interface),
+        }
+
+
+# This class applies a Jinja template and creates a .cpp file for the external reference table.
+class ExternalReferenceTableGenerator(object):
+    def __init__(self, opts, info_provider):
+        self._opts = opts
+        self._info_provider = info_provider
+        self._reader = IdlReader(
+            info_provider.interfaces_info, opts.cache_dir)
+        self._interface_contexts = {}
+        self._include_files = set(INCLUDES)
+        v8_types.set_component_dirs(info_provider.interfaces_info['component_dirs'])
+
+    # Creates a Jinja context from an IDL file.
+    def process_idl_file(self, idl_filename):
+        definitions = self._reader.read_idl_definitions(idl_filename)
+        for component in definitions:
+            target_definitions = definitions[component]
+            interfaces = target_definitions.interfaces
+            first_name = target_definitions.first_name
+            if first_name in interfaces.keys():
+                interface = interfaces[first_name]
+                self._process_interface(interface, component, interfaces)
+
+    # Creates a Jinja context from an interface. Some interfaces are not used
+    # in V8 context snapshot, so we can skip them.
+    def _process_interface(self, interface, component, interfaces):
+        def has_impl(interface):
+            if interface.name in WHITE_LIST_INTERFACES:
+                return True
+            # Non legacy callback interface does not provide V8 callbacks.
+            if interface.is_callback:
+                return len(interface.constants) > 0
+            if 'RuntimeEnabled' in interface.extended_attributes:
+                return False
+            return True
+
+        if not has_impl(interface):
+            return
+
+        context_builder = InterfaceTemplateContextBuilder(self._opts, self._info_provider)
+        context = context_builder.create_interface_context(interface, interfaces)
+        name = '%s%s' % (interface.name, 'Partial' if interface.is_partial else '')
+        self._interface_contexts[name] = context
+        if self._opts.snake_case_generated_files:
+            include_file = 'bindings/%s/v8/%s.h' % (component, utilities.to_snake_case(context['v8_name']))
+        else:
+            include_file = 'bindings/%s/v8/%s.h' % (component, context['v8_name'])
+        self._include_files.add(include_file)
+
+    # Gathers all interface-dependent information and returns as a Jinja template context.
+    def _create_template_context(self):
+        interfaces = []
+        for name in sorted(self._interface_contexts):
+            interfaces.append(self._interface_contexts[name])
+        header_name = 'V8ContextSnapshotExternalReferences.h'
+        if self._opts.snake_case_generated_files:
+            header_name = 'v8_context_snapshot_external_references.h'
+        include_files = list(self._include_files)
+        # TODO(tkent): Update INCLUDES after the great mv, and remove the
+        # following block. crbug.com/760462
+        if self._opts.snake_case_generated_files:
+            include_files = []
+            for include in self._include_files:
+                dirname, basename = posixpath.split(include)
+                name, ext = posixpath.splitext(basename)
+                include_files.append(posixpath.join(
+                    dirname, utilities.to_snake_case(name) + ext))
+        return {
+            'class': 'V8ContextSnapshotExternalReferences',
+            'interfaces': interfaces,
+            'include_files': sorted(include_files),
+            'this_include_header_name': header_name,
+            'code_generator': os.path.basename(__file__),
+            'jinja_template_filename': TEMPLATE_FILE
+        }
+
+    # Applies a Jinja template on a context and generates a C++ code.
+    def generate(self):
+        jinja_env = initialize_jinja_env(self._opts.cache_dir)
+        context = self._create_template_context()
+        cpp_template = jinja_env.get_template(TEMPLATE_FILE)
+        cpp_text = cpp_template.render(context)
+        return cpp_text
+
+
+def main():
+    opts, _ = parse_args()
+    # TODO(peria): get rid of |info_provider|
+    info_provider = create_component_info_provider(
+        opts.info_dir, opts.target_component)
+    generator = ExternalReferenceTableGenerator(opts, info_provider)
+
+    idl_files = utilities.read_idl_files_list_from_file(opts.idl_files_list, False)
+    for idl_file in idl_files:
+        generator.process_idl_file(idl_file)
+    output_code = generator.generate()
+    output_path = opts.output
+    write_file(output_code, output_path)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/bindings/scripts/idl_compiler.py b/bindings/scripts/idl_compiler.py
index baf2686..d876a0c 100755
--- a/bindings/scripts/idl_compiler.py
+++ b/bindings/scripts/idl_compiler.py
@@ -35,12 +35,16 @@
 import abc
 from optparse import OptionParser
 import os
-import cPickle as pickle
 import sys
 
-from code_generator_v8 import CodeGeneratorDictionaryImpl, CodeGeneratorV8, CodeGeneratorUnionType
+from code_generator_v8 import CodeGeneratorDictionaryImpl
+from code_generator_v8 import CodeGeneratorV8
+from code_generator_v8 import CodeGeneratorUnionType
+from code_generator_v8 import CodeGeneratorCallbackFunction
 from idl_reader import IdlReader
-from utilities import create_component_info_provider, read_idl_files_list_from_file, write_file, idl_filename_to_component
+from utilities import create_component_info_provider
+from utilities import read_idl_files_list_from_file
+from utilities import write_file
 
 
 def parse_options():
@@ -48,14 +52,20 @@
     parser.add_option('--cache-directory',
                       help='cache directory, defaults to output directory')
     parser.add_option('--generate-impl',
-                      action="store_true", default=False)
+                      action='store_true', default=False)
+    # TODO(tkent): Remove the option after the great mv. crbug.com/760462
+    parser.add_option('--snake-case-generated-files',
+                      action='store_true', default=False)
+    parser.add_option('--read-idl-list-from-file',
+                      action='store_true', default=False)
     parser.add_option('--output-directory')
     parser.add_option('--impl-output-directory')
     parser.add_option('--info-dir')
-    parser.add_option('--write-file-only-if-changed', type='int')
     # FIXME: We should always explicitly specify --target-component and
     # remove the default behavior.
     parser.add_option('--target-component',
+                      type='choice',
+                      choices=['core', 'modules'],
                       help='target component to generate code, defaults to '
                       'component of input idl file')
     # ensure output comes last, so command line easy to parse via regexes
@@ -64,139 +74,136 @@
     options, args = parser.parse_args()
     if options.output_directory is None:
         parser.error('Must specify output directory using --output-directory.')
-    options.write_file_only_if_changed = bool(options.write_file_only_if_changed)
     if len(args) != 1:
         parser.error('Must specify exactly 1 input file as argument, but %d given.' % len(args))
     idl_filename = os.path.realpath(args[0])
     return options, idl_filename
 
 
-def idl_filename_to_interface_name(idl_filename):
-    basename = os.path.basename(idl_filename)
-    interface_name, _ = os.path.splitext(basename)
-    return interface_name
-
-
 class IdlCompiler(object):
-    """Abstract Base Class for IDL compilers.
+    """The IDL Compiler.
 
-    In concrete classes:
-    * self.code_generator must be set, implementing generate_code()
-      (returning a list of output code), and
-    * compile_file() must be implemented (handling output filenames).
     """
     __metaclass__ = abc.ABCMeta
 
     def __init__(self, output_directory, cache_directory=None,
-                 code_generator=None, info_provider=None,
-                 only_if_changed=False, target_component=None):
+                 code_generator_class=None, snake_case_generated_files=False,
+                 info_provider=None, target_component=None):
         """
         Args:
           output_directory: directory to put output files.
           cache_directory: directory which contains PLY caches.
-          code_generator: code generator to be used.
+          code_generator_class: code generator class to be used.
           info_provider: component-specific information provider.
-          only_if_changed: True when the compiler should only write output files
-            when the contents are changed.
           target_component: component to be processed.
         """
         self.cache_directory = cache_directory
-        self.code_generator = code_generator
         self.info_provider = info_provider
-        self.only_if_changed = only_if_changed
         self.output_directory = output_directory
         self.target_component = target_component
         self.reader = IdlReader(info_provider.interfaces_info, cache_directory)
+        self.code_generator = code_generator_class(self.info_provider,
+                                                   self.cache_directory,
+                                                   self.output_directory,
+                                                   snake_case_generated_files)
 
     def compile_and_write(self, idl_filename):
-        interface_name = idl_filename_to_interface_name(idl_filename)
         definitions = self.reader.read_idl_definitions(idl_filename)
-        target_component = self.target_component or idl_filename_to_component(idl_filename)
-        target_definitions = definitions[target_component]
+        target_definitions = definitions[self.target_component]
+        interface_name = target_definitions.first_name
         output_code_list = self.code_generator.generate_code(
             target_definitions, interface_name)
+
+        # Generator may choose to omit the file.
+        if output_code_list is None:
+            return
+
         for output_path, output_code in output_code_list:
-            write_file(output_code, output_path, self.only_if_changed)
-
-    @abc.abstractmethod
-    def compile_file(self, idl_filename):
-        pass
-
-
-class IdlCompilerV8(IdlCompiler):
-    def __init__(self, *args, **kwargs):
-        IdlCompiler.__init__(self, *args, **kwargs)
-        self.code_generator = CodeGeneratorV8(self.info_provider,
-                                              self.cache_directory,
-                                              self.output_directory)
+            write_file(output_code, output_path)
 
     def compile_file(self, idl_filename):
         self.compile_and_write(idl_filename)
 
 
-class IdlCompilerDictionaryImpl(IdlCompiler):
-    def __init__(self, *args, **kwargs):
-        IdlCompiler.__init__(self, *args, **kwargs)
-        self.code_generator = CodeGeneratorDictionaryImpl(
-            self.info_provider, self.cache_directory, self.output_directory)
-
-    def compile_file(self, idl_filename):
-        self.compile_and_write(idl_filename)
-
-
-def generate_bindings(options, input_filename):
-    info_provider = create_component_info_provider(
-        options.info_dir, options.target_component)
-    idl_compiler = IdlCompilerV8(
-        options.output_directory,
+def generate_bindings(code_generator_class, info_provider, options,
+                      input_filenames):
+    idl_compiler = IdlCompiler(
+        output_directory=options.output_directory,
         cache_directory=options.cache_directory,
+        code_generator_class=code_generator_class,
+        snake_case_generated_files=options.snake_case_generated_files,
         info_provider=info_provider,
-        only_if_changed=options.write_file_only_if_changed,
         target_component=options.target_component)
-    idl_compiler.compile_file(input_filename)
 
-
-def generate_dictionary_impl(options, input_filename):
-    info_provider = create_component_info_provider(
-        options.info_dir, options.target_component)
-    idl_compiler = IdlCompilerDictionaryImpl(
-        options.impl_output_directory,
-        cache_directory=options.cache_directory,
-        info_provider=info_provider,
-        only_if_changed=options.write_file_only_if_changed)
-
-    idl_filenames = read_idl_files_list_from_file(input_filename,
-                                                  is_gyp_format=True)
-    for idl_filename in idl_filenames:
+    for idl_filename in input_filenames:
         idl_compiler.compile_file(idl_filename)
 
 
-def generate_union_type_containers(options):
-    info_provider = create_component_info_provider(
-        options.info_dir, options.target_component)
-    if not info_provider.interfaces_info:
-        raise Exception('Interfaces info is required to generate '
-                        'union types containers')
-    generator = CodeGeneratorUnionType(
+def generate_dictionary_impl(code_generator_class, info_provider, options,
+                             input_filenames):
+    idl_compiler = IdlCompiler(
+        output_directory=options.impl_output_directory,
+        cache_directory=options.cache_directory,
+        code_generator_class=code_generator_class,
+        snake_case_generated_files=options.snake_case_generated_files,
+        info_provider=info_provider,
+        target_component=options.target_component)
+
+    for idl_filename in input_filenames:
+        idl_compiler.compile_file(idl_filename)
+
+
+def generate_union_type_containers(code_generator_class, info_provider,
+                                   options):
+    generator = code_generator_class(
         info_provider,
         options.cache_directory,
         options.output_directory,
+        options.snake_case_generated_files,
         options.target_component)
     output_code_list = generator.generate_code()
     for output_path, output_code in output_code_list:
-        write_file(output_code, output_path, options.write_file_only_if_changed)
+        write_file(output_code, output_path)
+
+
+def generate_callback_function_impl(code_generator_class, info_provider,
+                                    options):
+    generator = code_generator_class(
+        info_provider,
+        options.cache_directory,
+        options.output_directory,
+        options.snake_case_generated_files,
+        options.target_component)
+    output_code_list = generator.generate_code()
+    for output_path, output_code in output_code_list:
+        write_file(output_code, output_path)
 
 
 def main():
     options, input_filename = parse_options()
-    if options.generate_impl:
+    info_provider = create_component_info_provider(
+        options.info_dir, options.target_component)
+    if options.generate_impl or options.read_idl_list_from_file:
         # |input_filename| should be a file which contains a list of IDL
         # dictionary paths.
-        generate_dictionary_impl(options, input_filename)
-        generate_union_type_containers(options)
+        input_filenames = read_idl_files_list_from_file(input_filename,
+                                                        is_gyp_format=True)
     else:
-        # |input_filename| should be a path of an IDL file.
-        generate_bindings(options, input_filename)
+        input_filenames = [input_filename]
+
+    if options.generate_impl:
+        if not info_provider.interfaces_info:
+            raise Exception('Interfaces info is required to generate '
+                            'impl classes')
+        generate_dictionary_impl(CodeGeneratorDictionaryImpl, info_provider,
+                                 options, input_filenames)
+        generate_union_type_containers(CodeGeneratorUnionType, info_provider,
+                                       options)
+        generate_callback_function_impl(CodeGeneratorCallbackFunction,
+                                        info_provider, options)
+    else:
+        generate_bindings(CodeGeneratorV8, info_provider, options,
+                          input_filenames)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/idl_definitions.py b/bindings/scripts/idl_definitions.py
index 16a8290..f2f0e54 100644
--- a/bindings/scripts/idl_definitions.py
+++ b/bindings/scripts/idl_definitions.py
@@ -26,6 +26,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+# pylint: disable=relative-import
+
 """Blink IDL Intermediate Representation (IR) classes.
 
 Classes are primarily constructors, which build an IdlDefinitions object
@@ -52,8 +54,6 @@
         IdlIterable < IdlIterableOrMaplikeOrSetlike
         IdlMaplike < IdlIterableOrMaplikeOrSetlike
         IdlSetlike < IdlIterableOrMaplikeOrSetlike
-    IdlException < IdlInterface
-        (same contents as IdlInterface)
 
 TypedObject :: Object with one or more attributes that is a type.
 
@@ -64,9 +64,14 @@
 
 import abc
 
-from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlNullableType
+from idl_types import IdlFrozenArrayType
+from idl_types import IdlNullableType
+from idl_types import IdlRecordType
+from idl_types import IdlSequenceType
+from idl_types import IdlType
+from idl_types import IdlUnionType
 
-SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER']
+SPECIAL_KEYWORD_LIST = ['LEGACYCALLER', 'GETTER', 'SETTER', 'DELETER']
 
 
 ################################################################################
@@ -88,14 +93,14 @@
 ################################################################################
 
 class IdlDefinitions(object):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         """Args: node: AST root node, class == 'File'"""
         self.callback_functions = {}
         self.dictionaries = {}
         self.enumerations = {}
         self.implements = []
         self.interfaces = {}
-        self.idl_name = idl_name
+        self.first_name = None
         self.typedefs = {}
 
         node_class = node.GetClass()
@@ -106,26 +111,26 @@
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Interface':
-                interface = IdlInterface(idl_name, child)
+                interface = IdlInterface(child)
                 self.interfaces[interface.name] = interface
-            elif child_class == 'Exception':
-                exception = IdlException(idl_name, child)
-                # For simplicity, treat exceptions as interfaces
-                self.interfaces[exception.name] = exception
+                if not self.first_name:
+                    self.first_name = interface.name
             elif child_class == 'Typedef':
                 typedef = IdlTypedef(child)
                 self.typedefs[typedef.name] = typedef
             elif child_class == 'Enum':
-                enumeration = IdlEnum(idl_name, child)
+                enumeration = IdlEnum(child)
                 self.enumerations[enumeration.name] = enumeration
             elif child_class == 'Callback':
-                callback_function = IdlCallbackFunction(idl_name, child)
+                callback_function = IdlCallbackFunction(child)
                 self.callback_functions[callback_function.name] = callback_function
             elif child_class == 'Implements':
                 self.implements.append(IdlImplement(child))
             elif child_class == 'Dictionary':
-                dictionary = IdlDictionary(idl_name, child)
+                dictionary = IdlDictionary(child)
                 self.dictionaries[dictionary.name] = dictionary
+                if not self.first_name:
+                    self.first_name = dictionary.name
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -137,6 +142,10 @@
             callback_function.accept(visitor)
         for dictionary in self.dictionaries.itervalues():
             dictionary.accept(visitor)
+        for enumeration in self.enumerations.itervalues():
+            enumeration.accept(visitor)
+        for implement in self.implements:
+            implement.accept(visitor)
         for typedef in self.typedefs.itervalues():
             typedef.accept(visitor)
 
@@ -166,20 +175,26 @@
 ################################################################################
 
 class IdlCallbackFunction(TypedObject):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         children = node.GetChildren()
         num_children = len(children)
-        if num_children != 2:
-            raise ValueError('Expected 2 children, got %s' % num_children)
-        type_node, arguments_node = children
+        if num_children < 2 or num_children > 3:
+            raise ValueError('Expected 2 or 3 children, got %s' % num_children)
+        type_node = children[0]
+        arguments_node = children[1]
+        if num_children == 3:
+            ext_attributes_node = children[2]
+            self.extended_attributes = (
+                ext_attributes_node_to_extended_attributes(ext_attributes_node))
+        else:
+            self.extended_attributes = {}
         arguments_node_class = arguments_node.GetClass()
         if arguments_node_class != 'Arguments':
             raise ValueError('Expected Arguments node, got %s' % arguments_node_class)
 
-        self.idl_name = idl_name
         self.name = node.GetName()
         self.idl_type = type_node_to_type(type_node)
-        self.arguments = arguments_node_to_arguments(idl_name, arguments_node)
+        self.arguments = arguments_node_to_arguments(arguments_node)
 
     def accept(self, visitor):
         visitor.visit_callback_function(self)
@@ -192,10 +207,9 @@
 ################################################################################
 
 class IdlDictionary(object):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         self.extended_attributes = {}
-        self.is_partial = bool(node.GetProperty('Partial'))
-        self.idl_name = idl_name
+        self.is_partial = bool(node.GetProperty('PARTIAL'))
         self.name = node.GetName()
         self.members = []
         self.parent = None
@@ -204,10 +218,10 @@
             if child_class == 'Inherit':
                 self.parent = child.GetName()
             elif child_class == 'Key':
-                self.members.append(IdlDictionaryMember(idl_name, child))
+                self.members.append(IdlDictionaryMember(child))
             elif child_class == 'ExtAttributes':
                 self.extended_attributes = (
-                    ext_attributes_node_to_extended_attributes(idl_name, child))
+                    ext_attributes_node_to_extended_attributes(child))
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -218,11 +232,10 @@
 
 
 class IdlDictionaryMember(TypedObject):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         self.default_value = None
         self.extended_attributes = {}
         self.idl_type = None
-        self.idl_name = idl_name
         self.is_required = bool(node.GetProperty('REQUIRED'))
         self.name = node.GetName()
         for child in node.GetChildren():
@@ -233,7 +246,7 @@
                 self.default_value = default_node_to_idl_literal(child)
             elif child_class == 'ExtAttributes':
                 self.extended_attributes = (
-                    ext_attributes_node_to_extended_attributes(idl_name, child))
+                    ext_attributes_node_to_extended_attributes(child))
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -246,14 +259,15 @@
 ################################################################################
 
 class IdlEnum(object):
-    # FIXME: remove, just treat enums as a dictionary
-    def __init__(self, idl_name, node):
-        self.idl_name = idl_name
+    def __init__(self, node):
         self.name = node.GetName()
         self.values = []
         for child in node.GetChildren():
             self.values.append(child.GetName())
 
+    def accept(self, visitor):
+        visitor.visit_enumeration(self)
+
 
 ################################################################################
 # Typedefs
@@ -271,11 +285,11 @@
 
 
 ################################################################################
-# Interfaces and Exceptions
+# Interfaces
 ################################################################################
 
 class IdlInterface(object):
-    def __init__(self, idl_name, node=None):
+    def __init__(self, node):
         self.attributes = []
         self.constants = []
         self.constructors = []
@@ -287,67 +301,87 @@
         self.stringifier = None
         self.iterable = None
         self.has_indexed_elements = False
+        self.has_named_property_getter = False
         self.maplike = None
         self.setlike = None
         self.original_interface = None
         self.partial_interfaces = []
-        if not node:  # Early exit for IdlException.__init__
-            return
 
         self.is_callback = bool(node.GetProperty('CALLBACK'))
-        self.is_exception = False
-        # FIXME: uppercase 'Partial' => 'PARTIAL' in base IDL parser
-        self.is_partial = bool(node.GetProperty('Partial'))
-        self.idl_name = idl_name
+        self.is_partial = bool(node.GetProperty('PARTIAL'))
         self.name = node.GetName()
         self.idl_type = IdlType(self.name)
 
         has_indexed_property_getter = False
         has_integer_typed_length = False
 
+        def is_blacklisted_attribute_type(idl_type):
+            return idl_type.is_callback_function or \
+                idl_type.is_dictionary or \
+                idl_type.is_record_type or \
+                idl_type.is_sequence_type
+
         children = node.GetChildren()
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Attribute':
-                attr = IdlAttribute(idl_name, child)
+                attr = IdlAttribute(child)
+                if is_blacklisted_attribute_type(attr.idl_type):
+                    raise ValueError('Type "%s" cannot be used as an attribute.' % attr.idl_type)
                 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))
+                self.constants.append(IdlConstant(child))
             elif child_class == 'ExtAttributes':
-                extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                extended_attributes = ext_attributes_node_to_extended_attributes(child)
                 self.constructors, self.custom_constructors = (
-                    extended_attributes_to_constructors(idl_name, extended_attributes))
+                    extended_attributes_to_constructors(extended_attributes))
                 clear_constructor_attributes(extended_attributes)
                 self.extended_attributes = extended_attributes
             elif child_class == 'Operation':
-                op = IdlOperation(idl_name, child)
-                if 'getter' in op.specials and str(op.arguments[0].idl_type) == 'unsigned long':
-                    has_indexed_property_getter = True
+                op = IdlOperation(child)
+                if 'getter' in op.specials:
+                    if str(op.arguments[0].idl_type) == 'unsigned long':
+                        has_indexed_property_getter = True
+                    elif str(op.arguments[0].idl_type) == 'DOMString':
+                        self.has_named_property_getter = True
                 self.operations.append(op)
             elif child_class == 'Inherit':
                 self.parent = child.GetName()
             elif child_class == 'Serializer':
-                self.serializer = IdlSerializer(idl_name, child)
+                self.serializer = IdlSerializer(child)
                 self.process_serializer()
             elif child_class == 'Stringifier':
-                self.stringifier = IdlStringifier(idl_name, child)
+                self.stringifier = IdlStringifier(child)
                 self.process_stringifier()
             elif child_class == 'Iterable':
-                self.iterable = IdlIterable(idl_name, child)
+                self.iterable = IdlIterable(child)
             elif child_class == 'Maplike':
-                self.maplike = IdlMaplike(idl_name, child)
+                self.maplike = IdlMaplike(child)
             elif child_class == 'Setlike':
-                self.setlike = IdlSetlike(idl_name, child)
+                self.setlike = IdlSetlike(child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
         if len(filter(None, [self.iterable, self.maplike, self.setlike])) > 1:
             raise ValueError('Interface can only have one of iterable<>, maplike<> and setlike<>.')
 
+        # TODO(rakuco): This validation logic should be in v8_interface according to bashi@.
+        # At the moment, doing so does not work because several IDL files are partial Window
+        # interface definitions, and interface_dependency_resolver.py doesn't seem to have any logic
+        # to prevent these partial interfaces from resetting has_named_property to False.
+        if 'LegacyUnenumerableNamedProperties' in self.extended_attributes and \
+           not self.has_named_property_getter:
+            raise ValueError('[LegacyUnenumerableNamedProperties] can be used only in interfaces '
+                             'that support named properties.')
+
         if has_integer_typed_length and has_indexed_property_getter:
             self.has_indexed_elements = True
+        else:
+            if self.iterable is not None and self.iterable.key_type is None:
+                raise ValueError('Value iterators (iterable<V>) must be accompanied by an indexed '
+                                 'property getter and an integer-typed length attribute.')
 
     def accept(self, visitor):
         visitor.visit_interface(self)
@@ -387,43 +421,10 @@
         self.attributes.extend(other.attributes)
         self.constants.extend(other.constants)
         self.operations.extend(other.operations)
-
-
-class IdlException(IdlInterface):
-    # Properly exceptions and interfaces are distinct, and thus should inherit a
-    # common base class (say, "IdlExceptionOrInterface").
-    # However, there is only one exception (DOMException), and new exceptions
-    # are not expected. Thus it is easier to implement exceptions as a
-    # restricted subclass of interfaces.
-    # http://www.w3.org/TR/WebIDL/#idl-exceptions
-    def __init__(self, idl_name, node):
-        # Exceptions are similar to Interfaces, but simpler
-        IdlInterface.__init__(self, idl_name)
-        self.is_callback = False
-        self.is_exception = True
-        self.is_partial = False
-        self.idl_name = idl_name
-        self.name = node.GetName()
-        self.idl_type = IdlType(self.name)
-
-        children = node.GetChildren()
-        for child in children:
-            child_class = child.GetClass()
-            if child_class == 'Attribute':
-                attribute = IdlAttribute(idl_name, child)
-                self.attributes.append(attribute)
-            elif child_class == 'Const':
-                self.constants.append(IdlConstant(idl_name, child))
-            elif child_class == 'ExtAttributes':
-                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:
-                raise ValueError('Unrecognized node class: %s' % child_class)
+        if self.serializer is None:
+            self.serializer = other.serializer
+        if self.stringifier is None:
+            self.stringifier = other.stringifier
 
 
 ################################################################################
@@ -431,24 +432,23 @@
 ################################################################################
 
 class IdlAttribute(TypedObject):
-    def __init__(self, idl_name, node):
-        self.is_read_only = bool(node.GetProperty('READONLY'))
-        self.is_static = bool(node.GetProperty('STATIC'))
-        self.idl_name = idl_name
-        self.name = node.GetName()
-        # Defaults, overridden below
+    def __init__(self, node=None):
+        self.is_read_only = bool(node.GetProperty('READONLY')) if node else False
+        self.is_static = bool(node.GetProperty('STATIC')) if node else False
+        self.name = node.GetName() if node else None
         self.idl_type = None
         self.extended_attributes = {}
 
-        children = node.GetChildren()
-        for child in children:
-            child_class = child.GetClass()
-            if child_class == 'Type':
-                self.idl_type = type_node_to_type(child)
-            elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
-            else:
-                raise ValueError('Unrecognized node class: %s' % child_class)
+        if node:
+            children = node.GetChildren()
+            for child in children:
+                child_class = child.GetClass()
+                if child_class == 'Type':
+                    self.idl_type = type_node_to_type(child)
+                elif child_class == 'ExtAttributes':
+                    self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                else:
+                    raise ValueError('Unrecognized node class: %s' % child_class)
 
     def accept(self, visitor):
         visitor.visit_attribute(self)
@@ -459,7 +459,7 @@
 ################################################################################
 
 class IdlConstant(TypedObject):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         children = node.GetChildren()
         num_children = len(children)
         if num_children < 2 or num_children > 3:
@@ -470,22 +470,15 @@
         if value_node_class != 'Value':
             raise ValueError('Expected Value node, got %s' % value_node_class)
 
-        self.idl_name = idl_name
         self.name = node.GetName()
         # ConstType is more limited than Type, so subtree is smaller and
         # we don't use the full type_node_to_type function.
         self.idl_type = type_node_inner_to_type(type_node)
-        # FIXME: This code is unnecessarily complicated due to the rather
-        # inconsistent way the upstream IDL parser outputs default values.
-        # http://crbug.com/374178
-        if value_node.GetProperty('TYPE') == 'float':
-            self.value = value_node.GetProperty('VALUE')
-        else:
-            self.value = value_node.GetName()
+        self.value = value_node.GetProperty('VALUE')
 
         if num_children == 3:
             ext_attributes_node = children[2]
-            self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node)
+            self.extended_attributes = ext_attributes_node_to_extended_attributes(ext_attributes_node)
         else:
             self.extended_attributes = {}
 
@@ -505,7 +498,10 @@
 
     def __str__(self):
         if self.idl_type == 'DOMString':
-            return 'String("%s")' % self.value
+            if self.value:
+                return '"%s"' % self.value
+            else:
+                return 'WTF::g_empty_string'
         if self.idl_type == 'integer':
             return '%d' % self.value
         if self.idl_type == 'float':
@@ -526,21 +522,18 @@
 
 
 def default_node_to_idl_literal(node):
-    # FIXME: This code is unnecessarily complicated due to the rather
-    # inconsistent way the upstream IDL parser outputs default values.
-    # http://crbug.com/374178
     idl_type = node.GetProperty('TYPE')
+    value = node.GetProperty('VALUE')
     if idl_type == 'DOMString':
-        value = node.GetProperty('NAME')
         if '"' in value or '\\' in value:
             raise ValueError('Unsupported string value: %r' % value)
         return IdlLiteral(idl_type, value)
     if idl_type == 'integer':
-        return IdlLiteral(idl_type, int(node.GetProperty('NAME'), base=0))
+        return IdlLiteral(idl_type, int(value, base=0))
     if idl_type == 'float':
-        return IdlLiteral(idl_type, float(node.GetProperty('VALUE')))
+        return IdlLiteral(idl_type, float(value))
     if idl_type in ['boolean', 'sequence']:
-        return IdlLiteral(idl_type, node.GetProperty('VALUE'))
+        return IdlLiteral(idl_type, value)
     if idl_type == 'NULL':
         return IdlLiteralNull()
     raise ValueError('Unrecognized default value type: %s' % idl_type)
@@ -551,22 +544,18 @@
 ################################################################################
 
 class IdlOperation(TypedObject):
-    def __init__(self, idl_name, node=None):
+    def __init__(self, node=None):
         self.arguments = []
         self.extended_attributes = {}
         self.specials = []
         self.is_constructor = False
-        self.idl_name = idl_name
         self.idl_type = None
         self.is_static = False
 
         if not node:
             return
 
-        self.name = node.GetName()  # FIXME: should just be: or ''
-        # FIXME: AST should use None internally
-        if self.name == '_unnamed_':
-            self.name = ''
+        self.name = node.GetName()
 
         self.is_static = bool(node.GetProperty('STATIC'))
         property_dictionary = node.GetProperties()
@@ -578,40 +567,19 @@
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Arguments':
-                self.arguments = arguments_node_to_arguments(idl_name, child)
+                self.arguments = arguments_node_to_arguments(child)
             elif child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
     @classmethod
-    def from_exception_operation_node(cls, idl_name, node):
-        # Needed to handle one case in DOMException.idl:
-        # // Override in a Mozilla compatible format
-        # [NotEnumerable] DOMString toString();
-        # FIXME: can we remove this? replace with a stringifier?
-        operation = cls(idl_name)
-        operation.name = node.GetName()
-        children = node.GetChildren()
-        if len(children) < 1 or len(children) > 2:
-            raise ValueError('ExceptionOperation node with %s children, expected 1 or 2' % len(children))
-
-        type_node = children[0]
-        operation.idl_type = type_node_to_type(type_node)
-
-        if len(children) > 1:
-            ext_attributes_node = children[1]
-            operation.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node)
-
-        return operation
-
-    @classmethod
-    def constructor_from_arguments_node(cls, name, idl_name, arguments_node):
-        constructor = cls(idl_name)
+    def constructor_from_arguments_node(cls, name, arguments_node):
+        constructor = cls()
         constructor.name = name
-        constructor.arguments = arguments_node_to_arguments(idl_name, arguments_node)
+        constructor.arguments = arguments_node_to_arguments(arguments_node)
         constructor.is_constructor = True
         return constructor
 
@@ -626,12 +594,11 @@
 ################################################################################
 
 class IdlArgument(TypedObject):
-    def __init__(self, idl_name, node=None):
+    def __init__(self, node=None):
         self.extended_attributes = {}
         self.idl_type = None
         self.is_optional = False  # syntax: (optional T)
         self.is_variadic = False  # syntax: (T...)
-        self.idl_name = idl_name
         self.default_value = None
 
         if not node:
@@ -646,7 +613,7 @@
             if child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
             elif child_class == 'Argument':
                 child_name = child.GetName()
                 if child_name != '...':
@@ -657,27 +624,18 @@
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
-    def __getstate__(self):
-        # FIXME: Return a picklable object which has enough information to
-        # unpickle.
-        return {}
-
-    def __setstate__(self, state):
-        pass
-
     def accept(self, visitor):
         visitor.visit_argument(self)
 
 
-def arguments_node_to_arguments(idl_name, node):
+def arguments_node_to_arguments(node):
     # [Constructor] and [CustomConstructor] without arguments (the bare form)
     # have None instead of an arguments node, but have the same meaning as using
     # an empty argument list, [Constructor()], so special-case this.
     # http://www.w3.org/TR/WebIDL/#Constructor
     if node is None:
         return []
-    return [IdlArgument(idl_name, argument_node)
-            for argument_node in node.GetChildren()]
+    return [IdlArgument(argument_node) for argument_node in node.GetChildren()]
 
 
 ################################################################################
@@ -685,7 +643,7 @@
 ################################################################################
 
 class IdlSerializer(object):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         self.attribute_name = node.GetProperty('ATTRIBUTE')
         self.attribute_names = None
         self.operation = None
@@ -695,12 +653,11 @@
         self.is_inherit = False
         self.is_list = False
         self.is_map = False
-        self.idl_name = idl_name
 
         for child in node.GetChildren():
             child_class = child.GetClass()
             if child_class == 'Operation':
-                self.operation = IdlOperation(idl_name, child)
+                self.operation = IdlOperation(child)
             elif child_class == 'List':
                 self.is_list = True
                 self.is_getter = bool(child.GetProperty('GETTER'))
@@ -712,7 +669,7 @@
                 self.is_inherit = bool(child.GetProperty('INHERIT'))
                 self.attributes = child.GetProperty('ATTRIBUTES')
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -722,22 +679,21 @@
 ################################################################################
 
 class IdlStringifier(object):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         self.attribute = None
         self.operation = None
         self.extended_attributes = {}
-        self.idl_name = idl_name
 
         for child in node.GetChildren():
             child_class = child.GetClass()
             if child_class == 'Attribute':
-                self.attribute = IdlAttribute(idl_name, child)
+                self.attribute = IdlAttribute(child)
             elif child_class == 'Operation':
-                operation = IdlOperation(idl_name, child)
+                operation = IdlOperation(child)
                 if operation.name:
                     self.operation = operation
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -753,14 +709,14 @@
 ################################################################################
 
 class IdlIterableOrMaplikeOrSetlike(TypedObject):
-    def __init__(self, idl_name, node):
+    def __init__(self, node):
         self.extended_attributes = {}
         self.type_children = []
 
         for child in node.GetChildren():
             child_class = child.GetClass()
             if child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
             elif child_class == 'Type':
                 self.type_children.append(child)
             else:
@@ -770,8 +726,8 @@
 class IdlIterable(IdlIterableOrMaplikeOrSetlike):
     idl_type_attributes = ('key_type', 'value_type')
 
-    def __init__(self, idl_name, node):
-        super(IdlIterable, self).__init__(idl_name, node)
+    def __init__(self, node):
+        super(IdlIterable, self).__init__(node)
 
         if len(self.type_children) == 1:
             self.key_type = None
@@ -790,8 +746,8 @@
 class IdlMaplike(IdlIterableOrMaplikeOrSetlike):
     idl_type_attributes = ('key_type', 'value_type')
 
-    def __init__(self, idl_name, node):
-        super(IdlMaplike, self).__init__(idl_name, node)
+    def __init__(self, node):
+        super(IdlMaplike, self).__init__(node)
 
         self.is_read_only = bool(node.GetProperty('READONLY'))
 
@@ -809,8 +765,8 @@
 class IdlSetlike(IdlIterableOrMaplikeOrSetlike):
     idl_type_attributes = ('value_type',)
 
-    def __init__(self, idl_name, node):
-        super(IdlSetlike, self).__init__(idl_name, node)
+    def __init__(self, node):
+        super(IdlSetlike, self).__init__(node)
 
         self.is_read_only = bool(node.GetProperty('READONLY'))
 
@@ -833,6 +789,9 @@
         self.left_interface = node.GetName()
         self.right_interface = node.GetProperty('REFERENCE')
 
+    def accept(self, visitor):
+        visitor.visit_implement(self)
+
 
 ################################################################################
 # Extended attributes
@@ -849,7 +808,7 @@
         self.runtime_enabled = runtime_enabled
 
 
-def ext_attributes_node_to_extended_attributes(idl_name, node):
+def ext_attributes_node_to_extended_attributes(node):
     """
     Returns:
       Dictionary of {ExtAttributeName: ExtAttributeValue}.
@@ -860,7 +819,6 @@
         possible signatures of the custom constructor.
       NamedConstructor: value is a Call node, corresponding to the single
         signature of the named constructor.
-      SetWrapperReferenceTo: value is an Arguments node.
     """
     # Primarily just make a dictionary from the children.
     # The only complexity is handling various types of constructors:
@@ -899,15 +857,6 @@
             if child_class and child_class != 'Call':
                 raise ValueError('[NamedConstructor] only supports Call as child, but has child of class: %s' % child_class)
             extended_attributes[name] = child
-        elif name == 'SetWrapperReferenceTo':
-            if not child:
-                raise ValueError('[SetWrapperReferenceTo] requires a child, but has none.')
-            children = child.GetChildren()
-            if len(children) != 1:
-                raise ValueError('[SetWrapperReferenceTo] supports only one child.')
-            if child_class != 'Arguments':
-                raise ValueError('[SetWrapperReferenceTo] only supports Arguments as child, but has child of class: %s' % child_class)
-            extended_attributes[name] = IdlArgument(idl_name, children[0])
         elif name == 'Exposed':
             if child_class and child_class != 'Arguments':
                 raise ValueError('[Exposed] only supports Arguments as child, but has child of class: %s' % child_class)
@@ -915,7 +864,7 @@
             if child_class == 'Arguments':
                 exposures = [Exposure(exposed=str(arg.idl_type),
                                       runtime_enabled=arg.name)
-                             for arg in arguments_node_to_arguments('*', child)]
+                             for arg in arguments_node_to_arguments(child)]
             else:
                 value = extended_attribute_node.GetProperty('VALUE')
                 if type(value) is str:
@@ -939,7 +888,7 @@
     return extended_attributes
 
 
-def extended_attributes_to_constructors(idl_name, extended_attributes):
+def extended_attributes_to_constructors(extended_attributes):
     """Returns constructors and custom_constructors (lists of IdlOperations).
 
     Auxiliary function for IdlInterface.__init__.
@@ -947,12 +896,12 @@
 
     constructor_list = extended_attributes.get('Constructors', [])
     constructors = [
-        IdlOperation.constructor_from_arguments_node('Constructor', idl_name, arguments_node)
+        IdlOperation.constructor_from_arguments_node('Constructor', arguments_node)
         for arguments_node in constructor_list]
 
     custom_constructor_list = extended_attributes.get('CustomConstructors', [])
     custom_constructors = [
-        IdlOperation.constructor_from_arguments_node('CustomConstructor', idl_name, arguments_node)
+        IdlOperation.constructor_from_arguments_node('CustomConstructor', arguments_node)
         for arguments_node in custom_constructor_list]
 
     if 'NamedConstructor' in extended_attributes:
@@ -964,7 +913,7 @@
         if len(children) != 1:
             raise ValueError('NamedConstructor node expects 1 child, got %s.' % len(children))
         arguments_node = children[0]
-        named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', idl_name, arguments_node)
+        named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', arguments_node)
         # FIXME: should return named_constructor separately; appended for Perl
         constructors.append(named_constructor)
 
@@ -987,24 +936,17 @@
 
 def type_node_to_type(node):
     children = node.GetChildren()
-    if len(children) < 1 or len(children) > 2:
-        raise ValueError('Type node expects 1 or 2 children (type + optional array []), got %s (multi-dimensional arrays are not supported).' % len(children))
+    if len(children) != 1 and len(children) != 2:
+        raise ValueError('Type node expects 1 or 2 child(ren), got %d.' % len(children))
 
     base_type = type_node_inner_to_type(children[0])
+    if len(children) == 2:
+        extended_attributes = ext_attributes_node_to_extended_attributes(children[1])
+        base_type.set_extended_attributes(extended_attributes)
 
     if node.GetProperty('NULLABLE'):
         base_type = IdlNullableType(base_type)
 
-    if len(children) == 2:
-        array_node = children[1]
-        array_node_class = array_node.GetClass()
-        if array_node_class != 'Array':
-            raise ValueError('Expected Array node as TypeSuffix, got %s node.' % array_node_class)
-        array_type = IdlArrayType(base_type)
-        if array_node.GetProperty('NULLABLE'):
-            return IdlNullableType(array_type)
-        return array_type
-
     return base_type
 
 
@@ -1013,31 +955,52 @@
     # Note Type*r*ef, not Typedef, meaning the type is an identifier, thus
     # either a typedef shorthand (but not a Typedef declaration itself) or an
     # interface type. We do not distinguish these, and just use the type name.
-    if node_class in ['PrimitiveType', 'Typeref']:
+    if node_class in ['PrimitiveType', 'StringType', 'Typeref']:
         # unrestricted syntax: unrestricted double | unrestricted float
         is_unrestricted = bool(node.GetProperty('UNRESTRICTED'))
         return IdlType(node.GetName(), is_unrestricted=is_unrestricted)
     elif node_class == 'Any':
         return IdlType('any')
-    elif node_class == 'Sequence':
+    elif node_class in ['Sequence', 'FrozenArray']:
         return sequence_node_to_type(node)
     elif node_class == 'UnionType':
         return union_type_node_to_idl_union_type(node)
     elif node_class == 'Promise':
         return IdlType('Promise')
+    elif node_class == 'Record':
+        return record_node_to_type(node)
     raise ValueError('Unrecognized node class: %s' % node_class)
 
 
+def record_node_to_type(node):
+    children = node.GetChildren()
+    if len(children) != 2:
+        raise ValueError('record<K,V> node expects exactly 2 children, got %d' % (len(children)))
+    key_child = children[0]
+    value_child = children[1]
+    if key_child.GetClass() != 'StringType':
+        raise ValueError('Keys in record<K,V> nodes must be string types.')
+    if value_child.GetClass() != 'Type':
+        raise ValueError('Unrecognized node class for record<K,V> value: %s' % value_child.GetClass())
+    return IdlRecordType(IdlType(key_child.GetName()), type_node_to_type(value_child))
+
+
 def sequence_node_to_type(node):
     children = node.GetChildren()
+    class_name = node.GetClass()
     if len(children) != 1:
-        raise ValueError('Sequence node expects exactly 1 child, got %s' % len(children))
+        raise ValueError('%s node expects exactly 1 child, got %s' % (class_name, len(children)))
     sequence_child = children[0]
     sequence_child_class = sequence_child.GetClass()
     if sequence_child_class != 'Type':
         raise ValueError('Unrecognized node class: %s' % sequence_child_class)
     element_type = type_node_to_type(sequence_child)
-    sequence_type = IdlSequenceType(element_type)
+    if class_name == 'Sequence':
+        sequence_type = IdlSequenceType(element_type)
+    elif class_name == 'FrozenArray':
+        sequence_type = IdlFrozenArrayType(element_type)
+    else:
+        raise ValueError('Unexpected node: %s' % class_name)
     if node.GetProperty('NULLABLE'):
         return IdlNullableType(sequence_type)
     return sequence_type
@@ -1082,6 +1045,12 @@
     def visit_dictionary_member(self, member):
         self.visit_typed_object(member)
 
+    def visit_enumeration(self, enumeration):
+        pass
+
+    def visit_implement(self, implement):
+        pass
+
     def visit_interface(self, interface):
         pass
 
diff --git a/bindings/scripts/idl_definitions_test.py b/bindings/scripts/idl_definitions_test.py
new file mode 100644
index 0000000..78dd732
--- /dev/null
+++ b/bindings/scripts/idl_definitions_test.py
@@ -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.
+
+# pylint: disable=import-error,print-statement,relative-import
+
+"""Unit tests for idl_definitions.py."""
+
+import unittest
+
+from idl_definitions import IdlAttribute
+
+
+class IdlAttributeTest(unittest.TestCase):
+
+    def test_no_params(self):
+        try:
+            IdlAttribute()
+        except Exception as exception:  # pylint: disable=broad-except
+            self.fail('Creating an IdlAttribute with no parameters raised'
+                      'an exception: {}.'.format(exception))
diff --git a/bindings/scripts/idl_reader.py b/bindings/scripts/idl_reader.py
index f406c00..2bd219d 100644
--- a/bindings/scripts/idl_reader.py
+++ b/bindings/scripts/idl_reader.py
@@ -40,6 +40,7 @@
 from idl_validator import EXTENDED_ATTRIBUTES_RELATIVE_PATH, IDLInvalidExtendedAttributeError, IDLExtendedAttributeValidator
 from interface_dependency_resolver import InterfaceDependencyResolver
 from utilities import idl_filename_to_component
+from utilities import to_snake_case
 
 
 def validate_blink_idl_definitions(idl_filename, idl_file_basename,
@@ -47,7 +48,7 @@
     """Validate file contents with filename convention.
 
        The Blink IDL conventions are:
-       - If an IDL file defines an interface, a dictionary, or an exception,
+       - If an IDL file defines an interface or a dictionary,
          the IDL file must contain exactly one definition. The definition
          name must agree with the file's basename, unless it is a partial
          definition. (e.g., 'partial interface Foo' can be in FooBar.idl).
@@ -63,12 +64,17 @@
             'Expected exactly 1 definition in file {0}, but found {1}'
             .format(idl_filename, number_of_targets))
     if number_of_targets == 0:
-        if not (definitions.enumerations or definitions.typedefs):
+        number_of_definitions = (
+            len(definitions.enumerations) + len(definitions.typedefs) +
+            len(definitions.callback_functions))
+        if number_of_definitions == 0:
             raise Exception(
                 'No definition found in %s' % idl_filename)
         return
     target = targets[0]
-    if not target.is_partial and target.name != idl_file_basename:
+    if target.is_partial:
+        return
+    if target.name != idl_file_basename and to_snake_case(target.name) != idl_file_basename:
         raise Exception(
             'Definition name "{0}" disagrees with IDL file basename "{1}".'
             .format(target.name, idl_file_basename))
@@ -78,6 +84,7 @@
     # FIXMEDART: Added multi_interface argument and property for IdlReader class.
     def __init__(self, interfaces_info=None, outputdir='', multi_interface=False):
         self.multi_interface = multi_interface
+
         self.extended_attribute_validator = IDLExtendedAttributeValidator()
         self.interfaces_info = interfaces_info
 
@@ -113,7 +120,7 @@
         if not ast:
             raise Exception('Failed to parse %s' % idl_filename)
         idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
-        definitions = IdlDefinitions(idl_file_basename, ast)
+        definitions = IdlDefinitions(ast)
 
         # FIXMEDART: Added multi_interface.
         if not self.multi_interface:
diff --git a/bindings/scripts/idl_types.py b/bindings/scripts/idl_types.py
index 5d776a7..05298fe 100644
--- a/bindings/scripts/idl_types.py
+++ b/bindings/scripts/idl_types.py
@@ -8,8 +8,8 @@
  IdlType
  IdlUnionType
  IdlArrayOrSequenceType
-  IdlArrayType
   IdlSequenceType
+  IdlFrozenArrayType
  IdlNullableType
 
 IdlTypes are picklable because we store them in interfaces_info.
@@ -138,17 +138,18 @@
     # FIXME: incorporate Nullable, etc.
     # to support types like short?[] vs. short[]?, instead of treating these
     # as orthogonal properties (via flags).
-    callback_functions = set(STANDARD_CALLBACK_FUNCTIONS)
+    callback_functions = {}
     callback_interfaces = set()
     dictionaries = set()
     enums = {}  # name -> values
 
-    def __init__(self, base_type, is_unrestricted=False):
+    def __init__(self, base_type, is_unrestricted=False, extended_attributes=None):
         super(IdlType, self).__init__()
         if is_unrestricted:
             self.base_type = 'unrestricted %s' % base_type
         else:
             self.base_type = base_type
+        self.extended_attributes = extended_attributes
 
     def __str__(self):
         return self.base_type
@@ -156,18 +157,34 @@
     def __getstate__(self):
         return {
             'base_type': self.base_type,
+            'extended_attributes': self.extended_attributes,
         }
 
     def __setstate__(self, state):
         self.base_type = state['base_type']
+        self.extended_attributes = state['extended_attributes']
+
+    def set_extended_attributes(self, extended_attributes):
+        self.extended_attributes = extended_attributes
 
     @property
     def is_basic_type(self):
         return self.base_type in BASIC_TYPES
 
     @property
-    def is_callback_function(self):
-        return self.base_type in IdlType.callback_functions
+    def is_callback_function(self):  # pylint: disable=C0103
+        return self.base_type in IdlType.callback_functions or self.base_type in STANDARD_CALLBACK_FUNCTIONS
+
+    @property
+    def is_custom_callback_function(self):
+        # Treat standard callback functions as custom as they aren't generated.
+        if self.base_type in STANDARD_CALLBACK_FUNCTIONS:
+            return True
+        entry = IdlType.callback_functions.get(self.base_type)
+        callback_function = entry.get('callback_function')
+        if not callback_function:
+            return False
+        return 'Custom' in callback_function.extended_attributes
 
     @property
     def is_callback_interface(self):
@@ -196,6 +213,10 @@
         return self.base_type in INTEGER_TYPES
 
     @property
+    def is_void(self):
+        return self.base_type == 'void'
+
+    @property
     def is_numeric_type(self):
         return self.base_type in NUMERIC_TYPES
 
@@ -208,7 +229,7 @@
         # Anything that is not another type is an interface type.
         # http://www.w3.org/TR/WebIDL/#idl-types
         # http://www.w3.org/TR/WebIDL/#idl-interface
-        # In C++ these are RefPtr or PassRefPtr types.
+        # In C++ these are RefPtr types.
         return not(self.is_basic_type or
                    self.is_callback_function or
                    self.is_dictionary or
@@ -282,13 +303,54 @@
         self.member_types = state['member_types']
 
     @property
+    def flattened_member_types(self):
+        """Returns the set of the union's flattened member types.
+
+        https://heycam.github.io/webidl/#dfn-flattened-union-member-types
+        """
+        # We cannot use a set directly because each member is an IdlTypeBase-derived class, and
+        # comparing two objects of the same type is not the same as comparing their names. In
+        # other words:
+        #   x = IdlType('ByteString')
+        #   y = IdlType('ByteString')
+        #   x == y  # False
+        #   x.name == y.name  # True
+        # |flattened_members|'s keys are type names, the values are type |objects.
+        # We assume we can use two IDL objects of the same type interchangeably.
+        flattened_members = {}
+        for member in self.member_types:
+            if member.is_nullable:
+                member = member.inner_type
+            if member.is_union_type:
+                for inner_member in member.flattened_member_types:
+                    flattened_members[inner_member.name] = inner_member
+            else:
+                flattened_members[member.name] = member
+        return set(flattened_members.values())
+
+    @property
+    def number_of_nullable_member_types(self):
+        """Returns the union's number of nullable types.
+
+        http://heycam.github.io/webidl/#dfn-number-of-nullable-member-types
+        """
+        count = 0
+        for member in self.member_types:
+            if member.is_nullable:
+                count += 1
+                member = member.inner_type
+            if member.is_union_type:
+                count += member.number_of_nullable_member_types
+        return count
+
+    @property
     def is_union_type(self):
         return True
 
     def single_matching_member_type(self, predicate):
-        matching_types = filter(predicate, self.member_types)
+        matching_types = filter(predicate, self.flattened_member_types)
         if len(matching_types) > 1:
-            raise "%s is ambigious." % self.name
+            raise ValueError('%s is ambiguous.' % self.name)
         return matching_types[0] if matching_types else None
 
     @property
@@ -322,7 +384,7 @@
 
     def resolve_typedefs(self, typedefs):
         self.member_types = [
-            typedefs.get(member_type, member_type)
+            member_type.resolve_typedefs(typedefs)
             for member_type in self.member_types]
         return self
 
@@ -334,11 +396,12 @@
 
 
 ################################################################################
-# IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType
+# IdlArrayOrSequenceType, IdlSequenceType, IdlFrozenArrayType
 ################################################################################
 
+# TODO(bashi): Rename this like "IdlArrayTypeBase" or something.
 class IdlArrayOrSequenceType(IdlTypeBase):
-    """Base class for IdlArrayType and IdlSequenceType."""
+    """Base class for array-like types."""
 
     def __init__(self, element_type):
         super(IdlArrayOrSequenceType, self).__init__()
@@ -361,6 +424,14 @@
         return True
 
     @property
+    def is_sequence_type(self):
+        return False
+
+    @property
+    def is_frozen_array(self):
+        return False
+
+    @property
     def enum_values(self):
         return self.element_type.enum_values
 
@@ -374,18 +445,6 @@
             yield idl_type
 
 
-class IdlArrayType(IdlArrayOrSequenceType):
-    def __init__(self, element_type):
-        super(IdlArrayType, self).__init__(element_type)
-
-    def __str__(self):
-        return '%s[]' % self.element_type
-
-    @property
-    def name(self):
-        return self.element_type.name + 'Array'
-
-
 class IdlSequenceType(IdlArrayOrSequenceType):
     def __init__(self, element_type):
         super(IdlSequenceType, self).__init__(element_type)
@@ -397,6 +456,70 @@
     def name(self):
         return self.element_type.name + 'Sequence'
 
+    @property
+    def is_sequence_type(self):
+        return True
+
+
+class IdlFrozenArrayType(IdlArrayOrSequenceType):
+    def __init__(self, element_type):
+        super(IdlFrozenArrayType, self).__init__(element_type)
+
+    def __str__(self):
+        return 'FrozenArray<%s>' % self.element_type
+
+    @property
+    def name(self):
+        return self.element_type.name + 'Array'
+
+    @property
+    def is_frozen_array(self):
+        return True
+
+
+################################################################################
+# IdlRecordType
+################################################################################
+
+class IdlRecordType(IdlTypeBase):
+    def __init__(self, key_type, value_type):
+        super(IdlRecordType, self).__init__()
+        self.key_type = key_type
+        self.value_type = value_type
+
+    def __str__(self):
+        return 'record<%s, %s>' % (self.key_type, self.value_type)
+
+    def __getstate__(self):
+        return {
+            'key_type': self.key_type,
+            'value_type': self.value_type,
+        }
+
+    def __setstate__(self, state):
+        self.key_type = state['key_type']
+        self.value_type = state['value_type']
+
+    def idl_types(self):
+        yield self
+        for idl_type in self.key_type.idl_types():
+            yield idl_type
+        for idl_type in self.value_type.idl_types():
+            yield idl_type
+
+    def resolve_typedefs(self, typedefs):
+        self.key_type = self.key_type.resolve_typedefs(typedefs)
+        self.value_type = self.value_type.resolve_typedefs(typedefs)
+        return self
+
+    @property
+    def is_record_type(self):
+        return True
+
+    @property
+    def name(self):
+        return self.key_type.name + self.value_type.name + 'Record'
+
 
 ################################################################################
 # IdlNullableType
diff --git a/bindings/scripts/idl_types_test.py b/bindings/scripts/idl_types_test.py
new file mode 100644
index 0000000..e360d5a
--- /dev/null
+++ b/bindings/scripts/idl_types_test.py
@@ -0,0 +1,174 @@
+# 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.
+
+# pylint: disable=import-error,print-statement,relative-import
+
+"""Unit tests for idl_types.py."""
+
+import unittest
+
+from idl_types import IdlNullableType
+from idl_types import IdlRecordType
+from idl_types import IdlSequenceType
+from idl_types import IdlType
+from idl_types import IdlUnionType
+
+
+class IdlTypeTest(unittest.TestCase):
+
+    def test_is_void(self):
+        idl_type = IdlType('void')
+        self.assertTrue(idl_type.is_void)
+        idl_type = IdlType('somethingElse')
+        self.assertFalse(idl_type.is_void)
+
+
+class IdlRecordTypeTest(unittest.TestCase):
+
+    def test_idl_types(self):
+        idl_type = IdlRecordType(IdlType('USVString'), IdlType('long'))
+        idl_types = list(idl_type.idl_types())
+        self.assertEqual(len(idl_types), 3)
+        self.assertIs(idl_types[0], idl_type)
+        self.assertEqual(idl_types[1].name, 'USVString')
+        self.assertEqual(idl_types[2].name, 'Long')
+        self.assertListEqual(list(idl_type.idl_types()),
+                             [idl_type, idl_type.key_type, idl_type.value_type])
+
+        idl_type = IdlRecordType(IdlType('DOMString'), IdlSequenceType(IdlType('unrestricted float')))
+        idl_types = list(idl_type.idl_types())
+        self.assertEqual(len(idl_types), 4)
+        self.assertIs(idl_types[0], idl_type)
+        self.assertEqual(idl_types[1].name, 'String')
+        self.assertEqual(idl_types[2].name, 'UnrestrictedFloatSequence')
+        self.assertEqual(idl_types[3].name, 'UnrestrictedFloat')
+        self.assertListEqual(list(idl_type.idl_types()),
+                             [idl_type, idl_type.key_type, idl_type.value_type, idl_type.value_type.element_type])
+
+        idl_type = IdlRecordType(IdlType('ByteString'),
+                                 IdlRecordType(IdlType('DOMString'), IdlType('octet')))
+        idl_types = list(idl_type.idl_types())
+        self.assertEqual(len(idl_types), 5)
+        self.assertIs(idl_types[0], idl_type)
+        self.assertEqual(idl_types[1].name, 'ByteString')
+        self.assertEqual(idl_types[2].name, 'StringOctetRecord')
+        self.assertEqual(idl_types[3].name, 'String')
+        self.assertEqual(idl_types[4].name, 'Octet')
+        self.assertListEqual(list(idl_type.idl_types()),
+                             [idl_type, idl_type.key_type, idl_type.value_type, idl_type.value_type.key_type,
+                              idl_type.value_type.value_type])
+
+    def test_is_record(self):
+        idl_type = IdlType('USVString')
+        self.assertFalse(idl_type.is_record_type)
+        idl_type = IdlSequenceType(IdlRecordType(IdlType('DOMString'), IdlType('byte')))
+        self.assertFalse(idl_type.is_record_type)
+        idl_type = IdlRecordType(IdlType('USVString'), IdlType('long'))
+        self.assertTrue(idl_type.is_record_type)
+        idl_type = IdlRecordType(IdlType('USVString'), IdlSequenceType(IdlType('boolean')))
+        self.assertTrue(idl_type.is_record_type)
+
+    def test_name(self):
+        idl_type = IdlRecordType(IdlType('ByteString'), IdlType('octet'))
+        self.assertEqual(idl_type.name, 'ByteStringOctetRecord')
+        idl_type = IdlRecordType(IdlType('USVString'), IdlSequenceType(IdlType('double')))
+        self.assertEqual(idl_type.name, 'USVStringDoubleSequenceRecord')
+        idl_type = IdlRecordType(IdlType('DOMString'),
+                                 IdlRecordType(IdlType('ByteString'),
+                                               IdlSequenceType(IdlType('unsigned short'))))
+        self.assertEqual(idl_type.name, 'StringByteStringUnsignedShortSequenceRecordRecord')
+
+
+class IdlUnionTypeTest(unittest.TestCase):
+
+    def test_flattened_member_types(self):
+        # We are only testing the algorithm here, so we do create some ambiguous union types.
+
+        def compare_flattened_members(actual, expected):
+            """Compare a set of IDL types by name, as the objects are different"""
+            actual_names = set([member.name for member in actual])
+            expected_names = set([member.name for member in expected])
+            self.assertEqual(actual_names, expected_names)
+
+        idl_type = IdlUnionType([IdlType('long'), IdlType('SomeInterface')])
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('long'), IdlType('SomeInterface')]))
+
+        idl_type = IdlUnionType([IdlUnionType([IdlType('ByteString'), IdlType('float')]),
+                                 IdlType('boolean')])
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('float'), IdlType('boolean'), IdlType('ByteString')]))
+
+        idl_type = IdlUnionType([IdlUnionType([IdlType('ByteString'), IdlType('DOMString')]),
+                                 IdlType('DOMString')])
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('DOMString'), IdlType('ByteString')]))
+
+        idl_type = IdlUnionType(
+            [IdlNullableType(IdlType('ByteString')), IdlType('byte')])
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('ByteString'), IdlType('byte')]))
+
+        idl_type = IdlUnionType(
+            [IdlNullableType(IdlType('ByteString')), IdlType('byte'),
+             IdlUnionType([IdlType('ByteString'), IdlType('float')])])
+        self.assertEqual(len(idl_type.flattened_member_types), 3)
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('ByteString'), IdlType('byte'), IdlType('float')]))
+
+        # From the example in the spec: "the flattened member types of the union type (Node or (sequence<long> or Event) or
+        # (XMLHttpRequest or DOMString)? or sequence<(sequence<double> or NodeList)>) are the six types Node, sequence<long>,
+        # Event, XMLHttpRequest, DOMString and sequence<(sequence<double> or NodeList)>"
+        idl_type = IdlUnionType(
+            [IdlType('Node'),
+             IdlUnionType([IdlSequenceType(IdlType('long')), IdlType('Event')]),
+             IdlNullableType(IdlUnionType([IdlType('XMLHttpRequest'), IdlType('DOMString')])),
+             IdlSequenceType(IdlUnionType([IdlSequenceType(IdlType('double')), IdlType('NodeList')]))])
+        self.assertEqual(len(idl_type.flattened_member_types), 6)
+        compare_flattened_members(
+            idl_type.flattened_member_types,
+            set([IdlType('Node'), IdlSequenceType(IdlType('long')), IdlType('Event'),
+                 IdlType('XMLHttpRequest'), IdlType('DOMString'),
+                 IdlSequenceType(IdlUnionType([IdlSequenceType(IdlType('double')), IdlType('NodeList')]))]))
+
+    def test_resolve_typedefs(self):
+        # This is a simplification of the typedef mechanism to avoid having to
+        # use idl_definitions and use actual nodes from //tools/idl_parser.
+        typedefs = {
+            'Foo': IdlType('unsigned short'),
+            'MyBooleanType': IdlType('boolean'),
+            'SomeInterfaceT': IdlType('MyInterface'),
+        }
+
+        # (long long or MyBooleanType)
+        union = IdlUnionType([IdlType('long long'), IdlType('MyBooleanType')]).resolve_typedefs(typedefs)
+        self.assertEqual(union.name, 'LongLongOrBoolean')
+        self.assertEqual(union.member_types[0].name, 'LongLong')
+        self.assertEqual(union.member_types[1].name, 'Boolean')
+
+        # (Foo or SomeInterfaceT)
+        union = IdlUnionType([IdlType('Foo'), IdlType('SomeInterfaceT')]).resolve_typedefs(typedefs)
+        self.assertEqual(union.name, 'UnsignedShortOrMyInterface')
+        self.assertEqual(union.member_types[0].name, 'UnsignedShort')
+        self.assertEqual(union.member_types[1].name, 'MyInterface')
+
+        # (Foo or sequence<(MyBooleanType or double)>)
+        union = IdlUnionType([
+            IdlType('Foo'),
+            IdlSequenceType(IdlUnionType([IdlType('MyBooleanType'),
+                                          IdlType('double')]))]).resolve_typedefs(typedefs)
+        self.assertEqual(union.name, 'UnsignedShortOrBooleanOrDoubleSequence')
+        self.assertEqual(union.member_types[0].name, 'UnsignedShort')
+        self.assertEqual(union.member_types[1].name, 'BooleanOrDoubleSequence')
+        self.assertEqual(union.member_types[1].element_type.name, 'BooleanOrDouble')
+        self.assertEqual(union.member_types[1].element_type.member_types[0].name,
+                         'Boolean')
+        self.assertEqual(union.member_types[1].element_type.member_types[1].name,
+                         'Double')
+        self.assertEqual(2, len(union.flattened_member_types))
diff --git a/bindings/scripts/interface_dependency_resolver.py b/bindings/scripts/interface_dependency_resolver.py
index 2fa6409..239f11e 100644
--- a/bindings/scripts/interface_dependency_resolver.py
+++ b/bindings/scripts/interface_dependency_resolver.py
@@ -45,7 +45,9 @@
 # which changes the semantics and yields different code than the same extended
 # attribute on the main interface.
 DEPENDENCY_EXTENDED_ATTRIBUTES = frozenset([
+    'OriginTrialEnabled',
     'RuntimeEnabled',
+    'SecureContext',
 ])
 
 
@@ -160,10 +162,9 @@
         dependency_component = idl_filename_to_component(dependency_idl_filename)
 
         dependency_interface = next(dependency_definitions.interfaces.itervalues())
-        dependency_interface_basename, _ = os.path.splitext(os.path.basename(dependency_idl_filename))
 
         transfer_extended_attributes(dependency_interface,
-                                     dependency_interface_basename)
+                                     dependency_idl_filename)
 
         # We need to use different checkdeps here for partial interface and
         # inheritance.
@@ -201,8 +202,8 @@
             # Because partial interface needs the original interface's
             # cpp class to obtain partial interface's cpp class.
             # e.g.. V8WindowPartial.cpp:
-            #   DOMWindow* impl = V8Window::toImpl(holder);
-            #   RawPtr<...> cppValue(DOMWindowQuota::webkitStorageInfo(impl));
+            #   DOMWindow* impl = V8Window::ToImpl(holder);
+            #   DOMWindowQuota* cppValue(DOMWindowQuota::webkitStorageInfo(impl));
             # TODO(tasak): remove ImplementedAs extended attributes
             # from all partial interfaces. Instead, rename all cpp/header
             # files correctly. ImplementedAs should not be allowed in
@@ -245,7 +246,7 @@
     return resolved_definitions
 
 
-def transfer_extended_attributes(dependency_interface, dependency_interface_basename):
+def transfer_extended_attributes(dependency_interface, dependency_idl_filename):
     """Transfer extended attributes from dependency interface onto members.
 
     Merging consists of storing certain interface-level data in extended
@@ -253,24 +254,29 @@
     interface post-merging).
 
     The data storing consists of:
-    * applying certain extended attributes from the dependency interface
-      to its members
+    * moving certain extended attributes from the dependency interface
+      to its members (deleting the extended attribute from the interface)
     * storing the C++ class of the implementation in an internal
       extended attribute of each member, [PartialInterfaceImplementedAs]
 
     No return: modifies dependency_interface in place.
     """
-    merged_extended_attributes = dict(
-        (key, value)
-        for key, value in dependency_interface.extended_attributes.iteritems()
-        if key in DEPENDENCY_EXTENDED_ATTRIBUTES)
+    merged_extended_attributes = {}
+    for key in DEPENDENCY_EXTENDED_ATTRIBUTES:
+        if key not in dependency_interface.extended_attributes:
+            continue
+
+        merged_extended_attributes[key] = dependency_interface.extended_attributes[key]
+        # Remove the merged attributes from the original dependency interface.
+        # This ensures that if other dependency interfaces are merged onto this
+        # one, its extended_attributes do not leak through
+        # (https://crbug.com/603782).
+        del dependency_interface.extended_attributes[key]
 
     # A partial interface's members are implemented as static member functions
     # in a separate C++ class. This class name is stored in
-    # [PartialInterfaceImplementedAs] which defaults to the basename of
-    # dependency IDL file.
-    # This class name can be overridden by [ImplementedAs] on the partial
-    # interface definition.
+    # [PartialInterfaceImplementedAs] which is copied from [ImplementedAs] on
+    # the partial interface definition.
     #
     # Note that implemented interfaces do *not* need [ImplementedAs], since
     # they are implemented on the C++ object |impl| itself, just like members of
@@ -288,11 +294,17 @@
     # for Blink class name and function name (or constant name), respectively.
     # Thus we do not want to copy this from the interface to the member, but
     # instead extract it and handle it separately.
-    if (dependency_interface.is_partial or
-        'LegacyTreatAsPartialInterface' in dependency_interface.extended_attributes):
+    if dependency_interface.is_partial:
+        if 'ImplementedAs' not in dependency_interface.extended_attributes:
+            raise ValueError('Partial interface in %s must have ImplementedAs.'
+                             % dependency_idl_filename)
+        merged_extended_attributes['PartialInterfaceImplementedAs'] = \
+            dependency_interface.extended_attributes.pop('ImplementedAs')
+    elif 'LegacyTreatAsPartialInterface' in \
+         dependency_interface.extended_attributes:
         merged_extended_attributes['PartialInterfaceImplementedAs'] = (
-            dependency_interface.extended_attributes.get(
-                'ImplementedAs', dependency_interface_basename))
+            dependency_interface.extended_attributes.pop(
+                'ImplementedAs', dependency_interface.name))
 
     def update_attributes(attributes, extras):
         for key, value in extras.items():
@@ -311,9 +323,9 @@
     """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.
+    attributes in ancestor interfaces 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:
@@ -321,7 +333,7 @@
             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, [])
+        this_unforgeable = interface.get('unforgeable_attributes', [])
         unforgeable_attributes.extend(this_unforgeable)
         this_referenced = [attr.idl_type.base_type for attr in this_unforgeable
                            if attr.idl_type.base_type in
diff --git a/bindings/scripts/overload_set_algorithm.py b/bindings/scripts/overload_set_algorithm.py
new file mode 100644
index 0000000..6425a84
--- /dev/null
+++ b/bindings/scripts/overload_set_algorithm.py
@@ -0,0 +1,130 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# coding=utf-8
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from collections import Counter
+import itertools
+from operator import itemgetter
+
+
+def sort_and_groupby(list_to_sort, key=None):
+    """Returns a generator of (key, list), sorting and grouping list by key."""
+    list_to_sort.sort(key=key)
+    return ((k, list(g)) for k, g in itertools.groupby(list_to_sort, key))
+
+
+def effective_overload_set(F):  # pylint: disable=invalid-name
+    """Returns the effective overload set of an overloaded function.
+
+    An effective overload set is the set of overloaded functions + signatures
+    (type list of arguments, with optional and variadic arguments included or
+    not), and is used in the overload resolution algorithm.
+
+    For example, given input [f1(optional long x), f2(DOMString s)], the output
+    is informally [f1(), f1(long), f2(DOMString)], and formally
+    [(f1, [], []), (f1, [long], [optional]), (f2, [DOMString], [required])].
+
+    Currently the optionality list is a list of |is_optional| booleans (True
+    means optional, False means required); to support variadics this needs to
+    be tri-valued as required, optional, or variadic.
+
+    Formally:
+    An effective overload set represents the allowable invocations for a
+    particular operation, constructor (specified with [Constructor] or
+    [NamedConstructor]), legacy caller or callback function.
+
+    An additional argument N (argument count) is needed when overloading
+    variadics, but we don't use that currently.
+
+    Spec: http://heycam.github.io/webidl/#dfn-effective-overload-set
+
+    Formally the input and output lists are sets, but methods are stored
+    internally as dicts, which can't be stored in a set because they are not
+    hashable, so we use lists instead.
+
+    Arguments:
+        F: list of overloads for a given callable name.
+        value_reader: an OverloadSetValueReader instance.
+
+    Returns:
+        S: list of tuples of the form (callable, type list, optionality list).
+    """
+    # Code closely follows the algorithm in the spec, for clarity and
+    # correctness, and hence is not very Pythonic.
+
+    # 1. Initialize S to ∅.
+    # (We use a list because we can't use a set, as noted above.)
+    S = []  # pylint: disable=invalid-name
+
+    # 2. Let F be a set with elements as follows, according to the kind of
+    # effective overload set:
+    # (Passed as argument, nothing to do.)
+
+    # 3. & 4. (maxarg, m) are only needed for variadics, not used.
+
+    # 5. For each operation, extended attribute or callback function X in F:
+    for X in F:  # X is the "callable". pylint: disable=invalid-name
+        arguments = X['arguments']  # pylint: disable=invalid-name
+        # 1. Let n be the number of arguments X is declared to take.
+        n = len(arguments)  # pylint: disable=invalid-name
+        # 2. Let t0..n−1 be a list of types, where ti is the type of X’s
+        # argument at index i.
+        # (“type list”)
+        t = tuple(argument['idl_type_object']  # pylint: disable=invalid-name
+                  for argument in arguments)
+        # 3. Let o0..n−1 be a list of optionality values, where oi is “variadic”
+        # if X’s argument at index i is a final, variadic argument, “optional”
+        # if the argument is optional, and “required” otherwise.
+        # (“optionality list”)
+        # (We’re just using a boolean for optional/variadic vs. required.)
+        o = tuple(argument['is_optional']  # pylint: disable=invalid-name
+                  or argument['is_variadic']
+                  for argument in arguments)
+        # 4. Add to S the tuple <X, t0..n−1, o0..n−1>.
+        S.append((X, t, o))
+        # 5. If X is declared to be variadic, then:
+        # (Not used, so not implemented.)
+        # 6. Initialize i to n−1.
+        i = n - 1
+        # 7. While i ≥ 0:
+        # Spec bug (fencepost error); should be “While i > 0:”
+        # https://www.w3.org/Bugs/Public/show_bug.cgi?id=25590
+        while i > 0:
+            # 1. If argument i of X is not optional, then break this loop.
+            if not o[i]:
+                break
+            # 2. Otherwise, add to S the tuple <X, t0..i−1, o0..i−1>.
+            S.append((X, t[:i], o[:i]))
+            # 3. Set i to i−1.
+            i = i - 1
+        # 8. If n > 0 and all arguments of X are optional, then add to S the
+        # tuple <X, (), ()> (where “()” represents the empty list).
+        if n > 0 and all(oi for oi in o):
+            S.append((X, (), ()))
+    # 6. The effective overload set is S.
+    return S
+
+
+def effective_overload_set_by_length(overloads):
+    def type_list_length(entry):
+        # Entries in the effective overload set are 3-tuples:
+        # (callable, type list, optionality list)
+        return len(entry[1])
+
+    effective_overloads = effective_overload_set(overloads)
+    return list(sort_and_groupby(effective_overloads, type_list_length))
+
+
+def method_overloads_by_name(methods):
+    """Returns generator of overloaded methods by name: [name, [method]]"""
+    # Filter to only methods that are actually overloaded
+    method_counts = Counter(method['name'] for method in methods)
+    overloaded_method_names = set(name
+                                  for name, count in method_counts.iteritems()
+                                  if count > 1)
+    overloaded_methods = [method for method in methods
+                          if method['name'] in overloaded_method_names]
+
+    # Group by name (generally will be defined together, but not necessarily)
+    return sort_and_groupby(overloaded_methods, itemgetter('name'))
diff --git a/bindings/scripts/overload_set_algorithm_test.py b/bindings/scripts/overload_set_algorithm_test.py
new file mode 100644
index 0000000..389a9ed
--- /dev/null
+++ b/bindings/scripts/overload_set_algorithm_test.py
@@ -0,0 +1,163 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=import-error,print-statement,relative-import,protected-access
+
+"""Unit tests for overload_set_algorithm.py."""
+
+import unittest
+from overload_set_algorithm import effective_overload_set
+
+
+class EffectiveOverloadSetTest(unittest.TestCase):
+    def test_example_in_comments(self):
+        operation_list = [
+            {'arguments': [{'idl_type_object': 'long',  # f1(optional long x)
+                            'is_optional': True,
+                            'is_variadic': False}]},
+            {'arguments': [{'idl_type_object': 'DOMString',  # f2(DOMString s)
+                            'is_optional': False,
+                            'is_variadic': False}]}]
+
+        overload_set = [
+            ({'arguments': [{'idl_type_object': 'long',  # f1(long)
+                             'is_optional': True,
+                             'is_variadic': False}]},
+             ('long',),
+             (True,)),
+            ({'arguments': [{'idl_type_object': 'long',  # f1()
+                             'is_optional': True,
+                             'is_variadic': False}]},
+             (),
+             ()),
+            ({'arguments': [{'idl_type_object': 'DOMString',  # f2(DOMString)
+                             'is_optional': False,
+                             'is_variadic': False}]},
+             ('DOMString',),
+             (False,))]
+
+        self.assertEqual(effective_overload_set(operation_list), overload_set)
+
+    def test_example_in_spec(self):
+        """Tests the example provided in Web IDL spec:
+           https://heycam.github.io/webidl/#dfn-effective-overload-set,
+           look for example right after the algorithm.
+
+           The output differs from spec because we don't implement the part
+           of the algorithm that handles variadic arguments."""
+        operation_list = [
+            # f1: f(DOMString a)
+            {'arguments': [{'idl_type_object': 'DOMString',
+                            'is_optional': False,
+                            'is_variadic': False}]},
+            # f2: f(Node a, DOMString b, double... c)
+            {'arguments': [{'idl_type_object': 'Node',
+                            'is_optional': False,
+                            'is_variadic': False},
+                           {'idl_type_object': 'DOMString',
+                            'is_optional': False,
+                            'is_variadic': False},
+                           {'idl_type_object': 'double',
+                            'is_optional': False,
+                            'is_variadic': True}]},
+            # f3: f()
+            {'arguments': []},
+            # f4: f(Event a, DOMString b, optional DOMString c, double... d)
+            {'arguments': [{'idl_type_object': 'Event',
+                            'is_optional': False,
+                            'is_variadic': False},
+                           {'idl_type_object': 'DOMString',
+                            'is_optional': False,
+                            'is_variadic': False},
+                           {'idl_type_object': 'DOMString',
+                            'is_optional': True,
+                            'is_variadic': False},
+                           {'idl_type_object': 'double',
+                            'is_optional': False,
+                            'is_variadic': True}]}]
+        overload_set = [
+            # <f1, (DOMString), (required)>
+            ({'arguments': [{'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False}]},
+             ('DOMString',),
+             (False,)),
+            # <f2, (Node, DOMString, double), (required, required, variadic)>
+            ({'arguments': [{'idl_type_object': 'Node',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'double',
+                             'is_optional': False,
+                             'is_variadic': True}]},
+             ('Node', 'DOMString', 'double'),
+             (False, False, True)),
+            # <f2, (Node, DOMString), (required, required)>
+            ({'arguments': [{'idl_type_object': 'Node',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'double',
+                             'is_optional': False,
+                             'is_variadic': True}]},
+             ('Node', 'DOMString'),
+             (False, False)),
+            # Missing from the output:
+            # <f2, (Node, DOMString, double, double),
+            #       (required, required, variadic, variadic)>,
+            # <f3, (), ()>
+            ({'arguments': []}, (), ()),
+            # <f4, (Event, DOMString, DOMString, double),
+            #      (required, required, optional, variadic)>
+            ({'arguments': [{'idl_type_object': 'Event',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': True,
+                             'is_variadic': False},
+                            {'idl_type_object': 'double',
+                             'is_optional': False,
+                             'is_variadic': True}]},
+             ('Event', 'DOMString', 'DOMString', 'double'),
+             (False, False, True, True)),
+            # <f4, (Event, DOMString, DOMString),
+            #      (required, required, optional)>
+            ({'arguments': [{'idl_type_object': 'Event',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': True,
+                             'is_variadic': False},
+                            {'idl_type_object': 'double',
+                             'is_optional': False,
+                             'is_variadic': True}]},
+             ('Event', 'DOMString', 'DOMString'),
+             (False, False, True)),
+            # <f4, (Event, DOMString), (required, required)>
+            ({'arguments': [{'idl_type_object': 'Event',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': False,
+                             'is_variadic': False},
+                            {'idl_type_object': 'DOMString',
+                             'is_optional': True,
+                             'is_variadic': False},
+                            {'idl_type_object': 'double',
+                             'is_optional': False,
+                             'is_variadic': True}]},
+             ('Event', 'DOMString'),
+             (False, False))]
+
+        self.assertEqual(effective_overload_set(operation_list), overload_set)
diff --git a/bindings/scripts/print_idl_diff.py b/bindings/scripts/print_idl_diff.py
deleted file mode 100644
index 9a8deea..0000000
--- a/bindings/scripts/print_idl_diff.py
+++ /dev/null
@@ -1,433 +0,0 @@
-#!/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
deleted file mode 100644
index 49d6e55..0000000
--- a/bindings/scripts/test_collect_idls_into_json.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/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
deleted file mode 100644
index 74ff3ba..0000000
--- a/bindings/scripts/testdata/test_interface.idl
+++ /dev/null
@@ -1,9 +0,0 @@
-[
-    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 2370887..b641b42 100644
--- a/bindings/scripts/utilities.py
+++ b/bindings/scripts/utilities.py
@@ -13,14 +13,19 @@
 import shlex
 import string
 import subprocess
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..',
+                             'third_party', 'blink', 'tools'))
+from blinkpy.common.name_style_converter import NameStyleConverter
 
 
 KNOWN_COMPONENTS = frozenset(['core', 'modules'])
 KNOWN_COMPONENTS_WITH_TESTING = frozenset(['core', 'modules', 'testing'])
 
 
-def idl_filename_to_interface_name(idl_filename):
-    # interface name is the root of the basename: InterfaceName.idl
+def idl_filename_to_basename(idl_filename):
+    """Returns the basename without the extension."""
     return os.path.splitext(os.path.basename(idl_filename))[0]
 
 
@@ -88,9 +93,13 @@
         return set()
 
     @property
-    def include_path_for_union_types(self):
+    def include_path_for_union_types(self, union_type):
         return None
 
+    @property
+    def callback_functions(self):
+        return {}
+
 
 class ComponentInfoProviderCore(ComponentInfoProvider):
     def __init__(self, interfaces_info, component_info):
@@ -118,9 +127,13 @@
     def union_types(self):
         return self._component_info['union_types']
 
+    def include_path_for_union_types(self, union_type):
+        name = to_snake_case(shorten_union_name(union_type))
+        return 'bindings/core/v8/%s.h' % name
+
     @property
-    def include_path_for_union_types(self):
-        return 'bindings/core/v8/UnionTypesCore.h'
+    def callback_functions(self):
+        return self._component_info['callback_functions']
 
     @property
     def specifier_for_export(self):
@@ -165,9 +178,18 @@
         # generating multiple container generation.
         return self._component_info_modules['union_types'] - self._component_info_core['union_types']
 
+    def include_path_for_union_types(self, union_type):
+        core_union_type_names = [core_union_type.name for core_union_type
+                                 in self._component_info_core['union_types']]
+        name = shorten_union_name(union_type)
+        if union_type.name in core_union_type_names:
+            return 'bindings/core/v8/%s.h' % to_snake_case(name)
+        return 'bindings/modules/v8/%s.h' % to_snake_case(name)
+
     @property
-    def include_path_for_union_types(self):
-        return 'bindings/modules/v8/UnionTypesModules.h'
+    def callback_functions(self):
+        return dict(self._component_info_core['callback_functions'].items() +
+                    self._component_info_modules['callback_functions'].items())
 
     @property
     def specifier_for_export(self):
@@ -282,15 +304,21 @@
 
 def read_pickle_files(pickle_filenames):
     for pickle_filename in pickle_filenames:
-        with open(pickle_filename) as pickle_file:
-            yield pickle.load(pickle_file)
+        yield read_pickle_file(pickle_filename)
 
 
-def write_file(new_text, destination_filename, only_if_changed):
-    if only_if_changed and os.path.isfile(destination_filename):
+def read_pickle_file(pickle_filename):
+    with open(pickle_filename) as pickle_file:
+        return pickle.load(pickle_file)
+
+
+def write_file(new_text, destination_filename):
+    # If |new_text| is same with the file content, we skip updating.
+    if os.path.isfile(destination_filename):
         with open(destination_filename) as destination_file:
             if destination_file.read() == new_text:
                 return
+
     destination_dirname = os.path.dirname(destination_filename)
     if not os.path.exists(destination_dirname):
         os.makedirs(destination_dirname)
@@ -298,8 +326,9 @@
         destination_file.write(new_text)
 
 
-def write_pickle_file(pickle_filename, data, only_if_changed):
-    if only_if_changed and os.path.isfile(pickle_filename):
+def write_pickle_file(pickle_filename, data):
+    # If |data| is same with the file content, we skip updating.
+    if os.path.isfile(pickle_filename):
         with open(pickle_filename) as pickle_file:
             try:
                 if pickle.load(pickle_file) == data:
@@ -314,25 +343,29 @@
 ################################################################################
 # IDL parsing
 #
-# We use regular expressions for parsing; this is incorrect (Web IDL is not a
-# regular language), but simple and sufficient in practice.
+# TODO(bashi): We use regular expressions for parsing; this is incorrect
+# (Web IDL is not a regular language) and broken. Remove these functions and
+# always use the parser and ASTs.
 # Leading and trailing context (e.g. following '{') used to avoid false matches.
 ################################################################################
 
-def is_callback_interface_from_idl(file_contents):
+def is_non_legacy_callback_interface_from_idl(file_contents):
+    """Returns True if the specified IDL is a non-legacy callback interface."""
     match = re.search(r'callback\s+interface\s+\w+\s*{', file_contents)
-    return bool(match)
+    # Having constants means it's a legacy callback interface.
+    # https://heycam.github.io/webidl/#legacy-callback-interface-object
+    return bool(match) and not re.search(r'\s+const\b', file_contents)
 
 
 def should_generate_impl_file_from_idl(file_contents):
     """True when a given IDL file contents could generate .h/.cpp files."""
     # FIXME: This would be error-prone and we should use AST rather than
     # improving the regexp pattern.
-    match = re.search(r'(interface|dictionary|exception)\s+\w+', file_contents)
+    match = re.search(r'(interface|dictionary)\s+\w+', file_contents)
     return bool(match)
 
 
-def match_interface_extended_attributes_from_idl(file_contents):
+def match_interface_extended_attributes_and_name_from_idl(file_contents):
     # Strip comments
     # re.compile needed b/c Python 2.6 doesn't support flags in re.sub
     single_line_comment_re = re.compile(r'//.*$', flags=re.MULTILINE)
@@ -340,19 +373,18 @@
     file_contents = re.sub(single_line_comment_re, '', file_contents)
     file_contents = re.sub(block_comment_re, '', file_contents)
 
-    match = re.search(r'\[(.*)\]\s*'
-                      r'((callback|partial)\s+)?'
-                      r'(interface|exception)\s+'
-                      r'\w+\s*'
-                      r'(:\s*\w+\s*)?'
-                      r'{',
-                      file_contents, flags=re.DOTALL)
+    match = re.search(
+        r'(?:\[([^[]*)\]\s*)?'
+        r'(interface|callback\s+interface|partial\s+interface|dictionary)\s+'
+        r'(\w+)\s*'
+        r'(:\s*\w+\s*)?'
+        r'{',
+        file_contents, flags=re.DOTALL)
     return match
 
-
 def get_interface_extended_attributes_from_idl(file_contents):
-    match = match_interface_extended_attributes_from_idl(file_contents)
-    if not match:
+    match = match_interface_extended_attributes_and_name_from_idl(file_contents)
+    if not match or not match.group(1):
         return {}
 
     extended_attributes_string = match.group(1)
@@ -370,8 +402,8 @@
 
 
 def get_interface_exposed_arguments(file_contents):
-    match = match_interface_extended_attributes_from_idl(file_contents)
-    if not match:
+    match = match_interface_extended_attributes_and_name_from_idl(file_contents)
+    if not match or not match.group(1):
         return None
 
     extended_attributes_string = match.group(1)
@@ -384,3 +416,142 @@
         arguments.append({'exposed': exposed, 'runtime_enabled': runtime_enabled})
 
     return arguments
+
+
+def get_first_interface_name_from_idl(file_contents):
+    match = match_interface_extended_attributes_and_name_from_idl(file_contents)
+    if match:
+        return match.group(3)
+    return None
+
+
+# Workaround for crbug.com/611437 and crbug.com/711464
+# TODO(bashi): Remove this hack once we resolve too-long generated file names.
+# pylint: disable=line-too-long
+def shorten_union_name(union_type):
+    aliases = {
+        # modules/canvas2d/CanvasRenderingContext2D.idl
+        'CSSImageValueOrHTMLImageElementOrSVGImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmapOrOffscreenCanvas': 'CanvasImageSource',
+        # modules/canvas/HTMLCanvasElementModule.idl
+        'CanvasRenderingContext2DOrWebGLRenderingContextOrWebGL2RenderingContextOrImageBitmapRenderingContext': 'RenderingContext',
+        # core/imagebitmap/ImageBitmapFactories.idl
+        'HTMLImageElementOrSVGImageElementOrHTMLVideoElementOrHTMLCanvasElementOrBlobOrImageDataOrImageBitmapOrOffscreenCanvas': 'ImageBitmapSource',
+        # bindings/tests/idls/core/TestTypedefs.idl
+        'NodeOrLongSequenceOrEventOrXMLHttpRequestOrStringOrStringByteStringOrNodeListRecord': 'NestedUnionType',
+        # modules/offscreencanvas/OffscreenCanvasModules.idl
+        'OffscreenCanvasRenderingContext2DOrWebGLRenderingContextOrWebGL2RenderingContext': 'OffscreenRenderingContext',
+    }
+
+    idl_type = union_type
+    if union_type.is_nullable:
+        idl_type = union_type.inner_type
+    name = idl_type.cpp_type or idl_type.name
+    alias = aliases.get(name)
+    if alias:
+        return alias
+    if len(name) >= 80:
+        raise Exception('crbug.com/711464: The union name %s is too long. '
+                        'Please add an alias to shorten_union_name()' % name)
+    return name
+
+
+def to_snake_case(name):
+    if name.lower() == name:
+        return name
+    return NameStyleConverter(name).to_snake_case()
+
+
+def format_remove_duplicates(text, patterns):
+    """Removes duplicated line-basis patterns.
+
+    Based on simple pattern matching, removes duplicated lines in a block
+    of lines.  Lines that match with a same pattern are considered as
+    duplicates.
+
+    Designed to be used as a filter function for Jinja2.
+
+    Args:
+        text: A str of multi-line text.
+        patterns: A list of str where each str represents a simple
+            pattern.  The patterns are not considered as regexp, and
+            exact match is applied.
+
+    Returns:
+        A formatted str with duplicates removed.
+    """
+    pattern_founds = [False] * len(patterns)
+    output = []
+    for line in text.split('\n'):
+        to_be_removed = False
+        for i, pattern in enumerate(patterns):
+            if pattern not in line:
+                continue
+            if pattern_founds[i]:
+                to_be_removed = True
+            else:
+                pattern_founds[i] = True
+        if to_be_removed:
+            continue
+        output.append(line)
+
+    # Let |'\n'.join| emit the last newline.
+    if output:
+        output.append('')
+
+    return '\n'.join(output)
+
+
+def format_blink_cpp_source_code(text):
+    """Formats C++ source code.
+
+    Supported modifications are:
+    - Reduces successive empty lines into a single empty line.
+    - Removes empty lines just after an open brace or before closing brace.
+      This rule does not apply to namespaces.
+
+    Designed to be used as a filter function for Jinja2.
+
+    Args:
+        text: A str of C++ source code.
+
+    Returns:
+        A formatted str of the source code.
+    """
+    re_empty_line = re.compile(r'^\s*$')
+    re_first_brace = re.compile(r'(?P<first>[{}])')
+    re_last_brace = re.compile(r'.*(?P<last>[{}]).*?$')
+    was_open_brace = True  # Trick to remove the empty lines at the beginning.
+    was_empty_line = False
+    output = []
+    for line in text.split('\n'):
+        # Skip empty lines.
+        if re_empty_line.match(line):
+            was_empty_line = True
+            continue
+
+        # Emit a single empty line if needed.
+        if was_empty_line:
+            was_empty_line = False
+            match = re_first_brace.search(line)
+            if was_open_brace:
+                # No empty line just after an open brace.
+                pass
+            elif match and match.group('first') == '}' and 'namespace' not in line:
+                # No empty line just before a closing brace.
+                pass
+            else:
+                # Preserve a single empty line.
+                output.append('')
+
+        # Emit the line itself.
+        output.append(line)
+
+        # Remember an open brace.
+        match = re_last_brace.search(line)
+        was_open_brace = (match and match.group('last') == '{' and 'namespace' not in line)
+
+    # Let |'\n'.join| emit the last newline.
+    if output:
+        output.append('')
+
+    return '\n'.join(output)
diff --git a/bindings/scripts/v8_attributes.py b/bindings/scripts/v8_attributes.py
index 2987967..fad2784 100644
--- a/bindings/scripts/v8_attributes.py
+++ b/bindings/scripts/v8_attributes.py
@@ -26,6 +26,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+# pylint: disable=relative-import
+
 """Generate template values for attributes.
 
 Extends IdlType with property |constructor_type_name|.
@@ -35,7 +37,7 @@
 
 import idl_types
 from idl_types import inherits_interface
-from v8_globals import includes, interfaces
+from v8_globals import includes
 import v8_types
 import v8_utilities
 from v8_utilities import (cpp_name_or_partial, capitalize, cpp_name, has_extended_attribute,
@@ -44,7 +46,19 @@
                           is_legacy_interface_type_checking)
 
 
-def attribute_context(interface, attribute):
+def attribute_context(interface, attribute, interfaces):
+    """Creates a Jinja template context for an attribute of an interface.
+
+    Args:
+        interface: An interface which |attribute| belongs to
+        attribute: An attribute to create the context for
+        interfaces: A dict which maps an interface name to the definition
+            which can be referred if needed
+
+    Returns:
+        A Jinja template context for |attribute|
+    """
+
     idl_type = attribute.idl_type
     base_idl_type = idl_type.base_type
     extended_attributes = attribute.extended_attributes
@@ -54,61 +68,63 @@
         includes.add('core/inspector/ConsoleMessage.h')
 
     # [CheckSecurity]
-    is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
+    is_cross_origin = 'CrossOrigin' in extended_attributes
     is_check_security_for_receiver = (
         has_extended_attribute_value(interface, 'CheckSecurity', 'Receiver') and
-        not is_do_not_check_security)
+        is_cross_origin)
     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')
+    # [CrossOrigin]
+    if has_extended_attribute_value(attribute, 'CrossOrigin', 'Setter'):
+        includes.add('bindings/core/v8/V8CrossOriginSetterInfo.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
+    # [CEReactions]
+    is_ce_reactions = 'CEReactions' in extended_attributes
+    if is_ce_reactions:
+        includes.add('core/html/custom/CEReactionsScope.h')
     # [CustomElementCallbacks], [Reflect]
     is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
     is_reflect = 'Reflect' in extended_attributes
     if is_custom_element_callbacks or is_reflect:
-        includes.add('core/dom/custom/CustomElementProcessingStack.h')
-    # [ImplementedInPrivateScript]
-    is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_attributes
-    if is_implemented_in_private_script:
-        includes.add('bindings/core/v8/PrivateScriptRunner.h')
-        includes.add('core/frame/LocalFrame.h')
-        includes.add('platform/ScriptForbiddenScope.h')
-    # [OnlyExposedToPrivateScript]
-    is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended_attributes
+        includes.add('core/html/custom/V0CustomElementProcessingStack.h')
     # [PerWorldBindings]
     if 'PerWorldBindings' in extended_attributes:
         assert idl_type.is_wrapper_type or 'LogActivity' in extended_attributes, '[PerWorldBindings] should only be used with wrapper types: %s.%s' % (interface.name, attribute.name)
+    # [SaveSameObject]
+    is_save_same_object = (
+        'SameObject' in attribute.extended_attributes and
+        'SaveSameObject' in attribute.extended_attributes)
+    if is_save_same_object:
+        includes.add('platform/bindings/V8PrivateProperty.h')
 
     if (base_idl_type == 'EventHandler' and
-        interface.name in ['Window', 'WorkerGlobalScope'] and
-        attribute.name == 'onerror'):
+            interface.name in ['Window', 'WorkerGlobalScope'] and
+            attribute.name == 'onerror'):
         includes.add('bindings/core/v8/V8ErrorHandler.h')
 
     cached_attribute_validation_method = extended_attributes.get('CachedAttribute')
     keep_alive_for_gc = is_keep_alive_for_gc(interface, attribute)
     if cached_attribute_validation_method or keep_alive_for_gc:
-        includes.add('bindings/core/v8/V8HiddenValue.h')
+        includes.add('platform/bindings/V8PrivateProperty.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')
+    # [CachedAccessor]
+    is_cached_accessor = 'CachedAccessor' in extended_attributes
+    if is_cached_accessor:
+        includes.add('platform/bindings/V8PrivateProperty.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]
         'activity_logging_world_list_for_setter': v8_utilities.activity_logging_world_list(attribute, 'Setter'),  # [ActivityLogging]
         'activity_logging_world_check': v8_utilities.activity_logging_world_check(attribute),  # [ActivityLogging]
-        'argument_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
         'cached_attribute_validation_method': cached_attribute_validation_method,
         'constructor_type': constructor_type,
+        'context_enabled_feature_name': v8_utilities.context_enabled_feature_name(attribute),
         'cpp_name': cpp_name(attribute),
         'cpp_type': idl_type.cpp_type,
         'cpp_type_initializer': idl_type.cpp_type_initializer,
@@ -116,26 +132,32 @@
         'enum_type': idl_type.enum_type,
         'enum_values': idl_type.enum_values,
         'exposed_test': v8_utilities.exposed(attribute, interface),  # [Exposed]
+        'has_cross_origin_getter':
+            has_extended_attribute_value(attribute, 'CrossOrigin', None) or
+            has_extended_attribute_value(attribute, 'CrossOrigin', 'Getter'),
+        'has_cross_origin_setter': has_extended_attribute_value(attribute, 'CrossOrigin', 'Setter'),
         'has_custom_getter': has_custom_getter(attribute),
         '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]
+        'has_promise_type': idl_type.name == 'Promise',
+        'has_setter': has_setter(interface, attribute),
+        'idl_type': str(idl_type),
+        'is_cached_accessor': is_cached_accessor,
         '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_ce_reactions': is_ce_reactions,
         '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,
         # TODO(yukishiino): Make all DOM attributes accessor-type properties.
-        'is_data_type_property': constructor_type or interface.name == 'Window' or interface.name == 'Location',
+        'is_data_type_property': is_data_type_property(interface, attribute),
         'is_getter_raises_exception':  # [RaisesException]
             'RaisesException' in extended_attributes and
             extended_attributes['RaisesException'] in (None, 'Getter'),
-        'is_implemented_in_private_script': is_implemented_in_private_script,
         'is_keep_alive_for_gc': keep_alive_for_gc,
         'is_lenient_this': 'LenientThis' in extended_attributes,
         'is_nullable': idl_type.is_nullable,
         'is_explicit_nullable': idl_type.is_explicit_nullable,
+        'is_named_constructor': is_named_constructor_attribute(attribute),
         'is_partial_interface_member':
             'PartialInterfaceImplementedAs' in extended_attributes,
         'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
@@ -143,43 +165,121 @@
         'is_read_only': attribute.is_read_only,
         'is_reflect': is_reflect,
         'is_replaceable': 'Replaceable' in attribute.extended_attributes,
+        'is_save_same_object': is_save_same_object,
         'is_static': attribute.is_static,
         'is_url': 'URL' in extended_attributes,
         'is_unforgeable': is_unforgeable(interface, attribute),
         '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]
+        'origin_trial_enabled_function': v8_utilities.origin_trial_enabled_function_name(attribute),  # [OriginTrialEnabled]
+        'origin_trial_feature_name': v8_utilities.origin_trial_feature_name(attribute),  # [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,
-        'only_exposed_to_private_script': is_only_exposed_to_private_script,
-        'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
-            extended_attributes, 'v8Value', 'cppValue', bailout_return_value='false', isolate='scriptState->isolate()'),
         'property_attributes': property_attributes(interface, attribute),
         'reflect_empty': extended_attributes.get('ReflectEmpty'),
         'reflect_invalid': extended_attributes.get('ReflectInvalid', ''),
         'reflect_missing': extended_attributes.get('ReflectMissing'),
         'reflect_only': extended_attribute_value_as_list(attribute, 'ReflectOnly'),
-        'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(attribute),  # [RuntimeEnabled]
-        'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script),
-        'world_suffixes': ['', 'ForMainWorld']
-                          if 'PerWorldBindings' in extended_attributes
-                          else [''],  # [PerWorldBindings]
+        'runtime_enabled_feature_name': v8_utilities.runtime_enabled_feature_name(attribute),  # [RuntimeEnabled]
+        'secure_context_test': v8_utilities.secure_context(attribute, interface),  # [SecureContext]
+        'cached_accessor_name': '%s%sCachedAccessor' % (interface.name, attribute.name.capitalize()),
+        'world_suffixes': (
+            ['', 'ForMainWorld']
+            if 'PerWorldBindings' in extended_attributes
+            else ['']),  # [PerWorldBindings]
     }
 
-    if is_constructor_attribute(attribute):
-        update_constructor_attribute_context(interface, attribute, context)
     if not has_custom_getter(attribute):
         getter_context(interface, attribute, context)
-    if not has_custom_setter(attribute) and has_setter(attribute):
-        setter_context(interface, attribute, context)
+    if not has_custom_setter(attribute) and has_setter(interface, attribute):
+        setter_context(interface, attribute, interfaces, context)
+
+    # [RuntimeCallStatsCounter]
+    runtime_call_stats_context(interface, attribute, context)
+
+    # [CrossOrigin] is incompatible with a number of other attributes, so check
+    # for them here.
+    if is_cross_origin:
+        if context['has_cross_origin_setter'] and context['has_custom_setter']:
+            raise Exception('[CrossOrigin] and [Custom] are incompatible on the same setter: %s.%s', interface.name, attribute.name)
+        if context['is_per_world_bindings']:
+            raise Exception('[CrossOrigin] and [PerWorldBindings] are incompatible: %s.%s', interface.name, attribute.name)
+        if context['constructor_type']:
+            raise Exception('[CrossOrigin] cannot be used for constructors: %s.%s', interface.name, attribute.name)
 
     return context
 
 
+def runtime_call_stats_context(interface, attribute, context):
+    includes.add('platform/bindings/RuntimeCallStats.h')
+    generic_counter_name = 'Blink_' + v8_utilities.cpp_name(interface) + '_' + attribute.name
+    (counter, extended_attribute_defined) = v8_utilities.rcs_counter_name(attribute, generic_counter_name)
+    runtime_call_stats = {
+        'extended_attribute_defined': extended_attribute_defined,
+        'getter_counter': '%s_Getter' % counter,
+        'setter_counter': '%s_Setter' % counter,
+        'constructor_getter_callback_counter': '%s_ConstructorGetterCallback' % generic_counter_name,
+    }
+    context.update({
+        'runtime_call_stats': runtime_call_stats
+    })
+
+
+def is_secure_context(attribute):
+    return bool(attribute['secure_context_test'])
+
+
+def filter_accessors(attributes):
+    return [attribute for attribute in attributes if
+            not (attribute['exposed_test'] or
+                 is_secure_context(attribute) or
+                 attribute['context_enabled_feature_name'] or
+                 attribute['origin_trial_enabled_function'] or
+                 attribute['runtime_enabled_feature_name']) and
+            not attribute['is_data_type_property']]
+
+
+def is_data_attribute(attribute):
+    return (not (attribute['exposed_test'] or
+                 is_secure_context(attribute) or
+                 attribute['context_enabled_feature_name'] or
+                 attribute['origin_trial_enabled_function'] or
+                 attribute['runtime_enabled_feature_name']) and
+            attribute['is_data_type_property'])
+
+
+def is_lazy_data_attribute(attribute):
+    return ((attribute['constructor_type'] and not
+             (attribute['measure_as'] or attribute['deprecate_as'])) or
+            (attribute['idl_type'] == 'Window' and attribute['name'] == 'frames') or
+            (attribute['idl_type'] == 'Window' and attribute['name'] == 'self') or
+            (attribute['idl_type'] == 'Window' and attribute['name'] == 'window'))
+
+
+def filter_data_attributes(attributes):
+    return [attribute for attribute in attributes if is_data_attribute(attribute) and not is_lazy_data_attribute(attribute)]
+
+
+def filter_lazy_data_attributes(attributes):
+    return [attribute for attribute in attributes if is_data_attribute(attribute) and is_lazy_data_attribute(attribute)]
+
+
+def filter_runtime_enabled(attributes):
+    return [attribute for attribute in attributes if
+            not (attribute['exposed_test'] or
+                 is_secure_context(attribute)) and
+            attribute['runtime_enabled_feature_name']]
+
+
+def filter_conditionally_enabled(attributes):
+    return [attribute for attribute in attributes if
+            attribute['exposed_test'] or
+            (is_secure_context(attribute) and
+             not attribute['origin_trial_feature_name'])]
+
+
 ################################################################################
 # Getter
 ################################################################################
@@ -196,39 +296,29 @@
     # exceptions), we need to use a local variable.
     # FIXME: check if compilers are smart enough to inline this, and if so,
     # always use a local variable (for readability and CG simplicity).
-    release = False
-    if 'ImplementedInPrivateScript' in extended_attributes:
-        if (not idl_type.is_wrapper_type and
-            not idl_type.is_basic_type and
-            not idl_type.is_enum):
-            raise Exception('Private scripts supports only primitive types and DOM wrappers.')
-
-        context['cpp_value_original'] = cpp_value
-        cpp_value = 'result'
-        # EventHandler has special handling
-        if base_idl_type != 'EventHandler':
-            release = idl_type.release
-    elif (idl_type.is_explicit_nullable or
-        base_idl_type == 'EventHandler' or
-        'CachedAttribute' in extended_attributes or
-        'ReflectOnly' in extended_attributes or
-        context['is_keep_alive_for_gc'] or
-        context['is_getter_raises_exception']):
+    if (idl_type.is_explicit_nullable or
+            base_idl_type == 'EventHandler' or
+            'CachedAttribute' in extended_attributes or
+            'ReflectOnly' in extended_attributes or
+            context['is_keep_alive_for_gc'] or
+            context['is_getter_raises_exception']):
         context['cpp_value_original'] = cpp_value
         cpp_value = 'cppValue'
-        # EventHandler has special handling
-        if base_idl_type != 'EventHandler':
-            release = idl_type.release
 
     def v8_set_return_value_statement(for_main_world=False):
         if context['is_keep_alive_for_gc'] or 'CachedAttribute' in extended_attributes:
-            return 'v8SetReturnValue(info, v8Value)'
+            return 'V8SetReturnValue(info, v8Value)'
         return idl_type.v8_set_return_value(
             cpp_value, extended_attributes=extended_attributes, script_wrappable='impl',
-            release=release, for_main_world=for_main_world, is_static=attribute.is_static)
+            for_main_world=for_main_world, is_static=attribute.is_static)
+
+    cpp_value_to_script_wrappable = cpp_value
+    if idl_type.is_array_buffer_view_or_typed_array:
+        cpp_value_to_script_wrappable += '.View()'
 
     context.update({
         'cpp_value': cpp_value,
+        'cpp_value_to_script_wrappable': cpp_value_to_script_wrappable,
         'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
             cpp_value=cpp_value, creation_context='holder',
             extended_attributes=extended_attributes),
@@ -241,18 +331,13 @@
     this_getter_base_name = getter_base_name(interface, attribute, arguments)
     getter_name = scoped_name(interface, attribute, this_getter_base_name)
 
-    if 'ImplementedInPrivateScript' in attribute.extended_attributes:
-        arguments.append('toLocalFrame(toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext()))')
-        arguments.append('impl')
-        arguments.append('&result')
     arguments.extend(v8_utilities.call_with_arguments(
         attribute.extended_attributes.get('CallWith')))
     # Members of IDL partial interface definitions are implemented in C++ as
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in attribute.extended_attributes and
-        not 'ImplementedInPrivateScript' in attribute.extended_attributes and
-        not attribute.is_static):
+            not attribute.is_static):
         arguments.append('*impl')
     if attribute.idl_type.is_explicit_nullable:
         arguments.append('isNull')
@@ -260,29 +345,35 @@
         arguments.append('exceptionState')
     if attribute.idl_type.use_output_parameter_for_result:
         arguments.append('result')
-    return '%s(%s)' % (getter_name, ', '.join(arguments))
+
+    expression = '%s(%s)' % (getter_name, ', '.join(arguments))
+    # Needed to handle getter expressions returning Type& as the
+    # use site for |expression| expects Type*.
+    if (attribute.idl_type.is_interface_type and len(arguments) == 0 and
+            not attribute.idl_type.is_array_buffer_view_or_typed_array):
+        return 'WTF::GetPtr(%s)' % expression
+    return expression
 
 
 CONTENT_ATTRIBUTE_GETTER_NAMES = {
-    'boolean': 'fastHasAttribute',
-    'long': 'getIntegralAttribute',
-    'unsigned long': 'getUnsignedIntegralAttribute',
+    'boolean': 'FastHasAttribute',
+    'long': 'GetIntegralAttribute',
+    'unsigned long': 'GetUnsignedIntegralAttribute',
 }
 
 
 def getter_base_name(interface, attribute, arguments):
     extended_attributes = attribute.extended_attributes
 
-    if 'ImplementedInPrivateScript' in extended_attributes:
-        return '%sAttributeGetter' % uncapitalize(cpp_name(attribute))
-
     if 'Reflect' not in extended_attributes:
-        return uncapitalize(cpp_name(attribute))
+        name = cpp_name(attribute)
+        return name if 'ImplementedAs' in extended_attributes \
+            else uncapitalize(name)
 
     content_attribute_name = extended_attributes['Reflect'] or attribute.name.lower()
     if content_attribute_name in ['class', 'id', 'name']:
         # Special-case for performance optimization.
-        return 'get%sAttribute' % content_attribute_name.capitalize()
+        return 'Get%sAttribute' % content_attribute_name.capitalize()
 
     arguments.append(scoped_content_attribute_name(interface, attribute))
 
@@ -290,14 +381,16 @@
     if base_idl_type in CONTENT_ATTRIBUTE_GETTER_NAMES:
         return CONTENT_ATTRIBUTE_GETTER_NAMES[base_idl_type]
     if 'URL' in attribute.extended_attributes:
-        return 'getURLAttribute'
-    return 'fastGetAttribute'
+        return 'GetURLAttribute'
+    return 'FastGetAttribute'
 
 
 def is_keep_alive_for_gc(interface, attribute):
     idl_type = attribute.idl_type
     base_idl_type = idl_type.base_type
     extended_attributes = attribute.extended_attributes
+    if attribute.is_static:
+        return False
     return (
         # For readonly attributes, for performance reasons we keep the attribute
         # wrapper alive while the owner wrapper is alive, because the attribute
@@ -320,25 +413,27 @@
 # Setter
 ################################################################################
 
-def setter_context(interface, attribute, context):
+def setter_context(interface, attribute, interfaces, context):
     if 'PutForwards' in attribute.extended_attributes:
-        # Use target interface and attribute in place of original interface and
-        # attribute from this point onwards.
+        # Make sure the target interface and attribute exist.
         target_interface_name = attribute.idl_type.base_type
         target_attribute_name = attribute.extended_attributes['PutForwards']
         interface = interfaces[target_interface_name]
         try:
-            attribute = next(candidate
-                             for candidate in interface.attributes
-                             if candidate.name == target_attribute_name)
+            next(candidate
+                 for candidate in interface.attributes
+                 if candidate.name == target_attribute_name)
         except StopIteration:
             raise Exception('[PutForward] target not found:\n'
                             'Attribute "%s" is not present in interface "%s"' %
                             (target_attribute_name, target_interface_name))
+        context['target_attribute_name'] = target_attribute_name
+        return
 
-    if ('Replaceable' in attribute.extended_attributes or
-            is_constructor_attribute(attribute)):
-        context['cpp_setter'] = '%sCreateDataProperty(propertyName, v8Value, info)' % cpp_name(interface)
+    if ('Replaceable' in attribute.extended_attributes):
+        context['cpp_setter'] = (
+            'V8CallBoolean(info.Holder()->CreateDataProperty(' +
+            'info.GetIsolate()->GetCurrentContext(), propertyName, v8Value))')
         return
 
     extended_attributes = attribute.extended_attributes
@@ -361,9 +456,6 @@
         'is_setter_call_with_execution_context': has_extended_attribute_value(
             attribute, 'SetterCallWith', 'ExecutionContext'),
         'is_setter_raises_exception': is_setter_raises_exception,
-        'private_script_cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
-            'cppValue', isolate='scriptState->isolate()',
-            creation_context='scriptState->context()->Global()'),
         'v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
             extended_attributes, 'v8Value', 'cppValue'),
     })
@@ -385,29 +477,28 @@
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in extended_attributes and
-        not 'ImplementedInPrivateScript' in extended_attributes and
-        not attribute.is_static):
+            not attribute.is_static):
         arguments.append('*impl')
     idl_type = attribute.idl_type
-    if 'ImplementedInPrivateScript' in extended_attributes:
-        arguments.append('toLocalFrame(toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext()))')
-        arguments.append('impl')
-        arguments.append('cppValue')
-    elif idl_type.base_type == 'EventHandler':
+    if idl_type.base_type == 'EventHandler':
         getter_name = scoped_name(interface, attribute, cpp_name(attribute))
         context['event_handler_getter_expression'] = '%s(%s)' % (
             getter_name, ', '.join(arguments))
         if (interface.name in ['Window', 'WorkerGlobalScope'] and
-            attribute.name == 'onerror'):
+                attribute.name == 'onerror'):
             includes.add('bindings/core/v8/V8ErrorHandler.h')
-            arguments.append('V8EventListenerList::findOrCreateWrapper<V8ErrorHandler>(v8Value, true, ScriptState::current(info.GetIsolate()))')
+            arguments.append(
+                'V8EventListenerHelper::EnsureErrorHandler(' +
+                'ScriptState::ForRelevantRealm(info), v8Value)')
         else:
-            arguments.append('V8EventListenerList::getEventListener(ScriptState::current(info.GetIsolate()), v8Value, true, ListenerFindOrCreate)')
-    elif idl_type.is_interface_type:
-        # FIXME: should be able to eliminate WTF::getPtr in most or all cases
-        arguments.append('WTF::getPtr(cppValue)')
+            arguments.append(
+                'V8EventListenerHelper::GetEventListener(' +
+                'ScriptState::ForRelevantRealm(info), v8Value, true, ' +
+                'kListenerFindOrCreate)')
     else:
         arguments.append('cppValue')
+    if idl_type.is_explicit_nullable:
+        arguments.append('isNull')
     if context['is_setter_raises_exception']:
         arguments.append('exceptionState')
 
@@ -415,16 +506,13 @@
 
 
 CONTENT_ATTRIBUTE_SETTER_NAMES = {
-    'boolean': 'setBooleanAttribute',
-    'long': 'setIntegralAttribute',
-    'unsigned long': 'setUnsignedIntegralAttribute',
+    'boolean': 'SetBooleanAttribute',
+    'long': 'SetIntegralAttribute',
+    'unsigned long': 'SetUnsignedIntegralAttribute',
 }
 
 
 def setter_base_name(interface, attribute, arguments):
-    if 'ImplementedInPrivateScript' in attribute.extended_attributes:
-        return '%sAttributeSetter' % uncapitalize(cpp_name(attribute))
-
     if 'Reflect' not in attribute.extended_attributes:
         return 'set%s' % capitalize(cpp_name(attribute))
     arguments.append(scoped_content_attribute_name(interface, attribute))
@@ -439,9 +527,10 @@
     content_attribute_name = attribute.extended_attributes['Reflect'] or attribute.name.lower()
     if interface.name.startswith('SVG'):
         namespace = 'SVGNames'
+        includes.add('core/svg_names.h')
     else:
         namespace = 'HTMLNames'
-    includes.add('core/%s.h' % namespace)
+        includes.add('core/html_names.h')
     return '%s::%sAttr' % (namespace, content_attribute_name)
 
 
@@ -449,28 +538,28 @@
 # Attribute configuration
 ################################################################################
 
-# [PutForwards], [Replaceable]
-def has_setter(attribute):
+# Property descriptor's {writable: boolean}
+def is_writable(attribute):
     return (not attribute.is_read_only or
             'PutForwards' in attribute.extended_attributes or
             'Replaceable' in attribute.extended_attributes)
 
 
-# [DoNotCheckSecurity], [Unforgeable]
-def access_control_list(interface, attribute):
-    extended_attributes = attribute.extended_attributes
-    access_control = []
-    if 'DoNotCheckSecurity' in extended_attributes:
-        do_not_check_security = extended_attributes['DoNotCheckSecurity']
-        if do_not_check_security == 'Setter':
-            access_control.append('v8::ALL_CAN_WRITE')
-        else:
-            access_control.append('v8::ALL_CAN_READ')
-            if has_setter(attribute):
-                access_control.append('v8::ALL_CAN_WRITE')
-    if is_unforgeable(interface, attribute):
-        access_control.append('v8::PROHIBITS_OVERWRITING')
-    return access_control or ['v8::DEFAULT']
+def is_data_type_property(interface, attribute):
+    if 'CachedAccessor' in attribute.extended_attributes:
+        return False
+    return (is_constructor_attribute(attribute) or
+            'CrossOrigin' in attribute.extended_attributes)
+
+
+# [PutForwards], [Replaceable]
+def has_setter(interface, attribute):
+    if (is_data_type_property(interface, attribute) and
+        (is_constructor_attribute(attribute) or
+         'Replaceable' in attribute.extended_attributes)):
+        return False
+
+    return is_writable(attribute)
 
 
 # [NotEnumerable], [Unforgeable]
@@ -478,10 +567,12 @@
     extended_attributes = attribute.extended_attributes
     property_attributes_list = []
     if ('NotEnumerable' in extended_attributes or
-        is_constructor_attribute(attribute)):
+            is_constructor_attribute(attribute)):
         property_attributes_list.append('v8::DontEnum')
     if is_unforgeable(interface, attribute):
         property_attributes_list.append('v8::DontDelete')
+    if not is_writable(attribute):
+        property_attributes_list.append('v8::ReadOnly')
     return property_attributes_list or ['v8::None']
 
 
@@ -505,19 +596,12 @@
 ################################################################################
 
 idl_types.IdlType.constructor_type_name = property(
-    # FIXME: replace this with a [ConstructorAttribute] extended attribute
     lambda self: strip_suffix(self.base_type, 'Constructor'))
 
 
 def is_constructor_attribute(attribute):
-    # FIXME: replace this with [ConstructorAttribute] extended attribute
     return attribute.idl_type.name.endswith('Constructor')
 
 
-def update_constructor_attribute_context(interface, attribute, context):
-    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
-    # a callback function in order to hard-code the attribute name.
-    context['needs_constructor_setter_callback'] = context['name'] != context['constructor_type']
+def is_named_constructor_attribute(attribute):
+    return attribute.idl_type.name.endswith('ConstructorConstructor')
diff --git a/bindings/scripts/v8_callback_function.py b/bindings/scripts/v8_callback_function.py
new file mode 100644
index 0000000..4f51dd2
--- /dev/null
+++ b/bindings/scripts/v8_callback_function.py
@@ -0,0 +1,110 @@
+# 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.
+
+"""Generate template values for a callback function.
+
+Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
+"""
+
+from utilities import to_snake_case
+from v8_globals import includes
+
+CALLBACK_FUNCTION_H_INCLUDES = frozenset([
+    'bindings/core/v8/NativeValueTraits.h',
+    'platform/bindings/CallbackFunctionBase.h',
+    'platform/bindings/ScriptWrappable.h',
+    'platform/bindings/TraceWrapperV8Reference.h',
+    'platform/heap/Handle.h',
+    'platform/wtf/text/WTFString.h',
+])
+CALLBACK_FUNCTION_CPP_INCLUDES = frozenset([
+    'bindings/core/v8/ExceptionState.h',
+    'platform/bindings/ScriptState.h',
+    'bindings/core/v8/NativeValueTraitsImpl.h',
+    'bindings/core/v8/ToV8ForCore.h',
+    'bindings/core/v8/V8BindingForCore.h',
+    'core/dom/ExecutionContext.h',
+    'platform/wtf/Assertions.h',
+])
+
+
+def callback_function_context(callback_function):
+    includes.clear()
+    includes.update(CALLBACK_FUNCTION_CPP_INCLUDES)
+    idl_type = callback_function.idl_type
+    idl_type_str = str(idl_type)
+
+    for argument in callback_function.arguments:
+        argument.idl_type.add_includes_for_type(
+            callback_function.extended_attributes)
+
+    context = {
+        # While both |callback_function_name| and |cpp_class| are identical at
+        # the moment, the two are being defined because their values may change
+        # in the future (e.g. if we support [ImplementedAs=] in callback
+        # functions).
+        'callback_function_name': callback_function.name,
+        'cpp_class': 'V8%s' % callback_function.name,
+        'cpp_includes': sorted(includes),
+        'forward_declarations': sorted(forward_declarations(callback_function)),
+        'header_includes': sorted(CALLBACK_FUNCTION_H_INCLUDES),
+        'idl_type': idl_type_str,
+        'this_include_header_name': to_snake_case('V8%s' % callback_function.name),
+    }
+
+    if idl_type_str != 'void':
+        context.update({
+            'return_cpp_type': idl_type.cpp_type + '&',
+            'return_value': idl_type.v8_value_to_local_cpp_value(
+                callback_function.extended_attributes,
+                'v8ReturnValue', 'cppValue',
+                isolate='script_state_->GetIsolate()',
+                bailout_return_value='false'),
+        })
+
+    context.update(arguments_context(callback_function.arguments, context.get('return_cpp_type')))
+    return context
+
+
+def forward_declarations(callback_function):
+    def find_forward_declaration(idl_type):
+        if idl_type.is_interface_type or idl_type.is_dictionary:
+            return idl_type.implemented_as
+        elif idl_type.is_array_or_sequence_type:
+            return find_forward_declaration(idl_type.element_type)
+        return None
+
+    declarations = []
+    for argument in callback_function.arguments:
+        name = find_forward_declaration(argument.idl_type)
+        if name:
+            declarations.append(name)
+    return declarations
+
+
+def arguments_context(arguments, return_cpp_type):
+    def argument_context(argument):
+        idl_type = argument.idl_type
+        return {
+            'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
+                argument.name, isolate='script_state_->GetIsolate()',
+                creation_context='script_state_->GetContext()->Global()'),
+            'enum_type': idl_type.enum_type,
+            'enum_values': idl_type.enum_values,
+            'name': argument.name,
+            'v8_name': 'v8_%s' % argument.name,
+        }
+
+    argument_declarations = [
+        'ScriptWrappable* scriptWrappable',
+    ]
+    argument_declarations.extend(
+        '%s %s' % (argument.idl_type.callback_cpp_type, argument.name)
+        for argument in arguments)
+    if return_cpp_type:
+        argument_declarations.append('%s returnValue' % return_cpp_type)
+    return {
+        'argument_declarations': argument_declarations,
+        'arguments': [argument_context(argument) for argument in arguments],
+    }
diff --git a/bindings/scripts/v8_callback_interface.py b/bindings/scripts/v8_callback_interface.py
index 682cb55..c034dd3 100644
--- a/bindings/scripts/v8_callback_interface.py
+++ b/bindings/scripts/v8_callback_interface.py
@@ -35,21 +35,28 @@
 
 from idl_types import IdlTypeBase
 from v8_globals import includes
+from v8_interface import constant_context
 import v8_types
 import v8_utilities
 
 CALLBACK_INTERFACE_H_INCLUDES = frozenset([
-    'bindings/core/v8/ActiveDOMCallback.h',
-    'bindings/core/v8/DOMWrapperWorld.h',
-    'bindings/core/v8/ScopedPersistent.h',
+    'platform/bindings/DOMWrapperWorld.h',
+    'platform/bindings/ScopedPersistent.h',
 ])
 CALLBACK_INTERFACE_CPP_INCLUDES = frozenset([
     'bindings/core/v8/ScriptController.h',
-    'bindings/core/v8/V8Binding.h',
+    'bindings/core/v8/V8BindingForCore.h',
     'core/dom/ExecutionContext.h',
-    'wtf/Assertions.h',
-    'wtf/GetPtr.h',
-    'wtf/RefPtr.h',
+    'platform/wtf/Assertions.h',
+    'platform/wtf/GetPtr.h',
+    'platform/wtf/RefPtr.h',
+])
+LEGACY_CALLBACK_INTERFACE_CPP_INCLUDES = frozenset([
+    'bindings/core/v8/ScriptController.h',
+    'bindings/core/v8/V8BindingForCore.h',
+    'bindings/core/v8/V8DOMConfiguration.h',
+    'core/dom/ExecutionContext.h',
+    'platform/wtf/Assertions.h',
 ])
 
 
@@ -57,21 +64,21 @@
     # FIXME: remove this function by making callback types consistent
     # (always use usual v8_types.cpp_type)
     idl_type_name = idl_type.name
-    if idl_type_name == 'String':
+    if idl_type_name == 'String' or idl_type.is_enum:
         return 'const String&'
     if idl_type_name == 'void':
         return 'void'
     # Callbacks use raw pointers, so raw_type=True
     raw_cpp_type = idl_type.cpp_type_args(raw_type=True)
     # 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:
+    if raw_cpp_type.startswith(('Vector', 'HeapVector')) or idl_type.is_dictionary:
         return 'const %s&' % raw_cpp_type
     return raw_cpp_type
 
 IdlTypeBase.callback_cpp_type = property(cpp_type)
 
 
-def callback_interface_context(callback_interface):
+def callback_interface_context(callback_interface, _):
     includes.clear()
     includes.update(CALLBACK_INTERFACE_CPP_INCLUDES)
     return {
@@ -83,6 +90,20 @@
     }
 
 
+def legacy_callback_interface_context(callback_interface, _):
+    includes.clear()
+    includes.update(LEGACY_CALLBACK_INTERFACE_CPP_INCLUDES)
+    return {
+        # TODO(bashi): Fix crbug.com/630986, and add 'methods'.
+        'constants': [constant_context(constant, callback_interface)
+                      for constant in callback_interface.constants],
+        'cpp_class': callback_interface.name,
+        'header_includes': set(CALLBACK_INTERFACE_H_INCLUDES),
+        'interface_name': callback_interface.name,
+        'v8_class': v8_utilities.v8_class_name(callback_interface),
+    }
+
+
 def add_includes_for_operation(operation):
     operation.idl_type.add_includes_for_type()
     for argument in operation.arguments:
@@ -117,8 +138,8 @@
         return {
             'handle': '%sHandle' % argument.name,
             'cpp_value_to_v8_value': argument.idl_type.cpp_value_to_v8_value(
-                argument.name, isolate='m_scriptState->isolate()',
-                creation_context='m_scriptState->context()->Global()'),
+                argument.name, isolate='script_state_->GetIsolate()',
+                creation_context='script_state_->GetContext()->Global()'),
         }
 
     argument_declarations = ['ScriptValue thisValue'] if call_with_this_handle else []
diff --git a/bindings/scripts/v8_dictionary.py b/bindings/scripts/v8_dictionary.py
index dde7e1c..0909d11 100644
--- a/bindings/scripts/v8_dictionary.py
+++ b/bindings/scripts/v8_dictionary.py
@@ -8,6 +8,7 @@
 
 import operator
 from idl_types import IdlType
+from utilities import to_snake_case
 from v8_globals import includes
 import v8_types
 import v8_utilities
@@ -15,8 +16,9 @@
 
 
 DICTIONARY_H_INCLUDES = frozenset([
-    'bindings/core/v8/ToV8.h',
-    'bindings/core/v8/V8Binding.h',
+    'bindings/core/v8/NativeValueTraits.h',
+    'bindings/core/v8/ToV8ForCore.h',
+    'bindings/core/v8/V8BindingForCore.h',
     'platform/heap/Handle.h',
 ])
 
@@ -25,6 +27,11 @@
 ])
 
 
+def getter_name_for_dictionary_member(member):
+    name = v8_utilities.cpp_name(member)
+    return name
+
+
 def setter_name_for_dictionary_member(member):
     name = v8_utilities.cpp_name(member)
     return 'set%s' % v8_utilities.capitalize(name)
@@ -53,13 +60,25 @@
 def dictionary_context(dictionary, interfaces_info):
     includes.clear()
     includes.update(DICTIONARY_CPP_INCLUDES)
+
+    if 'RuntimeEnabled' in dictionary.extended_attributes:
+        raise Exception(
+            'Dictionary cannot be RuntimeEnabled: %s' % dictionary.name)
+
+    members = [member_context(dictionary, member)
+               for member in sorted(dictionary.members,
+                                    key=operator.attrgetter('name'))]
+
+    for member in members:
+        if member['runtime_enabled_feature_name']:
+            includes.add('platform/runtime_enabled_features.h')
+            break
+
     cpp_class = v8_utilities.cpp_name(dictionary)
     context = {
         'cpp_class': cpp_class,
         'header_includes': set(DICTIONARY_H_INCLUDES),
-        'members': [member_context(dictionary, member)
-                    for member in sorted(dictionary.members,
-                                         key=operator.attrgetter('name'))],
+        'members': members,
         'required_member_names': sorted([member.name
                                          for member in dictionary.members
                                          if member.is_required]),
@@ -101,7 +120,8 @@
         return cpp_default_value, v8_default_value
 
     cpp_default_value, v8_default_value = default_values()
-    cpp_name = v8_utilities.cpp_name(member)
+    cpp_name = to_snake_case(v8_utilities.cpp_name(member))
+    getter_name = getter_name_for_dictionary_member(member)
     is_deprecated_dictionary = unwrapped_idl_type.name == 'Dictionary'
 
     return {
@@ -109,26 +129,27 @@
         'cpp_name': cpp_name,
         'cpp_type': unwrapped_idl_type.cpp_type,
         'cpp_value_to_v8_value': unwrapped_idl_type.cpp_value_to_v8_value(
-            cpp_value='impl.%s()' % cpp_name, isolate='isolate',
+            cpp_value='impl.%s()' % getter_name, isolate='isolate',
             creation_context='creationContext',
             extended_attributes=extended_attributes),
         'deprecate_as': v8_utilities.deprecate_as(member),
         'enum_type': idl_type.enum_type,
         'enum_values': unwrapped_idl_type.enum_values,
+        'getter_name': getter_name,
         '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_type or is_deprecated_dictionary),
+        'is_interface_type': idl_type.is_interface_type and not is_deprecated_dictionary,
         'is_nullable': idl_type.is_nullable,
         '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]
+        'runtime_enabled_feature_name': v8_utilities.runtime_enabled_feature_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,
         'v8_value_to_local_cpp_value': unwrapped_idl_type.v8_value_to_local_cpp_value(
             extended_attributes, member.name + 'Value',
-            member.name, isolate='isolate', use_exception_state=True),
+            member.name + 'CppValue', isolate='isolate', use_exception_state=True),
     }
 
 
@@ -149,11 +170,14 @@
         return sorted(members_dict.values(), key=lambda member: member['cpp_name'])
 
     includes.clear()
+    header_forward_decls = set()
     header_includes = set(['platform/heap/Handle.h'])
-    members = [member_impl_context(member, interfaces_info, header_includes)
+    members = [member_impl_context(member, interfaces_info,
+                                   header_includes, header_forward_decls)
                for member in dictionary.members]
     members = remove_duplicate_members(members)
     context = {
+        'header_forward_decls': header_forward_decls,
         'header_includes': header_includes,
         'cpp_class': v8_utilities.cpp_name(dictionary),
         'members': members,
@@ -165,49 +189,68 @@
         if parent_interface_info:
             context['header_includes'].add(
                 parent_interface_info['include_path'])
+    else:
+        context['parent_cpp_class'] = 'IDLDictionaryBase'
+        context['header_includes'].add(
+            'bindings/core/v8/IDLDictionaryBase.h')
     return context
 
 
-def member_impl_context(member, interfaces_info, header_includes):
+def member_impl_context(member, interfaces_info, header_includes,
+                        header_forward_decls):
     idl_type = unwrap_nullable_if_needed(member.idl_type)
-    cpp_name = v8_utilities.cpp_name(member)
+    cpp_name = to_snake_case(v8_utilities.cpp_name(member))
 
-    def getter_expression():
-        if idl_type.impl_should_use_nullable_container:
-            return 'm_%s.get()' % cpp_name
-        return 'm_%s' % cpp_name
+    nullable_indicator_name = None
+    if not idl_type.cpp_type_has_null_value:
+        nullable_indicator_name = 'has_' + cpp_name + '_'
 
     def has_method_expression():
-        if idl_type.impl_should_use_nullable_container or idl_type.is_enum or idl_type.is_string_type or idl_type.is_union_type:
-            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
-
-    def member_cpp_type():
-        member_cpp_type = idl_type.cpp_type_args(used_in_cpp_sequence=True)
-        if idl_type.impl_should_use_nullable_container:
-            return v8_types.cpp_template_type('Nullable', member_cpp_type)
-        return member_cpp_type
+        if nullable_indicator_name:
+            return nullable_indicator_name
+        if idl_type.is_union_type or idl_type.is_enum or idl_type.is_string_type:
+            return '!%s_.IsNull()' % cpp_name
+        if idl_type.name in ['Any', 'Object']:
+            return '!({0}_.IsEmpty() || {0}_.IsNull() || {0}_.IsUndefined())'.format(cpp_name)
+        if idl_type.name == 'Dictionary':
+            return '!%s_.IsUndefinedOrNull()' % cpp_name
+        return '%s_' % cpp_name
 
     cpp_default_value = None
     if member.default_value and not member.default_value.is_null:
         cpp_default_value = idl_type.literal_cpp_value(member.default_value)
 
-    header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
+    forward_decl_name = idl_type.impl_forward_declaration_name
+    if forward_decl_name:
+        includes.update(idl_type.impl_includes_for_type(interfaces_info))
+        header_forward_decls.add(forward_decl_name)
+    else:
+        header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
+
+    setter_value = 'value'
+    if idl_type.is_array_buffer_view_or_typed_array:
+        setter_value += '.View()'
+
+    non_null_type = idl_type.inner_type if idl_type.is_nullable else idl_type
+    setter_inline = 'inline ' if (
+        non_null_type.is_basic_type or
+        non_null_type.is_enum or
+        non_null_type.is_wrapper_type) else ''
+
     return {
         'cpp_default_value': cpp_default_value,
         'cpp_name': cpp_name,
-        'getter_expression': getter_expression(),
+        'getter_expression': cpp_name + '_',
+        'getter_name': getter_name_for_dictionary_member(member),
         'has_method_expression': has_method_expression(),
         'has_method_name': has_method_name_for_dictionary_member(member),
         'is_nullable': idl_type.is_nullable,
         'is_traceable': idl_type.is_traceable,
-        'member_cpp_type': member_cpp_type(),
+        'member_cpp_type': idl_type.cpp_type_args(used_in_cpp_sequence=True),
         'null_setter_name': null_setter_name_for_dictionary_member(member),
+        'nullable_indicator_name': nullable_indicator_name,
         'rvalue_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
+        'setter_inline': setter_inline,
         'setter_name': setter_name_for_dictionary_member(member),
+        'setter_value': setter_value,
     }
diff --git a/bindings/scripts/v8_globals.py b/bindings/scripts/v8_globals.py
index 9ca2a35..55ed257 100644
--- a/bindings/scripts/v8_globals.py
+++ b/bindings/scripts/v8_globals.py
@@ -29,4 +29,3 @@
 """Module to share global variables (includes and interfaces) across modules."""
 
 includes = set()
-interfaces = {}
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index 35edaee..c8b3245 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -27,49 +27,175 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+# pylint: disable=relative-import
+
 """Generate template values for an interface.
 
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
+from operator import or_
 
-from collections import defaultdict
-import itertools
-from operator import itemgetter
-
-import idl_definitions
-from idl_definitions import IdlOperation, IdlArgument
-import idl_types
+from idl_definitions import IdlAttribute, IdlOperation, IdlArgument
 from idl_types import IdlType, inherits_interface
+from overload_set_algorithm import effective_overload_set_by_length
+from overload_set_algorithm import method_overloads_by_name
+
 import v8_attributes
 from v8_globals import includes
 import v8_methods
 import v8_types
-from v8_types import cpp_ptr_type, cpp_template_type
 import v8_utilities
-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)
+from v8_utilities import (context_enabled_feature_name, cpp_name_or_partial, cpp_name,
+                          has_extended_attribute_value, runtime_enabled_feature_name,
+                          is_legacy_interface_type_checking)
 
 
 INTERFACE_H_INCLUDES = frozenset([
-    'bindings/core/v8/ScriptWrappable.h',
-    'bindings/core/v8/ToV8.h',
-    'bindings/core/v8/V8Binding.h',
-    'bindings/core/v8/V8DOMWrapper.h',
-    'bindings/core/v8/WrapperTypeInfo.h',
+    'bindings/core/v8/GeneratedCodeHelper.h',
+    'bindings/core/v8/NativeValueTraits.h',
+    'platform/bindings/ScriptWrappable.h',
+    'bindings/core/v8/ToV8ForCore.h',
+    'bindings/core/v8/V8BindingForCore.h',
+    'platform/bindings/V8DOMWrapper.h',
+    'platform/bindings/WrapperTypeInfo.h',
     'platform/heap/Handle.h',
 ])
 INTERFACE_CPP_INCLUDES = frozenset([
     'bindings/core/v8/ExceptionState.h',
     'bindings/core/v8/V8DOMConfiguration.h',
-    'bindings/core/v8/V8ObjectConstructor.h',
-    'core/dom/Document.h',
-    'wtf/GetPtr.h',
-    'wtf/RefPtr.h',
+    'platform/bindings/V8ObjectConstructor.h',
+    'core/dom/ExecutionContext.h',
+    'platform/wtf/GetPtr.h',
+    'platform/wtf/RefPtr.h',
 ])
 
 
-def interface_context(interface):
+def filter_has_constant_configuration(constants):
+    return [constant for constant in constants if
+            not constant['measure_as'] and
+            not constant['deprecate_as'] and
+            not constant['runtime_enabled_feature_name'] and
+            not constant['origin_trial_feature_name']]
+
+
+def filter_has_special_getter(constants):
+    return [constant for constant in constants if
+            constant['measure_as'] or
+            constant['deprecate_as']]
+
+
+def filter_runtime_enabled(constants):
+    return [constant for constant in constants if
+            constant['runtime_enabled_feature_name']]
+
+
+def filter_origin_trial_enabled(constants):
+    return [constant for constant in constants if
+            constant['origin_trial_feature_name']]
+
+
+def constant_filters():
+    return {'has_constant_configuration': filter_has_constant_configuration,
+            'has_special_getter': filter_has_special_getter,
+            'runtime_enabled_constants': filter_runtime_enabled,
+            'origin_trial_enabled_constants': filter_origin_trial_enabled}
+
+
+def origin_trial_features(interface, constants, attributes, methods):
+    """ Returns a list of the origin trial features used in this interface.
+
+    Each element is a dictionary with keys 'name' and 'needs_instance'.
+    'needs_instance' is true if any member associated with the interface needs
+    to be installed on every instance of the interface. This list is the union
+    of the sets of features used for constants, attributes and methods.
+    """
+    KEY = 'origin_trial_feature_name'  # pylint: disable=invalid-name
+
+    def member_filter(members):
+        return sorted([member for member in members if member.get(KEY) and not member.get('exposed_test')])
+
+    def member_filter_by_name(members, name):
+        return [member for member in members if member[KEY] == name]
+
+    # Collect all members visible on this interface with a defined origin trial
+    origin_trial_constants = member_filter(constants)
+    origin_trial_attributes = member_filter(attributes)
+    origin_trial_methods = member_filter([method for method in methods
+                                          if v8_methods.method_is_visible(method, interface.is_partial) and
+                                          not v8_methods.custom_registration(method)])
+
+    feature_names = set([member[KEY] for member in origin_trial_constants + origin_trial_attributes + origin_trial_methods])
+
+    # Construct the list of dictionaries. 'needs_instance' will be true if any
+    # member for the feature has 'on_instance' defined as true.
+    features = [{'name': name,
+                 'constants': member_filter_by_name(origin_trial_constants, name),
+                 'attributes': member_filter_by_name(origin_trial_attributes, name),
+                 'methods': member_filter_by_name(origin_trial_methods, name)}
+                for name in feature_names]
+    for feature in features:
+        members = feature['constants'] + feature['attributes'] + feature['methods']
+        feature['needs_instance'] = any(member.get('on_instance', False) for member in members)
+        # TODO(chasej): Need to handle method overloads? e.g.
+        # (method['overloads']['secure_context_test_all'] if 'overloads' in method else method['secure_context_test'])
+        feature['needs_secure_context'] = any(member.get('secure_context_test', False) for member in members)
+
+    if features:
+        includes.add('platform/bindings/ScriptState.h')
+        includes.add('core/origin_trials/origin_trials.h')
+    return features
+
+
+def context_enabled_features(attributes):
+    """ Returns a list of context-enabled features from a set of attributes.
+
+    Each element is a dictionary with the feature's |name| and lists of
+    |attributes| associated with the feature.
+    """
+    KEY = 'context_enabled_feature_name'  # pylint: disable=invalid-name
+
+    def member_filter(members):
+        return sorted([member for member in members if member.get(KEY) and not member.get('exposed_test')])
+
+    def member_filter_by_name(members, name):
+        return [member for member in members if member[KEY] == name]
+
+    # Collect all members visible on this interface with a defined origin trial
+    context_enabled_attributes = member_filter(attributes)
+    feature_names = set([member[KEY] for member in context_enabled_attributes])
+    features = [{'name': name,
+                 'attributes': member_filter_by_name(context_enabled_attributes, name),
+                 'needs_instance': False}
+                for name in feature_names]
+    if features:
+        includes.add('platform/bindings/ScriptState.h')
+    return features
+
+
+def runtime_call_stats_context(interface):
+    counter_prefix = 'Blink_' + v8_utilities.cpp_name(interface) + '_'
+    return {
+        'constructor_counter': counter_prefix + 'Constructor',
+        'cross_origin_named_getter_counter': counter_prefix + 'CrossOriginNamedGetter',
+        'cross_origin_named_setter_counter': counter_prefix + 'CrossOriginNamedSetter',
+        'indexed_property_getter_counter': counter_prefix + 'IndexedPropertyGetter',
+        'named_property_getter_counter': counter_prefix + 'NamedPropertyGetter',
+        'named_property_query_counter': counter_prefix + 'NamedPropertyQuery',
+        'named_property_setter_counter': counter_prefix + 'NamedPropertySetter',
+    }
+
+def interface_context(interface, interfaces):
+    """Creates a Jinja template context for an interface.
+
+    Args:
+        interface: An interface to create the context for
+        interfaces: A dict which maps an interface name to the definition
+            which can be referred if needed
+
+    Returns:
+        A Jinja template context for |interface|
+    """
+
     includes.clear()
     includes.update(INTERFACE_CPP_INCLUDES)
     header_includes = set(INTERFACE_H_INCLUDES)
@@ -108,10 +234,14 @@
             'bindings/core/v8/V8Float64Array.h',
             'bindings/core/v8/V8DataView.h'))
 
+    # [ActiveScriptWrappable]
+    active_scriptwrappable = 'ActiveScriptWrappable' in extended_attributes
+
     # [CheckSecurity]
     is_check_security = 'CheckSecurity' in extended_attributes
     if is_check_security:
         includes.add('bindings/core/v8/BindingSecurity.h')
+        includes.add('core/frame/LocalDOMWindow.h')
 
     # [DependentLifetime]
     is_dependent_lifetime = 'DependentLifetime' in extended_attributes
@@ -120,81 +250,62 @@
     is_global = ('PrimaryGlobal' in extended_attributes or
                  'Global' in extended_attributes)
 
-    # [SetWrapperReferenceFrom]
-    set_wrapper_reference_from = extended_attributes.get('SetWrapperReferenceFrom')
-    if set_wrapper_reference_from:
-        includes.update(['bindings/core/v8/V8GCController.h',
-                         'core/dom/Element.h'])
+    # [ImmutablePrototype]
+    # TODO(littledan): Is it possible to deduce this based on inheritance,
+    # as in the WebIDL spec?
+    is_immutable_prototype = is_global or 'ImmutablePrototype' in extended_attributes
 
-    # [SetWrapperReferenceTo]
-    set_wrapper_reference_to_argument = extended_attributes.get('SetWrapperReferenceTo')
-    set_wrapper_reference_to = None
-    if set_wrapper_reference_to_argument:
-        set_wrapper_reference_to = {
-            'name': set_wrapper_reference_to_argument.name,
-            # FIXME: properly should be:
-            # 'cpp_type': set_wrapper_reference_to_argument.idl_type.cpp_type_args(raw_type=True),
-            # (if type is non-wrapper type like NodeFilter, normally RefPtr)
-            # Raw pointers faster though, and NodeFilter hacky anyway.
-            'cpp_type': set_wrapper_reference_to_argument.idl_type.implemented_as + '*',
-            'idl_type': set_wrapper_reference_to_argument.idl_type,
-            'v8_type': v8_types.v8_type(set_wrapper_reference_to_argument.idl_type.name),
-        }
-        set_wrapper_reference_to['idl_type'].add_includes_for_type()
+    wrapper_class_id = ('kNodeClassId' if inherits_interface(interface.name, 'Node') else 'kObjectClassId')
 
-    # [SetWrapperReferenceFrom]
-    has_visit_dom_wrapper = (
-        has_extended_attribute_value(interface, 'Custom', 'VisitDOMWrapper') or
-        set_wrapper_reference_from or set_wrapper_reference_to)
+    # [ActiveScriptWrappable] must be accompanied with [DependentLifetime].
+    if active_scriptwrappable and not is_dependent_lifetime:
+        raise Exception('[ActiveScriptWrappable] interface must also specify '
+                        '[DependentLifetime]: %s' % interface.name)
 
-    this_gc_type = gc_type(interface)
-
-    wrapper_class_id = ('NodeClassId' if inherits_interface(interface.name, 'Node') else 'ObjectClassId')
+    # [LegacyUnenumerableNamedProperties]
+    # pylint: disable=C0103
+    has_legacy_unenumerable_named_properties = (interface.has_named_property_getter and
+                                                'LegacyUnenumerableNamedProperties' in extended_attributes)
 
     v8_class_name = v8_utilities.v8_class_name(interface)
     cpp_class_name = cpp_name(interface)
     cpp_class_name_or_partial = cpp_name_or_partial(interface)
     v8_class_name_or_partial = v8_utilities.v8_class_name_or_partial(interface)
 
-    if 'RuntimeEnabled' in extended_attributes:
-        includes.add('platform/RuntimeEnabledFeatures.h')
-
-    if 'OriginTrialEnabled' in extended_attributes:
-        includes.add('core/inspector/ConsoleMessage.h')
-        includes.add('core/origin_trials/OriginTrials.h')
+    # TODO(peria): Generate the target list from 'Window' and 'HTMLDocument'.
+    needs_runtime_enabled_installer = v8_class_name in [
+        'V8Window', 'V8HTMLDocument', 'V8Document', 'V8Node', 'V8EventTarget']
 
     context = {
+        'active_scriptwrappable': active_scriptwrappable,
+        'context_enabled_feature_name': context_enabled_feature_name(interface),  # [ContextEnabled]
         'cpp_class': cpp_class_name,
         'cpp_class_or_partial': cpp_class_name_or_partial,
-        'event_target_inheritance': 'InheritFromEventTarget' if is_event_target else 'NotInheritFromEventTarget',
-        'gc_type': this_gc_type,
+        'is_gc_type': True,
         # FIXME: Remove 'EventTarget' special handling, http://crbug.com/383699
         'has_access_check_callbacks': (is_check_security and
-                                       interface.name != 'Window' and
                                        interface.name != 'EventTarget'),
         'has_custom_legacy_call_as_function': has_extended_attribute_value(interface, 'Custom', 'LegacyCallAsFunction'),  # [Custom=LegacyCallAsFunction]
+        'has_legacy_unenumerable_named_properties': has_legacy_unenumerable_named_properties,
         'has_partial_interface': len(interface.partial_interfaces) > 0,
-        'has_visit_dom_wrapper': has_visit_dom_wrapper,
         'header_includes': header_includes,
         'interface_name': interface.name,
         '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_immutable_prototype': is_immutable_prototype,
         '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_dependent_lifetime) else 'Independent',
+        'lifetime': 'kDependent' if is_dependent_lifetime else 'kIndependent',
         'measure_as': v8_utilities.measure_as(interface, None),  # [MeasureAs]
-        'origin_trial_name': v8_utilities.origin_trial_name(interface),
+        'needs_runtime_enabled_installer': needs_runtime_enabled_installer,
+        'origin_trial_enabled_function': v8_utilities.origin_trial_enabled_function_name(interface),
         'parent_interface': parent_interface,
-        'pass_cpp_type': cpp_template_type(
-            cpp_ptr_type('PassRefPtr', 'RawPtr', this_gc_type),
-            cpp_name(interface)),
-        'runtime_enabled_function': runtime_enabled_function_name(interface),  # [RuntimeEnabled]
-        'set_wrapper_reference_from': set_wrapper_reference_from,
-        'set_wrapper_reference_to': set_wrapper_reference_to,
+        'pass_cpp_type': cpp_name(interface) + '*',
+        'runtime_call_stats': runtime_call_stats_context(interface),
+        'runtime_enabled_feature_name': runtime_enabled_feature_name(interface),  # [RuntimeEnabled]
         'v8_class': v8_class_name,
         'v8_class_or_partial': v8_class_name_or_partial,
         'wrapper_class_id': wrapper_class_id,
@@ -216,6 +327,16 @@
             number_of_required_arguments(constructor),
     } for constructor in interface.custom_constructors]
 
+    # [HTMLConstructor]
+    has_html_constructor = 'HTMLConstructor' in extended_attributes
+    # https://html.spec.whatwg.org/multipage/dom.html#html-element-constructors
+    if has_html_constructor:
+        if ('Constructor' in extended_attributes) or ('NoInterfaceObject' in extended_attributes):
+            raise Exception('[Constructor] and [NoInterfaceObject] MUST NOT be'
+                            ' specified with [HTMLConstructor]: '
+                            '%s' % interface.name)
+        includes.add('bindings/core/v8/V8HTMLConstructor.h')
+
     # [NamedConstructor]
     named_constructor = named_constructor_context(interface)
 
@@ -224,91 +345,241 @@
             raise Exception('[Constructor] and [NamedConstructor] MUST NOT be'
                             ' specified on partial interface definitions: '
                             '%s' % interface.name)
+        if named_constructor:
+            includes.add('platform/bindings/V8PrivateProperty.h')
 
-        includes.add('bindings/core/v8/V8ObjectConstructor.h')
+        includes.add('platform/bindings/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)
+        if not interface.is_partial:
+            raise Exception('[Measure] or [MeasureAs] specified for interface without a constructor: '
+                            '%s' % interface.name)
 
-    # [Unscopeable] attributes and methods
-    unscopeables = []
+    # [ConstructorCallWith=Document]
+    if has_extended_attribute_value(interface, 'ConstructorCallWith', 'Document'):
+        includes.add('core/dom/Document.h')
+
+    # [Unscopable] attributes and methods
+    unscopables = []
     for attribute in interface.attributes:
-        if 'Unscopeable' in attribute.extended_attributes:
-            unscopeables.append((attribute.name, v8_utilities.runtime_enabled_function_name(attribute)))
+        if 'Unscopable' in attribute.extended_attributes:
+            unscopables.append((attribute.name, runtime_enabled_feature_name(attribute)))
     for method in interface.operations:
-        if 'Unscopeable' in method.extended_attributes:
-            unscopeables.append((method.name, v8_utilities.runtime_enabled_function_name(method)))
+        if 'Unscopable' in method.extended_attributes:
+            unscopables.append((method.name, runtime_enabled_feature_name(method)))
+
+    # [CEReactions]
+    setter_or_deleters = (
+        interface.indexed_property_setter,
+        interface.indexed_property_deleter,
+        interface.named_property_setter,
+        interface.named_property_deleter,
+    )
+    has_ce_reactions = any(setter_or_deleter and 'CEReactions' in setter_or_deleter.extended_attributes
+                           for setter_or_deleter in setter_or_deleters)
+    if has_ce_reactions:
+        includes.add('core/html/custom/CEReactionsScope.h')
 
     context.update({
         'constructors': constructors,
         'has_custom_constructor': bool(custom_constructors),
+        'has_html_constructor': has_html_constructor,
         'interface_length':
-            interface_length(interface, constructors + custom_constructors),
+            interface_length(constructors + custom_constructors),
         'is_constructor_raises_exception': extended_attributes.get('RaisesException') == 'Constructor',  # [RaisesException=Constructor]
         'named_constructor': named_constructor,
-        'unscopeables': sorted(unscopeables),
+        'unscopables': sorted(unscopables),
     })
 
-    constants = [constant_context(constant, interface) for constant in interface.constants]
-
-    special_getter_constants = []
-    runtime_enabled_constants = dict()
-    constant_configuration_constants = []
-
-    for constant in constants:
-        if constant['measure_as'] or constant['deprecate_as'] or constant['origin_trial_name']:
-            special_getter_constants.append(constant)
-            continue
-        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)
-
     # Constants
     context.update({
-        'constant_configuration_constants': constant_configuration_constants,
-        'constants': constants,
+        'constants': [constant_context(constant, interface) for constant in interface.constants],
         'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes,
-        'has_constant_configuration': any(
-            not constant['runtime_enabled_function']
-            for constant in constants),
-        'runtime_enabled_constants': sorted(runtime_enabled_constants.iteritems()),
-        'special_getter_constants': special_getter_constants,
     })
 
     # Attributes
-    attributes = [v8_attributes.attribute_context(interface, attribute)
+    attributes = attributes_context(interface, interfaces)
+
+    context.update({
+        'attributes': attributes,
+        # Elements in attributes are broken in following members.
+        'accessors': v8_attributes.filter_accessors(attributes),
+        'data_attributes': v8_attributes.filter_data_attributes(attributes),
+        'lazy_data_attributes': v8_attributes.filter_lazy_data_attributes(attributes),
+        'runtime_enabled_attributes': v8_attributes.filter_runtime_enabled(attributes),
+    })
+
+    # Conditionally enabled attributes
+    conditional_enabled_attributes = v8_attributes.filter_conditionally_enabled(attributes)
+    has_conditional_attributes_on_prototype = any(  # pylint: disable=invalid-name
+        attribute['on_prototype'] for attribute in conditional_enabled_attributes)
+    has_conditionally_enabled_constructors = any(  # pylint: disable=invalid-name
+        attribute['constructor_type'] for attribute in conditional_enabled_attributes)
+    has_conditionally_enabled_secure_attributes = any(  # pylint: disable=invalid-name
+        v8_attributes.is_secure_context(attribute) for attribute in conditional_enabled_attributes)
+    context.update({
+        'has_conditionally_enabled_constructors':
+            has_conditionally_enabled_constructors,
+        'has_conditionally_enabled_secure_attributes':
+            has_conditionally_enabled_secure_attributes,
+        'conditionally_enabled_attributes': conditional_enabled_attributes,
+    })
+
+    # Methods
+    context.update(methods_context(interface))
+    methods = context['methods']
+    context.update({
+        'has_origin_safe_method_setter': any(method['is_cross_origin'] and not method['is_unforgeable']
+            for method in methods),
+    })
+
+    # Conditionally enabled methods
+    conditionally_enabled_methods = v8_methods.filter_conditionally_enabled(methods, interface.is_partial)
+    has_conditionally_enabled_secure_methods = any(  # pylint: disable=invalid-name
+        v8_methods.is_secure_context(method) for method in conditionally_enabled_methods)
+    context.update({
+        'has_conditionally_enabled_secure_methods':
+            has_conditionally_enabled_secure_methods,
+        'conditionally_enabled_methods': conditionally_enabled_methods,
+    })
+
+    # Window.idl in Blink has indexed properties, but the spec says Window
+    # interface doesn't have indexed properties, instead the WindowProxy exotic
+    # object has indexed properties.  Thus, Window interface must not support
+    # iterators.
+    has_array_iterator = (not interface.is_partial and
+                          interface.has_indexed_elements and
+                          interface.name != 'Window')
+    context.update({
+        'has_array_iterator': has_array_iterator,
+        'iterable': interface.iterable,
+    })
+
+    # Conditionally enabled members
+    prepare_prototype_and_interface_object_func = None  # pylint: disable=invalid-name
+    if (unscopables or has_conditional_attributes_on_prototype or
+            context['conditionally_enabled_methods']):
+        prepare_prototype_and_interface_object_func = '%s::preparePrototypeAndInterfaceObject' % v8_class_name_or_partial  # pylint: disable=invalid-name
+    has_install_conditional_features_on_global_func = has_conditionally_enabled_constructors  # pylint: disable=invalid-name
+
+    context.update({
+        'prepare_prototype_and_interface_object_func': prepare_prototype_and_interface_object_func,
+        'has_install_conditional_features_on_global_func': has_install_conditional_features_on_global_func,
+    })
+
+    context.update({
+        'legacy_caller': legacy_caller(interface.legacy_caller, interface),
+        'indexed_property_getter': property_getter(interface.indexed_property_getter, ['index']),
+        'indexed_property_setter': property_setter(interface.indexed_property_setter, interface),
+        'indexed_property_deleter': property_deleter(interface.indexed_property_deleter),
+        'is_override_builtins': 'OverrideBuiltins' in extended_attributes,
+        'named_property_getter': property_getter(interface.named_property_getter, ['name']),
+        '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'],
+    })
+
+    # Origin Trials and ContextEnabled features
+    context.update({
+        'optional_features':
+            sorted(origin_trial_features(interface, context['constants'], context['attributes'], context['methods']) +
+                   context_enabled_features(context['attributes'])),
+    })
+
+    # Cross-origin interceptors
+    has_cross_origin_named_getter = False
+    has_cross_origin_named_setter = False
+    has_cross_origin_indexed_getter = False
+
+    for attribute in attributes:
+        if attribute['has_cross_origin_getter']:
+            has_cross_origin_named_getter = True
+        if attribute['has_cross_origin_setter']:
+            has_cross_origin_named_setter = True
+
+    # Methods are exposed as getter attributes on the interface: e.g.
+    # window.location gets the location attribute on the Window interface. For
+    # the cross-origin case, this attribute getter is guaranteed to only return
+    # a Function object, which the actual call is dispatched against.
+    for method in methods:
+        if method['is_cross_origin']:
+            has_cross_origin_named_getter = True
+
+    has_cross_origin_named_enumerator = has_cross_origin_named_getter or has_cross_origin_named_setter  # pylint: disable=invalid-name
+
+    if context['named_property_getter'] and context['named_property_getter']['is_cross_origin']:
+        has_cross_origin_named_getter = True
+
+    if context['indexed_property_getter'] and context['indexed_property_getter']['is_cross_origin']:
+        has_cross_origin_indexed_getter = True
+
+    context.update({
+        'has_cross_origin_named_getter': has_cross_origin_named_getter,
+        'has_cross_origin_named_setter': has_cross_origin_named_setter,
+        'has_cross_origin_named_enumerator': has_cross_origin_named_enumerator,
+        'has_cross_origin_indexed_getter': has_cross_origin_indexed_getter,
+    })
+
+    return context
+
+
+def attributes_context(interface, interfaces):
+    """Creates a list of Jinja template contexts for attributes of an interface.
+
+    Args:
+        interface: An interface to create contexts for
+        interfaces: A dict which maps an interface name to the definition
+            which can be referred if needed
+
+    Returns:
+        A list of attribute contexts
+    """
+
+    attributes = [v8_attributes.attribute_context(interface, attribute, interfaces)
                   for attribute in interface.attributes]
 
     has_conditional_attributes = any(attribute['exposed_test'] for attribute in attributes)
     if has_conditional_attributes and interface.is_partial:
-        raise Exception('Conditional attributes between partial interfaces in modules and the original interfaces(%s) in core are not allowed.' % interface.name)
+        raise Exception(
+            'Conditional attributes between partial interfaces in modules '
+            'and the original interfaces(%s) in core are not allowed.'
+            % interface.name)
 
-    context.update({
-        'attributes': attributes,
-        'has_accessor_configuration': any(
-            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['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),
-    })
+    # See also comment in methods_context.
+    if not interface.is_partial and (interface.maplike or interface.setlike):
+        if any(attribute['name'] == 'size' for attribute in attributes):
+            raise ValueError(
+                'An interface cannot define an attribute called "size"; it is '
+                'implied by maplike/setlike in the IDL.')
+        size_attribute = IdlAttribute()
+        size_attribute.name = 'size'
+        size_attribute.idl_type = IdlType('unsigned long')
+        size_attribute.is_read_only = True
+        size_attribute.extended_attributes['NotEnumerable'] = None
+        attributes.append(v8_attributes.attribute_context(
+            interface, size_attribute, interfaces))
 
-    # Methods
+    return attributes
+
+
+def methods_context(interface):
+    """Creates a list of Jinja template contexts for methods of an interface.
+
+    Args:
+        interface: An interface to create contexts for
+
+    Returns:
+        A dictionary with 3 keys:
+        'iterator_method': An iterator context if available or None.
+        'iterator_method_alias': A string that can also be used to refer to the
+                                 @@iterator symbol or None.
+        'methods': A list of method contexts.
+    """
+
     methods = []
+
     if interface.original_interface:
         methods.extend([v8_methods.method_context(interface, operation, is_visible=False)
                         for operation in interface.original_interface.operations
@@ -325,7 +596,7 @@
     compute_method_overloads_context(interface, methods)
 
     def generated_method(return_type, name, arguments=None, extended_attributes=None, implemented_as=None):
-        operation = IdlOperation(interface.idl_name)
+        operation = IdlOperation()
         operation.idl_type = return_type
         operation.name = name
         if arguments:
@@ -338,7 +609,7 @@
         return v8_methods.method_context(interface, operation)
 
     def generated_argument(idl_type, name, is_optional=False, extended_attributes=None):
-        argument = IdlArgument(interface.idl_name)
+        argument = IdlArgument()
         argument.idl_type = idl_type
         argument.name = name
         argument.is_optional = is_optional
@@ -346,17 +617,20 @@
             argument.extended_attributes.update(extended_attributes)
         return argument
 
-    # [Iterable], iterable<>, maplike<> and setlike<>
+    # iterable<>, maplike<> and setlike<>
     iterator_method = None
-    has_array_iterator = False
+
+    # Depending on the declaration, @@iterator may be a synonym for e.g.
+    # 'entries' or 'values'.
+    iterator_method_alias = None
 
     # 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 interface.has_indexed_elements or 'Iterable' in extended_attributes)):
+    if (not interface.is_partial and (
+            interface.iterable or interface.maplike or interface.setlike or
+            interface.has_indexed_elements)):
 
         used_extended_attributes = {}
 
@@ -389,31 +663,45 @@
                 extended_attributes=used_extended_attributes,
                 implemented_as=implemented_as)
 
-        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 not interface.has_indexed_elements:
+            iterator_method = generated_iterator_method('iterator', implemented_as='GetIterator')
 
         if interface.iterable or interface.maplike or interface.setlike:
-            implicit_methods = [
-                generated_iterator_method('keys'),
-                generated_iterator_method('values'),
-                generated_iterator_method('entries'),
+            non_overridable_methods = []
+            overridable_methods = []
 
-                # void forEach(Function callback, [Default=Undefined] optional any thisArg)
-                generated_method(IdlType('void'), 'forEach',
-                                 arguments=[generated_argument(IdlType('Function'), 'callback'),
-                                            generated_argument(IdlType('any'), 'thisArg',
-                                                               is_optional=True,
-                                                               extended_attributes={'Default': 'Undefined'})],
-                                 extended_attributes=forEach_extended_attributes),
-            ]
+            is_value_iterator = interface.iterable and interface.iterable.key_type is None
+
+            # For value iterators, the |entries|, |forEach|, |keys| and |values| are originally set
+            # to corresponding properties in %ArrayPrototype%.
+            # For pair iterators and maplike declarations, |entries| is an alias for @@iterator
+            # itself. For setlike declarations, |values| is an alias for @@iterator.
+            if not is_value_iterator:
+                if not interface.setlike:
+                    iterator_method_alias = 'entries'
+                    entries_or_values_method = generated_iterator_method('values')
+                else:
+                    iterator_method_alias = 'values'
+                    entries_or_values_method = generated_iterator_method('entries')
+
+                non_overridable_methods.extend([
+                    generated_iterator_method('keys'),
+                    entries_or_values_method,
+
+                    # void forEach(Function callback, [Default=Undefined] optional any thisArg)
+                    generated_method(IdlType('void'), 'forEach',
+                                     arguments=[generated_argument(IdlType('Function'), 'callback'),
+                                                generated_argument(IdlType('any'), 'thisArg',
+                                                                   is_optional=True,
+                                                                   extended_attributes={'Default': 'Undefined'})],
+                                     extended_attributes=forEach_extended_attributes),
+                ])
 
             if interface.maplike:
                 key_argument = generated_argument(interface.maplike.key_type, 'key')
                 value_argument = generated_argument(interface.maplike.value_type, 'value')
 
-                implicit_methods.extend([
+                non_overridable_methods.extend([
                     generated_method(IdlType('boolean'), 'has',
                                      arguments=[key_argument],
                                      extended_attributes=used_extended_attributes),
@@ -423,7 +711,7 @@
                 ])
 
                 if not interface.maplike.is_read_only:
-                    implicit_methods.extend([
+                    overridable_methods.extend([
                         generated_method(IdlType('void'), 'clear',
                                          extended_attributes=used_extended_attributes),
                         generated_method(IdlType('boolean'), 'delete',
@@ -437,14 +725,14 @@
             if interface.setlike:
                 value_argument = generated_argument(interface.setlike.value_type, 'value')
 
-                implicit_methods.extend([
+                non_overridable_methods.extend([
                     generated_method(IdlType('boolean'), 'has',
                                      arguments=[value_argument],
                                      extended_attributes=used_extended_attributes),
                 ])
 
                 if not interface.setlike.is_read_only:
-                    implicit_methods.extend([
+                    overridable_methods.extend([
                         generated_method(IdlType(interface.name), 'add',
                                          arguments=[value_argument],
                                          extended_attributes=used_extended_attributes),
@@ -459,11 +747,19 @@
             for method in methods:
                 methods_by_name.setdefault(method['name'], []).append(method)
 
-            for implicit_method in implicit_methods:
-                if implicit_method['name'] in methods_by_name:
+            for non_overridable_method in non_overridable_methods:
+                if non_overridable_method['name'] in methods_by_name:
+                    raise ValueError(
+                        'An interface cannot define an operation called "%s()", it '
+                        'comes from the iterable, maplike or setlike declaration '
+                        'in the IDL.' % non_overridable_method['name'])
+                methods.append(non_overridable_method)
+
+            for overridable_method in overridable_methods:
+                if overridable_method['name'] in methods_by_name:
                     # FIXME: Check that the existing method is compatible.
                     continue
-                methods.append(implicit_method)
+                methods.append(overridable_method)
 
         # FIXME: maplike<> and setlike<> should also imply the presence of a
         # 'size' attribute.
@@ -502,45 +798,6 @@
             extended_attributes=stringifier_ext_attrs,
             implemented_as=implemented_as))
 
-    conditionally_enabled_methods = []
-    custom_registration_methods = []
-    method_configuration_methods = []
-
-    for method in methods:
-        # Skip all but one method in each set of overloaded methods.
-        if 'overload_index' in method and 'overloads' not in method:
-            continue
-
-        if 'overloads' in method:
-            overloads = method['overloads']
-            if not overloads['visible']:
-                continue
-            # original interface will register instead of partial interface.
-            if overloads['has_partial_overloads'] and interface.is_partial:
-                continue
-            conditionally_exposed_function = overloads['exposed_test_all']
-            runtime_enabled_function = overloads['runtime_enabled_function_all']
-            has_custom_registration = (overloads['has_custom_registration_all'] or
-                                       overloads['runtime_determined_lengths'])
-        else:
-            if not method['visible']:
-                continue
-            conditionally_exposed_function = method['exposed_test']
-            runtime_enabled_function = method['runtime_enabled_function']
-            has_custom_registration = method['has_custom_registration']
-
-        if has_custom_registration:
-            custom_registration_methods.append(method)
-            continue
-        if conditionally_exposed_function:
-            conditionally_enabled_methods.append(method)
-            continue
-        if runtime_enabled_function:
-            custom_registration_methods.append(method)
-            continue
-        if method['should_be_exposed_to_script']:
-            method_configuration_methods.append(method)
-
     for method in methods:
         # The value of the Function object’s “length” property is a Number
         # determined as follows:
@@ -556,71 +813,41 @@
         method['length'] = (method['overloads']['length'] if 'overloads' in method else
                             method['number_of_required_arguments'])
 
-    context.update({
-        'conditionally_enabled_methods': conditionally_enabled_methods,
-        'custom_registration_methods': custom_registration_methods,
-        '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),
+    return {
         'iterator_method': iterator_method,
-        'has_array_iterator': has_array_iterator,
-        'method_configuration_methods': method_configuration_methods,
+        'iterator_method_alias': iterator_method_alias,
         'methods': methods,
-    })
+    }
 
-    # Conditionally enabled members
-    has_conditional_attributes_on_instance = any(
-        attribute['exposed_test'] and attribute['on_instance']
-        for attribute in attributes)
-    has_conditional_attributes_on_prototype = any(
-        attribute['exposed_test'] and attribute['on_prototype']
-        for attribute in attributes)
-    context.update({
-        'has_conditional_attributes_on_instance':
-            has_conditional_attributes_on_instance,
-        'has_conditional_attributes_on_prototype':
-            has_conditional_attributes_on_prototype,
-    })
 
-    context.update({
-        'indexed_property_getter': property_getter(interface.indexed_property_getter, ['index']),
-        'indexed_property_setter': property_setter(interface.indexed_property_setter, interface),
-        'indexed_property_deleter': property_deleter(interface.indexed_property_deleter),
-        'is_override_builtins': 'OverrideBuiltins' in extended_attributes,
-        'named_property_getter': property_getter(interface.named_property_getter, ['propertyName']),
-        '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'],
-    })
+def reflected_name(constant_name):
+    """Returns the name to use for the matching constant name in blink code.
 
-    return context
+    Given an all-uppercase 'CONSTANT_NAME', returns a camel-case
+    'kConstantName'.
+    """
+    # Check for SHOUTY_CASE constants
+    if constant_name.upper() != constant_name:
+        return constant_name
+    return 'k' + ''.join(part.title() for part in constant_name.split('_'))
 
 
 # [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]
+        'origin_trial_enabled_function': v8_utilities.origin_trial_enabled_function_name(constant),  # [OriginTrialEnabled]
+        'origin_trial_feature_name': v8_utilities.origin_trial_feature_name(constant),  # [OriginTrialEnabled]
         # FIXME: use 'reflected_name' as correct 'name'
-        'reflected_name': extended_attributes.get('Reflect', constant.name),
-        'runtime_enabled_function': runtime_enabled_function_name(constant),  # [RuntimeEnabled]
+        'rcs_counter': 'Blink_' + v8_utilities.cpp_name(interface) + '_' + constant.name + '_ConstantGetter',
+        'reflected_name': extended_attributes.get('Reflect', reflected_name(constant.name)),
+        'runtime_enabled_feature_name': runtime_enabled_feature_name(constant),  # [RuntimeEnabled]
         'value': constant.value,
     }
 
@@ -656,18 +883,6 @@
         overloads[-1]['overloads']['name'] = name
 
 
-def method_overloads_by_name(methods):
-    """Returns generator of overloaded methods by name: [name, [method]]"""
-    # Filter to only methods that are actually overloaded
-    method_counts = Counter(method['name'] for method in methods)
-    overloaded_method_names = set(name
-                                  for name, count in method_counts.iteritems()
-                                  if count > 1)
-    overloaded_methods = [method for method in methods
-                          if method['name'] in overloaded_method_names]
-
-    # Group by name (generally will be defined together, but not necessarily)
-    return sort_and_groupby(overloaded_methods, itemgetter('name'))
 
 
 def overloads_context(interface, overloads):
@@ -680,6 +895,13 @@
     for index, method in enumerate(overloads, 1):
         method['overload_index'] = index
 
+    # [OriginTrialEnabled]
+    # TODO(iclelland): Allow origin trials on method overloads
+    # (crbug.com/621641)
+    if any(method.get('origin_trial_feature_name') for method in overloads):
+        raise Exception('[OriginTrialEnabled] cannot be specified on '
+                        'overloaded methods: %s.%s' % (interface.name, overloads[0]['name']))
+
     effective_overloads_by_length = effective_overload_set_by_length(overloads)
     lengths = [length for length, _ in effective_overloads_by_length]
     name = overloads[0].get('name', '<constructor>')
@@ -691,26 +913,26 @@
 
     # The special case handling below is not needed if all overloads are
     # runtime enabled by the same feature.
-    if not common_value(overloads, 'runtime_enabled_function'):
+    if not common_value(overloads, 'runtime_enabled_feature_name'):
         # Check if all overloads with the shortest acceptable arguments list are
         # runtime enabled, in which case we need to have a runtime determined
         # Function.length.
         shortest_overloads = effective_overloads_by_length[0][1]
-        if (all(method.get('runtime_enabled_function')
+        if (all(method.get('runtime_enabled_feature_name')
                 for method, _, _ in shortest_overloads)):
-            # Generate a list of (length, runtime_enabled_functions) tuples.
+            # Generate a list of (length, runtime_enabled_feature_names) tuples.
             runtime_determined_lengths = []
             for length, effective_overloads in effective_overloads_by_length:
-                runtime_enabled_functions = set(
-                    method['runtime_enabled_function']
+                runtime_enabled_feature_names = set(
+                    method['runtime_enabled_feature_name']
                     for method, _, _ in effective_overloads
-                    if method.get('runtime_enabled_function'))
-                if not runtime_enabled_functions:
+                    if method.get('runtime_enabled_feature_name'))
+                if not runtime_enabled_feature_names:
                     # This "length" is unconditionally enabled, so stop here.
                     runtime_determined_lengths.append((length, [None]))
                     break
                 runtime_determined_lengths.append(
-                    (length, sorted(runtime_enabled_functions)))
+                    (length, sorted(runtime_enabled_feature_names)))
             function_length = ('%sV8Internal::%sMethodLength()'
                                % (cpp_name_or_partial(interface), name))
 
@@ -718,38 +940,25 @@
         # runtime enabled, in which case we need to have a runtime determined
         # maximum distinguishing argument index.
         longest_overloads = effective_overloads_by_length[-1][1]
-        if (not common_value(overloads, 'runtime_enabled_function') and
-            all(method.get('runtime_enabled_function')
-                for method, _, _ in longest_overloads)):
-            # Generate a list of (length, runtime_enabled_functions) tuples.
+        if (not common_value(overloads, 'runtime_enabled_feature_name') and
+                all(method.get('runtime_enabled_feature_name')
+                    for method, _, _ in longest_overloads)):
+            # Generate a list of (length, runtime_enabled_feature_name) tuples.
             runtime_determined_maxargs = []
             for length, effective_overloads in reversed(effective_overloads_by_length):
-                runtime_enabled_functions = set(
-                    method['runtime_enabled_function']
+                runtime_enabled_feature_names = set(
+                    method['runtime_enabled_feature_name']
                     for method, _, _ in effective_overloads
-                    if method.get('runtime_enabled_function'))
-                if not runtime_enabled_functions:
+                    if method.get('runtime_enabled_feature_name'))
+                if not runtime_enabled_feature_names:
                     # This "length" is unconditionally enabled, so stop here.
                     runtime_determined_maxargs.append((length, [None]))
                     break
                 runtime_determined_maxargs.append(
-                    (length, sorted(runtime_enabled_functions)))
+                    (length, sorted(runtime_enabled_feature_names)))
             maxarg = ('%sV8Internal::%sMethodMaxArg()'
                       % (cpp_name_or_partial(interface), name))
 
-    # Check and fail if overloads disagree on any of the extended attributes
-    # that affect how the method should be registered.
-    # Skip the check for overloaded constructors, since they don't support any
-    # of the extended attributes in question.
-    if not overloads[0].get('is_constructor'):
-        overload_extended_attributes = [
-            method['custom_registration_extended_attributes']
-            for method in overloads]
-        for extended_attribute in v8_methods.CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES:
-            if common_key(overload_extended_attributes, extended_attribute) is None:
-                raise ValueError('Overloads of %s have conflicting extended attribute %s'
-                                 % (name, extended_attribute))
-
     # Check and fail if overloads disagree about whether the return type
     # is a Promise or not.
     promise_overload_count = sum(1 for method in overloads if method.get('returns_promise'))
@@ -774,7 +983,6 @@
     return {
         'deprecate_all_as': common_value(overloads, 'deprecate_as'),  # [DeprecateAs]
         'exposed_test_all': common_value(overloads, 'exposed_test'),  # [Exposed]
-        'has_custom_registration_all': common_value(overloads, 'has_custom_registration'),
         'length': function_length,
         'length_tests_methods': length_tests_methods(effective_overloads_by_length),
         # 1. Let maxarg be the length of the longest type list of the
@@ -784,115 +992,18 @@
         'returns_promise_all': promise_overload_count > 0,
         'runtime_determined_lengths': runtime_determined_lengths,
         'runtime_determined_maxargs': runtime_determined_maxargs,
-        'runtime_enabled_function_all': common_value(overloads, 'runtime_enabled_function'),  # [RuntimeEnabled]
-        'valid_arities': lengths
-            # Only need to report valid arities if there is a gap in the
-            # sequence of possible lengths, otherwise invalid length means
-            # "not enough arguments".
-            if lengths[-1] - lengths[0] != len(lengths) - 1 else None,
+        'runtime_enabled_all': common_value(overloads, 'runtime_enabled_feature_name'),  # [RuntimeEnabled]
+        'secure_context_test_all': common_value(overloads, 'secure_context_test'),  # [SecureContext]
+        'valid_arities': (lengths
+                          # Only need to report valid arities if there is a gap in the
+                          # sequence of possible lengths, otherwise invalid length means
+                          # "not enough arguments".
+                          if lengths[-1] - lengths[0] != len(lengths) - 1 else None),
         'visible': has_overload_visible,
         'has_partial_overloads': has_partial_overloads,
     }
 
 
-def effective_overload_set(F):
-    """Returns the effective overload set of an overloaded function.
-
-    An effective overload set is the set of overloaded functions + signatures
-    (type list of arguments, with optional and variadic arguments included or
-    not), and is used in the overload resolution algorithm.
-
-    For example, given input [f1(optional long x), f2(DOMString s)], the output
-    is informally [f1(), f1(long), f2(DOMString)], and formally
-    [(f1, [], []), (f1, [long], [optional]), (f2, [DOMString], [required])].
-
-    Currently the optionality list is a list of |is_optional| booleans (True
-    means optional, False means required); to support variadics this needs to
-    be tri-valued as required, optional, or variadic.
-
-    Formally:
-    An effective overload set represents the allowable invocations for a
-    particular operation, constructor (specified with [Constructor] or
-    [NamedConstructor]), legacy caller or callback function.
-
-    An additional argument N (argument count) is needed when overloading
-    variadics, but we don't use that currently.
-
-    Spec: http://heycam.github.io/webidl/#dfn-effective-overload-set
-
-    Formally the input and output lists are sets, but methods are stored
-    internally as dicts, which can't be stored in a set because they are not
-    hashable, so we use lists instead.
-
-    Arguments:
-        F: list of overloads for a given callable name.
-
-    Returns:
-        S: list of tuples of the form (callable, type list, optionality list).
-    """
-    # Code closely follows the algorithm in the spec, for clarity and
-    # correctness, and hence is not very Pythonic.
-
-    # 1. Initialize S to ∅.
-    # (We use a list because we can't use a set, as noted above.)
-    S = []
-
-    # 2. Let F be a set with elements as follows, according to the kind of
-    # effective overload set:
-    # (Passed as argument, nothing to do.)
-
-    # 3. & 4. (maxarg, m) are only needed for variadics, not used.
-
-    # 5. For each operation, extended attribute or callback function X in F:
-    for X in F:  # X is the "callable", F is the overloads.
-        arguments = X['arguments']
-        # 1. Let n be the number of arguments X is declared to take.
-        n = len(arguments)
-        # 2. Let t0..n−1 be a list of types, where ti is the type of X’s
-        # argument at index i.
-        # (“type list”)
-        t = tuple(argument['idl_type_object'] for argument in arguments)
-        # 3. Let o0..n−1 be a list of optionality values, where oi is “variadic”
-        # if X’s argument at index i is a final, variadic argument, “optional”
-        # if the argument is optional, and “required” otherwise.
-        # (“optionality list”)
-        # (We’re just using a boolean for optional/variadic vs. required.)
-        o = tuple(argument['is_optional'] or argument['is_variadic']
-                  for argument in arguments)
-        # 4. Add to S the tuple <X, t0..n−1, o0..n−1>.
-        S.append((X, t, o))
-        # 5. If X is declared to be variadic, then:
-        # (Not used, so not implemented.)
-        # 6. Initialize i to n−1.
-        i = n - 1
-        # 7. While i ≥ 0:
-        # Spec bug (fencepost error); should be “While i > 0:”
-        # https://www.w3.org/Bugs/Public/show_bug.cgi?id=25590
-        while i > 0:
-            # 1. If argument i of X is not optional, then break this loop.
-            if not o[i]:
-                break
-            # 2. Otherwise, add to S the tuple <X, t0..i−1, o0..i−1>.
-            S.append((X, t[:i], o[:i]))
-            # 3. Set i to i−1.
-            i = i - 1
-        # 8. If n > 0 and all arguments of X are optional, then add to S the
-        # tuple <X, (), ()> (where “()” represents the empty list).
-        if n > 0 and all(oi for oi in o):
-            S.append((X, [], []))
-    # 6. The effective overload set is S.
-    return S
-
-
-def effective_overload_set_by_length(overloads):
-    def type_list_length(entry):
-        # Entries in the effective overload set are 3-tuples:
-        # (callable, type list, optionality list)
-        return len(entry[1])
-
-    effective_overloads = effective_overload_set(overloads)
-    return list(sort_and_groupby(effective_overloads, type_list_length))
-
 
 def distinguishing_argument_index(entries):
     """Returns the distinguishing argument index for a sequence of entries.
@@ -966,7 +1077,7 @@
     distinguishing_argument_type_names = [type_list[index]
                                           for type_list in type_lists]
     if (len(set(distinguishing_argument_type_names)) !=
-        len(distinguishing_argument_type_names)):
+            len(distinguishing_argument_type_names)):
         raise ValueError('Types in distinguishing argument are not distinct:\n'
                          '%s' % distinguishing_argument_type_names)
 
@@ -1052,7 +1163,7 @@
     try:
         method = next(method for idl_type, method in idl_types_methods
                       if idl_type.is_nullable)
-        test = 'isUndefinedOrNull(%s)' % cpp_value
+        test = 'IsUndefinedOrNull(%s)' % cpp_value
         yield test, method
     except StopIteration:
         pass
@@ -1067,7 +1178,10 @@
     for idl_type, method in ((idl_type, method)
                              for idl_type, method in idl_types_methods
                              if idl_type.is_wrapper_type):
-        test = 'V8{idl_type}::hasInstance({cpp_value}, info.GetIsolate())'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
+        if idl_type.is_array_buffer_or_view:
+            test = '{cpp_value}->Is{idl_type}()'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
+        else:
+            test = 'V8{idl_type}::hasInstance({cpp_value}, info.GetIsolate())'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
         yield test, method
 
     # 13. Otherwise: if IsCallable(V) is true, and there is an entry in S that
@@ -1080,7 +1194,7 @@
     # same thing.
     try:
         method = next(method for idl_type, method in idl_types_methods
-                      if idl_type.is_callback_function)
+                      if idl_type.is_custom_callback_function)
         test = '%s->IsFunction()' % cpp_value
         yield test, method
     except StopIteration:
@@ -1113,9 +1227,10 @@
             # Array in overloaded method: http://crbug.com/262383
             yield '%s->IsArray()' % cpp_value, method
     for idl_type, method in idl_types_methods:
-        if idl_type.is_dictionary or idl_type.name == 'Dictionary':
-            # FIXME: should be '{1}->IsObject() && !{1}->IsDate() && !{1}->IsRegExp()'.format(cpp_value)
-            # FIXME: the IsDate and IsRegExp checks can be skipped if we've
+        if idl_type.is_dictionary or idl_type.name == 'Dictionary' or \
+           idl_type.is_callback_interface or idl_type.is_record_type:
+            # FIXME: should be '{1}->IsObject() && !{1}->IsRegExp()'.format(cpp_value)
+            # FIXME: the IsRegExp checks can be skipped if we've
             # already generated tests for them.
             yield '%s->IsObject()' % cpp_value, method
 
@@ -1170,14 +1285,6 @@
 # Utility functions
 ################################################################################
 
-def Counter(iterable):
-    # Once using Python 2.7, using collections.Counter
-    counter = defaultdict(lambda: 0)
-    for item in iterable:
-        counter[item] += 1
-    return counter
-
-
 def common(dicts, f):
     """Returns common result of f across an iterable of dicts, or None.
 
@@ -1208,12 +1315,6 @@
     return common(dicts, lambda d: d.get(key))
 
 
-def sort_and_groupby(l, key=None):
-    """Returns a generator of (key, list), sorting and grouping list by key."""
-    l.sort(key=key)
-    return ((k, list(g)) for k, g in itertools.groupby(l, key))
-
-
 ################################################################################
 # Constructors
 ################################################################################
@@ -1230,27 +1331,25 @@
 
     return {
         'arguments': argument_contexts,
-        'cpp_type': cpp_template_type(
-            cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)),
-            cpp_name(interface)),
+        'cpp_type': cpp_name(interface) + '*',
         'cpp_value': v8_methods.cpp_value(
             interface, constructor, len(constructor.arguments)),
         'has_exception_state':
             is_constructor_raises_exception or
             any(argument for argument in constructor.arguments
                 if argument.idl_type.name == 'SerializedScriptValue' or
-                   argument.idl_type.v8_conversion_needs_exception_state),
+                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,
-                'ConstructorCallWith', 'Document'),
+                                         'ConstructorCallWith', 'Document'),
         'is_call_with_execution_context':
             # [ConstructorCallWith=ExecutionContext]
             has_extended_attribute_value(interface,
-                'ConstructorCallWith', 'ExecutionContext'),
+                                         'ConstructorCallWith', 'ExecutionContext'),
         'is_call_with_script_state':
             # [ConstructorCallWith=ScriptState]
             has_extended_attribute_value(
@@ -1260,6 +1359,7 @@
         'is_raises_exception': is_constructor_raises_exception,
         'number_of_required_arguments':
             number_of_required_arguments(constructor),
+        'rcs_counter': 'Blink_' + v8_utilities.cpp_name(interface) + '_ConstructorCallback'
     }
 
 
@@ -1286,7 +1386,7 @@
                 if not argument.is_optional])
 
 
-def interface_length(interface, constructors):
+def interface_length(constructors):
     # Docs: http://heycam.github.io/webidl/#es-interface-call
     if not constructors:
         return 0
@@ -1299,19 +1399,23 @@
 # http://heycam.github.io/webidl/#idl-special-operations
 ################################################################################
 
+def legacy_caller(caller, interface):
+    if not caller:
+        return None
+
+    return v8_methods.method_context(interface, caller)
+
 def property_getter(getter, cpp_arguments):
     if not getter:
         return None
 
     def is_null_expression(idl_type):
-        if idl_type.use_output_parameter_for_result:
-            return 'result.isNull()'
-        if idl_type.is_string_type:
-            return 'result.isNull()'
+        if idl_type.use_output_parameter_for_result or idl_type.is_string_type:
+            return 'result.IsNull()'
         if idl_type.is_interface_type:
             return '!result'
         if idl_type.base_type in ('any', 'object'):
-            return 'result.isEmpty()'
+            return 'result.IsEmpty()'
         return ''
 
     extended_attributes = getter.extended_attributes
@@ -1336,8 +1440,8 @@
     return {
         'cpp_type': idl_type.cpp_type,
         'cpp_value': cpp_value,
-        'do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
         'is_call_with_script_state': is_call_with_script_state,
+        'is_cross_origin': 'CrossOrigin' in extended_attributes,
         'is_custom':
             'Custom' in extended_attributes and
             (not extended_attributes['Custom'] or
@@ -1346,12 +1450,14 @@
             getter, 'Custom', 'PropertyEnumerator'),
         'is_custom_property_query': has_extended_attribute_value(
             getter, 'Custom', 'PropertyQuery'),
+        # TODO(rakuco): [NotEnumerable] does not make sense here and is only
+        # used in non-standard IDL operations. We need to get rid of them.
         'is_enumerable': 'NotEnumerable' not in extended_attributes,
         'is_null_expression': is_null_expression(idl_type),
         'is_raises_exception': is_raises_exception,
         'name': cpp_name(getter),
         'use_output_parameter_for_result': use_output_parameter_for_result,
-        'v8_set_return_value': idl_type.v8_set_return_value('result', extended_attributes=extended_attributes, script_wrappable='impl', release=idl_type.release),
+        'v8_set_return_value': idl_type.v8_set_return_value('result', extended_attributes=extended_attributes, script_wrappable='impl'),
     }
 
 
@@ -1364,6 +1470,7 @@
     idl_type.add_includes_for_type(extended_attributes)
     is_call_with_script_state = v8_utilities.has_extended_attribute_value(setter, 'CallWith', 'ScriptState')
     is_raises_exception = 'RaisesException' in extended_attributes
+    is_ce_reactions = 'CEReactions' in extended_attributes
 
     # [LegacyInterfaceTypeChecking]
     has_type_checking_interface = (
@@ -1376,6 +1483,7 @@
         'has_type_checking_interface': has_type_checking_interface,
         'idl_type': idl_type.base_type,
         'is_call_with_script_state': is_call_with_script_state,
+        'is_ce_reactions': is_ce_reactions,
         'is_custom': 'Custom' in extended_attributes,
         'is_nullable': idl_type.is_nullable,
         'is_raises_exception': is_raises_exception,
@@ -1390,10 +1498,11 @@
         return None
 
     extended_attributes = deleter.extended_attributes
-    idl_type = deleter.idl_type
     is_call_with_script_state = v8_utilities.has_extended_attribute_value(deleter, 'CallWith', 'ScriptState')
+    is_ce_reactions = 'CEReactions' in extended_attributes
     return {
         'is_call_with_script_state': is_call_with_script_state,
+        'is_ce_reactions': is_ce_reactions,
         'is_custom': 'Custom' in extended_attributes,
         'is_raises_exception': 'RaisesException' in extended_attributes,
         'name': cpp_name(deleter),
diff --git a/bindings/scripts/v8_methods.py b/bindings/scripts/v8_methods.py
index a3d4232..b199947 100644
--- a/bindings/scripts/v8_methods.py
+++ b/bindings/scripts/v8_methods.py
@@ -43,24 +43,83 @@
                           is_legacy_interface_type_checking)
 
 
-# Methods with any of these require custom method registration code in the
-# interface's configure*Template() function.
-CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES = frozenset([
-    'DoNotCheckSecurity',
-    'DoNotCheckSignature',
-])
+def method_is_visible(method, interface_is_partial):
+    if 'overloads' in method:
+        return method['overloads']['visible'] and not (method['overloads']['has_partial_overloads'] and interface_is_partial)
+    return method['visible'] and 'overload_index' not in method
+
+
+def is_origin_trial_enabled(method):
+    return bool(method['origin_trial_feature_name'])
+
+
+def is_secure_context(method):
+    return bool(method['overloads']['secure_context_test_all'] if 'overloads' in method else method['secure_context_test'])
+
+
+def is_conditionally_enabled(method):
+    exposed = method['overloads']['exposed_test_all'] if 'overloads' in method else method['exposed_test']
+    return exposed or is_secure_context(method)
+
+
+def filter_conditionally_enabled(methods, interface_is_partial):
+    return [method for method in methods if (
+        method_is_visible(method, interface_is_partial) and
+        is_conditionally_enabled(method) and
+        not is_origin_trial_enabled(method))]
+
+
+def custom_registration(method):
+    # TODO(dcheng): Currently, bindings must create a function object for each
+    # realm as a hack to support the incumbent realm. Remove the need for custom
+    # registration when Blink properly supports the incumbent realm.
+    if method['is_cross_origin']:
+        return True
+    if 'overloads' in method:
+        return (method['overloads']['runtime_determined_lengths'] or
+                (method['overloads']['runtime_enabled_all'] and not is_conditionally_enabled(method)))
+    return method['runtime_enabled_feature_name'] and not is_conditionally_enabled(method)
+
+
+def filter_custom_registration(methods, interface_is_partial):
+    return [method for method in methods if (
+        method_is_visible(method, interface_is_partial) and custom_registration(method))]
+
+
+def filter_method_configuration(methods, interface_is_partial):
+    return [method for method in methods if
+            method_is_visible(method, interface_is_partial) and
+            not is_origin_trial_enabled(method) and
+            not is_conditionally_enabled(method) and
+            not custom_registration(method)]
+
+
+def method_filters():
+    return {'custom_registration': filter_custom_registration,
+            'has_method_configuration': filter_method_configuration}
 
 
 def use_local_result(method):
     extended_attributes = method.extended_attributes
     idl_type = method.idl_type
     return (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or
-            'ImplementedInPrivateScript' in extended_attributes or
+            'NewObject' in extended_attributes or
             'RaisesException' in extended_attributes or
             idl_type.is_union_type or
             idl_type.is_explicit_nullable)
 
 
+def runtime_call_stats_context(interface, method):
+    includes.add('platform/bindings/RuntimeCallStats.h')
+    generic_counter_name = 'Blink_' + v8_utilities.cpp_name(interface) + '_' + method.name
+    (method_counter, extended_attribute_defined) = v8_utilities.rcs_counter_name(method, generic_counter_name)
+    return {
+        'extended_attribute_defined': extended_attribute_defined,
+        'method_counter': method_counter,
+        'origin_safe_method_getter_counter': generic_counter_name + '_OriginSafeMethodGetter'
+    }
+
+
 def method_context(interface, method, is_visible=True):
     arguments = method.arguments
     extended_attributes = method.extended_attributes
@@ -73,15 +132,6 @@
 
     this_cpp_value = cpp_value(interface, method, len(arguments))
 
-    is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_attributes
-    if is_implemented_in_private_script:
-        includes.add('bindings/core/v8/PrivateScriptRunner.h')
-        includes.add('core/frame/LocalFrame.h')
-        includes.add('platform/ScriptForbiddenScope.h')
-
-    # [OnlyExposedToPrivateScript]
-    is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended_attributes
-
     is_call_with_script_arguments = has_extended_attribute_value(method, 'CallWith', 'ScriptArguments')
     if is_call_with_script_arguments:
         includes.update(['bindings/core/v8/ScriptCallStack.h',
@@ -89,42 +139,38 @@
     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')
+        includes.add('platform/bindings/ScriptState.h')
 
     # [CheckSecurity]
-    is_do_not_check_security = 'DoNotCheckSecurity' in extended_attributes
+    is_cross_origin = 'CrossOrigin' in extended_attributes
     is_check_security_for_receiver = (
         has_extended_attribute_value(interface, 'CheckSecurity', 'Receiver') and
-        not is_do_not_check_security)
+        not is_cross_origin)
     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_ce_reactions = 'CEReactions' in extended_attributes
+    if is_ce_reactions:
+        includes.add('core/html/custom/CEReactionsScope.h')
     is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
     if is_custom_element_callbacks:
-        includes.add('core/dom/custom/CustomElementProcessingStack.h')
+        includes.add('core/html/custom/V0CustomElementProcessingStack.h')
 
     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')
     is_post_message = 'PostMessage' in extended_attributes
     if is_post_message:
-        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')
+        includes.add('bindings/core/v8/serialization/SerializedScriptValueFactory.h')
+        includes.add('bindings/core/v8/serialization/Transferables.h')
+        includes.add('core/typed_arrays/DOMArrayBufferBase.h')
+        includes.add('core/imagebitmap/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)]
@@ -132,22 +178,13 @@
     return {
         'activity_logging_world_list': v8_utilities.activity_logging_world_list(method),  # [ActivityLogging]
         'arguments': argument_contexts,
-        'argument_declarations_for_private_script':
-            argument_declarations_for_private_script(interface, 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,
         'cpp_type_initializer': idl_type.cpp_type_initializer,
-        'custom_registration_extended_attributes':
-            CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES.intersection(
-                extended_attributes.iterkeys()),
         'deprecate_as': v8_utilities.deprecate_as(method),  # [DeprecateAs]
+        'do_not_test_new_object': 'DoNotTestNewObject' in extended_attributes,
         'exposed_test': v8_utilities.exposed(method, interface),  # [Exposed]
-        # TODO(yukishiino): Retire has_custom_registration flag.  Should be
-        # replaced with V8DOMConfiguration::PropertyLocationConfiguration.
-        'has_custom_registration':
-            v8_utilities.has_extended_attribute(
-                method, CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES),
         'has_exception_state':
             is_raises_exception or
             is_check_security_for_receiver or
@@ -158,22 +195,21 @@
             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_ce_reactions': is_ce_reactions,
         'is_check_security_for_receiver': is_check_security_for_receiver,
         'is_check_security_for_return_value': is_check_security_for_return_value,
+        'is_cross_origin': 'CrossOrigin' in extended_attributes,
         '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,
         'is_custom_call_epilogue': is_custom_call_epilogue,
         'is_custom_element_callbacks': is_custom_element_callbacks,
-        'is_do_not_check_security': is_do_not_check_security,
-        'is_do_not_check_signature': 'DoNotCheckSignature' in extended_attributes,
         'is_explicit_nullable': idl_type.is_explicit_nullable,
-        'is_implemented_in_private_script': is_implemented_in_private_script,
+        'is_new_object': 'NewObject' in extended_attributes,
         'is_partial_interface_member':
             'PartialInterfaceImplementedAs' in extended_attributes,
         'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
@@ -194,15 +230,13 @@
         'on_instance': v8_utilities.on_instance(interface, method),
         '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'),
+        'origin_trial_enabled_function': v8_utilities.origin_trial_enabled_function_name(method),  # [OriginTrialEnabled]
+        'origin_trial_feature_name': v8_utilities.origin_trial_feature_name(method),  # [OriginTrialEnabled]
         '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),
+        'runtime_call_stats': runtime_call_stats_context(interface, method),
+        'runtime_enabled_feature_name': v8_utilities.runtime_enabled_feature_name(method),  # [RuntimeEnabled]
+        'secure_context_test': v8_utilities.secure_context(method, interface),  # [SecureContext]
         '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),
@@ -225,11 +259,6 @@
         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):
-        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,
@@ -263,13 +292,10 @@
         'is_variadic_wrapper_type': is_variadic_wrapper_type,
         'is_wrapper_type': idl_type.is_wrapper_type,
         'name': argument.name,
-        'private_script_cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
-            argument.name, isolate='scriptState->isolate()',
-            creation_context='scriptState->context()->Global()'),
         'use_permissive_dictionary_conversion': 'PermissiveDictionaryConversion' in extended_attributes,
         'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value),
         'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
-        'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(method, argument, index),
+        'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(interface.name, method, argument, index),
     }
     context.update({
         'is_optional_without_default_value':
@@ -281,37 +307,14 @@
     return context
 
 
-def argument_declarations_for_private_script(interface, method):
-    argument_declarations = ['LocalFrame* frame']
-    argument_declarations.append('%s* holderImpl' % interface.name)
-    argument_declarations.extend(['%s %s' % (argument.idl_type.cpp_type_args(
-        used_as_rvalue_type=True), argument.name) for argument in method.arguments])
-    if method.idl_type.name != 'void':
-        argument_declarations.append('%s* %s' % (method.idl_type.cpp_type, 'result'))
-    return argument_declarations
-
-
 ################################################################################
 # Value handling
 ################################################################################
 
 def cpp_value(interface, method, number_of_arguments):
-    def cpp_argument(argument):
-        idl_type = argument.idl_type
-        if idl_type.name == 'EventListener':
-            return argument.name
-        if (idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
-                              'XPathNSResolver', 'XPathNSResolverOrNull']):
-            # FIXME: remove this special case
-            return '%s.release()' % argument.name
-        return argument.name
-
     # Truncate omitted optional arguments
     arguments = method.arguments[:number_of_arguments]
     cpp_arguments = []
-    if 'ImplementedInPrivateScript' in method.extended_attributes:
-        cpp_arguments.append('toLocalFrame(toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext()))')
-        cpp_arguments.append('impl')
 
     if method.is_constructor:
         call_with_values = interface.extended_attributes.get('ConstructorCallWith')
@@ -323,15 +326,11 @@
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in method.extended_attributes and
-            '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)
+    cpp_arguments.extend(argument.name for argument in arguments)
 
-    if 'ImplementedInPrivateScript' in method.extended_attributes:
-        if method.idl_type.name != 'void':
-            cpp_arguments.append('&result')
-    elif ('RaisesException' in method.extended_attributes or
+    if ('RaisesException' in method.extended_attributes or
           (method.is_constructor and
            has_extended_attribute_value(interface, 'RaisesException', 'Constructor'))):
         cpp_arguments.append('exceptionState')
@@ -343,11 +342,9 @@
         cpp_arguments.append('result')
 
     if method.name == 'Constructor':
-        base_name = 'create'
+        base_name = 'Create'
     elif method.name == 'NamedConstructor':
-        base_name = 'createForJSConstructor'
-    elif 'ImplementedInPrivateScript' in method.extended_attributes:
-        base_name = '%sMethod' % method.name
+        base_name = 'CreateForJSConstructor'
     else:
         base_name = v8_utilities.cpp_name(method)
 
@@ -362,23 +359,16 @@
         # Constructors and void methods don't have a return type
         return None
 
-    if ('ImplementedInPrivateScript' in extended_attributes and
-            not idl_type.is_wrapper_type and
-            not idl_type.is_basic_type):
-        raise Exception('Private scripts supports only primitive types and DOM wrappers.')
-
-    release = False
     # [CallWith=ScriptState], [RaisesException]
     if use_local_result(method):
         if idl_type.is_explicit_nullable:
             # result is of type Nullable<T>
-            cpp_value = 'result.get()'
+            cpp_value = 'result.Get()'
         else:
             cpp_value = 'result'
-        release = idl_type.release
 
     script_wrappable = 'impl' if inherits_interface(interface_name, 'Node') else ''
-    return idl_type.v8_set_return_value(cpp_value, extended_attributes, script_wrappable=script_wrappable, release=release, for_main_world=for_main_world, is_static=method.is_static)
+    return idl_type.v8_set_return_value(cpp_value, extended_attributes, script_wrappable=script_wrappable, for_main_world=for_main_world, is_static=method.is_static)
 
 
 def v8_value_to_local_cpp_variadic_value(method, argument, index, return_promise):
@@ -386,35 +376,66 @@
     idl_type = argument.idl_type
     this_cpp_type = idl_type.cpp_type
 
-    if method.returns_promise:
-        check_expression = 'exceptionState.hadException()'
-    else:
-        check_expression = 'exceptionState.throwIfNeeded()'
-
     if idl_type.is_dictionary or idl_type.is_union_type:
         vector_type = 'HeapVector'
     else:
         vector_type = 'Vector'
 
     return {
-        'assign_expression': 'toImplArguments<%s<%s>>(info, %s, exceptionState)' % (vector_type, this_cpp_type, index),
-        'check_expression': check_expression,
+        'assign_expression': 'ToImplArguments<%s<%s>>(info, %s, exceptionState)' % (vector_type, this_cpp_type, index),
+        'check_expression': 'exceptionState.HadException()',
         'cpp_type': this_cpp_type,
         'cpp_name': argument.name,
         'declare_variable': False,
     }
 
 
-def v8_value_to_local_cpp_value(method, argument, index, return_promise=False, restricted_float=False):
+def v8_value_to_local_cpp_ssv_value(extended_attributes, idl_type, v8_value, variable_name, for_storage):
+    this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, raw_type=True)
+
+    storage_policy = 'kForStorage' if for_storage else 'kNotForStorage'
+    arguments = ', '.join([
+        'info.GetIsolate()',
+        v8_value,
+        '{ssv}::SerializeOptions({ssv}::{storage_policy})',
+        'exceptionState'
+    ])
+    cpp_expression_format = 'NativeValueTraits<{ssv}>::NativeValue(%s)' % arguments
+    this_cpp_value = cpp_expression_format.format(
+        ssv='SerializedScriptValue',
+        storage_policy=storage_policy
+    )
+
+    return {
+        'assign_expression': this_cpp_value,
+        'check_expression': 'exceptionState.HadException()',
+        'cpp_type': this_cpp_type,
+        'cpp_name': variable_name,
+        'declare_variable': False,
+    }
+
+
+def v8_value_to_local_cpp_value(interface_name, method, argument, index, return_promise=False):
     extended_attributes = argument.extended_attributes
     idl_type = argument.idl_type
     name = argument.name
+    v8_value = 'info[%s]' % index
+
+    # History.pushState and History.replaceState are explicitly specified as
+    # serializing the value for storage. The default is to not serialize for
+    # storage. See https://html.spec.whatwg.org/multipage/browsers.html#dom-history-pushstate
+    if idl_type.name == 'SerializedScriptValue':
+        for_storage = (interface_name == 'History' and
+                       method.name in ('pushState', 'replaceState'))
+        return v8_value_to_local_cpp_ssv_value(extended_attributes, idl_type,
+                                               v8_value, name,
+                                               for_storage=for_storage)
+
     if argument.is_variadic:
         return v8_value_to_local_cpp_variadic_value(method, argument, index, return_promise)
-    return idl_type.v8_value_to_local_cpp_value(extended_attributes, 'info[%s]' % index,
-                                                name, index=index, declare_variable=False,
-                                                use_exception_state=method.returns_promise,
-                                                restricted_float=restricted_float)
+    return idl_type.v8_value_to_local_cpp_value(extended_attributes, v8_value,
+                                                name, declare_variable=False,
+                                                use_exception_state=method.returns_promise)
 
 
 ################################################################################
@@ -470,7 +491,7 @@
         member_type_name = (member_type.inner_type.name
                             if member_type.is_nullable else
                             member_type.name)
-        return '%s.set%s(%s)' % (argument.name, member_type_name,
+        return '%s.Set%s(%s)' % (argument.name, member_type_name,
                                  member_type.literal_cpp_value(default_value))
     return '%s = %s' % (argument.name,
                         idl_type.literal_cpp_value(default_value))
diff --git a/bindings/scripts/v8_types.py b/bindings/scripts/v8_types.py
index 04739d2..b59f393 100644
--- a/bindings/scripts/v8_types.py
+++ b/bindings/scripts/v8_types.py
@@ -26,6 +26,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+# pylint: disable=relative-import
+
 """Functions for type handling and type conversion (Blink/C++ <-> V8/JS).
 
 Extends IdlType and IdlUnionType with V8-specific properties, methods, and
@@ -39,9 +41,16 @@
 
 import posixpath
 
-from idl_types import IdlTypeBase, IdlType, IdlUnionType, IdlArrayOrSequenceType, IdlNullableType
+from idl_types import IdlArrayOrSequenceType
+from idl_types import IdlNullableType
+from idl_types import IdlRecordType
+from idl_types import IdlType
+from idl_types import IdlTypeBase
+from idl_types import IdlUnionType
+from utilities import to_snake_case
 import v8_attributes  # for IdlType.constructor_type_name
 from v8_globals import includes
+from v8_utilities import extended_attribute_value_contains
 
 
 ################################################################################
@@ -66,6 +75,9 @@
     'Uint16Array',
     'Uint32Array',
 ])
+ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES = TYPED_ARRAY_TYPES.union(frozenset([
+    'ArrayBufferView'
+]))
 ARRAY_BUFFER_AND_VIEW_TYPES = TYPED_ARRAY_TYPES.union(frozenset([
     'ArrayBuffer',
     'ArrayBufferView',
@@ -77,6 +89,9 @@
 IdlType.is_array_buffer_or_view = property(
     lambda self: self.base_type in ARRAY_BUFFER_AND_VIEW_TYPES)
 
+IdlType.is_array_buffer_view_or_typed_array = property(
+    lambda self: self.base_type in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES)
+
 IdlType.is_typed_array = property(
     lambda self: self.base_type in TYPED_ARRAY_TYPES)
 
@@ -93,29 +108,27 @@
 CPP_TYPE_SAME_AS_IDL_TYPE = set([
     'double',
     'float',
-    'long long',
-    'unsigned long long',
 ])
-CPP_INT_TYPES = set([
-    'byte',
-    'long',
-    'short',
-])
-CPP_UNSIGNED_TYPES = set([
-    'octet',
-    'unsigned int',
-    'unsigned long',
-    'unsigned short',
-])
+CPP_INTEGER_CONVERSION_RULES = {
+    'byte': 'int8_t',
+    'octet': 'uint8_t',
+    'short': 'int16_t',
+    'unsigned short': 'uint16_t',
+    'long': 'int32_t',
+    'unsigned long': 'uint32_t',
+    'long long': 'int64_t',
+    'unsigned long long': 'uint64_t',
+}
 CPP_SPECIAL_CONVERSION_RULES = {
     'Date': 'double',
     'Dictionary': 'Dictionary',
     'EventHandler': 'EventListener*',
-    'NodeFilter': 'RefPtrWillBeRawPtr<NodeFilter>',
+    'EventListener': 'EventListener*',
+    'NodeFilter': 'V8NodeFilterCondition*',
     'Promise': 'ScriptPromise',
     'ScriptValue': 'ScriptValue',
     # FIXME: Eliminate custom bindings for XPathNSResolver  http://crbug.com/345529
-    'XPathNSResolver': 'RawPtr<XPathNSResolver>',
+    'XPathNSResolver': 'XPathNSResolver*',
     'boolean': 'bool',
     'unrestricted double': 'double',
     'unrestricted float': 'float',
@@ -139,15 +152,25 @@
             bool, True if the C++ type is used as a variadic argument of a method.
         used_in_cpp_sequence:
             bool, True if the C++ type is used as an element of a container.
-            Containers can be an array, a sequence or a dictionary.
+            Containers can be an array, a sequence, a dictionary or a record.
     """
+
     def string_mode():
+        if idl_type.is_nullable:
+            return 'kTreatNullAndUndefinedAsNullString'
+        # TODO(lisabelle): Remove these 4 lines when we have fully supported
+        # annoteted types. (crbug.com/714866)
+        # It is because at that time 'TreatNullAs' will only appear in
+        # type_extended_attributes, not in extended_attributes.
         if extended_attributes.get('TreatNullAs') == 'EmptyString':
-            return 'TreatNullAsEmptyString'
-        if idl_type.is_nullable or extended_attributes.get('TreatNullAs') == 'NullString':
-            if extended_attributes.get('TreatUndefinedAs') == 'NullString':
-                return 'TreatNullAndUndefinedAsNullString'
-            return 'TreatNullAsNullString'
+            return 'kTreatNullAsEmptyString'
+        if extended_attributes.get('TreatNullAs') == 'NullString':
+            return 'kTreatNullAsNullString'
+        type_extended_attributes = idl_type.extended_attributes or {}
+        if type_extended_attributes.get('TreatNullAs') == 'EmptyString':
+            return 'kTreatNullAsEmptyString'
+        if type_extended_attributes.get('TreatNullAs') == 'NullString':
+            return 'kTreatNullAsNullString'
         return ''
 
     extended_attributes = extended_attributes or {}
@@ -159,43 +182,59 @@
     else:
         native_array_element_type = idl_type.native_array_element_type
     if native_array_element_type:
-        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.gc_type)
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.is_gc_type)
         vector_template_type = cpp_template_type(vector_type, native_array_element_type.cpp_type_args(used_in_cpp_sequence=True))
         if used_as_rvalue_type:
             return 'const %s&' % vector_template_type
         return vector_template_type
 
+    # Record types.
+    if idl_type.is_record_type:
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', idl_type.value_type.is_gc_type)
+        value_type = idl_type.value_type.cpp_type_args(used_in_cpp_sequence=True)
+        vector_template_type = cpp_template_type(vector_type,
+                                                 'std::pair<String, %s>' % value_type)
+        if used_as_rvalue_type:
+            return 'const %s&' % vector_template_type
+        return vector_template_type
+
     # Simple types
     base_idl_type = idl_type.base_type
 
     if base_idl_type in CPP_TYPE_SAME_AS_IDL_TYPE:
         return base_idl_type
-    if base_idl_type in CPP_INT_TYPES:
-        return 'int'
-    if base_idl_type in CPP_UNSIGNED_TYPES:
-        return 'unsigned'
+    if base_idl_type in CPP_INTEGER_CONVERSION_RULES:
+        return CPP_INTEGER_CONVERSION_RULES[base_idl_type]
     if base_idl_type in CPP_SPECIAL_CONVERSION_RULES:
         return CPP_SPECIAL_CONVERSION_RULES[base_idl_type]
 
-    if base_idl_type in NON_WRAPPER_TYPES:
-        return ('PassRefPtr<%s>' if used_as_rvalue_type else 'RefPtr<%s>') % base_idl_type
+    if base_idl_type == 'SerializedScriptValue':
+        return 'RefPtr<%s>' % base_idl_type
     if idl_type.is_string_type:
         if not raw_type:
-            return 'String'
+            return 'const String&' if used_as_rvalue_type else 'String'
         return 'V8StringResource<%s>' % string_mode()
 
-    if idl_type.base_type == 'ArrayBufferView' and 'FlexibleArrayBufferView' in extended_attributes:
+    if base_idl_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 base_idl_type in TYPED_ARRAY_TYPES and 'FlexibleArrayBufferView' in extended_attributes:
+        return 'Flexible' + base_idl_type + 'View'
+    if base_idl_type in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES:
+        if not used_in_cpp_sequence:
+            if 'AllowShared' in extended_attributes:
+                return cpp_template_type('MaybeShared', idl_type.implemented_as)
+            else:
+                return cpp_template_type('NotShared', idl_type.implemented_as)
     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):
+        if raw_type or (used_as_rvalue_type and idl_type.is_garbage_collected) or not used_in_cpp_sequence:
             return implemented_as_class + '*'
-        new_type = 'Member' if used_in_cpp_sequence else 'RawPtr'
-        ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPtr'), new_type, idl_type.gc_type)
-        return cpp_template_type(ptr_type, implemented_as_class)
+        if not used_in_cpp_sequence:
+            return implemented_as_class + '*'
+        return cpp_template_type('Member', implemented_as_class)
     if idl_type.is_dictionary:
+        if used_as_rvalue_type:
+            return 'const %s&' % base_idl_type
         return base_idl_type
     if idl_type.is_union_type:
         # Avoid "AOrNullOrB" for cpp type of (A? or B) because we generate
@@ -204,10 +243,16 @@
             if idl_type.is_nullable:
                 return idl_type.inner_type.name
             return idl_type.name
-        idl_type_name = "Or".join(member_cpp_name(member)
+        idl_type_name = 'Or'.join(member_cpp_name(member)
                                   for member in idl_type.member_types)
         return 'const %s&' % idl_type_name if used_as_rvalue_type else idl_type_name
+    if idl_type.is_callback_function:
+        if idl_type.is_custom_callback_function:
+            return 'V8%s' % base_idl_type
+        return 'V8%s*' % base_idl_type
 
+    if base_idl_type == 'void':
+        return base_idl_type
     # Default, assume native type is a pointer with same type name as idl type
     return base_idl_type + '*'
 
@@ -253,13 +298,9 @@
     return format_string.format(template=template, inner_type=inner_type)
 
 
-def cpp_ptr_type(old_type, new_type, gc_type):
-    if gc_type == 'GarbageCollectedObject':
+def cpp_ptr_type(old_type, new_type, is_gc_type):
+    if is_gc_type:
         return new_type
-    if gc_type == 'WillBeGarbageCollectedObject':
-        if old_type == 'Vector':
-            return 'WillBe' + new_type
-        return old_type + 'WillBe' + new_type
     return old_type
 
 
@@ -303,71 +344,55 @@
         cls.garbage_collected_types.update(new_garbage_collected_types))
 
 
-# [WillBeGarbageCollected]
-IdlType.will_be_garbage_collected_types = set()
-
-IdlType.is_will_be_garbage_collected = property(
-    lambda self: self.base_type in IdlType.will_be_garbage_collected_types)
-
-IdlType.set_will_be_garbage_collected_types = classmethod(
-    lambda cls, new_will_be_garbage_collected_types:
-        cls.will_be_garbage_collected_types.update(new_will_be_garbage_collected_types))
+def is_gc_type(idl_type):
+    return idl_type.is_garbage_collected or idl_type.is_dictionary or idl_type.is_union_type
 
 
-def gc_type(idl_type):
-    if idl_type.is_garbage_collected or idl_type.is_dictionary or idl_type.is_union_type:
-        return 'GarbageCollectedObject'
-    if idl_type.is_will_be_garbage_collected:
-        return 'WillBeGarbageCollectedObject'
-    return 'RefCountedObject'
-
-IdlTypeBase.gc_type = property(gc_type)
+IdlTypeBase.is_gc_type = property(is_gc_type)
 
 
 def is_traceable(idl_type):
-    return (idl_type.is_garbage_collected
-            or idl_type.is_will_be_garbage_collected
-            or idl_type.is_dictionary)
+    return (idl_type.is_garbage_collected or idl_type.is_dictionary)
 
 IdlTypeBase.is_traceable = property(is_traceable)
 IdlUnionType.is_traceable = property(lambda self: True)
 IdlArrayOrSequenceType.is_traceable = property(
     lambda self: self.element_type.is_traceable)
+IdlRecordType.is_traceable = property(
+    lambda self: self.value_type.is_traceable)
 
 
 ################################################################################
 # Includes
 ################################################################################
 
-def includes_for_cpp_class(class_name, relative_dir_posix):
-    return set([posixpath.join('bindings', relative_dir_posix, class_name + '.h')])
-
-
 INCLUDES_FOR_TYPE = {
     'object': set(),
     'ArrayBufferView': set(['bindings/core/v8/V8ArrayBufferView.h',
-                            'core/dom/FlexibleArrayBufferView.h']),
+                            'core/typed_arrays/ArrayBufferViewHelpers.h',
+                            'core/typed_arrays/FlexibleArrayBufferView.h']),
     'Dictionary': set(['bindings/core/v8/Dictionary.h']),
     'EventHandler': set(['bindings/core/v8/V8AbstractEventListener.h',
-                         'bindings/core/v8/V8EventListenerList.h']),
+                         'bindings/core/v8/V8EventListenerHelper.h']),
     'EventListener': set(['bindings/core/v8/BindingSecurity.h',
-                          'bindings/core/v8/V8EventListenerList.h',
+                          'bindings/core/v8/V8EventListenerHelper.h',
                           'core/frame/LocalDOMWindow.h']),
     'HTMLCollection': set(['bindings/core/v8/V8HTMLCollection.h',
                            'core/dom/ClassCollection.h',
                            'core/dom/TagCollection.h',
                            'core/html/HTMLCollection.h',
-                           'core/html/HTMLDataListOptionsCollection.h',
-                           'core/html/HTMLFormControlsCollection.h',
-                           'core/html/HTMLTableRowsCollection.h']),
+                           'core/html/HTMLTableRowsCollection.h',
+                           'core/html/forms/HTMLDataListOptionsCollection.h',
+                           'core/html/forms/HTMLFormControlsCollection.h']),
+    'NodeFilter': set(['bindings/core/v8/V8NodeFilterCondition.h']),
     'NodeList': set(['bindings/core/v8/V8NodeList.h',
                      'core/dom/NameNodeList.h',
                      'core/dom/NodeList.h',
                      'core/dom/StaticNodeList.h',
-                     'core/html/LabelsNodeList.h']),
+                     'core/html/forms/LabelsNodeList.h']),
     'Promise': set(['bindings/core/v8/ScriptPromise.h']),
-    'SerializedScriptValue': set(['bindings/core/v8/SerializedScriptValue.h',
-                                  'bindings/core/v8/SerializedScriptValueFactory.h']),
+    'SerializedScriptValue': set(['bindings/core/v8/serialization/SerializedScriptValue.h',
+                                  'bindings/core/v8/serialization/SerializedScriptValueFactory.h']),
     'ScriptValue': set(['bindings/core/v8/ScriptValue.h']),
 }
 
@@ -380,12 +405,13 @@
     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:
+    if base_idl_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()
+        return set(['bindings/core/v8/IDLTypes.h',
+                    'bindings/core/v8/NativeValueTraitsImpl.h'])
     if base_idl_type.endswith('ConstructorConstructor'):
         # FIXME: rename to NamedConstructor
         # FIXME: replace with a [NamedConstructorAttribute] extended attribute
@@ -396,6 +422,11 @@
     if base_idl_type.endswith('Constructor'):
         # FIXME: replace with a [ConstructorAttribute] extended attribute
         base_idl_type = idl_type.constructor_type_name
+    if idl_type.is_custom_callback_function:
+        return set()
+    if idl_type.is_callback_function:
+        component = IdlType.callback_functions[base_idl_type]['component_dir']
+        return set(['bindings/%s/v8/%s.h' % (component, to_snake_case('V8%s' % base_idl_type))])
     if base_idl_type not in component_dir:
         return set()
     return set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type],
@@ -412,11 +443,20 @@
 
 
 def includes_for_array_or_sequence_type(idl_type, extended_attributes=None):
-    return idl_type.element_type.includes_for_type(extended_attributes)
+    return set.union(set(['bindings/core/v8/IDLTypes.h',
+                          'bindings/core/v8/NativeValueTraitsImpl.h']),
+                     idl_type.element_type.includes_for_type(extended_attributes))
 
 IdlArrayOrSequenceType.includes_for_type = includes_for_array_or_sequence_type
 
 
+def includes_for_record_type(idl_type, extended_attributes=None):
+    return set.union(idl_type.key_type.includes_for_type(extended_attributes),
+                     idl_type.value_type.includes_for_type(extended_attributes))
+
+IdlRecordType.includes_for_type = includes_for_record_type
+
+
 def add_includes_for_type(idl_type, extended_attributes=None):
     includes.update(idl_type.includes_for_type(extended_attributes))
 
@@ -431,36 +471,26 @@
     includes.update(includes_for_interface(interface_name))
 
 
-def impl_should_use_nullable_container(idl_type):
-    return not(idl_type.cpp_type_has_null_value)
-
-IdlTypeBase.impl_should_use_nullable_container = property(
-    impl_should_use_nullable_container)
-
-
 def impl_includes_for_type(idl_type, interfaces_info):
     includes_for_type = set()
-    if idl_type.impl_should_use_nullable_container:
-        includes_for_type.add('bindings/core/v8/Nullable.h')
 
     idl_type = idl_type.preprocessed_type
     native_array_element_type = idl_type.native_array_element_type
     if native_array_element_type:
         includes_for_type.update(impl_includes_for_type(
                 native_array_element_type, interfaces_info))
-        includes_for_type.add('wtf/Vector.h')
+        includes_for_type.add('platform/wtf/Vector.h')
 
     base_idl_type = idl_type.base_type
     if idl_type.is_string_type:
-        includes_for_type.add('wtf/text/WTFString.h')
+        includes_for_type.add('platform/wtf/text/WTFString.h')
     if base_idl_type in interfaces_info:
-        interface_info = interfaces_info[idl_type.base_type]
-        if interface_info['include_path']:
-            includes_for_type.add(interface_info['include_path'])
+        interface_info = interfaces_info[base_idl_type]
+        includes_for_type.add(interface_info['include_path'])
     if base_idl_type in INCLUDES_FOR_TYPE:
         includes_for_type.update(INCLUDES_FOR_TYPE[base_idl_type])
-    if idl_type.is_typed_array:
-        return set(['core/dom/DOMTypedArray.h'])
+    if idl_type.is_array_buffer_view_or_typed_array:
+        return set(['core/typed_arrays/DOMTypedArray.h', 'core/typed_arrays/ArrayBufferViewHelpers.h'])
     return includes_for_type
 
 
@@ -474,6 +504,20 @@
 IdlUnionType.impl_includes_for_type = impl_includes_for_type_union
 
 
+def impl_forward_declaration_name(idl_type):
+    element_type = idl_type.native_array_element_type
+    if element_type:
+        return element_type.impl_forward_declaration_name
+
+    if idl_type.is_wrapper_type and not idl_type.is_typed_array:
+        return idl_type.implemented_as
+    return None
+
+
+IdlTypeBase.impl_forward_declaration_name = property(
+    impl_forward_declaration_name)
+
+
 component_dir = {}
 
 
@@ -485,35 +529,18 @@
 # V8 -> C++
 ################################################################################
 
+# TODO(rakuco): Get rid of this definition altogether and move to NativeValueTraits<T>::nativeValue().
+#               That requires not requiring ExceptionState where it is not used, and we must be careful not
+#               to introduce any performance regressions.
 V8_VALUE_TO_CPP_VALUE = {
     # Basic
-    'Date': 'toCoreDate({isolate}, {v8_value})',
     'DOMString': '{v8_value}',
-    'ByteString': 'toByteString({isolate}, {arguments})',
-    'USVString': 'toUSVString({isolate}, {arguments})',
-    'boolean': 'toBoolean({isolate}, {arguments})',
-    'float': 'toRestrictedFloat({isolate}, {arguments})',
-    'unrestricted float': 'toFloat({isolate}, {arguments})',
-    'double': 'toRestrictedDouble({isolate}, {arguments})',
-    'unrestricted double': 'toDouble({isolate}, {arguments})',
-    'byte': 'toInt8({isolate}, {arguments})',
-    'octet': 'toUInt8({isolate}, {arguments})',
-    'short': 'toInt16({isolate}, {arguments})',
-    'unsigned short': 'toUInt16({isolate}, {arguments})',
-    'long': 'toInt32({isolate}, {arguments})',
-    'unsigned long': 'toUInt32({isolate}, {arguments})',
-    'long long': 'toInt64({isolate}, {arguments})',
-    'unsigned long long': 'toUInt64({isolate}, {arguments})',
     # 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}, nullptr, nullptr, nullptr, exceptionState)',
-    'ScriptValue': 'ScriptValue(ScriptState::current({isolate}), {v8_value})',
-    'Window': 'toDOMWindow({isolate}, {v8_value})',
-    'XPathNSResolver': 'toXPathNSResolver(ScriptState::current({isolate}), {v8_value})',
+    'FlexibleArrayBufferView': 'ToFlexibleArrayBufferView({isolate}, {v8_value}, {variable_name}, allocateFlexibleArrayBufferViewStorage({v8_value}))',
+    'Promise': 'ScriptPromise::Cast(ScriptState::Current({isolate}), {v8_value})',
+    'ScriptValue': 'ScriptValue(ScriptState::Current({isolate}), {v8_value})',
+    'Window': 'ToDOMWindow({isolate}, {v8_value})',
+    'XPathNSResolver': 'ToXPathNSResolver(ScriptState::Current({isolate}), {v8_value})',
 }
 
 
@@ -521,10 +548,12 @@
     return (idl_type.is_numeric_type or
             idl_type.is_enum or
             idl_type.is_dictionary or
-            idl_type.name in ('Boolean', 'ByteString', 'Dictionary', 'USVString', 'SerializedScriptValue'))
+            idl_type.is_array_buffer_view_or_typed_array or
+            idl_type.name in ('Boolean', 'ByteString', 'Date', 'Dictionary', 'USVString', 'SerializedScriptValue'))
 
 IdlType.v8_conversion_needs_exception_state = property(v8_conversion_needs_exception_state)
 IdlArrayOrSequenceType.v8_conversion_needs_exception_state = True
+IdlRecordType.v8_conversion_needs_exception_state = True
 IdlUnionType.v8_conversion_needs_exception_state = True
 
 
@@ -548,85 +577,112 @@
 IdlType.v8_conversion_is_trivial = property(v8_conversion_is_trivial)
 
 
-def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name, index, isolate, restricted_float=False):
+def native_value_traits_type_name(idl_type):
+    idl_type = idl_type.preprocessed_type
+
+    if idl_type.is_nullable:
+        idl_type = idl_type.inner_type
+
+    if idl_type.native_array_element_type:
+        name = 'IDLSequence<%s>' % native_value_traits_type_name(idl_type.native_array_element_type)
+    elif idl_type.is_record_type:
+        name = 'IDLRecord<%s, %s>' % (native_value_traits_type_name(idl_type.key_type),
+                                      native_value_traits_type_name(idl_type.value_type))
+    elif idl_type.is_basic_type or idl_type.name == 'Promise':
+        name = 'IDL%s' % idl_type.name
+    elif idl_type.implemented_as is not None:
+        name = idl_type.implemented_as
+    else:
+        name = idl_type.name
+    return name
+
+
+def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name, isolate):
     if idl_type.name == 'void':
         return ''
 
-    # Array or sequence types
-    native_array_element_type = idl_type.native_array_element_type
-    if native_array_element_type:
-        return v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index, isolate)
-
     # Simple types
     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
+    type_extended_attributes = idl_type.extended_attributes or {}
 
     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)
+        if base_idl_type not in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES:
+            raise ValueError('Unrecognized base type for extended attribute "FlexibleArrayBufferView": %s' % (idl_type.base_type))
         base_idl_type = 'FlexibleArrayBufferView'
 
+    if 'AllowShared' in extended_attributes and not idl_type.is_array_buffer_view_or_typed_array:
+        raise ValueError('Unrecognized base type for extended attribute "AllowShared": %s' % (idl_type.base_type))
+
     if idl_type.is_integer_type:
-        configuration = 'NormalConversion'
+        configuration = 'kNormalConversion'
+        # TODO(lisabelle): Remove these 4 lines when we have fully supported
+        # annoteted types.
+        # It is because at that time 'Clamp' and 'EnforceRange' will only
+        # appear in type_extended_attributes, not in extended_attributes.
         if 'EnforceRange' in extended_attributes:
-            configuration = 'EnforceRange'
+            configuration = 'kEnforceRange'
         elif 'Clamp' in extended_attributes:
-            configuration = 'Clamp'
-        arguments = ', '.join([v8_value, configuration, 'exceptionState'])
+            configuration = 'kClamp'
+        if 'EnforceRange' in type_extended_attributes:
+            configuration = 'kEnforceRange'
+        elif 'Clamp' in type_extended_attributes:
+            configuration = 'kClamp'
+        arguments = ', '.join([v8_value, 'exceptionState', configuration])
+    elif base_idl_type == 'SerializedScriptValue':
+        arguments = ', '.join([
+            v8_value,
+            'SerializedScriptValue::SerializeOptions(SerializedScriptValue::kNotForStorage)',
+            'exceptionState'])
     elif idl_type.v8_conversion_needs_exception_state:
         arguments = ', '.join([v8_value, 'exceptionState'])
     else:
         arguments = v8_value
+
     if base_idl_type in V8_VALUE_TO_CPP_VALUE:
         cpp_expression_format = V8_VALUE_TO_CPP_VALUE[base_idl_type]
-    elif idl_type.is_array_buffer_or_view:
+    elif idl_type.name == 'ArrayBuffer':
         cpp_expression_format = (
             '{v8_value}->Is{idl_type}() ? '
-            'V8{idl_type}::toImpl(v8::Local<v8::{idl_type}>::Cast({v8_value})) : 0')
+            'V8{idl_type}::ToImpl(v8::Local<v8::{idl_type}>::Cast({v8_value})) : 0')
+    elif idl_type.is_array_buffer_view_or_typed_array:
+        this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes)
+        if 'AllowShared' in extended_attributes:
+            cpp_expression_format = ('ToMaybeShared<%s>({isolate}, {v8_value}, exceptionState)' % this_cpp_type)
+        else:
+            cpp_expression_format = ('ToNotShared<%s>({isolate}, {v8_value}, exceptionState)' % this_cpp_type)
+
     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
+        nullable = 'UnionTypeConversionMode::kNullable' if idl_type.includes_nullable_type \
+            else 'UnionTypeConversionMode::kNotNullable'
+        cpp_expression_format = 'V8{idl_type}::ToImpl({isolate}, {v8_value}, {variable_name}, %s, exceptionState)' % nullable
     elif idl_type.use_output_parameter_for_result:
-        cpp_expression_format = 'V8{idl_type}::toImpl({isolate}, {v8_value}, {variable_name}, exceptionState)'
+        cpp_expression_format = 'V8{idl_type}::ToImpl({isolate}, {v8_value}, {variable_name}, exceptionState)'
+    elif idl_type.is_callback_function:
+        cpp_expression_format = (
+            'V8{idl_type}::Create(ScriptState::Current({isolate}), {v8_value})')
+    elif idl_type.v8_conversion_needs_exception_state:
+        # Effectively, this if branch means everything with v8_conversion_needs_exception_state == True
+        # except for unions and dictionary interfaces.
+        base_idl_type = native_value_traits_type_name(idl_type)
+        cpp_expression_format = (
+            'NativeValueTraits<{idl_type}>::NativeValue({isolate}, {arguments})')
     else:
         cpp_expression_format = (
-            'V8{idl_type}::toImplWithTypeCheck({isolate}, {v8_value})')
+            'V8{idl_type}::ToImplWithTypeCheck({isolate}, {v8_value})')
 
     return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_type, v8_value=v8_value, variable_name=variable_name, isolate=isolate)
 
 
-def v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index, isolate='info.GetIsolate()'):
-    # Index is None for setters, index (starting at 0) for method arguments,
-    # and is used to provide a human-readable exception message
-    if index is None:
-        index = 0  # special case, meaning "setter"
-    else:
-        index += 1  # human-readable index
-    if (native_array_element_type.is_interface_type and
-        native_array_element_type.name != 'Dictionary'):
-        this_cpp_type = None
-        ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_type.gc_type)
-        expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}, exceptionState))'
-    else:
-        ref_ptr_type = None
-        this_cpp_type = native_array_element_type.cpp_type
-        if native_array_element_type.is_dictionary or native_array_element_type.is_union_type:
-            vector_type = 'HeapVector'
-        else:
-            vector_type = 'Vector'
-        expression_format = 'toImplArray<%s<{cpp_type}>>({v8_value}, {index}, {isolate}, exceptionState)' % vector_type
-    expression = expression_format.format(native_array_element_type=native_array_element_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_type, v8_value=v8_value, isolate=isolate)
-    return expression
-
-
 # FIXME: this function should be refactored, as this takes too many flags.
-def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name, index=None, declare_variable=True, isolate='info.GetIsolate()', bailout_return_value=None, use_exception_state=False, restricted_float=False):
+def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name, declare_variable=True,
+                                isolate='info.GetIsolate()', bailout_return_value=None, use_exception_state=False):
     """Returns an expression that converts a V8 value to a C++ value and stores it as a local value."""
 
     this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, raw_type=True)
     idl_type = idl_type.preprocessed_type
 
-    cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name, index, isolate, restricted_float=restricted_float)
+    cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, variable_name, isolate)
 
     # Optional expression that returns a value to be assigned to the local variable.
     assign_expression = None
@@ -638,13 +694,14 @@
     # meaningful if 'check_expression' is not None.
     return_expression = bailout_return_value
 
-    if idl_type.is_string_type or idl_type.v8_conversion_needs_exception_state:
+    if 'FlexibleArrayBufferView' in extended_attributes:
+        if idl_type.base_type not in ARRAY_BUFFER_VIEW_AND_TYPED_ARRAY_TYPES:
+            raise ValueError('Unrecognized base type for extended attribute "FlexibleArrayBufferView": %s' % (idl_type.base_type))
+        set_expression = cpp_value
+    elif idl_type.is_string_type or idl_type.v8_conversion_needs_exception_state:
         # Types for which conversion can fail and that need error handling.
 
-        if use_exception_state:
-            check_expression = 'exceptionState.hadException()'
-        else:
-            check_expression = 'exceptionState.throwIfNeeded()'
+        check_expression = 'exceptionState.HadException()'
 
         if idl_type.is_dictionary or idl_type.is_union_type:
             set_expression = cpp_value
@@ -656,17 +713,13 @@
             # as the condition here would be wrong.
             if not idl_type.v8_conversion_needs_exception_state:
                 if use_exception_state:
-                    check_expression = '!%s.prepare(exceptionState)' % variable_name
+                    check_expression = '!%s.Prepare(exceptionState)' % variable_name
                 else:
-                    check_expression = '!%s.prepare()' % variable_name
-    elif not idl_type.v8_conversion_is_trivial:
+                    check_expression = '!%s.Prepare()' % variable_name
+    elif not idl_type.v8_conversion_is_trivial and not idl_type.is_callback_function:
         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
 
@@ -701,13 +754,16 @@
 ################################################################################
 
 def preprocess_idl_type(idl_type):
+    extended_attributes = idl_type.extended_attributes
     if idl_type.is_nullable:
         return IdlNullableType(idl_type.inner_type.preprocessed_type)
     if idl_type.is_enum:
         # Enumerations are internally DOMStrings
-        return IdlType('DOMString')
-    if idl_type.base_type in ['any', 'object'] or idl_type.is_callback_function:
-        return IdlType('ScriptValue')
+        return IdlType('DOMString', extended_attributes)
+    if idl_type.base_type in ['any', 'object'] or idl_type.is_custom_callback_function:
+        return IdlType('ScriptValue', extended_attributes)
+    if idl_type.is_callback_function:
+        return idl_type
     return idl_type
 
 IdlTypeBase.preprocessed_type = property(preprocess_idl_type)
@@ -732,8 +788,8 @@
     extended_attributes = extended_attributes or {}
     if ('Reflect' in extended_attributes and
         idl_type.base_type in ['unsigned long', 'unsigned short']):
-        cpp_value = cpp_value.replace('getUnsignedIntegralAttribute',
-                                      'getIntegralAttribute')
+        cpp_value = cpp_value.replace('GetUnsignedIntegralAttribute',
+                                      'GetIntegralAttribute')
         cpp_value = 'std::max(0, static_cast<int>(%s))' % cpp_value
     return idl_type, cpp_value
 
@@ -742,7 +798,7 @@
     """Returns V8 conversion type, adding any additional includes.
 
     The V8 conversion type is used to select the C++ -> V8 conversion function
-    or v8SetReturnValue* function; it can be an idl_type, a cpp_type, or a
+    or V8SetReturnValue* function; it can be an idl_type, a cpp_type, or a
     separate name for the type of conversion (e.g., 'DOMWrapper').
     """
     extended_attributes = extended_attributes or {}
@@ -758,15 +814,17 @@
     # Array or sequence types
     native_array_element_type = idl_type.native_array_element_type
     if native_array_element_type:
-        return 'array'
+        return 'FrozenArray' if idl_type.is_frozen_array else 'sequence'
+
+    # Record types.
+    if idl_type.is_record_type:
+        return 'Record'
 
     # Simple types
     base_idl_type = idl_type.base_type
     # Basic types, without additional includes
-    if base_idl_type in CPP_INT_TYPES:
-        return 'int'
-    if base_idl_type in CPP_UNSIGNED_TYPES:
-        return 'unsigned'
+    if base_idl_type in CPP_INTEGER_CONVERSION_RULES:
+        return CPP_INTEGER_CONVERSION_RULES[base_idl_type]
     if idl_type.is_string_type:
         if idl_type.is_nullable:
             return 'StringOrNull'
@@ -778,7 +836,7 @@
         return 'Dictionary'
 
     # Data type with potential additional includes
-    if base_idl_type in V8_SET_RETURN_VALUE:  # Special v8SetReturnValue treatment
+    if base_idl_type in V8_SET_RETURN_VALUE:  # Special V8SetReturnValue treatment
         return base_idl_type
 
     # Pointer type
@@ -788,52 +846,82 @@
 
 
 V8_SET_RETURN_VALUE = {
-    'boolean': 'v8SetReturnValueBool(info, {cpp_value})',
-    'int': 'v8SetReturnValueInt(info, {cpp_value})',
-    'unsigned': 'v8SetReturnValueUnsigned(info, {cpp_value})',
-    'DOMString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
-    'ByteString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
-    'USVString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
-    'StringOrNull': 'v8SetReturnValueStringOrNull(info, {cpp_value}, info.GetIsolate())',
+    'boolean': 'V8SetReturnValueBool(info, {cpp_value})',
+    'DOMString': 'V8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
+    'ByteString': 'V8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
+    'USVString': 'V8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
+    'StringOrNull': 'V8SetReturnValueStringOrNull(info, {cpp_value}, info.GetIsolate())',
     'void': '',
-    # No special v8SetReturnValue* function (set value directly)
-    'float': 'v8SetReturnValue(info, {cpp_value})',
-    'unrestricted float': 'v8SetReturnValue(info, {cpp_value})',
-    'double': 'v8SetReturnValue(info, {cpp_value})',
-    'unrestricted double': 'v8SetReturnValue(info, {cpp_value})',
-    # No special v8SetReturnValue* function, but instead convert value to V8
-    # and then use general v8SetReturnValue.
-    'array': 'v8SetReturnValue(info, {cpp_value})',
-    'Date': 'v8SetReturnValue(info, {cpp_value})',
-    'EventHandler': 'v8SetReturnValue(info, {cpp_value})',
-    'ScriptValue': 'v8SetReturnValue(info, {cpp_value})',
-    'SerializedScriptValue': 'v8SetReturnValue(info, {cpp_value})',
+    # All the int types below are converted to (u)int32_t in the V8SetReturnValue{Int,Unsigned}() calls.
+    # The 64-bit int types have already been converted to double when V8_SET_RETURN_VALUE is used, so they are not
+    # listed here.
+    'int8_t': 'V8SetReturnValueInt(info, {cpp_value})',
+    'int16_t': 'V8SetReturnValueInt(info, {cpp_value})',
+    'int32_t': 'V8SetReturnValueInt(info, {cpp_value})',
+    'uint8_t': 'V8SetReturnValueUnsigned(info, {cpp_value})',
+    'uint16_t': 'V8SetReturnValueUnsigned(info, {cpp_value})',
+    'uint32_t': 'V8SetReturnValueUnsigned(info, {cpp_value})',
+    # No special V8SetReturnValue* function (set value directly)
+    'float': 'V8SetReturnValue(info, {cpp_value})',
+    'unrestricted float': 'V8SetReturnValue(info, {cpp_value})',
+    'double': 'V8SetReturnValue(info, {cpp_value})',
+    'unrestricted double': 'V8SetReturnValue(info, {cpp_value})',
+    # No special V8SetReturnValue* function, but instead convert value to V8
+    # and then use general V8SetReturnValue.
+    'sequence': 'V8SetReturnValue(info, {cpp_value})',
+    'FrozenArray': 'V8SetReturnValue(info, {cpp_value})',
+    'Date': 'V8SetReturnValue(info, {cpp_value})',
+    'EventHandler': 'V8SetReturnValue(info, {cpp_value})',
+    'NodeFilter': 'V8SetReturnValue(info, {cpp_value})',
+    'ScriptValue': 'V8SetReturnValue(info, {cpp_value})',
+    'SerializedScriptValue': 'V8SetReturnValue(info, {cpp_value})',
+    # Records.
+    'Record': 'V8SetReturnValue(info, ToV8({cpp_value}, info.Holder(), info.GetIsolate()))',
     # DOMWrapper
-    'DOMWrapperForMainWorld': 'v8SetReturnValueForMainWorld(info, WTF::getPtr({cpp_value}))',
-    'DOMWrapperFast': 'v8SetReturnValueFast(info, WTF::getPtr({cpp_value}), {script_wrappable})',
-    'DOMWrapperDefault': 'v8SetReturnValue(info, {cpp_value})',
+    'DOMWrapperForMainWorld': 'V8SetReturnValueForMainWorld(info, {cpp_value})',
+    'DOMWrapperFast': 'V8SetReturnValueFast(info, {cpp_value}, {script_wrappable})',
+    'DOMWrapperDefault': 'V8SetReturnValue(info, {cpp_value})',
+    # If [CheckSecurity=ReturnValue] is specified, the returned object must be
+    # wrapped in its own realm, which can be different from the realm of the
+    # receiver object.
+    #
+    # [CheckSecurity=ReturnValue] is used only for contentDocument and
+    # getSVGDocument attributes of HTML{IFrame,Frame,Object,Embed}Element,
+    # and Window.frameElement.  Except for Window.frameElement, all interfaces
+    # support contentWindow(), so we create a new wrapper in the realm of
+    # contentWindow().  Note that DOMWindow* has its own realm and there is no
+    # need to pass |creationContext| in for ToV8(DOMWindow*).
+    # Window.frameElement is implemented with [Custom].
+    'DOMWrapperAcrossContext': (
+        'V8SetReturnValue(info, ToV8({cpp_value}, ' +
+        'ToV8(impl->contentWindow(), v8::Local<v8::Object>(), ' +
+        'info.GetIsolate()).As<v8::Object>(), info.GetIsolate()))'),
     # Note that static attributes and operations do not check whether |this| is
     # an instance of the interface nor |this|'s creation context is the same as
     # the current context.  So we must always use the current context as the
     # creation context of the DOM wrapper for the return value.
-    'DOMWrapperStatic': 'v8SetReturnValue(info, {cpp_value}, info.GetIsolate()->GetCurrentContext()->Global())',
+    'DOMWrapperStatic': 'V8SetReturnValue(info, {cpp_value}, info.GetIsolate()->GetCurrentContext()->Global())',
     # Generic dictionary type
-    'Dictionary': 'v8SetReturnValue(info, {cpp_value})',
+    'Dictionary': 'V8SetReturnValue(info, {cpp_value})',
     'DictionaryStatic': '#error not implemented yet',
     # Nullable dictionaries
-    'NullableDictionary': 'v8SetReturnValue(info, result.get())',
-    'NullableDictionaryStatic': '#error not implemented yet',
+    'NullableDictionary': 'V8SetReturnValue(info, result.Get())',
+    'NullableDictionaryStatic': 'V8SetReturnValue(info, result.Get(), info.GetIsolate()->GetCurrentContext()->Global())',
     # Union types or dictionaries
-    'DictionaryOrUnion': 'v8SetReturnValue(info, result)',
-    'DictionaryOrUnionStatic': '#error not implemented yet',
+    'DictionaryOrUnion': 'V8SetReturnValue(info, result)',
+    'DictionaryOrUnionStatic': 'V8SetReturnValue(info, result, info.GetIsolate()->GetCurrentContext()->Global())',
 }
 
 
-def v8_set_return_value(idl_type, cpp_value, extended_attributes=None, script_wrappable='', release=False, for_main_world=False, is_static=False):
+def v8_set_return_value(idl_type, cpp_value, extended_attributes=None, script_wrappable='', for_main_world=False, is_static=False):
     """Returns a statement that converts a C++ value to a V8 value and sets it as a return value.
 
     """
     def dom_wrapper_conversion_type():
+        if ('CheckSecurity' in extended_attributes and
+                extended_attribute_value_contains(
+                    extended_attributes['CheckSecurity'], 'ReturnValue')):
+            return 'DOMWrapperAcrossContext'
         if is_static:
             return 'DOMWrapperStatic'
         if not script_wrappable:
@@ -845,8 +933,9 @@
     idl_type, cpp_value = preprocess_idl_type_and_value(idl_type, cpp_value, extended_attributes)
     this_v8_conversion_type = idl_type.v8_conversion_type(extended_attributes)
     # SetReturn-specific overrides
-    if this_v8_conversion_type in ['Date', 'EventHandler', 'ScriptValue', 'SerializedScriptValue', 'array']:
-        # Convert value to V8 and then use general v8SetReturnValue
+    if this_v8_conversion_type in ('Date', 'EventHandler', 'NodeFilter', 'ScriptValue',
+                                   'SerializedScriptValue', 'sequence', 'FrozenArray'):
+        # Convert value to V8 and then use general V8SetReturnValue
         cpp_value = idl_type.cpp_value_to_v8_value(cpp_value, extended_attributes=extended_attributes)
     if this_v8_conversion_type == 'DOMWrapper':
         this_v8_conversion_type = dom_wrapper_conversion_type()
@@ -854,42 +943,50 @@
         this_v8_conversion_type += 'Static'
 
     format_string = V8_SET_RETURN_VALUE[this_v8_conversion_type]
-    # FIXME: oilpan: Remove .release() once we remove all RefPtrs from generated code.
-    if release:
-        cpp_value = '%s.release()' % cpp_value
     statement = format_string.format(cpp_value=cpp_value, script_wrappable=script_wrappable)
     return statement
 
 
 IdlTypeBase.v8_set_return_value = v8_set_return_value
 
-IdlType.release = property(lambda self: self.is_interface_type)
-IdlUnionType.release = False
-
 
 CPP_VALUE_TO_V8_VALUE = {
     # Built-in types
-    'Date': 'v8DateOrNaN({isolate}, {cpp_value})',
-    'DOMString': 'v8String({isolate}, {cpp_value})',
-    'ByteString': 'v8String({isolate}, {cpp_value})',
-    'USVString': 'v8String({isolate}, {cpp_value})',
-    'boolean': 'v8Boolean({cpp_value}, {isolate})',
-    'int': 'v8::Integer::New({isolate}, {cpp_value})',
-    'unsigned': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})',
+    'Date': 'V8DateOrNaN({isolate}, {cpp_value})',
+    'DOMString': 'V8String({isolate}, {cpp_value})',
+    'ByteString': 'V8String({isolate}, {cpp_value})',
+    'USVString': 'V8String({isolate}, {cpp_value})',
+    'boolean': 'v8::Boolean::New({isolate}, {cpp_value})',
+    # All the int types below are converted to (u)int32_t in the v8::Integer::New*() calls.
+    # The 64-bit int types have already been converted to double when CPP_VALUE_TO_V8_VALUE is used, so they are not
+    # listed here.
+    'int8_t': 'v8::Integer::New({isolate}, {cpp_value})',
+    'int16_t': 'v8::Integer::New({isolate}, {cpp_value})',
+    'int32_t': 'v8::Integer::New({isolate}, {cpp_value})',
+    'uint8_t': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})',
+    'uint16_t': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})',
+    'uint32_t': 'v8::Integer::NewFromUnsigned({isolate}, {cpp_value})',
     'float': 'v8::Number::New({isolate}, {cpp_value})',
     'unrestricted float': 'v8::Number::New({isolate}, {cpp_value})',
     'double': 'v8::Number::New({isolate}, {cpp_value})',
     'unrestricted double': 'v8::Number::New({isolate}, {cpp_value})',
     'void': 'v8Undefined()',
-    'StringOrNull': '{cpp_value}.isNull() ? v8::Local<v8::Value>(v8::Null({isolate})) : v8String({isolate}, {cpp_value})',
+    'StringOrNull': '{cpp_value}.IsNull() ? v8::Local<v8::Value>(v8::Null({isolate})) : 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}))',
-    'ScriptValue': '{cpp_value}.v8Value()',
-    'SerializedScriptValue': '{cpp_value} ? {cpp_value}->deserialize() : v8::Local<v8::Value>(v8::Null({isolate}))',
+    'Dictionary': '{cpp_value}.V8Value()',
+    'EventHandler': (
+        '{cpp_value} ? ' +
+        'V8AbstractEventListener::Cast({cpp_value})->GetListenerOrNull(' +
+        '{isolate}, impl->GetExecutionContext()) : ' +
+        'v8::Null({isolate}).As<v8::Value>()'),
+    'NodeFilter': 'ToV8({cpp_value}, {creation_context}, {isolate})',
+    'Record': 'ToV8({cpp_value}, {creation_context}, {isolate})',
+    'ScriptValue': '{cpp_value}.V8Value()',
+    'SerializedScriptValue': 'V8Deserialize({isolate}, {cpp_value})',
     # General
-    'array': 'toV8({cpp_value}, {creation_context}, {isolate})',
-    'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})',
+    'sequence': 'ToV8({cpp_value}, {creation_context}, {isolate})',
+    'FrozenArray': 'FreezeV8Object(ToV8({cpp_value}, {creation_context}, {isolate}), {isolate})',
+    'DOMWrapper': 'ToV8({cpp_value}, {creation_context}, {isolate})',
     # Passing nullable dictionaries isn't a pattern currently used
     # anywhere in the web platform, and more work would be needed in
     # the code generator to distinguish between passing null, and
@@ -900,7 +997,7 @@
     # nullable dictionary type.
     #
     # Union types or dictionaries
-    'DictionaryOrUnion': 'toV8({cpp_value}, {creation_context}, {isolate})',
+    'DictionaryOrUnion': 'ToV8({cpp_value}, {creation_context}, {isolate})',
 }
 
 
@@ -922,7 +1019,7 @@
     if idl_type.base_type in ('any', 'object') and idl_literal.is_null:
         return 'ScriptValue()'
     literal_value = str(idl_literal)
-    if idl_type.base_type in CPP_UNSIGNED_TYPES:
+    if idl_type.base_type in ('octet', 'unsigned short', 'unsigned long'):
         return literal_value + 'u'
     return literal_value
 
@@ -939,12 +1036,12 @@
     else:
         raise ValueError('Unsupported literal type: ' + idl_literal.idl_type)
 
-    return '%s::from%s(%s)' % (idl_type.name, member_type.name,
+    return '%s::From%s(%s)' % (idl_type.name, member_type.name,
                                member_type.literal_cpp_value(idl_literal))
 
 
 def array_or_sequence_literal_cpp_value(idl_type, idl_literal):
-    # Only support empty arrays.
+    # Only support empty sequences.
     if idl_literal.value == '[]':
         return cpp_type(idl_type) + '()'
     raise ValueError('Unsupported literal type: ' + idl_literal.idl_type)
@@ -962,16 +1059,20 @@
 
 def cpp_type_has_null_value(idl_type):
     # - String types (String/AtomicString) represent null as a null string,
-    #   i.e. one for which String::isNull() returns true.
+    #   i.e. one for which String::IsNull() returns true.
     # - Enum types, as they are implemented as Strings.
-    # - Interface types (raw pointer or RefPtr/PassRefPtr) represent null as
+    # - Interface types (raw pointer or RefPtr) represent null as
     #   a null pointer.
     # - Union types, as thier container classes can represent null value.
     # - 'Object' and 'any' type. We use ScriptValue for object type.
-    return (idl_type.is_string_type or idl_type.is_interface_type or
-            idl_type.is_enum or idl_type.is_union_type
-            or idl_type.base_type == 'object' or idl_type.base_type == 'any'
-            or idl_type.is_callback_function or idl_type.is_callback_interface)
+    return (idl_type.is_string_type
+            or idl_type.is_enum
+            or idl_type.is_interface_type
+            or idl_type.is_callback_interface
+            or idl_type.is_callback_function
+            or idl_type.is_custom_callback_function
+            or idl_type.is_union_type
+            or idl_type.base_type == 'object' or idl_type.base_type == 'any')
 
 IdlTypeBase.cpp_type_has_null_value = property(cpp_type_has_null_value)
 
@@ -991,21 +1092,6 @@
 IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable)
 
 
-def number_of_nullable_member_types_union(idl_type):
-    # http://heycam.github.io/webidl/#dfn-number-of-nullable-member-types
-    count = 0
-    for member in idl_type.member_types:
-        if member.is_nullable:
-            count += 1
-            member = member.inner_type
-        if member.is_union_type:
-            count += number_of_nullable_member_types_union(member)
-    return count
-
-IdlUnionType.number_of_nullable_member_types = property(
-    number_of_nullable_member_types_union)
-
-
 def includes_nullable_type_union(idl_type):
     # http://heycam.github.io/webidl/#dfn-includes-a-nullable-type
     return idl_type.number_of_nullable_member_types == 1
diff --git a/bindings/scripts/v8_union.py b/bindings/scripts/v8_union.py
index fa22cdb..7778c88 100644
--- a/bindings/scripts/v8_union.py
+++ b/bindings/scripts/v8_union.py
@@ -2,63 +2,35 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from utilities import to_snake_case
+import v8_types
 import v8_utilities
 
 
+UNION_CPP_INCLUDES = frozenset([
+    'bindings/core/v8/ToV8ForCore.h',
+])
+
 UNION_H_INCLUDES = frozenset([
     'bindings/core/v8/Dictionary.h',
     'bindings/core/v8/ExceptionState.h',
-    'bindings/core/v8/V8Binding.h',
+    'bindings/core/v8/NativeValueTraits.h',
+    'bindings/core/v8/V8BindingForCore.h',
     'platform/heap/Handle.h',
 ])
 
-UNION_CPP_INCLUDES_BLACKLIST = frozenset([
-    # This header defines static functions needed to implement event handler
-    # attributes in interfaces that implement GlobalEventHandlers. They are not
-    # needed or used by UnionTypes*.cpp, so including the header causes
-    # compilation errors.
-    # FIXME: We should solve this problem in a way that doesn't involve special-
-    # casing a header like this.
-    'core/dom/GlobalEventHandlers.h',
-])
-
 
 cpp_includes = set()
 header_forward_decls = set()
 header_includes = set()
 
 
-def union_context(union_types, interfaces_info):
+def container_context(union_type, info_provider):
     cpp_includes.clear()
     header_forward_decls.clear()
     header_includes.clear()
+    cpp_includes.update(UNION_CPP_INCLUDES)
     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
-    # because container classes can handle null and it seems that
-    # distinguishing (A or B)? and (A? or B) doesn't make sense.
-    container_cpp_types = set()
-    union_types_for_containers = 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)
-
-    union_types_for_containers = sorted(union_types_for_containers,
-                                        key=lambda union_type: union_type.cpp_type)
-
-    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(header_includes),
-    }
-
-
-def container_context(union_type, interfaces_info):
     members = []
 
     # These variables refer to member contexts if the given union type has
@@ -71,9 +43,10 @@
     interface_types = []
     numeric_type = None
     object_type = None
+    record_type = None
     string_type = None
-    for member in union_type.member_types:
-        context = member_context(member, interfaces_info)
+    for member in sorted(union_type.flattened_member_types, key=lambda m: m.name):
+        context = member_context(member, info_provider)
         members.append(context)
         if member.base_type == 'ArrayBuffer':
             if array_buffer_type:
@@ -93,9 +66,13 @@
             array_or_sequence_type = context
         # "Dictionary" is an object, rather than an IDL dictionary.
         elif member.base_type == 'Dictionary':
-            if object_type:
+            if object_type or record_type:
                 raise Exception('%s is ambiguous.' % union_type.name)
             object_type = context
+        elif member.is_record_type:
+            if object_type or record_type:
+                raise Exception('%s is ambiguous.' % union_type.name)
+            record_type = context
         elif member.is_interface_type:
             interface_types.append(context)
         elif member is union_type.boolean_member_type:
@@ -114,63 +91,73 @@
     if dictionary_type and nullable_members == 1:
         raise Exception('%s has a dictionary and a nullable member' % union_type.name)
 
+    cpp_class = union_type.cpp_type
     return {
         'array_buffer_type': array_buffer_type,
         'array_buffer_view_type': array_buffer_view_type,
         'array_or_sequence_type': array_or_sequence_type,
         'boolean_type': boolean_type,
-        'cpp_class': union_type.cpp_type,
+        'cpp_class': cpp_class,
+        'cpp_includes': sorted(cpp_includes),
         'dictionary_type': dictionary_type,
+        'header_includes': sorted(header_includes),
+        'header_forward_decls': sorted(header_forward_decls),
         'includes_nullable_type': union_type.includes_nullable_type,
         'interface_types': interface_types,
         'members': members,
         'numeric_type': numeric_type,
         'object_type': object_type,
+        'record_type': record_type,
         'string_type': string_type,
         'type_string': str(union_type),
+        'v8_class': v8_types.v8_type(cpp_class),
     }
 
 
-def _update_includes_and_forward_decls(member, interface_info):
+def _update_includes_and_forward_decls(member, info_provider):
+    interface_info = info_provider.interfaces_info.get(member.name, None)
     if interface_info:
         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:
+        # We need complete types for IDL dictionaries in union containers.
+        if member.is_dictionary or member.is_array_buffer_view_or_typed_array:
             header_includes.update(member.includes_for_type())
         else:
             cpp_includes.update(member.includes_for_type())
             header_forward_decls.add(member.implemented_as)
     else:
+        if member.is_record_type:
+            _update_includes_and_forward_decls(member.key_type, info_provider)
+            _update_includes_and_forward_decls(member.value_type, info_provider)
+        elif member.is_array_or_sequence_type:
+            _update_includes_and_forward_decls(member.element_type, info_provider)
+        elif member.is_union_type:
+            # Reaching this block means we have a union that is inside a
+            # record or sequence.
+            header_forward_decls.add(member.name)
+            cpp_includes.update([info_provider.include_path_for_union_types(member)])
         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)
+def member_context(member, info_provider):
+    _update_includes_and_forward_decls(member, info_provider)
     if member.is_nullable:
         member = member.inner_type
     return {
-        'cpp_name': v8_utilities.uncapitalize(member.name),
+        'cpp_name': to_snake_case(v8_utilities.cpp_name(member)),
         'cpp_type': member.cpp_type_args(used_in_cpp_sequence=True),
         'cpp_local_type': member.cpp_type,
         'cpp_value_to_v8_value': member.cpp_value_to_v8_value(
-            cpp_value='impl.getAs%s()' % member.name, isolate='isolate',
+            cpp_value='impl.GetAs%s()' % member.name, isolate='isolate',
             creation_context='creationContext'),
         'enum_values': member.enum_values,
+        'is_array_buffer_or_view_type': member.is_array_buffer_or_view,
+        'is_array_buffer_view_or_typed_array': member.is_array_buffer_view_or_typed_array,
         'is_traceable': member.is_traceable,
         'rvalue_cpp_type': member.cpp_type_args(used_as_rvalue_type=True),
-        'specific_type_enum': 'SpecificType' + member.name,
+        'specific_type_enum': 'k' + member.name,
         'type_name': member.name,
         'v8_value_to_local_cpp_value': member.v8_value_to_local_cpp_value(
             {}, 'v8Value', 'cppValue', isolate='isolate',
-            use_exception_state=True, restricted_float=True),
+            use_exception_state=True)
     }
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
index 1e8733a..08c4fe8 100644
--- a/bindings/scripts/v8_utilities.py
+++ b/bindings/scripts/v8_utilities.py
@@ -31,11 +31,14 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
+import os
 import re
+import sys
 
 from idl_types import IdlTypeBase
 import idl_types
 from idl_definitions import Exposure, IdlInterface, IdlAttribute
+from utilities import to_snake_case
 from v8_globals import includes
 
 ACRONYMS = [
@@ -44,6 +47,7 @@
     'HTML',
     'IME',
     'JS',
+    'SMIL',
     'SVG',
     'URL',
     'WOFF',
@@ -112,13 +116,16 @@
     return name[0].lower() + name[1:]
 
 
+def runtime_enabled_function(name):
+    """Returns a function call of a runtime enabled feature."""
+    return 'RuntimeEnabledFeatures::%sEnabled()' % name
+
+
 ################################################################################
 # C++
 ################################################################################
 
 def scoped_name(interface, definition, base_name):
-    if 'ImplementedInPrivateScript' in definition.extended_attributes:
-        return '%s::PrivateScript::%s' % (v8_class_name(interface), base_name)
     # partial interfaces are implemented as separate classes, with their members
     # implemented as static member functions
     partial_interface_implemented_as = definition.extended_attributes.get('PartialInterfaceImplementedAs')
@@ -141,6 +148,26 @@
     return class_name
 
 
+def build_basename(name, snake_case, prefix=None, ext=None):
+    basename = name
+    if prefix:
+        basename = prefix + name
+    if snake_case:
+        basename = to_snake_case(basename)
+        if not ext:
+            return basename
+        if ext == '.cpp':
+            return basename + '.cc'
+        return basename + ext
+    if ext:
+        return basename + ext
+    return basename
+
+
+def binding_header_basename(name, snake_case):
+    return build_basename(name, snake_case, prefix='V8', ext='.h')
+
+
 ################################################################################
 # Specific extended attributes
 ################################################################################
@@ -158,7 +185,7 @@
     if log_activity and not log_activity.startswith(access_type):
         return set()
 
-    includes.add('bindings/core/v8/V8DOMActivityLogger.h')
+    includes.add('platform/bindings/V8DOMActivityLogger.h')
     if 'LogAllWorlds' in extended_attributes:
         return set(['', 'ForMainWorld'])
     return set([''])  # At minimum, include isolated worlds.
@@ -185,19 +212,19 @@
 CALL_WITH_ARGUMENTS = {
     'ScriptState': 'scriptState',
     'ExecutionContext': 'executionContext',
-    'ScriptArguments': 'scriptArguments.release()',
-    'ActiveWindow': 'currentDOMWindow(info.GetIsolate())',
-    'FirstWindow': 'enteredDOMWindow(info.GetIsolate())',
+    'ScriptArguments': 'scriptArguments',
+    'CurrentWindow': 'CurrentDOMWindow(info.GetIsolate())',
+    'EnteredWindow': 'EnteredDOMWindow(info.GetIsolate())',
     'Document': 'document',
-    'ThisValue': 'ScriptValue(scriptState, info.This())',
+    'ThisValue': 'ScriptValue(scriptState, info.Holder())',
 }
 # List because key order matters, as we want arguments in deterministic order
 CALL_WITH_VALUES = [
     'ScriptState',
     'ExecutionContext',
     'ScriptArguments',
-    'ActiveWindow',
-    'FirstWindow',
+    'CurrentWindow',
+    'EnteredWindow',
     'Document',
     'ThisValue',
 ]
@@ -229,18 +256,19 @@
 
 # [Exposed]
 EXPOSED_EXECUTION_CONTEXT_METHOD = {
-    'CompositorWorker': 'isCompositorWorkerGlobalScope',
-    'DedicatedWorker': 'isDedicatedWorkerGlobalScope',
-    'ServiceWorker': 'isServiceWorkerGlobalScope',
-    'SharedWorker': 'isSharedWorkerGlobalScope',
-    'Window': 'isDocument',
-    'Worker': 'isWorkerGlobalScope',
-    'Worklet': 'isWorkletGlobalScope',
+    'AnimationWorklet': 'IsAnimationWorkletGlobalScope',
+    'AudioWorklet': 'IsAudioWorkletGlobalScope',
+    'DedicatedWorker': 'IsDedicatedWorkerGlobalScope',
+    'PaintWorklet': 'IsPaintWorkletGlobalScope',
+    'ServiceWorker': 'IsServiceWorkerGlobalScope',
+    'SharedWorker': 'IsSharedWorkerGlobalScope',
+    'Window': 'IsDocument',
+    'Worker': 'IsWorkerGlobalScope',
+    'Worklet': 'IsWorkletGlobalScope',
 }
 
 
 EXPOSED_WORKERS = set([
-    'CompositorWorker',
     'DedicatedWorker',
     'SharedWorker',
     'ServiceWorker',
@@ -282,8 +310,7 @@
         exposed = ('executionContext->%s()' %
                    EXPOSED_EXECUTION_CONTEXT_METHOD[exposure.exposed])
         if exposure.runtime_enabled is not None:
-            runtime_enabled = ('RuntimeEnabledFeatures::%sEnabled()' %
-                               uncapitalize(exposure.runtime_enabled))
+            runtime_enabled = (runtime_enabled_function(exposure.runtime_enabled))
             return '({0} && {1})'.format(exposed, runtime_enabled)
         return exposed
 
@@ -305,8 +332,8 @@
       => context->isDocument()
 
     EXAMPLE: [Exposed(Window Feature1, Window Feature2)]
-      => context->isDocument() && RuntimeEnabledFeatures::feature1Enabled() ||
-         context->isDocument() && RuntimeEnabledFeatures::feature2Enabled()
+      => context->isDocument() && RuntimeEnabledFeatures::Feature1Enabled() ||
+         context->isDocument() && RuntimeEnabledFeatures::Feature2Enabled()
     """
     exposure_set = ExposureSet(
         extended_attribute_value_as_list(member, 'Exposed'))
@@ -323,22 +350,21 @@
     return exposure_set.code()
 
 
-# [GarbageCollected], [WillBeGarbageCollected]
-def gc_type(definition):
-    extended_attributes = definition.extended_attributes
-    if 'GarbageCollected' in extended_attributes:
-        return 'GarbageCollectedObject'
-    elif 'WillBeGarbageCollected' in extended_attributes:
-        return 'WillBeGarbageCollectedObject'
-    return 'RefCountedObject'
+# [SecureContext]
+def secure_context(member, interface):
+    """Returns C++ code that checks whether an interface/method/attribute/etc. is exposed
+    to the current context."""
+    if 'SecureContext' in member.extended_attributes or 'SecureContext' in interface.extended_attributes:
+        return 'executionContext->IsSecureContext()'
+    return None
 
 
 # [ImplementedAs]
 def cpp_name(definition_or_member):
     extended_attributes = definition_or_member.extended_attributes
-    if 'ImplementedAs' not in extended_attributes:
-        return definition_or_member.name
-    return extended_attributes['ImplementedAs']
+    if extended_attributes and 'ImplementedAs' in extended_attributes:
+        return extended_attributes['ImplementedAs']
+    return definition_or_member.name
 
 
 def cpp_name_from_interfaces_info(name, interfaces_info):
@@ -367,48 +393,83 @@
     return None
 
 
-def runtime_feature_name(definition_or_member):
+# [OriginTrialEnabled]
+def origin_trial_enabled_function_name(definition_or_member):
+    """Returns the name of the OriginTrials enabled function.
+
+    An exception is raised if OriginTrialEnabled is used in conjunction with any
+    of the following (which must be mutually exclusive with origin trials):
+      - RuntimeEnabled
+
+    The returned function checks if the IDL member should be enabled.
+    Given extended attribute OriginTrialEnabled=FeatureName, return:
+        OriginTrials::{featureName}Enabled
+
+    If the OriginTrialEnabled extended attribute is found, the includes are
+    also updated as a side-effect.
+    """
     extended_attributes = definition_or_member.extended_attributes
-    if 'RuntimeEnabled' not in extended_attributes:
-        return None
-    return extended_attributes['RuntimeEnabled']
+    is_origin_trial_enabled = 'OriginTrialEnabled' in extended_attributes
+
+    if is_origin_trial_enabled and 'RuntimeEnabled' in extended_attributes:
+        raise Exception('[OriginTrialEnabled] and [RuntimeEnabled] must '
+                        'not be specified on the same definition: %s'
+                        % definition_or_member.name)
+
+    if is_origin_trial_enabled:
+        trial_name = extended_attributes['OriginTrialEnabled']
+        return 'OriginTrials::%sEnabled' % uncapitalize(trial_name)
+
+    is_feature_policy_enabled = 'FeaturePolicy' in extended_attributes
+
+    if is_feature_policy_enabled and 'RuntimeEnabled' in extended_attributes:
+        raise Exception('[FeaturePolicy] and [RuntimeEnabled] must '
+                        'not be specified on the same definition: %s'
+                        % definition_or_member.name)
+
+    if is_feature_policy_enabled and 'SecureContext' in extended_attributes:
+        raise Exception('[FeaturePolicy] and [SecureContext] must '
+                        'not be specified on the same definition '
+                        '(see https://crbug.com/695123 for workaround): %s'
+                        % definition_or_member.name)
+
+    if is_feature_policy_enabled:
+        includes.add('platform/bindings/ScriptState.h')
+        includes.add('platform/feature_policy/FeaturePolicy.h')
+
+        trial_name = extended_attributes['FeaturePolicy']
+        return 'FeaturePolicy::%sEnabled' % uncapitalize(trial_name)
+
+    return None
 
 
-def is_origin_trial_enabled(definition_or_member):
-    return 'OriginTrialEnabled' in definition_or_member.extended_attributes
+def origin_trial_feature_name(definition_or_member):
+    extended_attributes = definition_or_member.extended_attributes
+    return extended_attributes.get('OriginTrialEnabled') or extended_attributes.get('FeaturePolicy')
 
 
-def origin_trial_name(definition_or_member):
-    return definition_or_member.extended_attributes['OriginTrialEnabled'] if is_origin_trial_enabled(definition_or_member) else None
+# [ContextEnabled]
+def context_enabled_feature_name(definition_or_member):
+    return definition_or_member.extended_attributes.get('ContextEnabled')
 
 
-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)
+# [RuntimeCallStatsCounter]
+def rcs_counter_name(member, generic_counter_name):
+    extended_attribute_defined = 'RuntimeCallStatsCounter' in member.extended_attributes
+    if extended_attribute_defined:
+        counter = 'k' + member.extended_attributes['RuntimeCallStatsCounter']
+    else:
+        counter = generic_counter_name
+    return (counter, extended_attribute_defined)
 
 
 # [RuntimeEnabled]
-def runtime_enabled_function_name(definition_or_member):
-    """Returns the name of the RuntimeEnabledFeatures function.
-
-    The returned function checks if a method/attribute is enabled.
-    Given extended attribute RuntimeEnabled=FeatureName, return:
-        RuntimeEnabledFeatures::{featureName}Enabled
-    """
-    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)
+def runtime_enabled_feature_name(definition_or_member):
+    extended_attributes = definition_or_member.extended_attributes
+    if 'RuntimeEnabled' not in extended_attributes:
+        return None
+    includes.add('platform/runtime_enabled_features.h')
+    return extended_attributes['RuntimeEnabled']
 
 
 # [Unforgeable]
@@ -429,16 +490,16 @@
     """Returns True if the interface's member needs to be defined on every
     instance object.
 
-    The following members must be defiend on an instance object.
+    The following members must be defined on an instance object.
     - [Unforgeable] members
     - regular members of [Global] or [PrimaryGlobal] interfaces
     """
     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'):
+    # 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
@@ -500,6 +561,27 @@
 
 
 ################################################################################
+# Legacy callers
+# https://heycam.github.io/webidl/#idl-legacy-callers
+################################################################################
+
+def legacy_caller(interface):
+    try:
+        # Find legacy caller, if present; has form:
+        # legacycaller TYPE [OPTIONAL_IDENTIFIER](OPTIONAL_ARGUMENTS)
+        caller = next(
+            method
+            for method in interface.operations
+            if 'legacycaller' in method.specials)
+        if not caller.name:
+            raise Exception('legacycaller with no identifier is not supported: '
+                            '%s' % interface.name)
+        return caller
+    except StopIteration:
+        return None
+
+
+################################################################################
 # Indexed properties
 # http://heycam.github.io/webidl/#idl-indexed-properties
 ################################################################################
@@ -561,7 +643,7 @@
             if ('getter' in method.specials and
                 len(method.arguments) == 1 and
                 str(method.arguments[0].idl_type) == 'DOMString'))
-        getter.name = getter.name or 'anonymousNamedGetter'
+        getter.name = getter.name or 'AnonymousNamedGetter'
         return getter
     except StopIteration:
         return None
@@ -595,6 +677,7 @@
         return None
 
 
+IdlInterface.legacy_caller = property(legacy_caller)
 IdlInterface.indexed_property_getter = property(indexed_property_getter)
 IdlInterface.indexed_property_setter = property(indexed_property_setter)
 IdlInterface.indexed_property_deleter = property(indexed_property_deleter)
diff --git a/bindings/tests/idls/core/ArrayBuffer.idl b/bindings/tests/idls/core/ArrayBuffer.idl
index 7878c57..c0203e1 100644
--- a/bindings/tests/idls/core/ArrayBuffer.idl
+++ b/bindings/tests/idls/core/ArrayBuffer.idl
@@ -5,7 +5,7 @@
 // https://www.khronos.org/registry/typedarray/specs/latest/#ARRAYBUFFER
 
 [
-    ImplementedAs=TestArrayBuffer,
+    ImplementedAs=TestArrayBuffer
 ] interface ArrayBuffer {
     readonly attribute unsigned long byteLength;
 };
diff --git a/bindings/tests/idls/core/ArrayBufferView.idl b/bindings/tests/idls/core/ArrayBufferView.idl
index e6e9262..3ea88e3 100644
--- a/bindings/tests/idls/core/ArrayBufferView.idl
+++ b/bindings/tests/idls/core/ArrayBufferView.idl
@@ -5,7 +5,7 @@
 // https://www.khronos.org/registry/typedarray/specs/latest/#ARRAYBUFFERVIEW
 
 [
-    ImplementedAs=TestArrayBufferView,
+    ImplementedAs=TestArrayBufferView
 ] interface ArrayBufferView {
     readonly attribute ArrayBuffer buffer;
     readonly attribute unsigned long byteOffset;
diff --git a/bindings/tests/idls/core/DataView.idl b/bindings/tests/idls/core/DataView.idl
index e26468d..d21b90b 100644
--- a/bindings/tests/idls/core/DataView.idl
+++ b/bindings/tests/idls/core/DataView.idl
@@ -5,7 +5,7 @@
 // https://www.khronos.org/registry/typedarray/specs/latest/#DATAVIEW
 
 [
-    ImplementedAs=TestDataView,
+    ImplementedAs=TestDataView
 ] interface DataView : ArrayBufferView {
     [RaisesException] octet getUint8(unsigned long byteOffset);
     [RaisesException] double getFloat64(unsigned long byteOffset, optional boolean littleEndian);
diff --git a/bindings/tests/idls/core/SVGTestInterface.idl b/bindings/tests/idls/core/SVGTestInterface.idl
index 81e8997..43fb132 100644
--- a/bindings/tests/idls/core/SVGTestInterface.idl
+++ b/bindings/tests/idls/core/SVGTestInterface.idl
@@ -28,11 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 // This test files starts with 'SVG' because /^SVG/ is used as a check
 // for SVG interfaces (to use SVGNames for [Reflect] attributes)
 [
-    DependentLifetime,
+    DependentLifetime
 ] interface SVGTestInterface {
     [Reflect] attribute DOMString type; // Test SVGNames namespace
 };
diff --git a/bindings/tests/idls/core/TestAttributeGetters.idl b/bindings/tests/idls/core/TestAttributeGetters.idl
new file mode 100644
index 0000000..0bb8eb4
--- /dev/null
+++ b/bindings/tests/idls/core/TestAttributeGetters.idl
@@ -0,0 +1,30 @@
+// Copyright 2017 The Chromium 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://heycam.github.io/webidl/#dfn-attribute-getter
+
+// Attribute getters must behave differently based on whether [LenientThis] has
+// been specified or whether the attribute's type is Promise<T>.
+// All attributes below are marked readonly because we are only interested in
+// the behavior of attribute getters.
+
+interface TestAttributeGetters {
+    // [LenientThis] causes some V8 type checks to be bypassed; they are done
+    // on the Blink side instead and access exceptions just return undefined.
+    [LenientThis] readonly attribute long lenientThisLongAttribute;
+
+    // Promise types must turn exceptions into promise rejections.
+    readonly attribute Promise<DOMString> stringPromiseAttribute;
+
+    // Mixing both should cause [LenientThis] to return without raising an
+    // exception if type checking fails.
+    [LenientThis] readonly attribute Promise<DOMString> lenientThisStringPromiseAttribute;
+
+    // [RaisesException] also creates an ExceptionState instance. Make sure it
+    // is not declared twice.
+    [RaisesException] readonly attribute Promise<short> raisesExceptionShortPromiseAttribute;
+
+    // Regular attribute with no special rules.
+    readonly attribute float floatAttribute;
+};
diff --git a/bindings/tests/idls/core/TestCallbackFunctions.idl b/bindings/tests/idls/core/TestCallbackFunctions.idl
new file mode 100644
index 0000000..10edce1
--- /dev/null
+++ b/bindings/tests/idls/core/TestCallbackFunctions.idl
@@ -0,0 +1,33 @@
+// 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.
+
+callback VoidCallbackFunction = void ();
+callback AnyCallbackFunctionOptionalAnyArg = any (optional any optionalAnyArg);
+callback LongCallbackFunction = long (long num1, long num2);
+
+// Following callback functions are to be generated as expected.
+callback VoidCallbackFunctionInterfaceArg = void (HTMLDivElement divElement);
+callback VoidCallbackFunctionDictionaryArg = void (TestDictionary arg);
+callback VoidCallbackFunctionTestInterfaceSequenceArg = void (sequence<TestInterface> arg);
+callback StringSequenceCallbackFunctionLongSequenceArg = sequence<DOMString> (sequence<long> arg);
+callback VoidCallbackFunctionEnumArg = void (TestEnum arg);
+callback VoidCallbackFunctionTypedef = void (String arg);
+
+interface TestCallbackFunctions {
+    // Extended attributes
+    [CustomElementCallbacks] readonly attribute long customElementsCallbacksReadonlyAttribute;
+
+    // Methods
+    VoidCallbackFunction returnCallbackFunctionMethod();
+    AnyCallbackFunctionOptionalAnyArg returnCallbackFunctionMethod2();
+
+    void voidMethodCallbackFunctionInArg(VoidCallbackFunction voidCallbackFunctionArg);
+    void voidMethodCallbackFunctionInArg2(AnyCallbackFunctionOptionalAnyArg anyCallbackFunctionOptionalAnyArgArg);
+    void voidMethodCallbackFunctionWithReturnValueInArg(LongCallbackFunction longCallbackFunctionArg);
+
+    void voidMethodOptionalCallbackFunctionInArg(optional VoidCallbackFunction voidCallbackFunctionArg);
+    void voidMethodNullableCallbackFunctionInArg(VoidCallbackFunction? voidCallbackFunctionArg);
+    // Extended attributes
+    [CustomElementCallbacks] void customElementCallbacksMethod();
+};
diff --git a/bindings/tests/idls/core/TestCallbackInterface.idl b/bindings/tests/idls/core/TestCallbackInterface.idl
index cebfa19..283ffb2 100644
--- a/bindings/tests/idls/core/TestCallbackInterface.idl
+++ b/bindings/tests/idls/core/TestCallbackInterface.idl
@@ -36,7 +36,4 @@
   void voidMethodTestInterfaceEmptyStringArg(TestInterfaceEmpty testInterfaceEmptyArg, DOMString stringArg);
   [CallWith=ThisValue] void callbackWithThisValueVoidMethodStringArg(DOMString stringArg);
   [Custom] void customVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
-  // [WillBeGarbageCollected]
-  void voidMethodWillBeGarbageCollectedSequenceArg(sequence<TestInterfaceWillBeGarbageCollected> sequenceArg);
-  void voidMethodWillBeGarbageCollectedArrayArg(TestInterfaceWillBeGarbageCollected[] arrayArg);
 };
diff --git a/bindings/tests/idls/core/TestConstants.idl b/bindings/tests/idls/core/TestConstants.idl
new file mode 100644
index 0000000..8c604a6
--- /dev/null
+++ b/bindings/tests/idls/core/TestConstants.idl
@@ -0,0 +1,39 @@
+// 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 TestConstants {
+    const unsigned short CONST_VALUE_ZERO = 0;
+    const unsigned short CONST_VALUE_ONE = 1;
+    const unsigned short CONST_VALUE_TWO = 2;
+    const short CONST_VALUE_NEGATIVE = -1;
+    const unsigned short CONST_VALUE_32_BITS = 0xffffffff;
+    const unsigned short CONST_VALUE_HEX = 0x01;
+    const unsigned short CONST_VALUE_HEX2 = 0X20;
+    const unsigned short CONST_VALUE_HEX3 = 0x1abc;
+    const unsigned short CONST_VALUE_OCT = 010;
+    const unsigned short CONST_VALUE_NEGATIVE_OCT = -010;
+    const unsigned short CONST_VALUE_NEGATIVE_HEX = -0x1A;
+    const unsigned short CONST_VALUE_NEGATIVE_HEX2 = -0X1a;  // lower case
+    const double CONST_VALUE_DECIMAL = 0.123;
+    const double CONST_VALUE_DECIMAL2 = 4e9;
+    const double CONST_VALUE_DECIMAL3 = 3.4e5;
+    const double CONST_VALUE_DECIMAL4 = .123;
+    const double CONST_VALUE_DECIMAL5 = 5E+4;
+    const double CONST_VALUE_NEGATIVE_DECIMAL = -1.3;
+    const double CONST_VALUE_NEGATIVE_DECIMAL2 = -4e-9;
+    const float CONST_VALUE_FLOAT = 1;
+
+    // Extended attributes
+    [DeprecateAs=Constant] const short DEPRECATED_CONSTANT = 1;
+    [MeasureAs=Constant] const short MEASURED_CONSTANT = 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;
+    [OriginTrialEnabled=FeatureName1] const short FEATURE1_ORIGIN_TRIAL_ENABLED_CONST1 = 6;
+    [OriginTrialEnabled=FeatureName1] const short FEATURE1_ORIGIN_TRIAL_ENABLED_CONST2 = 7;
+    [OriginTrialEnabled=FeatureName2] const short FEATURE2_ORIGIN_TRIAL_ENABLED_CONST1 = 8;
+    [OriginTrialEnabled=FeatureName2] const short FEATURE2_ORIGIN_TRIAL_ENABLED_CONST2 = 9;
+    [Reflect=CONST_IMPL] const short CONST_JAVASCRIPT = 1;
+};
diff --git a/bindings/tests/idls/core/TestDictionary.idl b/bindings/tests/idls/core/TestDictionary.idl
index 0ac0a68..136eb3d 100644
--- a/bindings/tests/idls/core/TestDictionary.idl
+++ b/bindings/tests/idls/core/TestDictionary.idl
@@ -14,13 +14,11 @@
     TestInterface? testInterfaceOrNullMember;
     TestInterfaceGarbageCollected testInterfaceGarbageCollectedMember;
     TestInterfaceGarbageCollected? testInterfaceGarbageCollectedOrNullMember;
-    TestInterfaceWillBeGarbageCollected testInterfaceWillBeGarbageCollectedMember;
-    TestInterfaceWillBeGarbageCollected? testInterfaceWillBeGarbageCollectedOrNullMember;
-    DOMString[] stringArrayMember;
     sequence<DOMString> stringSequenceMember = [];
+    sequence<[TreatNullAs=EmptyString] DOMString> treatNullAsStringSequenceMember = [];
     sequence<TestInterface> testInterfaceSequenceMember = [];
+    sequence<TestObject> testObjectSequenceMember;
     sequence<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedSequenceMember = [];
-    sequence<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedSequenceMember = [];
     TestEnum enumMember = "foo";
     sequence<TestEnum> enumSequenceMember;
     Element? elementOrNullMember;
@@ -28,6 +26,8 @@
     object? objectOrNullMember;
     [ImplementedAs=createMember] boolean create;
     [DeprecateAs=CreateMember, ImplementedAs=createMember] boolean deprecatedCreateMember;
+    // If done naively, collides with a C++ keyword.
+    [ImplementedAs=isPublic] boolean public;
     (double or DOMString) doubleOrStringMember = 3.14;
     sequence<(double or DOMString)> doubleOrStringSequenceMember;
     (double or DOMString) otherDoubleOrStringMember = "default string value";
@@ -37,5 +37,12 @@
     EventTarget eventTargetMember;
     any anyMember = null;
     Dictionary dictionaryMember;
-    [RuntimeEnabled=runtimeFeature] boolean runtimeMember;
+    [RuntimeEnabled=RuntimeFeature] boolean runtimeMember;
+    record<ByteString, byte> recordMember;
+    record<USVString, TestObject> garbageCollectedRecordMember;
+    record<ByteString, (long or boolean)> unionInRecordMember;
+    record<DOMString, any> anyInRecordMember;
+    (Float or BooleanType) unionWithTypedefs;
+    [Clamp] long applicableToTypeLongMember;
+    [TreatNullAs=EmptyString] DOMString applicableToTypeStringMember;
 };
diff --git a/bindings/tests/idls/core/TestDictionaryDerived.idl b/bindings/tests/idls/core/TestDictionaryDerived.idl
index 51817ef..4f274f1 100644
--- a/bindings/tests/idls/core/TestDictionaryDerived.idl
+++ b/bindings/tests/idls/core/TestDictionaryDerived.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ImplementedAs=TestDictionaryDerivedImplementedAs,
+    ImplementedAs=TestDictionaryDerivedImplementedAs
 ] dictionary TestDictionaryDerived : TestDictionary {
     DOMString derivedStringMember;
     DOMString derivedStringMemberWithDefault = "default string value";
diff --git a/bindings/tests/idls/core/TestException.idl b/bindings/tests/idls/core/TestException.idl
deleted file mode 100644
index 0c918b4..0000000
--- a/bindings/tests/idls/core/TestException.idl
+++ /dev/null
@@ -1,39 +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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-[
-    Constructor(unsigned short argument),
-    DoNotCheckConstants,
-] exception TestException {
-    readonly attribute unsigned short readonlyUnsignedShortAttribute;
-    readonly attribute DOMString readonlyStringAttribute;
-
-    const unsigned short UNSIGNED_SHORT_CONSTANT = 1;
-
-    [NotEnumerable] DOMString toString();
-};
diff --git a/bindings/tests/idls/core/TestImplements.idl b/bindings/tests/idls/core/TestImplements.idl
index ffe8372..601c050 100644
--- a/bindings/tests/idls/core/TestImplements.idl
+++ b/bindings/tests/idls/core/TestImplements.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface TestImplements {
     static readonly attribute long implementsStaticReadOnlyLongAttribute;
     static attribute DOMString implementsStaticStringAttribute;
@@ -45,4 +45,7 @@
     [Reflect=IMPLEMENTS_REFLECT_CONSTANT] const unsigned short IMPLEMENTS_CONSTANT_2 = 2;
 
     [RuntimeEnabled=ImplementsFeatureName] attribute Node implementsRuntimeEnabledNodeAttribute;
+
+    [NotEnumerable] stringifier;
+    [NotEnumerable, RaisesException] serializer;
 };
diff --git a/bindings/tests/idls/core/TestImplements2.idl b/bindings/tests/idls/core/TestImplements2.idl
index ce0e357..e3e7905 100644
--- a/bindings/tests/idls/core/TestImplements2.idl
+++ b/bindings/tests/idls/core/TestImplements2.idl
@@ -31,7 +31,7 @@
 [
     LegacyTreatAsPartialInterface, // Conflicts with default implements behavior
     NoInterfaceObject, // Always used on target of 'implements'
-    RuntimeEnabled=Implements2FeatureName, // conflicts with [RuntimeEnabled] on member
+    RuntimeEnabled=Implements2FeatureName // conflicts with [RuntimeEnabled] on member
 ] interface TestImplements2 {
     static attribute DOMString implements2StaticStringAttribute;
     attribute DOMString implements2StringAttribute;
diff --git a/bindings/tests/idls/core/TestImplements3.idl b/bindings/tests/idls/core/TestImplements3.idl
index 4d18506..dff66fd 100644
--- a/bindings/tests/idls/core/TestImplements3.idl
+++ b/bindings/tests/idls/core/TestImplements3.idl
@@ -5,7 +5,7 @@
 [
     LegacyTreatAsPartialInterface, // used by [ImplementedAs]
     ImplementedAs=TestImplements3Implementation, // Conflicts with default implements class name
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface TestImplements3 {
     attribute DOMString implements3StringAttribute;
     static attribute DOMString implements3StaticStringAttribute;
diff --git a/bindings/tests/idls/core/TestIntegerIndexed.idl b/bindings/tests/idls/core/TestIntegerIndexed.idl
index ddc9d20..606bf12 100644
--- a/bindings/tests/idls/core/TestIntegerIndexed.idl
+++ b/bindings/tests/idls/core/TestIntegerIndexed.idl
@@ -12,5 +12,7 @@
     [Custom] setter Node (DOMString name, Node value);
     [Custom] deleter boolean (DOMString name);
 
+    iterable <[Clamp] long, DOMString>;
+
     void voidMethodDocument(Document document);
 };
diff --git a/bindings/tests/idls/core/TestInterface.idl b/bindings/tests/idls/core/TestInterface.idl
index 58c1e12..ec52097 100644
--- a/bindings/tests/idls/core/TestInterface.idl
+++ b/bindings/tests/idls/core/TestInterface.idl
@@ -32,15 +32,14 @@
 // Also used as a target by TestObject
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterfaceImplementation,
-    Iterable,
-    OriginTrialEnabled=OriginTrialFeatureName,
     RuntimeEnabled=FeatureName,
-    SetWrapperReferenceTo(TestInterface referencedName),
-    Exposed=(Worker,Window),
+    ContextEnabled=FeatureName,
+    Exposed=(Worker,Window)
 ] interface TestInterface : TestInterfaceEmpty {
     // members needed to test [ImplementedAs], as this affect attribute
     // configuration and method configuration
@@ -57,6 +56,8 @@
     attribute unrestricted float unrestrictedFloatAttribute;
     attribute TestEnum testEnumAttribute;
     attribute DOMStringOrDouble stringOrDoubleAttribute;
+    attribute [EnforceRange] long withExtendedAttributeStringAttribute;
+    [ImplementedAs=CapitalImplementation] attribute Implementation uncapitalAttribute;
     [RuntimeEnabled=FeatureName] attribute long conditionalLongAttribute;
     [RuntimeEnabled=FeatureName] readonly attribute long conditionalReadOnlyLongAttribute;
     static attribute DOMString staticStringAttribute;
@@ -73,18 +74,15 @@
     [PerWorldBindings] void voidMethod();
 
     // Anonymous indexed property operations
-    [DoNotCheckSecurity] getter DOMString (unsigned long index);
+    [CrossOrigin] getter DOMString (unsigned long index);
     setter DOMString (unsigned long index, DOMString value);
     deleter boolean (unsigned long index);
 
     // Anonymous named property operations
-    [DoNotCheckSecurity] getter DOMString (DOMString name);
+    [CrossOrigin] getter DOMString (DOMString name);
     setter DOMString (DOMString name, DOMString value);
     deleter boolean (DOMString name);
 
-    [NotEnumerable] stringifier;
-    [NotEnumerable, RaisesException] serializer;
-
     // Per-method [Exposed] annotation support.
     void alwaysExposedMethod();
     [Exposed=Worker] void workerExposedMethod();
@@ -116,9 +114,24 @@
     Promise promiseMethodPartialOverload(Window window);
     static Promise staticPromiseMethodPartialOverload();
 
+    iterable<ByteString, long>;
+
     [LenientThis] attribute any lenientThisAttribute;
 
     [LegacyInterfaceTypeChecking] void legacyInterfaceTypeCheckingMethod(TestInterfaceEmpty testInterfaceEmptyArg);
+
+    [SecureContext] void secureContextMethod();
+    [SecureContext] attribute bool secureContextAttribute;
+    [SecureContext,RuntimeEnabled=SecureFeature] void secureContextRuntimeEnabledMethod();
+    [SecureContext,RuntimeEnabled=SecureFeature] attribute bool secureContextRuntimeEnabledAttribute;
+    [SecureContext,Exposed=Window] void secureContextWindowExposedMethod();
+    [SecureContext,Exposed=Window] attribute bool secureContextWindowExposedAttribute;
+    [SecureContext,Exposed=Worker] void secureContextWorkerExposedMethod();
+    [SecureContext,Exposed=Worker] attribute bool secureContextWorkerExposedAttribute;
+    [SecureContext,Exposed=Window,RuntimeEnabled=SecureFeature] void secureContextWindowExposedRuntimeEnabledMethod();
+    [SecureContext,Exposed=Window,RuntimeEnabled=SecureFeature] attribute bool secureContextWindowExposedRuntimeEnabledAttribute;
+    [SecureContext,Exposed=Worker,RuntimeEnabled=SecureFeature] void secureContextWorkerExposedRuntimeEnabledMethod();
+    [SecureContext,Exposed=Worker,RuntimeEnabled=SecureFeature] attribute bool secureContextWorkerExposedRuntimeEnabledAttribute;
 };
 
 TestInterface implements TestImplements;
diff --git a/bindings/tests/idls/core/TestInterface2.idl b/bindings/tests/idls/core/TestInterface2.idl
index 18ab03f..30ed232 100644
--- a/bindings/tests/idls/core/TestInterface2.idl
+++ b/bindings/tests/idls/core/TestInterface2.idl
@@ -34,16 +34,19 @@
 // The more *minor* extended attribute should be put in this file.
 
 [
+    ActiveScriptWrappable, // Covered by [ActiveScriptWrappable]
     Constructor,
     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.
-    Exposed(Window FeatureName), // Conflicts with Exposed=(Window,Worker)
+    Exposed(Window FeatureName) // Conflicts with Exposed=(Window,Worker)
 ] interface TestInterface2 {
     // This interface has only runtime enabled constants.
     [RuntimeEnabled=FeatureName] const unsigned short CONST_VALUE_1 = 1;
 
+    // Legacy caller with an identifier
+    legacycaller TestInterfaceEmpty legacyCaller(unsigned long index);
+
     // Indexed property operations with an identifier
     [RaisesException] getter TestInterfaceEmpty item(unsigned long index);
     [RaisesException] setter TestInterfaceEmpty setItem(unsigned long index, TestInterfaceEmpty value);
diff --git a/bindings/tests/idls/core/TestInterface3.idl b/bindings/tests/idls/core/TestInterface3.idl
index 4470f7c..8b9e423 100644
--- a/bindings/tests/idls/core/TestInterface3.idl
+++ b/bindings/tests/idls/core/TestInterface3.idl
@@ -34,9 +34,12 @@
 // The more *minor* extended attribute should be put in this file.
 
 [
-    Custom=VisitDOMWrapper, // Conflict with [SetWrapperReferenceTo] and [SetWrapperReferenceFrom]
-    NoImplHeader,
+    WebAgentAPI
 ] interface TestInterface3 {
+    // iterable<V> needs a "length" property accompanying the indexed property
+    // getter below.
+    readonly attribute unsigned long length;
+
     [Custom] getter boolean (unsigned long index);
     [Custom] setter boolean (unsigned long index, Node value);
     [Custom] deleter boolean (unsigned long index);
@@ -48,5 +51,6 @@
     void voidMethodDocument(Document document);
 
     [RuntimeEnabled=FeatureName] iterable<any>;
-    [RuntimeEnabled=FeatureName, CallWith=ScriptState, RaisesException, ImplementedAs=iterableKeys] Iterator keys();
+
+    stringifier readonly attribute DOMString readonlyStringifierAttribute;
 };
diff --git a/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl b/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
index 5aaf41d..fd04326 100644
--- a/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
+++ b/bindings/tests/idls/core/TestInterfaceCheckSecurity.idl
@@ -28,19 +28,18 @@
 
 [
     CheckSecurity=Receiver,
-    Global,
+    Global
 ] interface TestInterfaceCheckSecurity {
     readonly attribute long readonlyLongAttribute;
     attribute long longAttribute;
     void voidMethod();
 
-    [DoNotCheckSecurity] attribute long doNotCheckSecurityLongAttribute;
-    [DoNotCheckSecurity] readonly attribute long doNotCheckSecurityReadonlyLongAttribute; // Separate read only attribute to check attribute configuration
-    [DoNotCheckSecurity=Setter] attribute long doNotCheckSecurityOnSetterLongAttribute;
-    [DoNotCheckSecurity, Replaceable] readonly attribute long doNotCheckSecurityReplaceableReadonlyLongAttribute;
+    [CrossOrigin] attribute long doNotCheckSecurityLongAttribute;
+    [CrossOrigin] readonly attribute long doNotCheckSecurityReadonlyLongAttribute; // Separate read only attribute to check attribute configuration
+    [CrossOrigin=Setter] attribute long doNotCheckSecurityOnSetterLongAttribute;
+    [CrossOrigin, Replaceable] readonly attribute long doNotCheckSecurityReplaceableReadonlyLongAttribute;
 
-    [DoNotCheckSecurity] void doNotCheckSecurityVoidMethod();
-    [DoNotCheckSecurity, DoNotCheckSignature] void doNotCheckSecurityDoNotCheckSignatureVoidMethod();
-    [DoNotCheckSecurity, PerWorldBindings] void doNotCheckSecurityPerWorldBindingsVoidMethod();
-    [DoNotCheckSecurity, Unforgeable] void doNotCheckSecurityUnforgeableVoidMethod();
+    [CrossOrigin] void doNotCheckSecurityVoidMethod();
+    [CrossOrigin, PerWorldBindings] void doNotCheckSecurityPerWorldBindingsVoidMethod();
+    [CrossOrigin, Unforgeable] void doNotCheckSecurityUnforgeableVoidMethod();
 };
diff --git a/bindings/tests/idls/core/TestInterfaceConstructor.idl b/bindings/tests/idls/core/TestInterfaceConstructor.idl
index 29878ae..e60065d 100644
--- a/bindings/tests/idls/core/TestInterfaceConstructor.idl
+++ b/bindings/tests/idls/core/TestInterfaceConstructor.idl
@@ -46,6 +46,6 @@
     NamedConstructor=Audio(DOMString arg, optional DOMString optArg),
     ConstructorCallWith=(ScriptState,ExecutionContext,Document),
     MeasureAs=TestFeature,
-    RaisesException=Constructor,
+    RaisesException=Constructor
 ] interface TestInterfaceConstructor {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceConstructor2.idl b/bindings/tests/idls/core/TestInterfaceConstructor2.idl
index 209a000..097b27c 100644
--- a/bindings/tests/idls/core/TestInterfaceConstructor2.idl
+++ b/bindings/tests/idls/core/TestInterfaceConstructor2.idl
@@ -47,6 +47,6 @@
         [Default=Undefined] optional DOMString defaultUndefinedOptionalStringArg,
         optional DOMString defaultNullStringOptionalStringArg = null,
         [Default=Undefined] optional Dictionary defaultUndefinedOptionalDictionaryArg,
-        optional DOMString optionalStringArg),
+        optional DOMString optionalStringArg)
 ] interface TestInterfaceConstructor2 {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceConstructor3.idl b/bindings/tests/idls/core/TestInterfaceConstructor3.idl
index 19b6669..00d23be 100644
--- a/bindings/tests/idls/core/TestInterfaceConstructor3.idl
+++ b/bindings/tests/idls/core/TestInterfaceConstructor3.idl
@@ -30,6 +30,6 @@
 
 // Test for length > 0, non-overloaded constructor.
 [
-    Constructor(DOMString stringArg),
+    Constructor(DOMString stringArg)
 ] interface TestInterfaceConstructor3 {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceConstructor4.idl b/bindings/tests/idls/core/TestInterfaceConstructor4.idl
index 2153167..e6980fb 100644
--- a/bindings/tests/idls/core/TestInterfaceConstructor4.idl
+++ b/bindings/tests/idls/core/TestInterfaceConstructor4.idl
@@ -6,6 +6,6 @@
 // argument.
 [
     Constructor(TestInterfaceConstructor4 testInterface4Arg),
-    Constructor(USVString usvStringArg),
+    Constructor(USVString usvStringArg)
 ] interface TestInterfaceConstructor4 {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceCustomConstructor.idl b/bindings/tests/idls/core/TestInterfaceCustomConstructor.idl
index dba8b7a..35fccd7 100644
--- a/bindings/tests/idls/core/TestInterfaceCustomConstructor.idl
+++ b/bindings/tests/idls/core/TestInterfaceCustomConstructor.idl
@@ -31,6 +31,6 @@
 [
     CustomConstructor,
     CustomConstructor(TestInterfaceEmpty testInterfaceEmptyArg),
-    CustomConstructor(double doubleArg, optional double optionalDoubleArg),
+    CustomConstructor(double doubleArg, optional double optionalDoubleArg)
 ] interface TestInterfaceCustomConstructor {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceEventInitConstructor.idl b/bindings/tests/idls/core/TestInterfaceEventInitConstructor.idl
index 2fa3746..0e30790 100644
--- a/bindings/tests/idls/core/TestInterfaceEventInitConstructor.idl
+++ b/bindings/tests/idls/core/TestInterfaceEventInitConstructor.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    Constructor(DOMString type, TestInterfaceEventInit testInterfaceEventInit),
+    Constructor(DOMString type, TestInterfaceEventInit testInterfaceEventInit)
 ] interface TestInterfaceEventInitConstructor : Event {
     readonly attribute DOMString readonlyStringAttribute;
 };
diff --git a/bindings/tests/idls/core/TestInterfaceEventTarget.idl b/bindings/tests/idls/core/TestInterfaceEventTarget.idl
index 742c6d7..f86dbfd 100644
--- a/bindings/tests/idls/core/TestInterfaceEventTarget.idl
+++ b/bindings/tests/idls/core/TestInterfaceEventTarget.idl
@@ -30,6 +30,6 @@
 
 [
     NamedConstructor=Name(),
-    ConstructorCallWith=Document,
+    ConstructorCallWith=Document
 ] interface TestInterfaceEventTarget : EventTarget {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceGarbageCollected.idl b/bindings/tests/idls/core/TestInterfaceGarbageCollected.idl
index 216cbed..7e5313d 100644
--- a/bindings/tests/idls/core/TestInterfaceGarbageCollected.idl
+++ b/bindings/tests/idls/core/TestInterfaceGarbageCollected.idl
@@ -3,11 +3,10 @@
 // found in the LICENSE file.
 
 [
-    Constructor(DOMString str),
-    GarbageCollected,
+    Constructor(DOMString str)
 ] interface TestInterfaceGarbageCollected : EventTarget { // Inherit from EventTarget to test order of internal fields
     attribute TestInterfaceGarbageCollected attr1;
     void func(TestInterfaceGarbageCollected arg);
 
-    setlike<DOMString>;
+    setlike<[TreatNullAs=EmptyString] DOMString>;
 };
diff --git a/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl b/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
index 1185fab..4d57a70 100644
--- a/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
+++ b/bindings/tests/idls/core/TestInterfaceNamedConstructor.idl
@@ -27,6 +27,7 @@
  */
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
     NamedConstructor=Audio(
         DOMString stringArg,
@@ -36,7 +37,7 @@
         optional DOMString defaultNullStringOptionalstringArg = null,
         optional DOMString optionalStringArg),
     ConstructorCallWith=Document,
-    RaisesException=Constructor,
+    RaisesException=Constructor
 ] interface TestInterfaceNamedConstructor {
     // An attribute of type {interface_name}ConstructorConstructor is generated
     // in *Constructors.idl file, which is a partial interface for the global
diff --git a/bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl b/bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl
index 1494ffd..1f3aa01 100644
--- a/bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl
+++ b/bindings/tests/idls/core/TestInterfaceNamedConstructor2.idl
@@ -30,6 +30,6 @@
 
 // "Number of arguments" check varies if [RaisesException=Constructor] or not
 [
-    NamedConstructor=Audio(DOMString stringArg),
+    NamedConstructor=Audio(DOMString stringArg)
 ] interface TestInterfaceNamedConstructor2 {
 };
diff --git a/bindings/tests/idls/core/TestInterfaceOriginTrialEnabled.idl b/bindings/tests/idls/core/TestInterfaceOriginTrialEnabled.idl
new file mode 100644
index 0000000..959db4b
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfaceOriginTrialEnabled.idl
@@ -0,0 +1,25 @@
+// 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.
+
+// Test for [OriginTrialEnabled] extended attribute applied to an interface.
+// This is separate from TestInterface (and TestInterface[2|3]), as the
+// [OriginTrialEnabled] attribute takes precedence over [RuntimeEnabled].
+
+[
+    OriginTrialEnabled=InterfaceFeatureName
+] interface TestInterfaceOriginTrialEnabled {
+    const unsigned long UNSIGNED_LONG = 0;
+    const short CONST_JAVASCRIPT = 1;
+
+    attribute double doubleAttribute;
+    [RuntimeEnabled=FeatureName] attribute long conditionalLongAttribute;
+    [RuntimeEnabled=FeatureName] readonly attribute long conditionalReadOnlyLongAttribute;
+    static attribute DOMString staticStringAttribute;
+    [RuntimeEnabled=FeatureName] static readonly attribute long staticConditionalReadOnlyLongAttribute;
+
+    void voidMethodDoubleArgFloatArg(double doubleArg, float floatArg);
+
+    void voidMethodPartialOverload();
+    void voidMethodPartialOverload(double doubleArg);
+};
diff --git a/bindings/tests/idls/core/TestInterfacePartial.idl b/bindings/tests/idls/core/TestInterfacePartial.idl
new file mode 100644
index 0000000..fe896b2
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfacePartial.idl
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+enum PartialEnumType {
+    "foo",
+    "bar"
+};
+
+typedef DOMString PartialString;
+
+[Custom] callback PartialCallbackType = void (PartialString value);
+[
+    ImplementedAs=TestInterfacePartial,
+    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;
+    [CallWith=ExecutionContext] attribute long partialCallWithExecutionContextLongAttribute;
+
+    void partialVoidMethod();
+    static void partialStaticVoidMethod();
+    void partialVoidMethodLongArg(long longArg);
+    [CallWith=ExecutionContext, RaisesException] void partialCallWithExecutionContextRaisesExceptionVoidMethod();
+
+    attribute PartialEnumType partialPartialEnumTypeAttribute;
+    void partialVoidMethodPartialCallbackTypeArg(PartialCallbackType partialCallbackTypeArg);
+
+    [SecureContext] attribute long partialSecureContextLongAttribute;
+};
diff --git a/bindings/tests/idls/core/TestInterfacePartial2.idl b/bindings/tests/idls/core/TestInterfacePartial2.idl
new file mode 100644
index 0000000..59993ef
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfacePartial2.idl
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+[
+    ImplementedAs=TestInterfacePartial2Implementation // Conflicts with default partial interface class name
+] partial interface TestInterface {
+    const unsigned short PARTIAL2_UNSIGNED_SHORT = 0;
+
+    attribute long partial2LongAttribute;
+    static attribute long partial2StaticLongAttribute;
+
+    void partial2VoidMethod();
+    static void partial2StaticVoidMethod();
+
+    [SecureContext] void partial2SecureContextMethod();
+    [SecureContext] attribute bool partial2SecureContextAttribute;
+};
diff --git a/bindings/tests/idls/core/TestInterfacePartialSecureContext.idl b/bindings/tests/idls/core/TestInterfacePartialSecureContext.idl
new file mode 100644
index 0000000..8b22d79
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfacePartialSecureContext.idl
@@ -0,0 +1,22 @@
+// 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.
+
+[
+    SecureContext,
+    Exposed=(Window,Worker),
+    ImplementedAs=TestInterfacePartialSecureContext // Conflicts with default partial interface class name
+] partial interface TestInterface {
+    void partialSecureContextMethod();
+    attribute bool partialSecureContextAttribute;
+    [RuntimeEnabled=SecureFeature] void partialSecureContextRuntimeEnabledMethod();
+    [RuntimeEnabled=SecureFeature] attribute bool partialSecureContextRuntimeEnabledAttribute;
+    [Exposed=Window] void partialSecureContextWindowExposedMethod();
+    [Exposed=Window] attribute bool partialSecureContextWindowExposedAttribute;
+    [Exposed=Worker] void partialSecureContextWorkerExposedMethod();
+    [Exposed=Worker] attribute bool partialSecureContextWorkerExposedAttribute;
+    [Exposed=Window,RuntimeEnabled=SecureFeature] void partialSecureContextWindowExposedRuntimeEnabledMethod();
+    [Exposed=Window,RuntimeEnabled=SecureFeature] attribute bool partialSecureContextWindowExposedRuntimeEnabledAttribute;
+    [Exposed=Worker,RuntimeEnabled=SecureFeature] void partialSecureContextWorkerExposedRuntimeEnabledMethod();
+    [Exposed=Worker,RuntimeEnabled=SecureFeature] attribute bool partialSecureContextWorkerExposedRuntimeEnabledAttribute;
+};
diff --git a/bindings/tests/idls/core/TestInterfaceSecureContext.idl b/bindings/tests/idls/core/TestInterfaceSecureContext.idl
new file mode 100644
index 0000000..e43c2b2
--- /dev/null
+++ b/bindings/tests/idls/core/TestInterfaceSecureContext.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.
+
+[
+    SecureContext,
+    Exposed=(Window,Worker)
+] interface TestInterfaceSecureContext {
+    void secureContextMethod();
+    attribute bool secureContextAttribute;
+    [RuntimeEnabled=SecureFeature] void secureContextRuntimeEnabledMethod();
+    [RuntimeEnabled=SecureFeature] attribute bool secureContextRuntimeEnabledAttribute;
+    [Exposed=Window] void secureContextWindowExposedMethod();
+    [Exposed=Window] attribute bool secureContextWindowExposedAttribute;
+    [Exposed=Worker] void secureContextWorkerExposedMethod();
+    [Exposed=Worker] attribute bool secureContextWorkerExposedAttribute;
+    [Exposed=Window,RuntimeEnabled=SecureFeature] void secureContextWindowExposedRuntimeEnabledMethod();
+    [Exposed=Window,RuntimeEnabled=SecureFeature] attribute bool secureContextWindowExposedRuntimeEnabledAttribute;
+    [Exposed=Worker,RuntimeEnabled=SecureFeature] void secureContextWorkerExposedRuntimeEnabledMethod();
+    [Exposed=Worker,RuntimeEnabled=SecureFeature] attribute bool secureContextWorkerExposedRuntimeEnabledAttribute;
+};
diff --git a/bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.idl b/bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.idl
deleted file mode 100644
index 8515a03..0000000
--- a/bindings/tests/idls/core/TestInterfaceWillBeGarbageCollected.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-[
-    Constructor(DOMString str),
-    NamedConstructor=TestInterface(DOMString str),
-    WillBeGarbageCollected,
-    Unforgeable,
-] interface TestInterfaceWillBeGarbageCollected : EventTarget { // Inherit from EventTarget to test order of internal fields
-    attribute TestInterfaceWillBeGarbageCollected attr1;
-    void func(TestInterfaceWillBeGarbageCollected arg);
-};
diff --git a/bindings/tests/idls/core/TestLegacyCallbackInterface.idl b/bindings/tests/idls/core/TestLegacyCallbackInterface.idl
new file mode 100644
index 0000000..78d7a1a
--- /dev/null
+++ b/bindings/tests/idls/core/TestLegacyCallbackInterface.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+callback interface TestLegacyCallbackInterface {
+  const unsigned short CONST_VALUE_USHORT_42 = 42;
+
+  unsigned short acceptNode(Node node);
+};
diff --git a/bindings/tests/idls/core/TestNode.idl b/bindings/tests/idls/core/TestNode.idl
index 0c767ee..3317c32 100644
--- a/bindings/tests/idls/core/TestNode.idl
+++ b/bindings/tests/idls/core/TestNode.idl
@@ -19,11 +19,11 @@
  */
 
 [
-    Constructor,
+    Constructor
 ] interface TestNode : Node {
     // These attributes are needed to test [PutForwards] in TestObject.idl.
     attribute DOMString href;
     [RaisesException=Setter] attribute DOMString hrefThrows;
-    [SetterCallWith=(ExecutionContext,ActiveWindow,FirstWindow)] attribute DOMString hrefCallWith;
+    [SetterCallWith=(ExecutionContext,CurrentWindow,EnteredWindow)] attribute DOMString hrefCallWith;
     attribute ByteString hrefByteString;
 };
diff --git a/bindings/tests/idls/core/TestObject.idl b/bindings/tests/idls/core/TestObject.idl
index 4e37b82..fe4069e 100644
--- a/bindings/tests/idls/core/TestObject.idl
+++ b/bindings/tests/idls/core/TestObject.idl
@@ -29,51 +29,10 @@
  */
 
 enum TestEnum {"", "EnumValue1", "EnumValue2", "EnumValue3"};
-
-callback VoidCallbackFunction = void ();
-callback AnyCallbackFunctionOptionalAnyArg = any (optional any optionalAnyArg);
+enum TestEnum2 {"", "EnumValue1", "EnumValue2", "EnumValue3"};
 
 // No extended attributes on the interface; those go in TestInterface.idl
 interface TestObject {
-    // Constants
-    const unsigned short CONST_VALUE_0 = 0;
-    const unsigned short CONST_VALUE_1 = 1;
-    const unsigned short CONST_VALUE_2 = 2;
-    const unsigned short CONST_VALUE_4 = 4;
-    const unsigned short CONST_VALUE_8 = 8;
-    const short CONST_VALUE_9 = -1;
-    const unsigned short CONST_VALUE_11 = 0xffffffff;
-    const unsigned short CONST_VALUE_12 = 0x01;
-    const unsigned short CONST_VALUE_13 = 0X20;
-    const unsigned short CONST_VALUE_14 = 0x1abc;
-    const unsigned short CONST_VALUE_15 = 010;
-    const unsigned short CONST_VALUE_16 = -010;
-    const unsigned short CONST_VALUE_16 = -0x1A;
-    const unsigned short CONST_VALUE_17 = -0X1a;
-    const double CONST_VALUE_18 = 0.123;
-    const double CONST_VALUE_19 = 4e9;
-    const double CONST_VALUE_20 = 3.4e5;
-    const double CONST_VALUE_21 = -1.3;
-    const double CONST_VALUE_22 = -4e-9;
-    const double CONST_VALUE_23 = .123;
-    const double CONST_VALUE_24 = 5E+4;
-    const float CONST_VALUE_25 = 1;
-
-    // Extended attributes
-    [DeprecateAs=Constant] const short DEPRECATED_CONSTANT = 1;
-    [MeasureAs=Constant] const short MEASURED_CONSTANT = 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;
 
     // Attributes
@@ -84,7 +43,7 @@
     // [Foo] attribute DOMString? fooStringOrNullAttribute
     //
     // Type name reference:
-    // http://heycam.github.io/webidl/#dfn-type-name
+    // https://heycam.github.io/webidl/#dfn-type-name
     //
     // TestInterfaceEmpty is used as a stub interface type, for testing behavior
     // that should not depend on particular type (beyond "interface or not").
@@ -115,9 +74,6 @@
     attribute TestInterfaceEmpty testInterfaceEmptyAttribute;
     // Self-reference
     attribute TestObject testObjectAttribute;
-    // Callback function type
-    attribute VoidCallbackFunction voidCallbackFunctionAttribute;
-    attribute AnyCallbackFunctionOptionalAnyArg anyCallbackFunctionOptionalAnyArgAttribute;
     // Names that begin with an acronym
     attribute long cssAttribute;
     attribute long imeAttribute;
@@ -148,11 +104,11 @@
     readonly attribute Window readonlyWindowAttribute;
     readonly attribute HTMLCollection htmlCollectionAttribute;
     readonly attribute HTMLElement htmlElementAttribute;
-    // Arrays
-    attribute DOMString[] stringArrayAttribute;
-    attribute TestInterfaceEmpty[] testInterfaceEmptyArrayAttribute;
-    attribute float[] floatArrayAttribute;
+    // FrozenArrays
+    attribute FrozenArray<DOMString> stringFrozenArrayAttribute;
+    attribute FrozenArray<TestInterfaceEmpty> testInterfaceEmptyFrozenArrayAttribute;
     // Nullable attributes
+    attribute boolean? booleanOrNullAttribute;
     attribute DOMString? stringOrNullAttribute;
     attribute long? longOrNullAttribute;
     attribute TestInterface? testInterfaceOrNullAttribute;
@@ -171,13 +127,14 @@
     attribute (DOMString or sequence<DOMString>) stringOrStringSequenceAttribute;
     attribute (TestEnum or double) testEnumOrDoubleAttribute;
     attribute (unrestricted double or DOMString) unrestrictedDoubleOrStringAttribute;
+    attribute ((double or DOMString) or sequence<(double or DOMString)>) nestedUnionAtribute;
 
     // Extended attributes
     [LogActivity, LogAllWorlds] attribute long activityLoggingAccessForAllWorldsLongAttribute;
     [LogActivity=GetterOnly, LogAllWorlds] attribute long activityLoggingGetterForAllWorldsLongAttribute;
     [LogActivity=SetterOnly, LogAllWorlds] attribute long activityLoggingSetterForAllWorldsLongAttribute;
     [CachedAttribute=isValueDirty] attribute any cachedAttributeAnyAttribute;
-    [CachedAttribute=isArrayDirty] attribute DOMString[] cachedArrayAttribute;
+    [CachedAttribute=isFrozenArrayDirty] attribute FrozenArray<DOMString> cachedArrayAttribute;
     [CachedAttribute=isStringDirty] attribute DOMString? cachedStringOrNoneAttribute;
     [CallWith=ExecutionContext] attribute any callWithExecutionContextAnyAttribute;
     [CallWith=ScriptState] attribute any callWithScriptStateAnyAttribute;
@@ -191,16 +148,15 @@
     [Custom=Getter] attribute long customGetterLongAttribute;
     [Custom=Getter] readonly attribute object customGetterReadonlyObjectAttribute;
     [Custom=Setter] attribute long customSetterLongAttribute;
-    [CustomElementCallbacks] readonly attribute long customElementsCallbacksReadonlyLongAttribute;
     [DeprecateAs=LongAttribute] attribute long deprecatedLongAttribute;
     [EnforceRange] attribute long enforceRangeLongAttribute;
-    [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;
     [Custom=Setter, ImplementedAs=implementedAsNameWithCustomGetter] attribute long customSetterImplementedAsLongAttribute;
     [MeasureAs=TestFeature] attribute long measureAsLongAttribute;
     [NotEnumerable] attribute long notEnumerableLongAttribute;
+    [OriginTrialEnabled=FeatureName] attribute long originTrialEnabledLongAttribute;
     [PerWorldBindings] readonly attribute TestInterfaceEmpty perWorldBindingsReadonlyTestInterfaceEmptyAttribute;
     [LogActivity, LogAllWorlds, PerWorldBindings] attribute long activityLoggingAccessPerWorldBindingsLongAttribute;
     [LogActivity, PerWorldBindings] attribute long activityLoggingAccessForIsolatedWorldsPerWorldBindingsLongAttribute;
@@ -213,7 +169,6 @@
     [PerWorldBindings, PutForwards=href] readonly attribute TestNode locationWithPerWorldBindings;
     [PutForwards=href, LegacyInterfaceTypeChecking] readonly attribute TestNode locationLegacyInterfaceTypeChecking;
     [PutForwards=attr1] readonly attribute TestInterfaceGarbageCollected locationGarbageCollected;
-    [PutForwards=attr1] readonly attribute TestInterfaceWillBeGarbageCollected locationWillBeGarbageCollected;
     [RaisesException] attribute long raisesExceptionLongAttribute;
     [RaisesException=Getter] attribute long raisesExceptionGetterLongAttribute;
     [RaisesException=Setter] attribute long setterRaisesExceptionLongAttribute;
@@ -242,14 +197,16 @@
     [Reflect, ReflectOnly=("ltr","rtl","auto"), ReflectMissing="auto", ReflectInvalid="ltr"] attribute DOMString limitedWithInvalidMissingDefaultAttribute;
     [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] readonly attribute DOMString corsSettingAttribute;
     [Reflect, ReflectOnly=("empty","missing","invalid","a-normal"), ReflectEmpty="empty", ReflectMissing="missing", ReflectInvalid="invalid"] readonly attribute DOMString limitedWithEmptyMissingInvalidAttribute;
+    [RuntimeCallStatsCounter=RuntimeCallStatsCounterAttribute] attribute long RuntimeCallStatsCounterAttribute;
+    [RuntimeCallStatsCounter=RuntimeCallStatsCounterReadOnlyAttribute] readonly attribute double RuntimeCallStatsCounterReadOnlyAttribute;
 
     [Replaceable] readonly attribute long replaceableReadonlyLongAttribute;
     [PutForwards=href] readonly attribute TestNode locationPutForwards;
     [RuntimeEnabled=FeatureName] attribute long runtimeEnabledLongAttribute;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString setterCallWithActiveWindowAndFirstWindowStringAttribute;
+    [SetterCallWith=(CurrentWindow,EnteredWindow)] attribute DOMString setterCallWithCurrentWindowAndEnteredWindowStringAttribute;
     [SetterCallWith=ExecutionContext] attribute DOMString setterCallWithExecutionContextStringAttribute;
-    [TreatNullAs=EmptyString] attribute DOMString treatNullAsEmptyStringStringAttribute;
-    [TreatNullAs=NullString] attribute DOMString treatNullAsNullStringStringAttribute;
+    attribute [TreatNullAs=EmptyString] DOMString treatNullAsEmptyStringStringAttribute;
+    attribute [TreatNullAs=NullString] DOMString treatNullAsNullStringStringAttribute;
     [LegacyInterfaceTypeChecking] attribute float legacyInterfaceTypeCheckingFloatAttribute; // nop for non-interface types
     [LegacyInterfaceTypeChecking] attribute TestInterface legacyInterfaceTypeCheckingTestInterfaceAttribute;
     [LegacyInterfaceTypeChecking] attribute TestInterface? legacyInterfaceTypeCheckingTestInterfaceOrNullAttribute;
@@ -257,20 +214,21 @@
     [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();
-
+    [SameObject] readonly attribute TestInterface sameObjectAttribute;
+    [SameObject, SaveSameObject] readonly attribute TestInterface saveSameObjectAttribute;
+    [SameObject, SaveSameObject] static readonly attribute TestInterface staticSaveSameObjectAttribute;
+    [Unscopable] attribute long unscopableLongAttribute;
+    [Unscopable, OriginTrialEnabled=FeatureName] attribute long unscopableOriginTrialEnabledLongAttribute;
+    [Unscopable, RuntimeEnabled=FeatureName] attribute long unscopableRuntimeEnabledLongAttribute;
+    [Unscopable] void unscopableVoidMethod();
+    [Unscopable, RuntimeEnabled=FeatureName] void unscopableRuntimeEnabledVoidMethod();
 
     // Methods
     //
     // Naming convention:
     // ReturnType returnTypeMethodTypeName1ArgTypeName2Arg(Type1 typeName1Arg, Type2 typeName2Arg);
     // E.g.,
-    // void voidMethodStringArgLongArrayArg(DOMString stringArg, long[] longArrayArg);
+    // void voidMethodStringArgLongSequenceArg(DOMString stringArg, sequence<long> longSequenceArg);
     void voidMethod();
     static void staticVoidMethod();
 
@@ -313,13 +271,6 @@
     TestInterfaceEmpty testInterfaceEmptyMethod();
     void voidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
     void voidMethodLongArgTestInterfaceEmptyArg(long longArg, TestInterfaceEmpty testInterfaceEmptyArg);
-    // Callback function type
-    VoidCallbackFunction voidCallbackFunctionMethod();
-    AnyCallbackFunctionOptionalAnyArg anyCallbackFunctionOptionalAnyArgMethod();
-    void voidMethodVoidCallbackFunctionArg(VoidCallbackFunction voidCallbackFunctionArg);
-    void voidMethodOptionalVoidCallbackFunctionArg(optional VoidCallbackFunction voidCallbackFunctionArg);
-    void voidMethodNullableVoidCallbackFunctionArg(VoidCallbackFunction? voidCallbackFunctionArg);
-    void voidMethodAnyCallbackFunctionOptionalAnyArg(AnyCallbackFunctionOptionalAnyArg anyCallbackFunctionOptionalAnyArgArg);
     // Custom type conversions
     any anyMethod();
     void voidMethodEventTargetArg(EventTarget eventTargetArg);
@@ -333,6 +284,7 @@
     // Typed arrays
     ArrayBuffer arrayBufferMethod();
     ArrayBufferView arrayBufferViewMethod();
+    [RaisesException] ArrayBufferView arrayBufferViewMethodRaisesException();
     Float32Array float32ArrayMethod();
     Int32Array int32ArrayMethod();
     Uint8Array uint8ArrayMethod();
@@ -344,14 +296,8 @@
     void voidMethodFloat32ArrayArg(Float32Array float32ArrayArg);
     void voidMethodInt32ArrayArg(Int32Array int32ArrayArg);
     void voidMethodUint8ArrayArg(Uint8Array uint8ArrayArg);
-    // Arrays
-    long[] longArrayMethod();
-    DOMString[] stringArrayMethod();
-    TestInterfaceEmpty[] testInterfaceEmptyArrayMethod();
-    void voidMethodArrayLongArg(long[] arrayLongArg);
-    void voidMethodArrayStringArg(DOMString[] arrayStringArg);
-    void voidMethodArrayTestInterfaceEmptyArg(TestInterfaceEmpty[] arrayTestInterfaceEmptyArg);
-    void voidMethodNullableArrayLongArg(long[]? arrayLongArg);
+    void voidMethodAllowSharedArrayBufferViewArg([AllowShared] ArrayBufferView arrayBufferViewArg);
+    void voidMethodAllowSharedUint8ArrayArg([AllowShared] Uint8Array uint8ArrayArg);
     // Sequences
     sequence<long> longSequenceMethod();
     sequence<DOMString> stringSequenceMethod();
@@ -361,6 +307,10 @@
     void voidMethodSequenceTestInterfaceEmptyArg(sequence<TestInterfaceEmpty> testInterfaceEmptySequenceArg);
     void voidMethodSequenceSequenceDOMStringArg(sequence<sequence<DOMString>> stringSequenceSequenceArg);
     void voidMethodNullableSequenceLongArg(sequence<long>? longSequenceArg);
+    // FrozenArrays
+    FrozenArray<long> longFrozenArrayMethod();
+    void voidMethodStringFrozenArrayMethod(FrozenArray<DOMString> stringFrozenArrayArg);
+    void voidMethodTestInterfaceEmptyFrozenArrayMethod(FrozenArray<TestInterfaceEmpty> testInterfaceEmptyFrozenArrayArg);
     // Nullable types
     long? nullableLongMethod();
     DOMString? nullableStringMethod();
@@ -368,14 +318,18 @@
     sequence<long>? nullableLongSequenceMethod();
     // Union types
     (TestInterfaceGarbageCollected or DOMString) testInterfaceGarbageCollectedOrDOMStringMethod();
-    (TestInterfaceWillBeGarbageCollected or TestDictionary) testInterfaceWillBeGarbageCollectedOrTestDictionaryMethod();
     (boolean or DOMString or unrestricted double) booleanOrDOMStringOrUnrestrictedDoubleMethod();
     (TestInterface or long) testInterfaceOrLongMethod();
+    static (TestInterfaceGarbageCollected or DOMString) staticTestInterfaceGarbageCollectedOrDOMStringMethod();
     void voidMethodDoubleOrDOMStringArg((double or DOMString) arg);
     void voidMethodDoubleOrDOMStringOrNullArg((double or DOMString)? arg);
     void voidMethodDoubleOrNullOrDOMStringArg((double? or DOMString) arg);
     void voidMethodDOMStringOrArrayBufferOrArrayBufferViewArg((DOMString or ArrayBuffer or ArrayBufferView) arg);
     void voidMethodArrayBufferOrArrayBufferViewOrDictionaryArg((ArrayBuffer or ArrayBufferView or Dictionary) arg);
+    // Unions with types that need extra includes/forward declarations in container types
+    void voidMethodBooleanOrElementSequenceArg((BooleanType or sequence<Element>) arg);
+    void voidMethodDoubleOrLongOrBooleanSequenceArg((double or sequence<(long or boolean)>) arg);
+    void voidMethodElementSequenceOrByteStringDoubleOrStringRecord((sequence<Element> or record<ByteString, (double or DOMString)>) arg);
     // Array of Union types
     void voidMethodArrayOfDoubleOrDOMStringArg((double or DOMString)... arg);
     // Currently only used on interface type arguments
@@ -387,10 +341,13 @@
     // Enumerations
     TestEnum testEnumMethod();
     void voidMethodTestEnumArg(TestEnum testEnumTypeArg);
+    void voidMethodTestMultipleEnumArg(TestEnum testEnumTypeArg, TestEnum2 testEnumTypeArg2);
     // Exceptional types
     Dictionary dictionaryMethod();
     TestDictionary testDictionaryMethod();
     TestDictionary? nullableTestDictionaryMethod();
+    static TestDictionary staticTestDictionaryMethod();
+    static TestDictionary? staticNullableTestDictionaryMethod();
     void passPermissiveDictionaryMethod([PermissiveDictionaryConversion] optional TestDictionary arg);
     NodeFilter nodeFilterMethod();
     Promise<void> promiseMethod(long arg1, Dictionary arg2, DOMString arg3, DOMString... variadic);
@@ -443,7 +400,6 @@
     void voidMethodVariadicTestInterfaceEmptyArg(TestInterfaceEmpty... variadicTestInterfaceEmptyArgs);
     void voidMethodTestInterfaceEmptyArgVariadicTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg, TestInterfaceEmpty... variadicTestInterfaceEmptyArgs);
     void voidMethodVariadicTestInterfaceGarbageCollectedArg(TestInterfaceGarbageCollected... variadicTestInterfaceGarbageCollectedArg);
-    void voidMethodVariadicTestInterfaceWillBeGarbageCollectedArg(TestInterfaceWillBeGarbageCollected... variadicTestInterfaceWillBeGarbageCollectedArg);
 
     // Overloaded methods
     void overloadedMethodA(long longArg);
@@ -453,7 +409,7 @@
     void overloadedMethodC(long longArg);
     void overloadedMethodC(TestInterfaceEmpty testInterfaceEmptyArg);
     void overloadedMethodD(long longArg);
-    void overloadedMethodD(long[] longArrayArg);
+    void overloadedMethodD(sequence<long> longArraySequence);
     void overloadedMethodE(long longArg);
     void overloadedMethodE(TestInterfaceEmpty? testInterfaceEmptyOrNullArg);
     void overloadedMethodF(optional DOMString stringArg);
@@ -470,6 +426,8 @@
     void overloadedMethodK(DOMString stringArg);
     void overloadedMethodL(long longArg, any... restArgs);
     void overloadedMethodL(DOMString stringArg, any... restArgs);
+    void overloadedMethodN(TestInterface testInterfaceArg);
+    void overloadedMethodN(TestCallbackInterface testCallbackInterfaceArg);
 
     Promise promiseOverloadMethod();
     Promise promiseOverloadMethod(Window arg1, double arg2);
@@ -499,10 +457,9 @@
     void voidMethodDefaultUndefinedStringArg([Default=Undefined] optional DOMString defaultUndefinedStringArg);
     // [EnforceRange]
     void voidMethodEnforceRangeLongArg([EnforceRange] long enforceRangeLongArg);
-    // [TreatNullAs], [TreatUndefinedAs]
+    // [TreatNullAs]
     void voidMethodTreatNullAsEmptyStringStringArg([TreatNullAs=EmptyString] DOMString treatNullAsEmptyStringStringArg);
     void voidMethodTreatNullAsNullStringStringArg([TreatNullAs=NullString] DOMString treatNullAsNullStringStringArg);
-    void voidMethodTreatNullAsNullStringTreatUndefinedAsNullStringStringArg([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString treatNullAsNullStringStringArg);
 
     // Extended attributes for methods
     [LogActivity, LogAllWorlds] void activityLoggingAccessForAllWorldsMethod();
@@ -512,24 +469,14 @@
     [CallWith=(ScriptState,ExecutionContext)] void callWithScriptStateExecutionContextVoidMethod();
     [CallWith=(ScriptState,ScriptArguments)] void callWithScriptStateScriptArgumentsVoidMethod();
     [CallWith=(ScriptState,ScriptArguments)] void callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArg(optional boolean optionalBooleanArg);
-    [CallWith=ActiveWindow] void callWithActiveWindow();
-    [CallWith=(ActiveWindow,FirstWindow)] void callWithActiveWindowScriptWindow();
+    [CallWith=CurrentWindow] void callWithCurrentWindow();
+    [CallWith=(CurrentWindow,EnteredWindow)] void callWithCurrentWindowScriptWindow();
     [CallWith=ThisValue] void callWithThisValue();
     [CheckSecurity=ReturnValue] void checkSecurityForNodeVoidMethod();
     [Custom] void customVoidMethod();
     [Custom=CallPrologue] void customCallPrologueVoidMethod();
     [Custom=CallEpilogue] void customCallEpilogueVoidMethod();
-    [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();
@@ -550,9 +497,19 @@
     [DeprecateAs=TestFeatureA, MeasureAs=TestFeatureB] void deprecateAsSameValueMeasureAsSameValueOverloadedMethod();
     [DeprecateAs=TestFeatureA, MeasureAs=TestFeatureB] void deprecateAsSameValueMeasureAsSameValueOverloadedMethod(long arg);
     [NotEnumerable] void notEnumerableVoidMethod();
+    [OriginTrialEnabled=FeatureName] void originTrialEnabledVoidMethod();
+    [PerWorldBindings, OriginTrialEnabled=FeatureName] void perWorldBindingsOriginTrialEnabledVoidMethod();
+    // TODO(iclelland): Re-enable origin trials on overloaded methods
+    // (crbug.com/621641)
+    // [OriginTrialEnabled=FeatureName] void originTrialEnabledOverloadedVoidMethod(DOMString stringArg);
+    // [OriginTrialEnabled=FeatureName] void originTrialEnabledOverloadedVoidMethod(long longArg);
+    // [OriginTrialEnabled=FeatureName1] void partiallyOriginTrialEnabledOverloadedVoidMethod(DOMString stringArg);
+    // [OriginTrialEnabled=FeatureName2] void partiallyOriginTrialEnabledOverloadedVoidMethod(TestInterface testInterfaceArg);
+    // void partiallyOriginTrialEnabledOverloadedVoidMethod(long longArg, DOMString stringArg);
+    // [OriginTrialEnabled=FeatureName3] void partiallyOriginTrialEnabledOverloadedVoidMethod(long longArg, DOMString stringArg, TestInterface testInterfaceArg);
     [PerWorldBindings] void perWorldBindingsVoidMethod();
     [PerWorldBindings] void perWorldBindingsVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
-    [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+    [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<object> transfer);
     [LogActivity, LogAllWorlds, PerWorldBindings] void activityLoggingForAllWorldsPerWorldBindingsVoidMethod();
     [LogActivity, PerWorldBindings] void activityLoggingForIsolatedWorldsPerWorldBindingsVoidMethod();
     [RaisesException] void raisesExceptionVoidMethod();
@@ -579,10 +536,10 @@
     void useToImpl4ArgumentsCheckingIfPossibleWithUndefinedArg(Node node1, [Default=Undefined] optional Node node2);
     [Unforgeable] void unforgeableVoidMethod();
     void voidMethodTestInterfaceGarbageCollectedSequenceArg(sequence<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedSequenceArg);
-    void voidMethodTestInterfaceGarbageCollectedArrayArg(TestInterfaceGarbageCollected[] testInterfaceGarbageCollectedArrayArg);
-    void voidMethodTestInterfaceWillBeGarbageCollectedSequenceArg(sequence<TestInterfaceWillBeGarbageCollected> testInterfaceWillBeGarbageCollectedSequenceArg);
-    void voidMethodTestInterfaceWillBeGarbageCollectedArrayArg(TestInterfaceWillBeGarbageCollected[] testInterfaceWillBeGarbageCollectedArrayArg);
     [NewObject] TestInterface newObjectTestInterfaceMethod();
+    [NewObject] Promise<TestInterface> newObjectTestInterfacePromiseMethod();
+    [RuntimeCallStatsCounter=RuntimeCallStatsCounterMethod] void RuntimeCallStatsCounterMethod();
+
 
     serializer DOMString serializerMethod();
 
@@ -591,25 +548,7 @@
     attribute TestInterface testInterfaceAttribute; // [ImplementedAs]
     attribute TestInterfaceGarbageCollected testInterfaceGarbageCollectedAttribute; // [GarbageCollected]
     attribute TestInterfaceGarbageCollected? testInterfaceGarbageCollectedOrNullAttribute; // [GarbageCollected]
-    attribute TestInterfaceWillBeGarbageCollected testInterfaceWillBeGarbageCollectedAttribute; // [WillBeGarbageCollected]
-    attribute TestInterfaceWillBeGarbageCollected? testInterfaceWillBeGarbageCollectedOrNullAttribute; // [WillBeGarbageCollected]
 
-    // Private scripts
-    [ImplementedInPrivateScript] void voidMethodImplementedInPrivateScript();
-    [ImplementedInPrivateScript] short shortMethodImplementedInPrivateScript();
-    [ImplementedInPrivateScript] short shortMethodWithShortArgumentImplementedInPrivateScript(short value);
-    [ImplementedInPrivateScript] DOMString stringMethodWithStringArgumentImplementedInPrivateScript(DOMString value);
-    [ImplementedInPrivateScript] Node nodeMethodWithNodeArgumentImplementedInPrivateScript(Node value);
-    [ImplementedInPrivateScript] Node nodeMethodWithVariousArgumentsImplementedInPrivateScript(Document document, Node node, short value1, double value2, DOMString string);
-    [ImplementedInPrivateScript] readonly attribute short readonlyShortAttribute;
-    [ImplementedInPrivateScript] attribute short shortAttribute;
-    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
-    [ImplementedInPrivateScript] attribute Node nodeAttribute;
-    [OnlyExposedToPrivateScript] short methodImplementedInCPPForPrivateScriptOnly(short value1, short value2);
-    [OnlyExposedToPrivateScript] attribute DOMString attributeImplementedInCPPForPrivateScriptOnly;
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] short methodForPrivateScriptOnly(short value1, short value2);
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString attributeForPrivateScriptOnly;
-    [ImplementedInPrivateScript] attribute TestEnum enumForPrivateScript;
-
-    maplike<long, DOMStringOrDouble>;
+    maplike<[EnforceRange] long, DOMStringOrDouble>;
+    [RuntimeEnabled=FeatureName, CallWith=ScriptState, RaisesException, ImplementedAs=myMaplikeClear] boolean clear();
 };
diff --git a/bindings/tests/idls/core/TestPartialInterface.idl b/bindings/tests/idls/core/TestPartialInterface.idl
deleted file mode 100644
index 0bc42ac..0000000
--- a/bindings/tests/idls/core/TestPartialInterface.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-enum PartialEnumType {
-    "foo",
-    "bar"
-};
-
-typedef DOMString PartialString;
-
-callback PartialCallbackType = void (PartialString value);
-[
-    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;
-    [CallWith=ExecutionContext] attribute long partialCallWithExecutionContextLongAttribute;
-
-    void partialVoidMethod();
-    static void partialStaticVoidMethod();
-    void partialVoidMethodLongArg(long longArg);
-    [CallWith=ExecutionContext, RaisesException] void partialCallWithExecutionContextRaisesExceptionVoidMethod();
-
-    attribute PartialEnumType partialPartialEnumTypeAttribute;
-    void partialVoidMethodPartialCallbackTypeArg(PartialCallbackType partialCallbackTypeArg);
-
-    [ImplementedInPrivateScript] short shortMethodWithShortArgumentImplementedInPrivateScript(short value);
-    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
-};
diff --git a/bindings/tests/idls/core/TestPartialInterface2.idl b/bindings/tests/idls/core/TestPartialInterface2.idl
deleted file mode 100644
index 4bb8686..0000000
--- a/bindings/tests/idls/core/TestPartialInterface2.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-[
-    ImplementedAs=TestPartialInterfaceImplementation, // Conflicts with default partial interface class name
-] partial interface TestInterface {
-    const unsigned short PARTIAL2_UNSIGNED_SHORT = 0;
-
-    attribute long partial2LongAttribute;
-    static attribute long partial2StaticLongAttribute;
-
-    void partial2VoidMethod();
-    static void partial2StaticVoidMethod();
-};
diff --git a/bindings/tests/idls/core/TestSpecialOperations.idl b/bindings/tests/idls/core/TestSpecialOperations.idl
index 73c7c13..3bdc8a4 100644
--- a/bindings/tests/idls/core/TestSpecialOperations.idl
+++ b/bindings/tests/idls/core/TestSpecialOperations.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    OverrideBuiltins,
+    OverrideBuiltins
 ] interface TestSpecialOperations {
     // [ImplementedAs], union return, nullability
     // [OverrideBuiltins] affects named property operations
diff --git a/bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl b/bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl
index 0aed31b..2043b68 100644
--- a/bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl
+++ b/bindings/tests/idls/core/TestSpecialOperationsNotEnumerable.idl
@@ -2,7 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+[LegacyUnenumerableNamedProperties]
 interface TestSpecialOperationsNotEnumerable {
-    [NotEnumerable] getter DOMString (unsigned long index);
-    [NotEnumerable] getter DOMString (DOMString name);
+    // This getter without setter also checks that the property descriptor for
+    // indexed properties has [[Writable]] set to false.
+    getter DOMString (unsigned long index);
+    getter DOMString (DOMString name);
 };
diff --git a/bindings/tests/idls/core/TestTypedefs.idl b/bindings/tests/idls/core/TestTypedefs.idl
index 9f3006e..58827ad 100644
--- a/bindings/tests/idls/core/TestTypedefs.idl
+++ b/bindings/tests/idls/core/TestTypedefs.idl
@@ -32,25 +32,33 @@
 // as typedefs are resolved during IR construction (after parsing,
 // before code generation), and thus the code generator never sees them.
 
+typedef boolean                    BooleanType;
 typedef float                      Float;
 typedef unsigned long long         ULongLong;
+typedef [Clamp] long               LongWithClamp;
 typedef TestInterfaceEmpty         TestInterfaceEmptyType;
-typedef long[]                     ArrayOfLongs;
+typedef sequence<long>             LongSequence;
 typedef DOMString                  String;
-typedef DOMString[]                ArrayOfStrings;
+typedef FrozenArray<DOMString>     FrozenStringArray;
 typedef TestCallbackInterface      TestCallbackInterfaceType;
 typedef TestInterfaceConstructor   T;
 typedef (TestInterface or TestInterfaceEmpty) TestInterfaceOrTestInterfaceEmpty;
 typedef (DOMString or double) DOMStringOrDouble;
+typedef record<ByteString, long>   SomeRecordType;
+typedef record<USVString, TestObject> RecordWithOilpanValueType;
+typedef (sequence<sequence<ByteString>> or record<ByteString, ByteString>) UnionWithRecord;
+typedef (Node or (sequence<long> or Event) or (XMLHttpRequest or DOMString)? or record<DOMString, (ByteString or NodeList)>) NestedUnionType;
+typedef (ULongLong or (BooleanType or TestCallbackInterfaceType)) UnionWithTypedef;
 
 [
-    Constructor(String stringArg),
+    Constructor(String stringArg)
 ] interface TestTypedefs {
     attribute ULongLong uLongLongAttribute;
+    attribute LongWithClamp longWithClampAttribute;
     attribute T tAttribute;
     attribute DOMStringOrDouble? domStringOrDoubleOrNullAttribute;
 
-    void voidMethodArrayOfLongsArg(optional ArrayOfLongs arrayOfLongsArg);
+    void voidMethodLongSequenceArg(optional LongSequence longSequenceArg);
 
     void voidMethodFloatArgStringArg(Float floatArg, String stringArg);
     void voidMethodTestCallbackInterfaceTypeArg(TestCallbackInterfaceType testCallbackInterfaceTypeArg);
@@ -59,6 +67,14 @@
     TestInterfaceOrTestInterfaceEmpty testInterfaceOrTestInterfaceEmptyMethod();
     DOMStringOrDouble domStringOrDoubleMethod();
 
-    ArrayOfStrings arrayOfStringsMethodArrayOfStringsArg(ArrayOfStrings arrayOfStringsArg);
-    String[] stringArrayMethodStringArrayArg(String[] stringArrayArg);
+    FrozenStringArray arrayOfStringsMethodArrayOfStringsArg(FrozenStringArray frozenStringArrayArg);
+
+    void methodTakingRecord(SomeRecordType arg);
+    void methodTakingOilpanValueRecord(RecordWithOilpanValueType arg);
+    double unionWithRecordMethod(UnionWithRecord arg);
+    record<DOMString, boolean> methodThatReturnsRecord();
+
+    void voidMethodNestedUnionType(NestedUnionType arg);
+
+    void voidMethodUnionWithTypedef(UnionWithTypedef arg);
 };
diff --git a/bindings/tests/idls/core/Uint8ClampedArray.idl b/bindings/tests/idls/core/Uint8ClampedArray.idl
index 13f411c..024a206 100644
--- a/bindings/tests/idls/core/Uint8ClampedArray.idl
+++ b/bindings/tests/idls/core/Uint8ClampedArray.idl
@@ -5,6 +5,6 @@
 // https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
 
 [
-    ImplementedAs=TestUint8ClampedArray,
+    ImplementedAs=TestUint8ClampedArray
 ] interface Uint8ClampedArray : ArrayBufferView {
 };
diff --git a/bindings/tests/idls/modules/TestInheritedLegacyUnenumerableNamedProperties.idl b/bindings/tests/idls/modules/TestInheritedLegacyUnenumerableNamedProperties.idl
new file mode 100644
index 0000000..137e7a2
--- /dev/null
+++ b/bindings/tests/idls/modules/TestInheritedLegacyUnenumerableNamedProperties.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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 IDL file verifies that the [LegacyUnenumerableNamedProperties] extended
+// attribute is automatically inherited by all child interfaces.
+
+interface TestInheritedLegacyUnenumerableNamedProperties : TestSpecialOperationsNotEnumerable {
+    readonly attribute long longAttribute;
+
+    // The getter below should have been inherited (http://crbug.com/752877).
+    getter long (DOMString identifier);
+};
diff --git a/bindings/tests/idls/modules/TestInterface2Partial.idl b/bindings/tests/idls/modules/TestInterface2Partial.idl
new file mode 100644
index 0000000..34da9ce
--- /dev/null
+++ b/bindings/tests/idls/modules/TestInterface2Partial.idl
@@ -0,0 +1,19 @@
+// 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.
+
+// Regression test for https://crbug.com/603782: if the main interface is
+// declared in 'core', the alphabetically first partial interface in 'modules'
+// with a RuntimeEnabled will leak onto all of the other partial interfaces in
+// 'modules' that do not have an extended attributes section (i.e.,
+// TestInterface2Partial2.idl).
+//
+// This test ensures that TestInterface2Partial2 is NOT conditional on the
+// Interface2PartialFeatureName runtime flag.
+[
+    ImplementedAs=TestInterface2Partial,
+    RuntimeEnabled=Interface2PartialFeatureName
+]
+partial interface TestInterface2 {
+    void voidMethodPartial1(DOMString value);
+};
diff --git a/bindings/tests/idls/modules/TestInterface2Partial2.idl b/bindings/tests/idls/modules/TestInterface2Partial2.idl
new file mode 100644
index 0000000..1adc4af
--- /dev/null
+++ b/bindings/tests/idls/modules/TestInterface2Partial2.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.
+
+// Regression test for https://crbug.com/603782: see note in
+// TestInterface2Partial.idl. This test only works if there is *no*
+// RuntimeEnabled condition for this partial interface.
+[
+    ImplementedAs=TestInterface2Partial2 
+] partial interface TestInterface2 {
+    void voidMethodPartial2(DOMString value);
+};
diff --git a/bindings/tests/idls/modules/TestInterface5.idl b/bindings/tests/idls/modules/TestInterface5.idl
index 7179186..8c1bd2e 100644
--- a/bindings/tests/idls/modules/TestInterface5.idl
+++ b/bindings/tests/idls/modules/TestInterface5.idl
@@ -32,15 +32,16 @@
 // Also used as a target by TestObject
 
 enum TestEnumModules { "EnumModulesValue1", "EnumModulesValue2" };
+callback VoidCallbackFunctionModules = void ();
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
     Custom=LegacyCallAsFunction,
     DoNotCheckConstants,
     ImplementedAs=TestInterface5Implementation,
     RuntimeEnabled=FeatureName,
-    SetWrapperReferenceTo(TestInterface5 referencedName),
-    Exposed=(Worker,Window),
+    Exposed=(Worker,Window)
 ] interface TestInterface5 : TestInterfaceEmpty {
     // members needed to test [ImplementedAs], as this affect attribute
     // configuration and method configuration
@@ -65,10 +66,12 @@
     setter DOMString (unsigned long index, DOMString value);
     deleter boolean (unsigned long index);
 
+    // iterable<V> needs a "length" property accompanying the indexed property
+    // operations above.
+    readonly attribute unsigned long length;
+
     // Anonymous named property operations
     getter DOMString (DOMString name);
-    setter DOMString (DOMString name, DOMString value);
-    deleter boolean (DOMString name);
 
     [NotEnumerable] stringifier;
 
@@ -91,5 +94,9 @@
     void voidMethodBooleanOrDOMStringArg((boolean or DOMString) arg);
     void voidMethodDoubleOrDOMStringArg((double or DOMString) arg);
 
+    // Callback functions
+    void voidMethodVoidExperimentalCallbackFunction(VoidExperimentalCallbackFunction arg);
+    void voidMethodVoidCallbackFunctionModulesArg(VoidCallbackFunctionModules arg);
+
     iterable<any>;
 };
diff --git a/bindings/tests/idls/modules/TestInterfacePartial3.idl b/bindings/tests/idls/modules/TestInterfacePartial3.idl
new file mode 100644
index 0000000..a6507dc
--- /dev/null
+++ b/bindings/tests/idls/modules/TestInterfacePartial3.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+[
+    ImplementedAs=TestInterfacePartial3Implementation
+] partial interface TestInterface {
+    const unsigned short PARTIAL3_UNSIGNED_SHORT = 0;
+
+    void voidMethodPartialOverload(DOMString value);
+    static void staticVoidMethodPartialOverload(DOMString value);
+
+    Promise promiseMethodPartialOverload(Document document);
+    static Promise staticPromiseMethodPartialOverload(DOMString value);
+
+    void partial2VoidMethod(DOMString value);
+    void partial2VoidMethod(Node node);
+    void partialVoidTestEnumModulesArgMethod(TestEnumModules arg);
+    static void partial2StaticVoidMethod(DOMString value);
+    void partial2VoidTestEnumModulesRecordMethod(record<DOMString, TestEnumModules> arg);
+
+    [Unscopable] void unscopableVoidMethod();
+
+    // UnionWithTypedef is a typedef declared in core/TestTypedefs.idl.
+    UnionWithTypedef unionWithTypedefMethod();
+};
diff --git a/bindings/tests/idls/modules/TestInterfacePartial4.idl b/bindings/tests/idls/modules/TestInterfacePartial4.idl
new file mode 100644
index 0000000..86ee451
--- /dev/null
+++ b/bindings/tests/idls/modules/TestInterfacePartial4.idl
@@ -0,0 +1,20 @@
+// 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.
+
+// Test for [OriginTrialEnabled] extended attribute applied to a partial
+// interface. This is separate from TestInterfacePartial, as the
+// [OriginTrialEnabled] attribute cannot be applied with [RuntimeEnabled].
+
+[
+    ImplementedAs=TestInterfacePartial4,
+    OriginTrialEnabled=OriginTrialPartialFeature // Conflicts with RuntimeEnabled
+] partial interface TestInterface {
+    const unsigned short PARTIAL4_UNSIGNED_SHORT = 4;
+
+    attribute long partial4LongAttribute;
+    static attribute long partial4StaticLongAttribute;
+
+    void partial4VoidMethod();
+    static void partial4StaticVoidMethod();
+};
diff --git a/bindings/tests/idls/modules/TestNotEnumerableNamedGetter.idl b/bindings/tests/idls/modules/TestNotEnumerableNamedGetter.idl
new file mode 100644
index 0000000..3be62aa
--- /dev/null
+++ b/bindings/tests/idls/modules/TestNotEnumerableNamedGetter.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Tests whether an interface that only supports named properties and has its
+// getter annotated with [NotEnumerable] works as expected.
+interface TestNotEnumerableNamedGetter {
+    [NotEnumerable] getter long (DOMString name);
+};
diff --git a/bindings/tests/idls/modules/TestPartialInterface3.idl b/bindings/tests/idls/modules/TestPartialInterface3.idl
deleted file mode 100644
index 353454e..0000000
--- a/bindings/tests/idls/modules/TestPartialInterface3.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-[
-    ImplementedAs=TestPartialInterfaceImplementation3,
-] partial interface TestInterface {
-    const unsigned short PARTIAL3_UNSIGNED_SHORT = 0;
-
-    void voidMethodPartialOverload(DOMString value);
-    static void staticVoidMethodPartialOverload(DOMString value);
-
-    Promise promiseMethodPartialOverload(Document document);
-    static Promise staticPromiseMethodPartialOverload(DOMString value);
-
-    void partial2VoidMethod(DOMString value);
-    void partial2VoidMethod(Node node);
-    void partialVoidTestEnumModulesArgMethod(TestEnumModules arg);
-    static void partial2StaticVoidMethod(DOMString value);
-
-    [Unscopeable] void unscopeableVoidMethod();
-};
diff --git a/bindings/tests/idls/modules/TestSubObject.idl b/bindings/tests/idls/modules/TestSubObject.idl
new file mode 100644
index 0000000..ecd19ad
--- /dev/null
+++ b/bindings/tests/idls/modules/TestSubObject.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 TestSubObject : TestObject {
+    [Unforgeable] attribute DOMString unforgeableStringAttribute;
+};
diff --git a/blink/tools/blinkpy/__init__.py b/blink/tools/blinkpy/__init__.py
new file mode 100644
index 0000000..a22a6ee
--- /dev/null
+++ b/blink/tools/blinkpy/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/blink/tools/blinkpy/common/__init__.py b/blink/tools/blinkpy/common/__init__.py
new file mode 100644
index 0000000..a22a6ee
--- /dev/null
+++ b/blink/tools/blinkpy/common/__init__.py
@@ -0,0 +1,3 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
diff --git a/blink/tools/blinkpy/common/name_style_converter.py b/blink/tools/blinkpy/common/name_style_converter.py
new file mode 100644
index 0000000..a79b990
--- /dev/null
+++ b/blink/tools/blinkpy/common/name_style_converter.py
@@ -0,0 +1,128 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=import-error,print-statement,relative-import
+
+import re
+
+SPECIAL_TOKENS = [
+    # This list should be sorted by length.
+    'CString',
+    'Float32',
+    'Float64',
+    'Base64',
+    'IFrame',
+    'Latin1',
+    'PlugIn',
+    'SQLite',
+    'Uint16',
+    'Uint32',
+    'WebGL2',
+    'ASCII',
+    'CType',
+    'DList',
+    'Int16',
+    'Int32',
+    'MPath',
+    'OList',
+    'TSpan',
+    'UList',
+    'UTF16',
+    'Uint8',
+    'WebGL',
+    'XPath',
+    'ETC1',
+    'HTML',
+    'Int8',
+    'S3TC',
+    'SPv2',
+    'UTF8',
+    'API',
+    'CSS',
+    'DOM',
+    'EXT',
+    'RTC',
+    'SVG',
+    '2D',
+    'AX',
+    'V0',
+    'V8',
+]
+
+MATCHING_EXPRESSION = '((?:[A-Z][a-z]+)|[0-9]D?$)'
+
+
+class SmartTokenizer(object):
+    """Detects special cases that are not easily discernible without additional
+       knowledge, such as recognizing that in SVGSVGElement, the first two SVGs
+       are separate tokens, but WebGL is one token."""
+
+    def __init__(self, name):
+        self.remaining = name
+
+    def tokenize(self):
+        name = self.remaining
+        tokens = []
+        while len(name) > 0:
+            matched_token = None
+            for token in SPECIAL_TOKENS:
+                if name.startswith(token):
+                    matched_token = token
+                    break
+            if not matched_token:
+                match = re.search(MATCHING_EXPRESSION, name)
+                if not match:
+                    matched_token = name
+                elif match.start(0) != 0:
+                    matched_token = name[:match.start(0)]
+                else:
+                    matched_token = match.group(0)
+            tokens.append(name[:len(matched_token)])
+            name = name[len(matched_token):]
+        return tokens
+
+
+class NameStyleConverter(object):
+    """Converts names from camelCase to various other styles.
+    """
+
+    def __init__(self, name):
+        self.tokens = self.tokenize(name)
+
+    def tokenize(self, name):
+        tokenizer = SmartTokenizer(name)
+        return tokenizer.tokenize()
+
+    def to_snake_case(self):
+        """Snake case is the file and variable name style per Google C++ Style
+           Guide:
+           https://google.github.io/styleguide/cppguide.html#Variable_Names
+
+           Also known as the hacker case.
+           https://en.wikipedia.org/wiki/Snake_case
+        """
+        return '_'.join([token.lower() for token in self.tokens])
+
+    def to_upper_camel_case(self):
+        """Upper-camel case is the class and function name style per
+           Google C++ Style Guide:
+           https://google.github.io/styleguide/cppguide.html#Function_Names
+
+           Also known as the PascalCase.
+           https://en.wikipedia.org/wiki/Camel_case.
+        """
+        return ''.join([token[0].upper() + token[1:] for token in self.tokens])
+
+    def to_macro_case(self):
+        """Macro case is the macro name style per Google C++ Style Guide:
+           https://google.github.io/styleguide/cppguide.html#Macro_Names
+        """
+        return '_'.join([token.upper() for token in self.tokens])
+
+    def to_all_cases(self):
+        return {
+            'snake_case': self.to_snake_case(),
+            'upper_camel_case': self.to_upper_camel_case(),
+            'macro_case': self.to_macro_case(),
+        }
diff --git a/blink/tools/blinkpy/common/name_style_converter_test.py b/blink/tools/blinkpy/common/name_style_converter_test.py
new file mode 100644
index 0000000..e8bc11d
--- /dev/null
+++ b/blink/tools/blinkpy/common/name_style_converter_test.py
@@ -0,0 +1,178 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=import-error,print-statement,relative-import,protected-access
+
+"""Unit tests for name_style_converter.py."""
+
+import unittest
+
+from name_style_converter import NameStyleConverter
+from name_style_converter import SmartTokenizer
+
+
+class SmartTokenizerTest(unittest.TestCase):
+    def test_simple_cases(self):
+        tokenizer = SmartTokenizer('foo')
+        self.assertEqual(tokenizer.tokenize(), ['foo'])
+
+        tokenizer = SmartTokenizer('fooBar')
+        self.assertEqual(tokenizer.tokenize(), ['foo', 'Bar'])
+
+        tokenizer = SmartTokenizer('fooBarBaz')
+        self.assertEqual(tokenizer.tokenize(), ['foo', 'Bar', 'Baz'])
+
+        tokenizer = SmartTokenizer('Baz')
+        self.assertEqual(tokenizer.tokenize(), ['Baz'])
+
+        tokenizer = SmartTokenizer('')
+        self.assertEqual(tokenizer.tokenize(), [])
+
+        tokenizer = SmartTokenizer('FOO')
+        self.assertEqual(tokenizer.tokenize(), ['FOO'])
+
+        tokenizer = SmartTokenizer('foo2')
+        self.assertEqual(tokenizer.tokenize(), ['foo', '2'])
+
+    def test_tricky_cases(self):
+        tokenizer = SmartTokenizer('XMLHttpRequest')
+        self.assertEqual(tokenizer.tokenize(), ['XML', 'Http', 'Request'])
+
+        tokenizer = SmartTokenizer('HTMLElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'Element'])
+
+        tokenizer = SmartTokenizer('WebGLRenderingContext')
+        self.assertEqual(tokenizer.tokenize(),
+                         ['WebGL', 'Rendering', 'Context'])
+
+        tokenizer = SmartTokenizer('CanvasRenderingContext2D')
+        self.assertEqual(tokenizer.tokenize(),
+                         ['Canvas', 'Rendering', 'Context', '2D'])
+        tokenizer = SmartTokenizer('CanvasRenderingContext2DAPITest')
+        self.assertEqual(tokenizer.tokenize(),
+                         ['Canvas', 'Rendering', 'Context', '2D', 'API', 'Test'])
+
+        tokenizer = SmartTokenizer('SVGSVGElement')
+        self.assertEqual(tokenizer.tokenize(), ['SVG', 'SVG', 'Element'])
+
+        tokenizer = SmartTokenizer('CanvasRenderingContext2D')
+        self.assertEqual(tokenizer.tokenize(), ['Canvas', 'Rendering', 'Context', '2D'])
+
+        tokenizer = SmartTokenizer('CSSURLImageValue')
+        self.assertEqual(tokenizer.tokenize(), ['CSS', 'URL', 'Image', 'Value'])
+        tokenizer = SmartTokenizer('CSSPropertyAPID')
+        self.assertEqual(tokenizer.tokenize(), ['CSS', 'Property', 'API', 'D'])
+        tokenizer = SmartTokenizer('AXARIAGridCell')
+        self.assertEqual(tokenizer.tokenize(), ['AX', 'ARIA', 'Grid', 'Cell'])
+
+        tokenizer = SmartTokenizer('CDATASection')
+        self.assertEqual(tokenizer.tokenize(), ['CDATA', 'Section'])
+
+        tokenizer = SmartTokenizer('ASCIICType')
+        self.assertEqual(tokenizer.tokenize(), ['ASCII', 'CType'])
+        tokenizer = SmartTokenizer('CString')
+        self.assertEqual(tokenizer.tokenize(), ['CString'])
+
+        tokenizer = SmartTokenizer('HTMLDListElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'DList', 'Element'])
+        tokenizer = SmartTokenizer('HTMLOListElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'OList', 'Element'])
+        tokenizer = SmartTokenizer('HTMLIFrameElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'IFrame', 'Element'])
+        tokenizer = SmartTokenizer('HTMLPlugInElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'PlugIn', 'Element'])
+
+        # No special handling for OptGroup, FieldSet, and TextArea.
+        tokenizer = SmartTokenizer('HTMLOptGroupElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'Opt', 'Group', 'Element'])
+        tokenizer = SmartTokenizer('HTMLFieldSetElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'Field', 'Set', 'Element'])
+        tokenizer = SmartTokenizer('HTMLTextAreaElement')
+        self.assertEqual(tokenizer.tokenize(), ['HTML', 'Text', 'Area', 'Element'])
+
+        tokenizer = SmartTokenizer('Path2D')
+        self.assertEqual(tokenizer.tokenize(), ['Path', '2D'])
+        tokenizer = SmartTokenizer('Point2D')
+        self.assertEqual(tokenizer.tokenize(), ['Point', '2D'])
+        tokenizer = SmartTokenizer('CanvasRenderingContext2DState')
+        self.assertEqual(tokenizer.tokenize(), ['Canvas', 'Rendering', 'Context', '2D', 'State'])
+
+        tokenizer = SmartTokenizer('RTCDTMFSender')
+        self.assertEqual(tokenizer.tokenize(), ['RTC', 'DTMF', 'Sender'])
+
+        tokenizer = SmartTokenizer('WebGLCompressedTextureS3TCsRGB')
+        self.assertEqual(tokenizer.tokenize(), ['WebGL', 'Compressed', 'Texture', 'S3TC', 'sRGB'])
+        tokenizer = SmartTokenizer('WebGL2CompressedTextureETC1')
+        self.assertEqual(tokenizer.tokenize(), ['WebGL2', 'Compressed', 'Texture', 'ETC1'])
+        tokenizer = SmartTokenizer('EXTsRGB')
+        self.assertEqual(tokenizer.tokenize(), ['EXT', 'sRGB'])
+
+        tokenizer = SmartTokenizer('SVGFEBlendElement')
+        self.assertEqual(tokenizer.tokenize(), ['SVG', 'FE', 'Blend', 'Element'])
+        tokenizer = SmartTokenizer('SVGMPathElement')
+        self.assertEqual(tokenizer.tokenize(), ['SVG', 'MPath', 'Element'])
+        tokenizer = SmartTokenizer('SVGTSpanElement')
+        self.assertEqual(tokenizer.tokenize(), ['SVG', 'TSpan', 'Element'])
+        tokenizer = SmartTokenizer('SVGURIReference')
+        self.assertEqual(tokenizer.tokenize(), ['SVG', 'URI', 'Reference'])
+
+        tokenizer = SmartTokenizer('UTF16TextIterator')
+        self.assertEqual(tokenizer.tokenize(), ['UTF16', 'Text', 'Iterator'])
+        tokenizer = SmartTokenizer('UTF8Decoder')
+        self.assertEqual(tokenizer.tokenize(), ['UTF8', 'Decoder'])
+        tokenizer = SmartTokenizer('Uint8Array')
+        self.assertEqual(tokenizer.tokenize(), ['Uint8', 'Array'])
+        tokenizer = SmartTokenizer('DOMWindowBase64')
+        self.assertEqual(tokenizer.tokenize(), ['DOM', 'Window', 'Base64'])
+        tokenizer = SmartTokenizer('TextCodecLatin1')
+        self.assertEqual(tokenizer.tokenize(), ['Text', 'Codec', 'Latin1'])
+        tokenizer = SmartTokenizer('V8BindingForCore')
+        self.assertEqual(tokenizer.tokenize(), ['V8', 'Binding', 'For', 'Core'])
+        tokenizer = SmartTokenizer('V8DOMRect')
+        self.assertEqual(tokenizer.tokenize(), ['V8', 'DOM', 'Rect'])
+
+        tokenizer = SmartTokenizer('V0InsertionPoint')
+        self.assertEqual(tokenizer.tokenize(), ['V0', 'Insertion', 'Point'])
+        tokenizer = SmartTokenizer('ShadowDOMV0Test')
+        self.assertEqual(tokenizer.tokenize(), ['Shadow', 'DOM', 'V0', 'Test'])
+        tokenizer = SmartTokenizer('ElementShadowV0')
+        self.assertEqual(tokenizer.tokenize(), ['Element', 'Shadow', 'V0'])
+        tokenizer = SmartTokenizer('StubChromeClientForSPv2')
+        self.assertEqual(tokenizer.tokenize(), ['Stub', 'Chrome', 'Client', 'For', 'SPv2'])
+
+        tokenizer = SmartTokenizer('SQLiteAuthorizer')
+        self.assertEqual(tokenizer.tokenize(), ['SQLite', 'Authorizer'])
+        tokenizer = SmartTokenizer('XPathEvaluator')
+        self.assertEqual(tokenizer.tokenize(), ['XPath', 'Evaluator'])
+
+        tokenizer = SmartTokenizer('IsXHTMLDocument')
+        self.assertEqual(tokenizer.tokenize(), ['Is', 'XHTML', 'Document'])
+
+        tokenizer = SmartTokenizer('Animation.idl')
+        self.assertEqual(tokenizer.tokenize(), ['Animation', '.idl'])
+
+
+class NameStyleConverterTest(unittest.TestCase):
+    def test_snake_case(self):
+        converter = NameStyleConverter('HTMLElement')
+        self.assertEqual(converter.to_snake_case(), 'html_element')
+
+    def test_upper_camel_case(self):
+        converter = NameStyleConverter('someSuperThing')
+        self.assertEqual(converter.to_upper_camel_case(), 'SomeSuperThing')
+
+        converter = NameStyleConverter('SVGElement')
+        self.assertEqual(converter.to_upper_camel_case(), 'SVGElement')
+
+    def test_macro_case(self):
+        converter = NameStyleConverter('WebGLBaz2D')
+        self.assertEqual(converter.to_macro_case(), 'WEBGL_BAZ_2D')
+
+    def test_all_cases(self):
+        converter = NameStyleConverter('SVGScriptElement')
+        self.assertEqual(converter.to_all_cases(), {
+            'snake_case': 'svg_script_element',
+            'upper_camel_case': 'SVGScriptElement',
+            'macro_case': 'SVG_SCRIPT_ELEMENT',
+        })
diff --git a/blink/tools/compile_devtools_frontend.py b/blink/tools/compile_devtools_frontend.py
new file mode 100644
index 0000000..7c6f8de
--- /dev/null
+++ b/blink/tools/compile_devtools_frontend.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env vpython
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Compile DevTools frontend code with Closure compiler.
+
+This script wraps devtools/scripts/compile_frontend.py.
+DevTools bot kicks this script.
+"""
+
+import os
+import sys
+
+sys.path.append(os.path.join(
+    os.path.dirname(__file__), '..', '..', 'WebKit', 'Source', 'devtools', 'scripts'))
+import compile_frontend
+
+if __name__ == '__main__':
+    sys.exit(compile_frontend.main())
diff --git a/blink/tools/move_blink_source.py b/blink/tools/move_blink_source.py
new file mode 100644
index 0000000..2b59693
--- /dev/null
+++ b/blink/tools/move_blink_source.py
@@ -0,0 +1,529 @@
+#!/usr/bin/env vpython
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Tool to move Blink source from third_party/WebKit to third_party/blink.
+
+See https://docs.google.com/document/d/1l3aPv1Wx__SpRkdOhvJz8ciEGigNT3wFKv78XiuW0Tw/edit?usp=sharing#heading=h.o225wrxp242h
+for the details.
+"""
+
+import argparse
+import logging
+import os
+import re
+import sys
+from functools import partial
+
+# Without abspath(), PathFinder can't find chromium_base correctly.
+sys.path.append(os.path.abspath(
+    os.path.join(os.path.dirname(__file__), '..', '..', '..',
+                 'third_party', 'WebKit', 'Tools', 'Scripts')))
+from blinkpy.common.name_style_converter import NameStyleConverter
+from plan_blink_move import plan_blink_move
+from plan_blink_move import relative_dest
+from webkitpy.common.checkout.git import Git
+from webkitpy.common.path_finder import get_chromium_src_dir
+from webkitpy.common.path_finder import get_scripts_dir
+from webkitpy.common.system.executive import Executive
+from webkitpy.common.system.filesystem import FileSystem
+
+_log = logging.getLogger('move_blink_source')
+
+
+class FileType(object):
+    NONE = 0
+    BUILD = 1
+    BLINK_BUILD = 2
+    OWNERS = 3
+    DEPS = 4
+    MOJOM = 5
+    TYPEMAP = 6
+    BLINK_BUILD_PY = 7
+    LAYOUT_TESTS_WITH_MOJOM = 8
+
+    @staticmethod
+    def detect(path):
+        slash_dir, basename = os.path.split(path)
+        slash_dir = slash_dir.replace(os.path.sep, '/')
+        if basename == 'DEPS':
+            return FileType.DEPS
+        if basename == 'OWNERS':
+            return FileType.OWNERS
+        if basename.endswith('.mojom'):
+            return FileType.MOJOM
+        if basename.endswith('.typemap'):
+            return FileType.TYPEMAP
+        if basename.endswith('.py') and 'third_party/WebKit/Source/build' in slash_dir:
+            return FileType.BLINK_BUILD_PY
+        if basename.endswith(('.gn', '.gni')):
+            if 'third_party/WebKit' in path or 'third_party/blink' in slash_dir:
+                return FileType.BLINK_BUILD
+            if 'third_party' in slash_dir:
+                return FileType.NONE
+            return FileType.BUILD
+        if basename.endswith('.html') and re.search(
+                r'third_party/WebKit/LayoutTests/(geolocation-api|installedapp|' +
+                r'media/mediasession|payments|presentation|webshare)', slash_dir):
+            return FileType.LAYOUT_TESTS_WITH_MOJOM
+        return FileType.NONE
+
+
+class MoveBlinkSource(object):
+
+    def __init__(self, fs, options, repo_root):
+        self._fs = fs
+        self._options = options
+        _log.debug(options)
+        self._repo_root = repo_root
+
+        # The following fields are initialized in _create_basename_maps.
+        self._basename_map = None
+        self._basename_re = None
+        self._idl_generated_impl_headers = None
+        # _checked_in_header_re is used to distinguish checked-in header files
+        # and generated header files.
+        self._checked_in_header_re = None
+
+        self._updated_files = []
+
+    def update(self):
+        _log.info('Planning renaming ...')
+        file_pairs = plan_blink_move(self._fs, [])
+        _log.info('Will move %d files', len(file_pairs))
+
+        self._create_basename_maps(file_pairs)
+        dirs = self._update_file_content()
+
+        # Updates #includes in files in directories with updated DEPS +
+        # third_party/WebKit/{Source,common,public}.
+        self._append_unless_upper_dir_exists(dirs, self._fs.join(self._repo_root, 'third_party', 'WebKit', 'Source'))
+        self._append_unless_upper_dir_exists(dirs, self._fs.join(self._repo_root, 'third_party', 'WebKit', 'common'))
+        self._append_unless_upper_dir_exists(dirs, self._fs.join(self._repo_root, 'third_party', 'WebKit', 'public'))
+        self._append_unless_upper_dir_exists(dirs, self._fs.join(self._repo_root, 'mojo', 'public', 'tools',
+                                                                 'bindings', 'generators', 'cpp_templates'))
+        self._update_cpp_includes_in_directories(dirs)
+
+        # Content update for individual files.
+        # The following is a list of tuples.
+        #  Tuple: (<file path relative to repo root>, [replacement commands])
+        #  Command: a callable object, or
+        #           a tuple of (<original string>, <new string>).
+        file_replacement_list = [
+            ('DEPS',
+             [('src/third_party/WebKit/Source/devtools',
+               'src/third_party/blink/renderer/devtools')]),
+            ('WATCHLISTS',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer'),
+              ('third_party/WebKit/public', 'third_party/blink/renderer/public')]),
+            ('build/check_gn_headers_whitelist.txt',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer'),
+              ('third_party/WebKit/public', 'third_party/blink/renderer/public'),
+              self._update_basename]),
+            ('testing/buildbot/gn_isolate_map.pyl',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('third_party/WebKit/Source/BUILD.gn',
+             [('$root_gen_dir/third_party/WebKit',
+               '$root_gen_dir/third_party/blink/renderer')]),
+            ('third_party/WebKit/Source/config.gni',
+             [('snake_case_source_files = false',
+               'snake_case_source_files = true')]),
+            ('third_party/WebKit/Source/core/css/CSSProperties.json5',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/css/ComputedStyleExtraFields.json5',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/css/ComputedStyleFieldAliases.json5',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/html/parser/create-html-entity-table',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/inspector/inspector_protocol_config.json',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/probe/CoreProbes.json5',
+             [self._update_basename]),
+            ('third_party/WebKit/Source/core/testing/InternalSettings.h',
+             [('InternalSettingsGenerated.h', 'internal_settings_generated.h')]),
+            ('third_party/WebKit/Source/core/testing/Internals.cpp',
+             [('InternalRuntimeFlags.h', 'internal_runtime_flags.h')]),
+            ('third_party/WebKit/Source/platform/probe/PlatformProbes.json5',
+             [self._update_basename]),
+            ('third_party/WebKit/public/BUILD.gn',
+             [('$root_gen_dir/third_party/WebKit',
+               '$root_gen_dir/third_party/blink/renderer')]),
+            ('third_party/WebKit/public/blink_resources.grd',
+             [('../Source/', '../')]),
+            ('tools/android/eclipse/.classpath',
+             [('third_party/WebKit/public', 'third_party/blink/renderer/public')]),
+            ('tools/android/loading/cloud/backend/deploy.sh',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/android/loading/emulation_unittest.py',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/android/loading/options.py',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/android/loading/request_track.py',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/gritsettings/resource_ids',
+             [('third_party/WebKit/public', 'third_party/blink/renderer/public'),
+              ('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/metrics/actions/extract_actions.py',
+             [('third_party/WebKit/Source', 'third_party/blink/renderer')]),
+            ('tools/metrics/histograms/update_editor_commands.py',
+             [('third_party/WebKit/Source/core/editing/EditorCommand.cpp',
+               'third_party/blink/renderer/core/editing/editor_command.cc')]),
+            ('tools/metrics/histograms/update_use_counter_css.py',
+             [('third_party/WebKit/Source/core/frame/UseCounter.cpp',
+               'third_party/blink/renderer/core/frame/use_counter.cc')]),
+            ('tools/metrics/histograms/update_use_counter_feature_enum.py',
+             [('third_party/WebKit/public', 'third_party/blink/renderer/public')]),
+        ]
+        for file_path, replacement_list in file_replacement_list:
+            self._update_single_file_content(file_path, replacement_list, should_write=self._options.run)
+
+        if self._options.run:
+            _log.info('Formatting updated %d files ...', len(self._updated_files))
+            git = Git(cwd=self._repo_root)
+            # |git cl format| can't handle too many files at once.
+            while len(self._updated_files) > 0:
+                end_index = 100
+                if end_index > len(self._updated_files):
+                    end_index = len(self._updated_files)
+                git.run(['cl', 'format'] + self._updated_files[:end_index])
+                self._updated_files = self._updated_files[end_index:]
+
+            _log.info('Make a local commit ...')
+            git.commit_locally_with_message("""The Great Blink mv for source files, part 1.
+
+Update file contents without moving files.
+
+Bug: 768828
+""")
+
+    def move(self):
+        _log.info('Planning renaming ...')
+        file_pairs = plan_blink_move(self._fs, [])
+        _log.info('Will move %d files', len(file_pairs))
+
+        git = Git(cwd=self._repo_root)
+        for i, (src, dest) in enumerate(file_pairs):
+            src_from_repo = self._fs.join('third_party', 'WebKit', src)
+            dest_from_repo = self._fs.join('third_party', 'blink', dest)
+            self._fs.maybe_make_directory(self._repo_root, 'third_party', 'blink', self._fs.dirname(dest))
+            if self._options.run_git:
+                if git.exists(src_from_repo):
+                    git.move(src_from_repo, dest_from_repo)
+                    _log.info('[%d/%d] Git moved %s', i + 1, len(file_pairs), src)
+                else:
+                    _log.info('%s is not in the repository', src)
+            else:
+                self._fs.move(self._fs.join(self._repo_root, src_from_repo),
+                              self._fs.join(self._repo_root, dest_from_repo))
+                _log.info('[%d/%d] Moved %s', i + 1, len(file_pairs), src)
+        self._update_single_file_content(
+            'build/get_landmines.py',
+            [('\ndef main', '  print \'The Great Blink mv for source files (crbug.com/768828)\'\n\ndef main')])
+
+        _log.info('Run run-bindings-tests ...')
+        Executive().run_command(['python',
+                                 self._fs.join(get_scripts_dir(), 'run-bindings-tests'),
+                                 '--reset-results'],
+                                cwd=self._repo_root)
+
+        if self._options.run_git:
+            _log.info('Make a local commit ...')
+            git.commit_locally_with_message("""The Great Blink mv for source files, part 2.
+
+Move and rename files.
+
+Bug: 768828
+""")
+
+    def _create_basename_maps(self, file_pairs):
+        basename_map = {}
+        # Generated inspector/protocol/* contains a lot of names duplicated with
+        # checked-in core files. We don't want to rename them, and don't want to
+        # replace them in BUILD.gn and #include accidentally.
+        pattern = r'(?<!inspector/protocol/)\b('
+        idl_headers = set()
+        header_pattern = r'(?<!inspector/protocol/)\b('
+        for source, dest in file_pairs:
+            _, source_base = self._fs.split(source)
+            _, dest_base = self._fs.split(dest)
+            # ConditionalFeaturesForCore.h in bindings/tests/results/modules/
+            # confuses generated/checked-in detection in _replace_include_path().
+            if 'bindings/tests' in source.replace('\\', '/'):
+                continue
+            if source_base.endswith('.h'):
+                header_pattern += re.escape(source_base) + '|'
+            if source_base == dest_base:
+                continue
+            basename_map[source_base] = dest_base
+            pattern += re.escape(source_base) + '|'
+            # IDL sometimes generates implementation files as well as
+            # binding files. We'd like to update #includes for such files.
+            if source_base.endswith('.idl'):
+                source_header = source_base.replace('.idl', '.h')
+                basename_map[source_header] = dest_base.replace('.idl', '.h')
+                pattern += re.escape(source_header) + '|'
+                idl_headers.add(source_header)
+        _log.info('Rename %d files for snake_case', len(basename_map))
+        self._basename_map = basename_map
+        self._basename_re = re.compile(pattern[0:len(pattern) - 1] + ')(?=["\']|$)')
+        self._idl_generated_impl_headers = idl_headers
+        self._checked_in_header_re = re.compile(header_pattern[0:len(header_pattern) - 1] + ')$')
+
+    def _shorten_path(self, path):
+        if path.startswith(self._repo_root):
+            return path[len(self._repo_root) + 1:]
+        return path
+
+    @staticmethod
+    def _filter_file(fs, dirname, basename):
+        return FileType.detect(fs.join(dirname, basename)) != FileType.NONE
+
+    def _update_build(self, content):
+        content = content.replace('//third_party/WebKit/Source', '//third_party/blink/renderer')
+        content = content.replace('//third_party/WebKit/common', '//third_party/blink/common')
+        content = content.replace('//third_party/WebKit/public', '//third_party/blink/renderer/public')
+        # export_header_blink exists outside of Blink too.
+        content = content.replace('export_header_blink = "third_party/WebKit/public/platform/WebCommon.h"',
+                                  'export_header_blink = "third_party/blink/renderer/public/platform/web_common.h"')
+        return content
+
+    def _update_blink_build(self, content):
+        content = self._update_build(content)
+
+        # Update visibility=[...]
+        content = content.replace('//third_party/WebKit/*', '//third_party/blink/*')
+        content = content.replace('//third_party/WebKit/Source/*', '//third_party/blink/renderer/*')
+        content = content.replace('//third_party/WebKit/public/*', '//third_party/blink/renderer/public/*')
+
+        return self._update_basename(content)
+
+    def _update_owners(self, content):
+        content = content.replace('//third_party/WebKit/Source', '//third_party/blink/renderer')
+        content = content.replace('//third_party/WebKit/common', '//third_party/blink/common')
+        content = content.replace('//third_party/WebKit/public', '//third_party/blink/renderer/public')
+        return content
+
+    def _update_deps(self, content):
+        original_content = content
+        content = content.replace('third_party/WebKit/Source', 'third_party/blink/renderer')
+        content = content.replace('third_party/WebKit/common', 'third_party/blink/common')
+        content = content.replace('third_party/WebKit/public', 'third_party/blink/renderer/public')
+        content = content.replace('third_party/WebKit', 'third_party/blink')
+        if original_content == content:
+            return content
+        return self._update_basename(content)
+
+    def _update_mojom(self, content):
+        content = content.replace('third_party/WebKit/public', 'third_party/blink/renderer/public')
+        return content
+
+    def _update_typemap(self, content):
+        content = content.replace('//third_party/WebKit/Source', '//third_party/blink/renderer')
+        content = content.replace('//third_party/WebKit/common', '//third_party/blink/common')
+        content = content.replace('//third_party/WebKit/public', '//third_party/blink/renderer/public')
+        return self._update_basename(content)
+
+    def _update_blink_build_py(self, content):
+        # We don't prepend 'third_party/blink/renderer/' to matched basenames
+        # because it won't affect build and manual update after the great mv is
+        # enough.
+        return self._update_basename(content)
+
+    def _update_layout_tests(self, content):
+        return content.replace('file:///gen/third_party/WebKit/', 'file:///gen/third_party/blink/renderer/')
+
+    def _update_basename(self, content):
+        return self._basename_re.sub(lambda match: self._basename_map[match.group(1)], content)
+
+    @staticmethod
+    def _append_unless_upper_dir_exists(dirs, new_dir):
+        for i in range(0, len(dirs)):
+            if new_dir.startswith(dirs[i]):
+                return
+            if dirs[i].startswith(new_dir):
+                dirs[i] = new_dir
+                return
+        dirs.append(new_dir)
+
+    def _update_file_content(self):
+        _log.info('Find *.gn, *.mojom, *.py, *.typemap, DEPS, and OWNERS ...')
+        files = self._fs.files_under(
+            self._repo_root, dirs_to_skip=['.git', 'out'], file_filter=self._filter_file)
+        _log.info('Scan contents of %d files ...', len(files))
+        updated_deps_dirs = []
+        for file_path in files:
+            file_type = FileType.detect(file_path)
+            original_content = self._fs.read_text_file(file_path)
+            content = original_content
+            if file_type == FileType.BUILD:
+                content = self._update_build(content)
+            elif file_type == FileType.BLINK_BUILD:
+                content = self._update_blink_build(content)
+            elif file_type == FileType.OWNERS:
+                content = self._update_owners(content)
+            elif file_type == FileType.DEPS:
+                if self._fs.dirname(file_path) == self._repo_root:
+                    _log.info("Skip //DEPS")
+                    continue
+                content = self._update_deps(content)
+            elif file_type == FileType.MOJOM:
+                content = self._update_mojom(content)
+            elif file_type == FileType.TYPEMAP:
+                content = self._update_typemap(content)
+            elif file_type == FileType.BLINK_BUILD_PY:
+                content = self._update_blink_build_py(content)
+            elif file_type == FileType.LAYOUT_TESTS_WITH_MOJOM:
+                content = self._update_layout_tests(content)
+
+            if original_content == content:
+                continue
+            if self._options.run:
+                self._fs.write_text_file(file_path, content)
+                self._updated_files.append(file_path)
+            if file_type == FileType.DEPS:
+                self._append_unless_upper_dir_exists(updated_deps_dirs, self._fs.dirname(file_path))
+            _log.info('Updated %s', self._shorten_path(file_path))
+        return updated_deps_dirs
+
+    def _update_cpp_includes_in_directories(self, dirs):
+        for dirname in dirs:
+            _log.info('Processing #include in %s ...', self._shorten_path(dirname))
+            files = self._fs.files_under(
+                dirname, file_filter=lambda fs, _, basename: basename.endswith(
+                    ('.h', '.cc', '.cpp', '.mm', '.cc.tmpl', '.cpp.tmpl',
+                     '.h.tmpl', 'XPathGrammar.y', '.gperf')))
+            for file_path in files:
+                original_content = self._fs.read_text_file(file_path)
+
+                content = self._update_cpp_includes(original_content)
+                if file_path.endswith('.h') and '/third_party/WebKit/public/' in file_path.replace('\\', '/'):
+                    content = self._update_basename_only_includes(content, file_path)
+                if file_path.endswith('.h') and '/third_party/WebKit/' in file_path.replace('\\', '/'):
+                    content = self._update_include_guard(content, file_path)
+
+                if original_content == content:
+                    continue
+                if self._options.run:
+                    self._fs.write_text_file(file_path, content)
+                    self._updated_files.append(file_path)
+                _log.info('Updated %s', self._shorten_path(file_path))
+
+    def _replace_include_path(self, match):
+        include_or_import = match.group(1)
+        path = match.group(2)
+
+        # If |path| starts with 'third_party/WebKit', we should adjust the
+        # directory name for third_party/blink, and replace its basename by
+        # self._basename_map.
+        #
+        # If |path| starts with a Blink-internal directory such as bindings,
+        # core, modules, platform, public, it refers to a checked-in file, or a
+        # generated file. For the former, we should add
+        # 'third_party/blink/renderer/' and replace the basename.  For the
+        # latter, we should update the basename for a name mapped from an IDL
+        # renaming, and should not add 'third_party/blink/renderer'.
+
+        if path.startswith('third_party/WebKit'):
+            path = path.replace('third_party/WebKit/Source', 'third_party/blink/renderer')
+            path = path.replace('third_party/WebKit/common', 'third_party/blink/common')
+            path = path.replace('third_party/WebKit/public', 'third_party/blink/renderer/public')
+            path = self._update_basename(path)
+            return '#%s "%s"' % (include_or_import, path)
+
+        match = self._checked_in_header_re.search(path)
+        if match:
+            if match.group(1) in self._basename_map:
+                path = 'third_party/blink/renderer/' + path[:match.start(1)] + self._basename_map[match.group(1)]
+            else:
+                path = 'third_party/blink/renderer/' + path
+        elif 'core/inspector/protocol/' not in path:
+            basename_start = path.rfind('/') + 1
+            basename = path[basename_start:]
+            if basename in self._idl_generated_impl_headers:
+                path = path[:basename_start] + self._basename_map[basename]
+            elif basename.startswith('V8'):
+                path = path[:basename_start] + NameStyleConverter(basename[:len(basename) - 2]).to_snake_case() + '.h'
+        return '#%s "%s"' % (include_or_import, path)
+
+    def _update_cpp_includes(self, content):
+        pattern = re.compile(r'#(include|import)\s+"((bindings|core|modules|platform|public|' +
+                             r'third_party/WebKit/(Source|common|public))/[-_\w/.]+)"')
+        return pattern.sub(self._replace_include_path, content)
+
+    def _replace_basename_only_include(self, subdir, source_path, match):
+        source_basename = match.group(1)
+        if source_basename in self._basename_map:
+            return '#include "third_party/blink/renderer/public/%s/%s"' % (subdir, self._basename_map[source_basename])
+        _log.warning('Basename-only %s in %s', match.group(0), self._shorten_path(source_path))
+        return match.group(0)
+
+    def _update_basename_only_includes(self, content, source_path):
+        if not source_path.endswith('.h') or '/third_party/WebKit/public/' not in source_path.replace('\\', '/'):
+            return
+        # In public/ header files, we should replace |#include "WebFoo.h"|
+        # with |#include "third_party/blink/renderer/public/platform-or-web/web_foo.h"|
+        subdir = self._fs.basename(self._fs.dirname(source_path))
+        # subdir is 'web' or 'platform'.
+        return re.sub(r'#include\s+"(\w+\.h)"',
+                      partial(self._replace_basename_only_include, subdir, source_path), content)
+
+    def _update_include_guard(self, content, source_path):
+        current_guard = re.sub(r'[.]', '_', self._fs.basename(source_path))
+        new_path = relative_dest(self._fs, self._fs.relpath(
+            source_path, start=self._fs.join(self._repo_root, 'third_party', 'WebKit')))
+        new_guard = 'THIRD_PARTY_BLINK_' + re.sub(r'[\\/.]', '_', new_path.upper()) + '_'
+        content = re.sub(r'#ifndef\s+(WTF_)?' + current_guard, '#ifndef ' + new_guard, content);
+        content = re.sub(r'#define\s+(WTF_)?' + current_guard, '#define ' + new_guard, content);
+        content = re.sub(r'#endif\s+//\s+(WTF_)?' + current_guard, '#endif  // ' + new_guard, content);
+        return content
+
+    def _update_single_file_content(self, file_path, replace_list, should_write=True):
+        full_path = self._fs.join(self._repo_root, file_path)
+        original_content = self._fs.read_text_file(full_path)
+        content = original_content
+        for command in replace_list:
+            if isinstance(command, tuple):
+                src, dest = command
+                content = content.replace(src, dest)
+            elif callable(command):
+                content = command(content)
+            else:
+                raise TypeError('A tuple or a function is expected.')
+        if content != original_content:
+            if should_write:
+                self._fs.write_text_file(full_path, content)
+                self._updated_files.append(full_path)
+            _log.info('Updated %s', file_path)
+        else:
+            _log.warning('%s does not contain specified source strings.', file_path)
+
+
+def main():
+    logging.basicConfig(level=logging.DEBUG,
+                        format='[%(asctime)s %(levelname)s %(name)s] %(message)s',
+                        datefmt='%H:%M:%S')
+    parser = argparse.ArgumentParser(description='Blink source mover')
+    sub_parsers = parser.add_subparsers()
+
+    update_parser = sub_parsers.add_parser('update')
+    update_parser.set_defaults(command='update')
+    update_parser.add_argument('--run', dest='run', action='store_true',
+                               help='Update file contents')
+
+    move_parser = sub_parsers.add_parser('move')
+    move_parser.set_defaults(command='move')
+    move_parser.add_argument('--git', dest='run_git', action='store_true',
+                             help='Run |git mv| command instead of |mv|.')
+
+    options = parser.parse_args()
+    mover = MoveBlinkSource(FileSystem(), options, get_chromium_src_dir())
+    if options.command == 'update':
+        mover.update()
+    elif options.command == 'move':
+        mover.move()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/blink/tools/plan_blink_move.py b/blink/tools/plan_blink_move.py
new file mode 100644
index 0000000..3a2b59d
--- /dev/null
+++ b/blink/tools/plan_blink_move.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env vpython
+# Copyright 2017 The Chromium 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 os
+import re
+import sys
+
+sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..',
+                             'third_party', 'WebKit', 'Tools', 'Scripts'))
+from blinkpy.common.name_style_converter import NameStyleConverter
+from webkitpy.common.system.filesystem import FileSystem
+
+
+def relative_dest(fs, filename):
+    """Returns a destination path string for given filename.
+
+    |filename| is a path relative to third_party/WebKit, and the resultant path
+    is relative to third_party/blink.
+    """
+    dest = None
+    if filename.startswith('public'):
+        dest = re.sub(r'^public', 'renderer' + fs.sep + 'public', filename)
+    elif filename.startswith('Source'):
+        dest = re.sub(r'^Source', 'renderer', filename)
+    elif filename.startswith('common'):
+        dest = filename
+    else:
+        raise ValueError('|filename| must start with "common", "public", or "Source": %s' % filename)
+    if filename.endswith(('.h', '.cpp', '.mm', '.idl', '.typemap', 'Settings.json5')):
+        dirname, basename = fs.split(dest)
+        basename, ext = fs.splitext(basename)
+        # Skip some inspector-related files. #includes for these files are
+        # generated by a script outside of Blink.
+        if (re.match(r'Inspector.*Agent', basename)
+                or basename == 'InspectorTraceEvents'
+                or basename == 'PerformanceMonitor'
+                or basename == 'PlatformTraceEventsAgent'):
+            return dest
+        # Skip CSSProperty*. Some files are generated, and some files are
+        # checked-in. It's hard to handle them automatically.
+        if re.search(r'css[\\/]properties$', dirname):
+            return dest
+        if filename.endswith('.cpp'):
+            ext = '.cc'
+        # WebKit.h should be renamed to blink.h.
+        if basename == 'WebKit' and ext == '.h':
+            basename = 'blink'
+        if basename.lower() != basename:
+            basename = NameStyleConverter(basename).to_snake_case()
+        return fs.join(dirname, basename + ext)
+    return dest
+
+
+def start_with_list(name, prefixes):
+    if len(prefixes) == 0:
+        return True
+    for prefix in prefixes:
+        if name.startswith(prefix):
+            return True
+    return False
+
+
+def plan_blink_move(fs, prefixes):
+    """Returns (source, dest) path pairs.
+
+    The source paths are relative to third_party/WebKit,
+    and the dest paths are relative to third_party/blink.
+    The paths use os.sep as the path part separator.
+    """
+    blink_dir = fs.join(fs.dirname(__file__), '..')
+    webkit_dir = fs.join(blink_dir, '..', '..', 'third_party', 'WebKit')
+    source_files = fs.files_under(fs.join(webkit_dir, 'Source'))
+    source_files += fs.files_under(fs.join(webkit_dir, 'common'))
+    source_files += fs.files_under(fs.join(webkit_dir, 'public'))
+
+    # It's possible to check git.exists() here, but we don't do it due to slow
+    # performance. We should check it just before executing git command.
+
+    source_files = [f[len(webkit_dir) + 1:] for f in source_files]
+    return [(f, relative_dest(fs, f)) for f in source_files
+            if f.find('node_modules') == -1 and start_with_list(f, prefixes)]
+
+
+def main():
+    fs = FileSystem()
+    file_pairs = plan_blink_move(fs, sys.argv[1:])
+    print 'Show renaming plan. It contains files not in the repository.'
+    print '<Source path relative to third_party/WebKit> => <Destination path relative to third_party/blink>'
+    for pair in file_pairs:
+        print '%s\t=>\t%s' % pair
+
+
+if __name__ == '__main__':
+    main()
diff --git a/core/animation/Animation.idl b/core/animation/Animation.idl
index 34099ba..eb2b2a3 100644
--- a/core/animation/Animation.idl
+++ b/core/animation/Animation.idl
@@ -33,11 +33,16 @@
 enum AnimationPlayState { "idle", "pending", "running", "paused", "finished" };
 
 [
-    DependentLifetime,
-    NoInterfaceObject,
+    Constructor(optional AnimationEffectReadOnly? effect = null, optional AnimationTimeline? timeline),
+    Exposed(Window WebAnimationsAPI),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface Animation : EventTarget {
-    // TODO(dstockwell): Add timeline property.
+    // TODO(suzyh): Make timeline mutable.
     [RuntimeEnabled=WebAnimationsAPI] attribute AnimationEffectReadOnly? effect;
+    [RuntimeEnabled=WebAnimationsAPI] readonly attribute AnimationTimeline? timeline;
     [Measure] attribute double?    startTime;
     [Measure] attribute double?    currentTime;
     [Measure] attribute double     playbackRate;
diff --git a/core/animation/AnimationEffectReadOnly.idl b/core/animation/AnimationEffectReadOnly.idl
index 8011f9c..5f46ae5 100644
--- a/core/animation/AnimationEffectReadOnly.idl
+++ b/core/animation/AnimationEffectReadOnly.idl
@@ -31,10 +31,8 @@
 // https://w3c.github.io/web-animations/#the-animationeffectreadonly-interface
 
 [
-    RuntimeEnabled=WebAnimationsAPI,
-    GarbageCollected,
-    ImplementedAs=AnimationEffect,
+    RuntimeEnabled=WebAnimationsAPI
 ] interface AnimationEffectReadOnly {
-    readonly attribute AnimationEffectTiming timing;
-    readonly attribute ComputedTimingProperties computedTiming;
+    readonly attribute AnimationEffectTimingReadOnly timing;
+    ComputedTimingProperties getComputedTiming();
 };
diff --git a/core/animation/AnimationEffectTiming.idl b/core/animation/AnimationEffectTiming.idl
index 70d016f..502da5e 100644
--- a/core/animation/AnimationEffectTiming.idl
+++ b/core/animation/AnimationEffectTiming.idl
@@ -3,20 +3,16 @@
 // found in the LICENSE file.
 
 // https://w3c.github.io/web-animations/#the-animationeffecttiming-interface
-// TODO(dstockwell): Should extend AnimationEffectTimingReadOnly
 
 [
-    RuntimeEnabled=WebAnimationsAPI,
-    GarbageCollected,
-] interface AnimationEffectTiming {
+    RuntimeEnabled=WebAnimationsAPI
+] interface AnimationEffectTiming : AnimationEffectTimingReadOnly {
     attribute double delay;
     attribute double endDelay;
     attribute DOMString fill;
-    attribute double iterationStart;
-    attribute unrestricted double iterations;
-    attribute (unrestricted double or DOMString) duration;
-    // TODO(dstockwell): playbackRate has been removed from level 1.
-    attribute double playbackRate;
-    attribute DOMString direction;
-    attribute DOMString easing;
+    [RaisesException=Setter] attribute double iterationStart;
+    [RaisesException=Setter] attribute unrestricted double iterations;
+    [RaisesException=Setter] attribute (unrestricted double or DOMString) duration;
+    attribute PlaybackDirection direction;
+    [RaisesException=Setter] attribute DOMString easing;
 };
diff --git a/core/animation/AnimationEffectTimingProperties.idl b/core/animation/AnimationEffectTimingProperties.idl
new file mode 100644
index 0000000..005894a
--- /dev/null
+++ b/core/animation/AnimationEffectTimingProperties.idl
@@ -0,0 +1,19 @@
+// 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/web-animations/#the-animationeffecttimingproperties-dictionary
+
+enum FillMode { "none", "forwards", "backwards", "both", "auto" };
+enum PlaybackDirection { "normal", "reverse", "alternate", "alternate-reverse" };
+
+dictionary AnimationEffectTimingProperties {
+    double                             delay = 0;
+    double                             endDelay = 0;
+    FillMode                           fill = "auto";
+    double                             iterationStart = 0.0;
+    unrestricted double                iterations = 1.0;
+    (unrestricted double or DOMString) duration = "auto";
+    PlaybackDirection                  direction = "normal";
+    DOMString                          easing = "linear";
+};
diff --git a/core/animation/AnimationEffectTimingReadOnly.idl b/core/animation/AnimationEffectTimingReadOnly.idl
new file mode 100644
index 0000000..294bb70
--- /dev/null
+++ b/core/animation/AnimationEffectTimingReadOnly.idl
@@ -0,0 +1,19 @@
+// 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/web-animations/#the-animationeffecttimingreadonly-interface
+// TODO(suzyh): Use enums instead of DOMStrings where specced
+
+[
+    RuntimeEnabled=WebAnimationsAPI
+] interface AnimationEffectTimingReadOnly {
+    readonly attribute double delay;
+    readonly attribute double endDelay;
+    readonly attribute DOMString fill;
+    readonly attribute double iterationStart;
+    readonly attribute unrestricted double iterations;
+    readonly attribute (unrestricted double or DOMString) duration;
+    readonly attribute PlaybackDirection direction;
+    readonly attribute DOMString easing;
+};
diff --git a/core/animation/AnimationTimeline.idl b/core/animation/AnimationTimeline.idl
index 772b2e6..dd32f96 100644
--- a/core/animation/AnimationTimeline.idl
+++ b/core/animation/AnimationTimeline.idl
@@ -2,17 +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/web-animations/#the-animationtimeline-interface
-
-// TODO(dstockwell): This interface has several changes in the latest spec:
 // https://w3c.github.io/web-animations/#the-animationtimeline-interface
 
 [
-    RuntimeEnabled=WebAnimationsAPI,
-    GarbageCollected,
+    RuntimeEnabled=WebAnimationsAPI
 ] interface AnimationTimeline {
-    attribute double? currentTime;
-    attribute double playbackRate;
-    Animation play(AnimationEffectReadOnly source);
-    sequence<Animation> getAnimations();
+    readonly attribute double? currentTime;
 };
diff --git a/core/animation/ComputedTimingProperties.idl b/core/animation/ComputedTimingProperties.idl
index 71e0530..1719f70 100644
--- a/core/animation/ComputedTimingProperties.idl
+++ b/core/animation/ComputedTimingProperties.idl
@@ -4,14 +4,10 @@
 
 // https://w3c.github.io/web-animations/#the-computedtimingproperties-dictionary
 
-dictionary ComputedTimingProperties : KeyframeEffectOptions {
-    // TODO(dstockwell): There is no startTime member in the spec.
-    double              startTime;
-    unrestricted double endTime;
-    unrestricted double activeDuration;
-    double?             localTime;
-    // TODO(dstockwell): The timeFraction and currentIteration members should
-    // both be of type unrestricted double? (nullable).
-    unrestricted double timeFraction;
-    unsigned long?      currentIteration;
+dictionary ComputedTimingProperties : AnimationEffectTimingProperties {
+    unrestricted double  endTime;
+    unrestricted double  activeDuration;
+    double?              localTime;
+    double?              progress;
+    unrestricted double? currentIteration;
 };
diff --git a/core/animation/DocumentAnimation.idl b/core/animation/DocumentAnimation.idl
index 7e02888..1ccdcc8 100644
--- a/core/animation/DocumentAnimation.idl
+++ b/core/animation/DocumentAnimation.idl
@@ -5,8 +5,10 @@
 // https://w3c.github.io/web-animations/#extensions-to-the-document-interface
 
 [
-    RuntimeEnabled=WebAnimationsAPI,
+    ImplementedAs=DocumentAnimation,
+    RuntimeEnabled=WebAnimationsAPI
 ] partial interface Document {
-    // TODO(dstockwell): This should be a DocumentTimeline.
-    readonly attribute AnimationTimeline timeline;
+    readonly attribute DocumentTimeline timeline;
+
+    sequence<Animation> getAnimations();
 };
diff --git a/core/animation/DocumentTimeline.idl b/core/animation/DocumentTimeline.idl
new file mode 100644
index 0000000..54f9faa
--- /dev/null
+++ b/core/animation/DocumentTimeline.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/web-animations/#the-documenttimeline-interface
+
+[
+    Constructor(optional DocumentTimelineOptions options),
+    ConstructorCallWith=ExecutionContext,
+    RuntimeEnabled=WebAnimationsAPI
+] interface DocumentTimeline : AnimationTimeline {
+};
diff --git a/core/animation/DocumentTimelineOptions.idl b/core/animation/DocumentTimelineOptions.idl
new file mode 100644
index 0000000..6730f6e
--- /dev/null
+++ b/core/animation/DocumentTimelineOptions.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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-animations/#dictdef-documenttimelineoptions
+
+dictionary DocumentTimelineOptions {
+  DOMHighResTimeStamp originTime = 0;
+};
diff --git a/core/animation/EffectModel.idl b/core/animation/EffectModel.idl
deleted file mode 100644
index 6393414..0000000
--- a/core/animation/EffectModel.idl
+++ /dev/null
@@ -1,15 +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://www.w3.org/TR/web-animations/#the-animationeffect-interface
-
-// TODO(dstockwell): This interface has been removed in the latest spec:
-// https://w3c.github.io/web-animations/
-
-[
-    RuntimeEnabled=WebAnimationsAPI,
-    NoInterfaceObject,
-    GarbageCollected
-] interface EffectModel {
-};
diff --git a/core/animation/ElementAnimation.idl b/core/animation/ElementAnimation.idl
index a6ac513..b7639cb 100644
--- a/core/animation/ElementAnimation.idl
+++ b/core/animation/ElementAnimation.idl
@@ -28,17 +28,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/web-animations/#the-animatable-interface
-// http://www.w3.org/TR/web-animations/#extensions-to-the-element-interface
+// https://w3c.github.io/web-animations/#the-animatable-interface
+// https://w3c.github.io/web-animations/#extensions-to-the-element-interface
 
 // TODO(dstockwell): This should be an Animatable interface, where Element
-// implements Animatable. The interface also has several changes:
-// https://w3c.github.io/web-animations/#the-animatable-interface
+// implements Animatable.
 
-partial interface Element {
-    // FIXME: Union types with dictionary type members doesn't work (yet).
-    // 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);
+[
+    ImplementedAs=ElementAnimation
+] partial interface Element {
+    // TODO(dstockwell): The argument types do not match the spec.
+    [CallWith=ScriptState, Measure, RaisesException] Animation animate((sequence<Dictionary> or Dictionary)? effect, optional (unrestricted double or KeyframeAnimationOptions) options);
     [RuntimeEnabled=WebAnimationsAPI] sequence<Animation> getAnimations();
 };
diff --git a/core/animation/KeyframeAnimationOptions.idl b/core/animation/KeyframeAnimationOptions.idl
new file mode 100644
index 0000000..d83463e
--- /dev/null
+++ b/core/animation/KeyframeAnimationOptions.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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-animations/#dictdef-keyframeanimationoptions
+
+dictionary KeyframeAnimationOptions : KeyframeEffectOptions {
+    DOMString id = "";
+};
diff --git a/core/animation/KeyframeEffect.idl b/core/animation/KeyframeEffect.idl
index 5ec493d..a02fdd2 100644
--- a/core/animation/KeyframeEffect.idl
+++ b/core/animation/KeyframeEffect.idl
@@ -31,10 +31,9 @@
 // https://w3c.github.io/web-animations/#the-keyframeeffect-interfaces
 
 [
-    // TODO(dstockwell): the third argument should be "optional (unrestricted double or 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),
+    Constructor(Element? target, (sequence<Dictionary> or Dictionary)? effect, optional (unrestricted double or KeyframeEffectOptions) options),
+    ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    RuntimeEnabled=WebAnimationsAPI,
-] interface KeyframeEffect : AnimationEffectReadOnly {
+    RuntimeEnabled=WebAnimationsAPI
+] interface KeyframeEffect : KeyframeEffectReadOnly {
 };
diff --git a/core/animation/KeyframeEffectOptions.idl b/core/animation/KeyframeEffectOptions.idl
index fbf78ad..ac46caf 100644
--- a/core/animation/KeyframeEffectOptions.idl
+++ b/core/animation/KeyframeEffectOptions.idl
@@ -1,22 +1,9 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
+// 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/web-animations/#the-keyframeeffectoptions-dictionary
 
-enum FillMode { "none", "forwards", "backwards", "both", "auto" };
-enum PlaybackDirection { "normal", "reverse", "alternate", "alternate-reverse" };
-
-dictionary KeyframeEffectOptions {
-    double                             delay = 0;
-    double                             endDelay = 0;
-    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;
-    PlaybackDirection                  direction = "normal";
-    DOMString                          easing = "linear";
-    DOMString                          id = "";
+dictionary KeyframeEffectOptions : AnimationEffectTimingProperties {
+    // TODO(alancutter): Implement iterationComposite, composite and spacing.
 };
diff --git a/core/animation/KeyframeEffectReadOnly.idl b/core/animation/KeyframeEffectReadOnly.idl
new file mode 100644
index 0000000..e0fcf92
--- /dev/null
+++ b/core/animation/KeyframeEffectReadOnly.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://w3c.github.io/web-animations/#the-keyframeeffect-interfaces
+
+[
+    Constructor(Element? target, (sequence<Dictionary> or Dictionary)? effect, optional (unrestricted double or KeyframeEffectOptions) options),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    RuntimeEnabled=WebAnimationsAPI
+] interface KeyframeEffectReadOnly : AnimationEffectReadOnly {
+};
diff --git a/core/animation/ScrollTimeline.idl b/core/animation/ScrollTimeline.idl
new file mode 100644
index 0000000..f0c240b
--- /dev/null
+++ b/core/animation/ScrollTimeline.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/scroll-animations/#scrolltimeline-interface
+
+[
+    Constructor(optional ScrollTimelineOptions options),
+    ConstructorCallWith=Document,
+    RaisesException=Constructor,
+    RuntimeEnabled=AnimationWorklet
+] interface ScrollTimeline : AnimationTimeline {
+    readonly attribute Element? scrollSource;
+    readonly attribute ScrollDirection orientation;
+    readonly attribute (double or ScrollTimelineAutoKeyword) timeRange;
+};
diff --git a/core/animation/ScrollTimelineOptions.idl b/core/animation/ScrollTimelineOptions.idl
new file mode 100644
index 0000000..aaaae39
--- /dev/null
+++ b/core/animation/ScrollTimelineOptions.idl
@@ -0,0 +1,18 @@
+// Copyright 2017 The Chromium 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/scroll-animations/#dictdef-scrolltimelineoptions
+
+enum ScrollDirection {
+    "block",
+    "inline",
+};
+
+enum ScrollTimelineAutoKeyword { "auto" };
+
+dictionary ScrollTimelineOptions {
+        Element scrollSource;
+        ScrollDirection orientation = "block";
+        (double or ScrollTimelineAutoKeyword) timeRange = "auto";
+};
diff --git a/core/clipboard/Clipboard.idl b/core/clipboard/Clipboard.idl
new file mode 100644
index 0000000..22a0247
--- /dev/null
+++ b/core/clipboard/Clipboard.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/clipboard-apis/#clipboard-interface
+
+[SecureContext]
+interface Clipboard : EventTarget {
+  [CallWith=ScriptState] Promise<DataTransfer> read();
+  [CallWith=ScriptState] Promise<DOMString> readText();
+
+  [CallWith=ScriptState] Promise<void> write(DataTransfer data);
+  [CallWith=ScriptState] Promise<void> writeText(DOMString data);
+};
diff --git a/core/clipboard/DataTransfer.idl b/core/clipboard/DataTransfer.idl
index 5b22118..e31df69 100644
--- a/core/clipboard/DataTransfer.idl
+++ b/core/clipboard/DataTransfer.idl
@@ -29,7 +29,7 @@
 // https://html.spec.whatwg.org/#the-datatransfer-interface
 
 [
-    GarbageCollected
+    Constructor
 ] interface DataTransfer {
     attribute DOMString dropEffect;
     attribute DOMString effectAllowed;
@@ -39,7 +39,7 @@
     void setDragImage(Element image, long x, long y);
 
     /* old interface */
-    [SameObject] readonly attribute DOMString[] types;
+    [CachedAttribute=hasDataStoreItemListChanged] readonly attribute FrozenArray<DOMString> types;
     DOMString getData(DOMString format);
     void setData(DOMString format, DOMString data);
     void clearData(optional DOMString format);
diff --git a/core/clipboard/DataTransferItem.idl b/core/clipboard/DataTransferItem.idl
index 1328c6e..d7f3665 100644
--- a/core/clipboard/DataTransferItem.idl
+++ b/core/clipboard/DataTransferItem.idl
@@ -30,13 +30,9 @@
 
 // https://html.spec.whatwg.org/#the-datatransferitem-interface
 
-[
-    GarbageCollected,
-] interface DataTransferItem {
+interface DataTransferItem {
     readonly attribute DOMString kind;
     readonly attribute DOMString type;
-    // TODO(philipj): The callback argument should be a FunctionStringCallback.
-    [CallWith=ExecutionContext] void getAsString(StringCallback? callback);
-    // TODO(philipj): getAsFile() should return a File object. crbug.com/361145
-    Blob? getAsFile();
-};
+    [CallWith=ScriptState] void getAsString(FunctionStringCallback? callback);
+    File? getAsFile();
+};
\ No newline at end of file
diff --git a/core/clipboard/DataTransferItemList.idl b/core/clipboard/DataTransferItemList.idl
index 8a3e6c8..a38c057 100644
--- a/core/clipboard/DataTransferItemList.idl
+++ b/core/clipboard/DataTransferItemList.idl
@@ -30,14 +30,11 @@
 
 // https://html.spec.whatwg.org/#the-datatransferitemlist-interface
 
-[
-    GarbageCollected,
-] interface DataTransferItemList {
+interface DataTransferItemList {
     readonly attribute unsigned long length;
     [ImplementedAs=item] getter DataTransferItem (unsigned long index);
     [RaisesException] DataTransferItem? add(DOMString data, DOMString type);
-    // TODO(philipj): The file argument should not be nullable.
-    DataTransferItem? add(File? file);
+    DataTransferItem? add(File file);
     [RaisesException, ImplementedAs=deleteItem] void remove(unsigned long index);
     void clear();
 };
diff --git a/core/css/CSS.idl b/core/css/CSS.idl
index 185541c..3ffe730 100644
--- a/core/css/CSS.idl
+++ b/core/css/CSS.idl
@@ -27,11 +27,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-conditional/#the-css-interface
+// https://drafts.csswg.org/css-conditional/#the-css-interface
 
 [
-    ImplementedAs=DOMWindowCSS,
-    WillBeGarbageCollected
+    ImplementedAs=DOMWindowCSS
 ] interface CSS {
     static boolean supports(DOMString property, DOMString value);
     static boolean supports(DOMString conditionText);
diff --git a/core/css/CSSConditionRule.idl b/core/css/CSSConditionRule.idl
new file mode 100644
index 0000000..824a340
--- /dev/null
+++ b/core/css/CSSConditionRule.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://drafts.csswg.org/css-conditional/#the-cssconditionrule-interface
+
+interface CSSConditionRule : CSSGroupingRule {
+    // TODO(xing.xu): readonly should be removed.
+    readonly attribute DOMString conditionText;
+};
diff --git a/core/css/CSSFontFaceRule.idl b/core/css/CSSFontFaceRule.idl
index cc71dcd..88f4e8d 100644
--- a/core/css/CSSFontFaceRule.idl
+++ b/core/css/CSSFontFaceRule.idl
@@ -20,11 +20,12 @@
 
 // The CSSFontFaceRule interface was introduced in DOM Level 2 Style, but has
 // been replaced by an entirely different interface in CSS Fonts:
-// http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule
-// http://dev.w3.org/csswg/css-fonts/#om-fontface
+// https://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule
+// https://dev.w3.org/csswg/css-fonts/#om-fontface
 //
-// The interface from DOM Level 2 Style is implemented here.
-// TODO(philipj): Implement the interface from CSS Fonts.
+// TODO(foolip): Make CSSFontFaceRule match new spec and/or change spec to match
+// what's implemented. https://crbug.com/709013
+// https://github.com/w3c/csswg-drafts/issues/825
 
 interface CSSFontFaceRule : CSSRule {
     [Measure] readonly attribute CSSStyleDeclaration style;
diff --git a/core/css/CSSGroupingRule.idl b/core/css/CSSGroupingRule.idl
index c6dbf4e..198a309 100644
--- a/core/css/CSSGroupingRule.idl
+++ b/core/css/CSSGroupingRule.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/csswg/cssom/#the-cssgroupingrule-interface
+// https://drafts.csswg.org/cssom/#the-cssgroupingrule-interface
 
 interface CSSGroupingRule : CSSRule {
     [SameObject] readonly attribute CSSRuleList cssRules;
diff --git a/core/css/CSSImportRule.idl b/core/css/CSSImportRule.idl
index e845ca2..b298deb 100644
--- a/core/css/CSSImportRule.idl
+++ b/core/css/CSSImportRule.idl
@@ -18,11 +18,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssimportrule-interface
+// https://drafts.csswg.org/cssom/#the-cssimportrule-interface
 
 interface CSSImportRule : CSSRule {
     readonly attribute DOMString href;
-    // TODO(philipj): media should have [PutForwards=mediaText].
+    // TODO(foolip): media should have [PutForwards=mediaText].
     [SameObject] readonly attribute MediaList media;
     [SameObject] readonly attribute CSSStyleSheet styleSheet;
 };
diff --git a/core/css/CSSKeyframeRule.idl b/core/css/CSSKeyframeRule.idl
index 739a2e1..85f732b 100644
--- a/core/css/CSSKeyframeRule.idl
+++ b/core/css/CSSKeyframeRule.idl
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-animations/#interface-csskeyframerule
+// https://drafts.csswg.org/css-animations/#interface-csskeyframerule
 
 interface CSSKeyframeRule : CSSRule {
     [RaisesException=Setter] attribute DOMString keyText;
diff --git a/core/css/CSSKeyframesRule.idl b/core/css/CSSKeyframesRule.idl
index 709f133..dc04ce0 100644
--- a/core/css/CSSKeyframesRule.idl
+++ b/core/css/CSSKeyframesRule.idl
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-animations/#interface-csskeyframesrule
+// https://drafts.csswg.org/css-animations/#interface-csskeyframesrule
 
 interface CSSKeyframesRule : CSSRule {
     attribute DOMString name;
diff --git a/core/css/CSSMediaRule.idl b/core/css/CSSMediaRule.idl
index 1e6c85a..b287b6d 100644
--- a/core/css/CSSMediaRule.idl
+++ b/core/css/CSSMediaRule.idl
@@ -18,9 +18,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssmediarule-interface
+// https://drafts.csswg.org/cssom/#the-cssmediarule-interface
 
-interface CSSMediaRule : CSSGroupingRule {
-    // TODO(philipj): media should have [PutForwards=mediaText].
+interface CSSMediaRule : CSSConditionRule {
+    // TODO(foolip): media should have [PutForwards=mediaText].
     [SameObject] readonly attribute MediaList media;
 };
diff --git a/core/css/CSSNamespaceRule.idl b/core/css/CSSNamespaceRule.idl
index d48fc9a..64197ca 100644
--- a/core/css/CSSNamespaceRule.idl
+++ b/core/css/CSSNamespaceRule.idl
@@ -2,8 +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/csswg/cssom-1/#the-cssnamespacerule-interface
+// https://drafts.csswg.org/cssom/#the-cssnamespacerule-interface
 
 interface CSSNamespaceRule : CSSRule {
 
diff --git a/core/css/CSSPageRule.idl b/core/css/CSSPageRule.idl
index 5e04b6c..b659433 100644
--- a/core/css/CSSPageRule.idl
+++ b/core/css/CSSPageRule.idl
@@ -18,15 +18,15 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-csspagerule-interface
+// https://drafts.csswg.org/cssom/#the-csspagerule-interface
 
-// TODO(philipj): CSSPageRule should inherit from CSSGroupingRule.
+// TODO(foolip): CSSPageRule should inherit from CSSGroupingRule.
 // crbug.com/496381. To internally implement this as grouping rule,
 // margin at-rules should be implemented crbug.com/320370, since the
-// spec http://dev.w3.org/csswg/css-page/#at-page-rule allows only
+// spec https://drafts.csswg.org/css-page/#at-page-rule allows only
 // margin at-rules inside @page.
 interface CSSPageRule : CSSRule {
     attribute DOMString selectorText;
-    // TODO(philipj): style should have [PutForwards=cssText].
+    // TODO(foolip): style should have [PutForwards=cssText].
     [SameObject] readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/css/CSSRule.idl b/core/css/CSSRule.idl
index a064711..dbea2d4 100644
--- a/core/css/CSSRule.idl
+++ b/core/css/CSSRule.idl
@@ -18,11 +18,10 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssrule-interface
+// https://drafts.csswg.org/cssom/#the-cssrule-interface
 
 [
-    DependentLifetime,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface CSSRule {
     const unsigned short STYLE_RULE = 1;
     const unsigned short CHARSET_RULE = 2;
@@ -30,7 +29,7 @@
     const unsigned short MEDIA_RULE = 4;
     const unsigned short FONT_FACE_RULE = 5;
     const unsigned short PAGE_RULE = 6;
-    // TODO(philipj): Implement CSSMarginRule.
+    // TODO(foolip): Implement CSSMarginRule.
     // const unsigned short MARGIN_RULE = 9;
     const unsigned short NAMESPACE_RULE = 10;
     readonly attribute unsigned short type;
@@ -39,19 +38,15 @@
     readonly attribute CSSStyleSheet? parentStyleSheet;
 
     // CSS Animations
-    // http://dev.w3.org/csswg/css-animations/#interface-cssrule
+    // https://drafts.csswg.org/css-animations/#interface-cssrule
     const unsigned short KEYFRAMES_RULE = 7;
     const unsigned short KEYFRAME_RULE = 8;
 
     // CSS Conditional Rules
-    // http://dev.w3.org/csswg/css-conditional/#extentions-to-cssrule-interface
+    // https://drafts.csswg.org/css-conditional/#extentions-to-cssrule-interface
     const unsigned short SUPPORTS_RULE = 12;
 
     // CSS Device Adaptation
-    // http://dev.w3.org/csswg/css-device-adapt/#css-rule-interface
+    // https://drafts.csswg.org/css-device-adapt/#css-rule-interface
     [RuntimeEnabled=CSSViewport] const unsigned short VIEWPORT_RULE = 15;
-
-    // Non-standard APIs
-    const unsigned short WEBKIT_KEYFRAMES_RULE = 7;
-    const unsigned short WEBKIT_KEYFRAME_RULE = 8;
 };
diff --git a/core/css/CSSRuleList.idl b/core/css/CSSRuleList.idl
index ffb548c..c91518a 100644
--- a/core/css/CSSRuleList.idl
+++ b/core/css/CSSRuleList.idl
@@ -23,12 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssrulelist-interface
+// https://drafts.csswg.org/cssom/#the-cssrulelist-interface
 
-// TODO(philipj): CSSRuleList should be an [ArrayClass].
+// TODO(foolip): CSSRuleList should be an [ArrayClass].
 [
-    DependentLifetime,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface CSSRuleList {
     [Measure] getter CSSRule? item(unsigned long index);
     readonly attribute unsigned long length;
diff --git a/core/css/CSSStyleDeclaration.idl b/core/css/CSSStyleDeclaration.idl
index b109bb0..e518566 100644
--- a/core/css/CSSStyleDeclaration.idl
+++ b/core/css/CSSStyleDeclaration.idl
@@ -18,29 +18,28 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface
+// https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface
 
 [
-    DependentLifetime,
-    WillBeGarbageCollected
+    DependentLifetime
 ] interface CSSStyleDeclaration {
-    [RaisesException=Setter] attribute DOMString cssText;
+    [CEReactions, RaisesException=Setter] attribute DOMString cssText;
     readonly attribute unsigned long length;
     getter DOMString item(unsigned long index);
     DOMString getPropertyValue(DOMString property);
     DOMString getPropertyPriority(DOMString property);
-    // TODO(philipj): The value and priority arguments should have
+    // TODO(foolip): 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);
+    [CEReactions, 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);
+    [CEReactions, RaisesException] DOMString removeProperty(DOMString property);
     readonly attribute CSSRule? parentRule;
-    [RaisesException=Setter, TreatNullAs=EmptyString] attribute DOMString cssFloat;
+    [CEReactions, 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
-    // http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-dashed-attribute
+    // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-camel-cased-attribute
+    // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-dashed-attribute
     [Custom=(PropertyGetter,PropertyEnumerator,PropertyQuery)] getter (DOMString or float) (DOMString name);
     [Custom] setter void (DOMString property, DOMString? propertyValue);
 };
diff --git a/core/css/CSSStyleRule.idl b/core/css/CSSStyleRule.idl
index 52503b8..8a9f123 100644
--- a/core/css/CSSStyleRule.idl
+++ b/core/css/CSSStyleRule.idl
@@ -18,9 +18,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssstylerule-interface
+// https://drafts.csswg.org/cssom/#the-cssstylerule-interface
 
-interface CSSStyleRule : CSSRule {
+[
+    DependentLifetime
+] interface CSSStyleRule : CSSRule {
     attribute DOMString selectorText;
     [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/css/CSSStyleSheet.idl b/core/css/CSSStyleSheet.idl
index 0f9254a..d3ec320 100644
--- a/core/css/CSSStyleSheet.idl
+++ b/core/css/CSSStyleSheet.idl
@@ -18,15 +18,14 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface
+// https://drafts.csswg.org/cssom/#the-cssstylesheet-interface
 
 [
-    SetWrapperReferenceFrom=ownerNode,
+    DependentLifetime
 ] interface CSSStyleSheet : StyleSheet {
     readonly attribute CSSRule? ownerRule;
     [SameObject] readonly attribute CSSRuleList cssRules;
-    // TODO(philipj): The index argument should not be optional. crbug.com/319695
-    [RaisesException] unsigned long insertRule(DOMString rule, optional unsigned long index);
+    [RaisesException] unsigned long insertRule(DOMString rule, optional unsigned long index = 0);
     [RaisesException] void deleteRule(unsigned long index);
 
     // Non-standard APIs
diff --git a/core/css/CSSSupportsRule.idl b/core/css/CSSSupportsRule.idl
index d06a779..705a387 100644
--- a/core/css/CSSSupportsRule.idl
+++ b/core/css/CSSSupportsRule.idl
@@ -26,15 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-conditional/#the-csssupportsrule-interface
+// https://drafts.csswg.org/css-conditional/#the-csssupportsrule-interface
 
-// TODO(philipj): CSSSupportsRule should inherit from CSSConditionRule and
-// inherit all members.
-interface CSSSupportsRule : CSSRule {
-    // http://dev.w3.org/csswg/css-conditional/#the-cssconditionrule-interface
-    readonly attribute DOMString conditionText;
-    // http://dev.w3.org/csswg/cssom/#the-cssgroupingrule-interface
-    [SameObject] readonly attribute CSSRuleList cssRules;
-    [RaisesException] unsigned long insertRule(DOMString rule, unsigned long index);
-    [RaisesException] void deleteRule(unsigned long index);
+interface CSSSupportsRule : CSSConditionRule {
 };
diff --git a/core/css/CSSViewportRule.idl b/core/css/CSSViewportRule.idl
index 640d484..4c1894b 100644
--- a/core/css/CSSViewportRule.idl
+++ b/core/css/CSSViewportRule.idl
@@ -27,8 +27,10 @@
  * SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-device-adapt/#css-viewport-rule-interface
+// https://drafts.csswg.org/css-device-adapt/#css-viewport-rule-interface
 
-interface CSSViewportRule : CSSRule {
+[
+    RuntimeEnabled=CSSViewport
+] interface CSSViewportRule : CSSRule {
     readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/css/DocumentFontFaceSet.idl b/core/css/DocumentFontFaceSet.idl
deleted file mode 100644
index b1f217e..0000000
--- a/core/css/DocumentFontFaceSet.idl
+++ /dev/null
@@ -1,37 +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.
- */
-
-// http://dev.w3.org/csswg/css-font-loading/#font-face-source
-
-// TODO(philipj): This should be a FontFaceSource interface implemented by
-// Document and WorkerGlobalScope.
-partial interface Document {
-    [MeasureAs=DocumentFonts] readonly attribute FontFaceSet fonts;
-};
diff --git a/core/css/FontFace.idl b/core/css/FontFace.idl
index 527e800..b27465a 100644
--- a/core/css/FontFace.idl
+++ b/core/css/FontFace.idl
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-font-loading/#fontface-interface
+// https://drafts.csswg.org/css-font-loading/#fontface-interface
 
 enum FontFaceLoadStatus {
     "unloaded",
@@ -37,14 +37,14 @@
     "error"
 };
 
-// TODO(philipj): This interface should be [Exposed=Window,Worker].
+// TODO(foolip): This interface should be [Exposed=Window,Worker].
 [
+    ActiveScriptWrappable,
     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,
+    MeasureAs=FontFaceConstructor
 ] interface FontFace {
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString family;
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString style;
@@ -53,6 +53,7 @@
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString unicodeRange;
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString variant;
     [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString featureSettings;
+    [RaisesException=Setter, SetterCallWith=ExecutionContext] attribute DOMString display;
 
     readonly attribute FontFaceLoadStatus status;
 
diff --git a/core/css/FontFaceDescriptors.idl b/core/css/FontFaceDescriptors.idl
index c53b7b9..3c7e6c2 100644
--- a/core/css/FontFaceDescriptors.idl
+++ b/core/css/FontFaceDescriptors.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/csswg/css-font-loading/#dictdef-fontfacedescriptors
+// https://drafts.csswg.org/css-font-loading/#dictdef-fontfacedescriptors
 
 dictionary FontFaceDescriptors {
     DOMString style = "normal";
@@ -11,4 +11,5 @@
     DOMString unicodeRange = "U+0-10FFFF";
     DOMString variant = "normal";
     DOMString featureSettings = "normal";
+    DOMString display = "auto";
 };
diff --git a/core/css/FontFaceSet.idl b/core/css/FontFaceSet.idl
index 9f7480e..2e8622d 100644
--- a/core/css/FontFaceSet.idl
+++ b/core/css/FontFaceSet.idl
@@ -28,19 +28,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface
+// https://drafts.csswg.org/css-font-loading/#FontFaceSet-interface
 
 enum FontFaceSetLoadStatus { "loading", "loaded" };
 
-// TODO(philipj): This interface should be [Exposed=Window,Worker] and should
+// TODO(foolip): This interface should be [Exposed=Window,Worker] and should
 // have a constructor, and thus not have [NoInterfaceObject].
 [
     DependentLifetime,
-    SetWrapperReferenceFrom=document,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface FontFaceSet : EventTarget {
     setlike<FontFace>;
-    readonly attribute unsigned long size;
 
     // events for when loading state changes
     attribute EventHandler onloading;
diff --git a/core/css/FontFaceSetLoadEvent.idl b/core/css/FontFaceSetLoadEvent.idl
index 303c3c8..59da6a5 100644
--- a/core/css/FontFaceSetLoadEvent.idl
+++ b/core/css/FontFaceSetLoadEvent.idl
@@ -28,12 +28,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-font-loading/#fontfacesetloadevent
+// https://drafts.csswg.org/css-font-loading/#fontfacesetloadevent
 
-// TODO(philipj): This interface should have a constructor and
-// [Exposed=Window,Worker], and thus not [NoInterfaceObject].
 [
-    NoInterfaceObject,
+  Constructor(DOMString type, optional FontFaceSetLoadEventInit eventInitDict),
+  // TODO(loonybear): Exposed=(Window,Worker)
+  Exposed=Window
 ] interface FontFaceSetLoadEvent : Event {
-    readonly attribute sequence<FontFace> fontfaces;
+    [SameObject] readonly attribute FrozenArray<FontFace> fontfaces;
 };
diff --git a/core/css/FontFaceSetLoadEventInit.idl b/core/css/FontFaceSetLoadEventInit.idl
index e058d33..e47188d 100644
--- a/core/css/FontFaceSetLoadEventInit.idl
+++ b/core/css/FontFaceSetLoadEventInit.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/csswg/css-font-loading/#fontfacesetloadevent
+// https://drafts.csswg.org/css-font-loading/#fontfacesetloadevent
 
 dictionary FontFaceSetLoadEventInit : EventInit {
     sequence<FontFace> fontfaces = [];
diff --git a/core/css/FontFaceSource.idl b/core/css/FontFaceSource.idl
new file mode 100644
index 0000000..c7263bf
--- /dev/null
+++ b/core/css/FontFaceSource.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// spec: https://drafts.csswg.org/css-font-loading/#font-face-source
+
+[
+  LegacyTreatAsPartialInterface,
+  NoInterfaceObject
+] interface FontFaceSource {
+  [MeasureAs=DocumentFonts] readonly attribute FontFaceSet fonts;
+};
diff --git a/core/css/MediaList.idl b/core/css/MediaList.idl
index ff714af..06705b5 100644
--- a/core/css/MediaList.idl
+++ b/core/css/MediaList.idl
@@ -23,17 +23,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-medialist-interface
+// https://drafts.csswg.org/cssom/#the-medialist-interface
 
-// TODO(philipj): MediaList should be an [ArrayClass].
-[
-    WillBeGarbageCollected
-] interface MediaList {
-    // TODO(philipj): [TreatNullAs=EmptyString] stringifier attribute DOMString mediaText;
+// TODO(foolip): MediaList should be an [ArrayClass].
+interface MediaList {
+    // TODO(foolip): [TreatNullAs=EmptyString] stringifier attribute DOMString mediaText;
     attribute DOMString? mediaText;
     readonly attribute unsigned long length;
     [Measure] getter DOMString? item(unsigned long index);
-    // TODO(philipj): appendMedium() and deleteMedium() should never throw.
+    // TODO(foolip): appendMedium() and deleteMedium() should never throw.
     [RaisesException] void appendMedium(DOMString medium);
     [RaisesException] void deleteMedium(DOMString medium);
 };
diff --git a/core/css/MediaQueryList.idl b/core/css/MediaQueryList.idl
index f1906be..a5e1929 100644
--- a/core/css/MediaQueryList.idl
+++ b/core/css/MediaQueryList.idl
@@ -17,18 +17,19 @@
  *  Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom-view/#the-mediaquerylist-interface
+// https://drafts.csswg.org/cssom-view/#the-mediaquerylist-interface
 
 [
-    DependentLifetime,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface MediaQueryList : EventTarget {
     readonly attribute DOMString media;
     readonly attribute boolean matches;
     // Even though this interface is now an event target, these functions
     // exist as aliases for addEventListener for backwards compatibility
     // with older versions of this interface. See the note at
-    // http://dev.w3.org/csswg/cssom-view/#dom-mediaquerylist-removelistener
-    [ImplementedAs=addDeprecatedListener, Custom=CallEpilogue] void addListener(EventListener? listener);
-    [ImplementedAs=removeDeprecatedListener, Custom=CallEpilogue]void removeListener(EventListener? listener);
+    // https://drafts.csswg.org/cssom-view/#dom-mediaquerylist-removelistener
+    [ImplementedAs=addDeprecatedListener] void addListener(EventListener? listener);
+    [ImplementedAs=removeDeprecatedListener] void removeListener(EventListener? listener);
     attribute EventHandler onchange;
 };
diff --git a/core/css/MediaQueryListEvent.idl b/core/css/MediaQueryListEvent.idl
index f229e79..094e9a2 100644
--- a/core/css/MediaQueryListEvent.idl
+++ b/core/css/MediaQueryListEvent.idl
@@ -2,8 +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/csswg/cssom-view/#mediaquerylistevent
+// https://drafts.csswg.org/cssom-view/#mediaquerylistevent
 
 [
     Constructor(DOMString type, optional MediaQueryListEventInit eventInitDict)
diff --git a/core/css/MediaQueryListEventInit.idl b/core/css/MediaQueryListEventInit.idl
index 69972f5..013bae0 100644
--- a/core/css/MediaQueryListEventInit.idl
+++ b/core/css/MediaQueryListEventInit.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/csswg/cssom-view/#mediaquerylistevent
+// https://drafts.csswg.org/cssom-view/#mediaquerylistevent
 
 dictionary MediaQueryListEventInit : EventInit {
     DOMString media = "";
diff --git a/core/css/PropertyDescriptor.idl b/core/css/PropertyDescriptor.idl
new file mode 100644
index 0000000..18b455b
--- /dev/null
+++ b/core/css/PropertyDescriptor.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.
+
+dictionary PropertyDescriptor {
+    required DOMString name;
+    DOMString syntax = "*";
+    boolean inherits = false;
+    DOMString initialValue;
+};
diff --git a/core/css/PropertyRegistration.idl b/core/css/PropertyRegistration.idl
new file mode 100644
index 0000000..7fdcab9
--- /dev/null
+++ b/core/css/PropertyRegistration.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://drafts.css-houdini.org/css-properties-values-api/#registering-custom-properties
+[
+    ImplementedAs=PropertyRegistration
+] partial interface CSS {
+    [RuntimeEnabled=CSSVariables2, MeasureAs=CSSRegisterProperty, CallWith=ExecutionContext, RaisesException]
+        static void registerProperty(PropertyDescriptor descriptor);
+};
diff --git a/core/css/StyleMedia.idl b/core/css/StyleMedia.idl
index 38f4326..5e11e72 100644
--- a/core/css/StyleMedia.idl
+++ b/core/css/StyleMedia.idl
@@ -26,14 +26,13 @@
 
 // This interface was originally named Media, and was removed from the spec
 // shortly after it was renamed to StyleMedia:
-// http://www.w3.org/TR/2009/WD-cssom-view-20090804/#the-media-interface
-// http://web.archive.org/web/20100206142043/http://dev.w3.org/csswg/cssom-view#the-stylemedia-interface
+// https://www.w3.org/TR/2009/WD-cssom-view-20090804/#the-media-interface
+// https://web.archive.org/web/20100206142043/http://dev.w3.org/csswg/cssom-view#the-stylemedia-interface
 //
-// TODO(philipj): Remove this interface.
+// TODO(foolip): Remove this interface. https://crbug.com/692839
 
 [
-    NoInterfaceObject,
-    WillBeGarbageCollected
+    NoInterfaceObject
 ] interface StyleMedia {
     [MeasureAs=StyleMediaType] readonly attribute DOMString type;
     [MeasureAs=StyleMediaMatchMedium] boolean matchMedium([Default=Undefined] optional DOMString mediaquery);
diff --git a/core/css/StyleSheet.idl b/core/css/StyleSheet.idl
index 09a1be3..def438d 100644
--- a/core/css/StyleSheet.idl
+++ b/core/css/StyleSheet.idl
@@ -18,19 +18,18 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-stylesheet-interface
+// https://drafts.csswg.org/cssom/#the-stylesheet-interface
 
 [
-    SetWrapperReferenceFrom=ownerNode,
-    WillBeGarbageCollected
+    DependentLifetime
 ] interface StyleSheet {
     readonly attribute DOMString type;
     readonly attribute DOMString? href;
-    // TODO(philipj): ownerNode should be (Element or ProcessingInstruction).
+    // TODO(foolip): ownerNode should be (Element or ProcessingInstruction).
     readonly attribute Node? ownerNode;
     readonly attribute StyleSheet? parentStyleSheet;
     readonly attribute DOMString? title;
-    // TODO(philipj): media should have [PutForwards=mediaText].
+    // TODO(foolip): media should have [PutForwards=mediaText].
     [SameObject] readonly attribute MediaList media;
     attribute boolean disabled;
 };
diff --git a/core/css/StyleSheetList.idl b/core/css/StyleSheetList.idl
index ce31d3b..ee67024 100644
--- a/core/css/StyleSheetList.idl
+++ b/core/css/StyleSheetList.idl
@@ -18,12 +18,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/csswg/cssom/#the-stylesheetlist-interface
+// https://drafts.csswg.org/cssom/#the-stylesheetlist-interface
 
-// TODO(philipj): StyleSheetList should be an [ArrayClass].
+// TODO(foolip): StyleSheetList should be an [ArrayClass].
 [
-    SetWrapperReferenceFrom=document,
-    WillBeGarbageCollected
+    DependentLifetime
 ] interface StyleSheetList {
     [Measure] getter StyleSheet? item(unsigned long index);
     readonly attribute unsigned long length;
diff --git a/core/css/WebKitCSSMatrix.idl b/core/css/WebKitCSSMatrix.idl
deleted file mode 100644
index b43ec06..0000000
--- a/core/css/WebKitCSSMatrix.idl
+++ /dev/null
@@ -1,105 +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 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.
- */
-
-// Introduced in DOM Level ?:
-[
-    Constructor(optional DOMString cssValue = null),
-    ConstructorCallWith=ExecutionContext,
-    ImplementedAs=CSSMatrix,
-    RaisesException=Constructor,
-    WillBeGarbageCollected
-] interface WebKitCSSMatrix {
-
-    // These attributes are simple aliases for certain elements of the 4x4 matrix
-    attribute unrestricted double a; // alias for m11
-    attribute unrestricted double b; // alias for m12
-    attribute unrestricted double c; // alias for m21
-    attribute unrestricted double d; // alias for m22
-    attribute unrestricted double e; // alias for m41
-    attribute unrestricted double f; // alias for m42
-
-    attribute unrestricted double m11;
-    attribute unrestricted double m12;
-    attribute unrestricted double m13;
-    attribute unrestricted double m14;
-    attribute unrestricted double m21;
-    attribute unrestricted double m22;
-    attribute unrestricted double m23;
-    attribute unrestricted double m24;
-    attribute unrestricted double m31;
-    attribute unrestricted double m32;
-    attribute unrestricted double m33;
-    attribute unrestricted double m34;
-    attribute unrestricted double m41;
-    attribute unrestricted double m42;
-    attribute unrestricted double m43;
-    attribute unrestricted double m44;
-
-    [RaisesException] void setMatrixValue([Default=Undefined] optional DOMString string);
-
-    // Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix)
-    [LegacyInterfaceTypeChecking] WebKitCSSMatrix multiply([Default=Undefined] optional WebKitCSSMatrix secondMatrix);
-
-    // Return the inverse of this matrix. Throw an exception if the matrix is not invertible
-    [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
-    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
-    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.
-    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).
-    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.
-    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.
-    WebKitCSSMatrix skewY([Default=Undefined] optional unrestricted double angle);
-
-    [NotEnumerable] stringifier;
-};
diff --git a/core/css/cssom/CSSImageValue.idl b/core/css/cssom/CSSImageValue.idl
new file mode 100644
index 0000000..cf3a8ca
--- /dev/null
+++ b/core/css/cssom/CSSImageValue.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.
+
+// CSSImageValue is the base class for Typed OM's representation of various
+// image types.
+// https://drafts.css-houdini.org/css-typed-om/#imagevalue-objects
+[
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM,
+    ImplementedAs=CSSStyleImageValue
+] interface CSSImageValue : CSSResourceValue {
+    readonly attribute double? intrinsicWidth;
+    readonly attribute double? intrinsicHeight;
+    readonly attribute double? intrinsicRatio;
+};
diff --git a/core/css/cssom/CSSKeywordValue.idl b/core/css/cssom/CSSKeywordValue.idl
new file mode 100644
index 0000000..c080343
--- /dev/null
+++ b/core/css/cssom/CSSKeywordValue.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.
+
+// CSSKeywordValue represents CSS Values that are specified as keywords, for
+// example "initial".
+// https://drafts.css-houdini.org/css-typed-om/#keywordvalue-objects
+[
+    Constructor(DOMString keyword),
+    Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM),
+    RaisesException=Constructor
+] interface CSSKeywordValue : CSSStyleValue {
+    attribute DOMString value;
+};
diff --git a/core/css/cssom/CSSMatrixComponent.idl b/core/css/cssom/CSSMatrixComponent.idl
new file mode 100644
index 0000000..4ffa517
--- /dev/null
+++ b/core/css/cssom/CSSMatrixComponent.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.
+
+// Represents a matrix value in a CSSTransformValue used for properties like
+// "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssmatrixcomponent
+[
+    Constructor(DOMMatrixReadOnly matrix,
+        optional CSSMatrixComponentOptions options),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface CSSMatrixComponent : CSSTransformComponent {
+    attribute DOMMatrix matrix;
+};
diff --git a/core/css/cssom/CSSMatrixComponentOptions.idl b/core/css/cssom/CSSMatrixComponentOptions.idl
new file mode 100644
index 0000000..3b926a5
--- /dev/null
+++ b/core/css/cssom/CSSMatrixComponentOptions.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.
+
+// Options for creating a CSSMatrixComponent. See CSSMatrixComponent for usage.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#dictdef-cssmatrixcomponentoptions
+dictionary CSSMatrixComponentOptions {
+  boolean is2D = false;
+};
+
diff --git a/core/css/cssom/CSSNumericValue.idl b/core/css/cssom/CSSNumericValue.idl
new file mode 100644
index 0000000..d25cc87
--- /dev/null
+++ b/core/css/cssom/CSSNumericValue.idl
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// CSSNumericValue is the base class for numeric and length typed CSS Values.
+// https://drafts.css-houdini.org/css-typed-om/#numeric-objects
+[
+  Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM)
+] interface CSSNumericValue : CSSStyleValue {
+  [RaisesException, NewObject] CSSNumericValue add(CSSNumericValue value);
+  [RaisesException, NewObject] CSSNumericValue sub(CSSNumericValue value);
+  [RaisesException, NewObject] CSSNumericValue mul(double value);
+  [RaisesException, NewObject] CSSNumericValue div(double value);
+
+  [RaisesException, NewObject] CSSNumericValue to(DOMString unit);
+
+  // Putting Exposed=Window in the next line makes |parse| not exposed to PaintWorklet.
+  [RaisesException, NewObject, Exposed=Window] static CSSNumericValue parse(DOMString cssText);
+};
diff --git a/core/css/cssom/CSSPerspective.idl b/core/css/cssom/CSSPerspective.idl
new file mode 100644
index 0000000..87b7b7e
--- /dev/null
+++ b/core/css/cssom/CSSPerspective.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.
+
+// Represents a perspective value in a CSSTransformValue used for properties
+// like "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssperspective
+[
+    Constructor(CSSNumericValue length),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM,
+    RaisesException=Constructor
+] interface CSSPerspective : CSSTransformComponent {
+    [RaisesException=Setter] attribute CSSNumericValue length;
+};
diff --git a/core/css/cssom/CSSPositionValue.idl b/core/css/cssom/CSSPositionValue.idl
new file mode 100644
index 0000000..6efa073
--- /dev/null
+++ b/core/css/cssom/CSSPositionValue.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.
+
+// Represents a <position> value, i.e. a coordinate for properties like
+// background-position.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#positionvalue-objects
+[
+  Constructor(CSSNumericValue x, CSSNumericValue y),
+  Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM),
+  RaisesException=Constructor
+] interface CSSPositionValue : CSSStyleValue {
+  [RaisesException=Setter] attribute CSSNumericValue x;
+  [RaisesException=Setter] attribute CSSNumericValue y;
+};
diff --git a/core/css/cssom/CSSResourceValue.idl b/core/css/cssom/CSSResourceValue.idl
new file mode 100644
index 0000000..e5159f5
--- /dev/null
+++ b/core/css/cssom/CSSResourceValue.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.
+
+// CSSResourceValue is the base class used for representing loadable resources
+// in Typed OM. Example subclasses may include images and fonts.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#resourcevalue-objects
+enum CSSResourceState {
+    "unloaded", "loading", "loaded", "error"
+};
+
+[
+    Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM)
+] interface CSSResourceValue : CSSStyleValue {
+    readonly attribute CSSResourceState state;
+};
diff --git a/core/css/cssom/CSSRotation.idl b/core/css/cssom/CSSRotation.idl
new file mode 100644
index 0000000..c4018ed
--- /dev/null
+++ b/core/css/cssom/CSSRotation.idl
@@ -0,0 +1,19 @@
+// 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.
+
+// Represents a rotation value in a CSSTransformValue used for properties like
+// "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssrotation
+[
+    Constructor(CSSNumericValue angleValue),
+    Constructor(double x, double y, double z, CSSNumericValue angle),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM,
+    RaisesException=Constructor
+] interface CSSRotation : CSSTransformComponent {
+    [RaisesException=Setter] attribute CSSNumericValue angle;
+    attribute double x;
+    attribute double y;
+    attribute double z;
+};
diff --git a/core/css/cssom/CSSScale.idl b/core/css/cssom/CSSScale.idl
new file mode 100644
index 0000000..44d2721
--- /dev/null
+++ b/core/css/cssom/CSSScale.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.
+
+// Represents a scale value in a CSSTransformValue used for properties like
+// "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssscale
+[
+    Constructor(double x, double y),
+    Constructor(double x, double y, double z),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface CSSScale : CSSTransformComponent {
+    attribute double x;
+    attribute double y;
+    attribute double z;
+};
diff --git a/core/css/cssom/CSSSkew.idl b/core/css/cssom/CSSSkew.idl
new file mode 100644
index 0000000..7427ddf
--- /dev/null
+++ b/core/css/cssom/CSSSkew.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.
+
+// Represents a skew value in a CSSTransformValue used for properties like
+// "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssskew
+[
+    Constructor(CSSNumericValue ax, CSSNumericValue ay),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface CSSSkew : CSSTransformComponent {
+    [RaisesException=Setter] attribute CSSNumericValue ax;
+    [RaisesException=Setter] attribute CSSNumericValue ay;
+};
diff --git a/core/css/cssom/CSSStyleValue.idl b/core/css/cssom/CSSStyleValue.idl
new file mode 100644
index 0000000..cf09319
--- /dev/null
+++ b/core/css/cssom/CSSStyleValue.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.
+
+// CSSStyleValue is the base class for all CSS values accessible from Typed OM.
+// Values that are not yet supported as specific types are also returned as
+// base CSSStyleValues.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#stylevalue-objects
+[
+  Exposed(Window CSSTypedOM, PaintWorklet CSSPaintAPI)
+] interface CSSStyleValue {
+  stringifier;
+  // TODO(meade): Should be (CSSStyleValue or sequence<CSSStyleValue>)? instead of object?. Fix when the code generator supports this.
+  // Putting Exposed=Window in the next line makes |parse| not exposed to PaintWorklet.
+  [RaisesException, CallWith=ScriptState, Exposed=Window] static object? parse(DOMString property, DOMString cssText);
+};
diff --git a/core/css/cssom/CSSTransformComponent.idl b/core/css/cssom/CSSTransformComponent.idl
new file mode 100644
index 0000000..ec592a2
--- /dev/null
+++ b/core/css/cssom/CSSTransformComponent.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.
+
+// CSSTransformComponent is the base class used for the representations of
+// the individual CSS transforms. They are combined in a CSSTransformValue
+// before they can be used as a value for properties like "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#csstransformcomponent
+[
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface CSSTransformComponent {
+    stringifier;
+    attribute boolean is2D;
+};
diff --git a/core/css/cssom/CSSTransformValue.idl b/core/css/cssom/CSSTransformValue.idl
new file mode 100644
index 0000000..14938a8
--- /dev/null
+++ b/core/css/cssom/CSSTransformValue.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.
+
+[
+    Constructor(),
+    Constructor(sequence<CSSTransformComponent> transformComponents),
+    Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM)
+] interface CSSTransformValue : CSSStyleValue {
+    // https://github.com/w3c/css-houdini-drafts/issues/358
+    readonly attribute unsigned long length;
+    [ImplementedAs=componentAtIndex] getter CSSTransformComponent (unsigned long index);
+    iterable<CSSTransformComponent>;
+
+    readonly attribute boolean is2D;
+    [RaisesException, RuntimeEnabled=GeometryInterfaces] DOMMatrix toMatrix();
+};
diff --git a/core/css/cssom/CSSTranslation.idl b/core/css/cssom/CSSTranslation.idl
new file mode 100644
index 0000000..3d66384
--- /dev/null
+++ b/core/css/cssom/CSSTranslation.idl
@@ -0,0 +1,18 @@
+// 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.
+
+// Represents a translation value in a CSSTransformValue used for properties
+// like "transform".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#csstranslation
+[
+    Constructor(CSSNumericValue x, CSSNumericValue y),
+    Constructor(CSSNumericValue x, CSSNumericValue y, CSSNumericValue z),
+    Exposed=(Window,PaintWorklet),
+    RaisesException=Constructor,
+    RuntimeEnabled=CSSTypedOM
+] interface CSSTranslation : CSSTransformComponent {
+    [RaisesException=Setter] attribute CSSNumericValue x;
+    [RaisesException=Setter] attribute CSSNumericValue y;
+    [RaisesException=Setter] attribute CSSNumericValue z;
+};
diff --git a/core/css/cssom/CSSURLImageValue.idl b/core/css/cssom/CSSURLImageValue.idl
new file mode 100644
index 0000000..7798570
--- /dev/null
+++ b/core/css/cssom/CSSURLImageValue.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.
+
+// Represents image values that are specified using "url(...)".
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssurlimagevalue
+[
+    Constructor(USVString url),
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface CSSURLImageValue : CSSImageValue {
+    readonly attribute USVString url;
+};
diff --git a/core/css/cssom/CSSUnitValue.idl b/core/css/cssom/CSSUnitValue.idl
new file mode 100644
index 0000000..c00d6c4
--- /dev/null
+++ b/core/css/cssom/CSSUnitValue.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium 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 numeric values that can be expressed as a single number plus a
+// unit (or a naked number or percentage).
+// https://drafts.css-houdini.org/css-typed-om/#cssunitvalue
+[
+  Constructor(double value, DOMString unit),
+  RaisesException=Constructor,
+  Exposed=(Window,PaintWorklet),
+  RuntimeEnabled=CSSTypedOM
+] interface CSSUnitValue : CSSNumericValue {
+  [EnforceRange] attribute double value;
+  [RaisesException=Setter] attribute DOMString unit;
+  readonly attribute DOMString type;
+};
diff --git a/core/css/cssom/CSSUnitValues.idl b/core/css/cssom/CSSUnitValues.idl
new file mode 100644
index 0000000..37499d0
--- /dev/null
+++ b/core/css/cssom/CSSUnitValues.idl
@@ -0,0 +1,58 @@
+// Copyright 2017 The Chromium 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/css-typed-om/#numeric-factory
+
+[
+  ImplementedAs=CSSUnitValues,
+  RuntimeEnabled=CSSTypedOM
+] partial interface CSS {
+  [NewObject] static CSSUnitValue number(double value);
+  [NewObject] static CSSUnitValue percent(double value);
+
+  // <length>
+  [NewObject] static CSSUnitValue em(double value);
+  [NewObject] static CSSUnitValue ex(double value);
+  [NewObject] static CSSUnitValue ch(double value);
+  [NewObject] static CSSUnitValue rem(double value);
+  [NewObject] static CSSUnitValue vw(double value);
+  [NewObject] static CSSUnitValue vh(double value);
+  [NewObject] static CSSUnitValue vmin(double value);
+  [NewObject] static CSSUnitValue vmax(double value);
+  [NewObject] static CSSUnitValue cm(double value);
+  [NewObject] static CSSUnitValue mm(double value);
+  [NewObject] static CSSUnitValue in(double value);
+  [NewObject] static CSSUnitValue pt(double value);
+  [NewObject] static CSSUnitValue pc(double value);
+  [NewObject] static CSSUnitValue px(double value);
+  // Currently unsupported length units that are specified
+  // [NewObject] static CSSUnitValue ic(double value);
+  // [NewObject] static CSSUnitValue lh(double value);
+  // [NewObject] static CSSUnitValue rlh(double value);
+  // [NewObject] static CSSUnitValue vi(double value);
+  // [NewObject] static CSSUnitValue vb(double value);
+  // [NewObject] static CSSUnitValue q(double value);
+
+  // <angle>
+  [NewObject] static CSSUnitValue deg(double value);
+  [NewObject] static CSSUnitValue grad(double value);
+  [NewObject] static CSSUnitValue rad(double value);
+  [NewObject] static CSSUnitValue turn(double value);
+
+  // <time>
+  [NewObject] static CSSUnitValue s(double value);
+  [NewObject] static CSSUnitValue ms(double value);
+
+  // <frequency>
+  [NewObject] static CSSUnitValue Hz(double value);
+  [NewObject] static CSSUnitValue kHz(double value);
+
+  // <resolution>
+  [NewObject] static CSSUnitValue dpi(double value);
+  [NewObject] static CSSUnitValue dpcm(double value);
+  [NewObject] static CSSUnitValue dppx(double value);
+
+  // <flex>
+  [NewObject] static CSSUnitValue fr(double value);
+};
diff --git a/core/css/cssom/CSSUnparsedValue.idl b/core/css/cssom/CSSUnparsedValue.idl
new file mode 100644
index 0000000..acacca5
--- /dev/null
+++ b/core/css/cssom/CSSUnparsedValue.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.
+
+// CSSUnparsedValue objects represent values that reference custom properties.
+// They represent a list of string fragments and variable references.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#unparsedvalue-objects
+[
+    Exposed(Window CSSTypedOM, PaintWorklet CSSTypedOM)
+] interface CSSUnparsedValue : CSSStyleValue {
+    // https://github.com/w3c/css-houdini-drafts/issues/358
+    readonly attribute unsigned long length;
+    [ImplementedAs=fragmentAtIndex] getter (DOMString or CSSVariableReferenceValue) (unsigned long index);
+
+    iterable<(DOMString or CSSVariableReferenceValue)>;
+};
diff --git a/core/css/cssom/CSSVariableReferenceValue.idl b/core/css/cssom/CSSVariableReferenceValue.idl
new file mode 100644
index 0000000..4135a61
--- /dev/null
+++ b/core/css/cssom/CSSVariableReferenceValue.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.
+
+// Represents a CSS var() reference in a CSS value.
+// Spec: https://drafts.css-houdini.org/css-typed-om/#cssvariablereferencevalue
+[
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM,
+    ImplementedAs=CSSStyleVariableReferenceValue
+] interface CSSVariableReferenceValue {
+    readonly attribute DOMString variable;
+    readonly attribute CSSUnparsedValue fallback;
+};
diff --git a/core/css/cssom/CalcDictionary.idl b/core/css/cssom/CalcDictionary.idl
deleted file mode 100644
index 2f925c3..0000000
--- a/core/css/cssom/CalcDictionary.idl
+++ /dev/null
@@ -1,17 +0,0 @@
-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
deleted file mode 100644
index 79b2d2c..0000000
--- a/core/css/cssom/CalcLength.idl
+++ /dev/null
@@ -1,23 +0,0 @@
-[
-    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
deleted file mode 100644
index 8b7f660..0000000
--- a/core/css/cssom/KeywordValue.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 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
deleted file mode 100644
index 611425d..0000000
--- a/core/css/cssom/LengthValue.idl
+++ /dev/null
@@ -1,20 +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 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
deleted file mode 100644
index 92b12a8..0000000
--- a/core/css/cssom/Matrix.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-// 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
deleted file mode 100644
index 06bc109..0000000
--- a/core/css/cssom/NumberValue.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.
-
-[
-    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
deleted file mode 100644
index 6baedaa..0000000
--- a/core/css/cssom/Perspective.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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
deleted file mode 100644
index 5e405ec..0000000
--- a/core/css/cssom/PositionValue.idl
+++ /dev/null
@@ -1,11 +0,0 @@
-// 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
deleted file mode 100644
index 7a81cdb..0000000
--- a/core/css/cssom/Rotation.idl
+++ /dev/null
@@ -1,15 +0,0 @@
-// 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
deleted file mode 100644
index 22ec20d..0000000
--- a/core/css/cssom/Scale.idl
+++ /dev/null
@@ -1,14 +0,0 @@
-// 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
deleted file mode 100644
index 07c0b49..0000000
--- a/core/css/cssom/SimpleLength.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.
-
-[
-    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
deleted file mode 100644
index 5755f2b..0000000
--- a/core/css/cssom/Skew.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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
index 17d3945..16bd61b 100644
--- a/core/css/cssom/StylePropertyMap.idl
+++ b/core/css/cssom/StylePropertyMap.idl
@@ -2,16 +2,12 @@
 // 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/css-typed-om/#the-stylepropertymap
 [
-    RuntimeEnabled=CSSTypedOM,
-    GarbageCollected
-] interface StylePropertyMap {
-    [RaisesException] void append(DOMString property, (StyleValue or sequence<StyleValue> or DOMString) value);
+    Exposed=(Window,PaintWorklet),
+    RuntimeEnabled=CSSTypedOM
+] interface StylePropertyMap : StylePropertyMapReadonly {
+    [RaisesException] void append(DOMString property, (CSSStyleValue or sequence<CSSStyleValue> 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();
+    [RaisesException] void set(DOMString property, (CSSStyleValue or sequence<CSSStyleValue> or DOMString) value);
 };
diff --git a/core/css/cssom/StylePropertyMapReadonly.idl b/core/css/cssom/StylePropertyMapReadonly.idl
new file mode 100644
index 0000000..5bfc2e2
--- /dev/null
+++ b/core/css/cssom/StylePropertyMapReadonly.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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 CSSTypedOM, PaintWorklet CSSPaintAPI)
+] interface StylePropertyMapReadonly {
+    [RaisesException] CSSStyleValue? get(DOMString property);
+    [RaisesException] sequence<CSSStyleValue> getAll(DOMString property);
+    [RaisesException] boolean has(DOMString property);
+    iterable<DOMString, (CSSStyleValue or sequence<CSSStyleValue>)>;
+    sequence<DOMString> getProperties();
+};
diff --git a/core/css/cssom/StyleValue.idl b/core/css/cssom/StyleValue.idl
deleted file mode 100644
index 85b809d..0000000
--- a/core/css/cssom/StyleValue.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=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
deleted file mode 100644
index f8da462..0000000
--- a/core/css/cssom/TransformComponent.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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
deleted file mode 100644
index 2168f5f..0000000
--- a/core/css/cssom/TransformValue.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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
deleted file mode 100644
index 464b7cd..0000000
--- a/core/css/cssom/Translation.idl
+++ /dev/null
@@ -1,15 +0,0 @@
-// 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/css/cssom/WindowGetComputedStyle.idl b/core/css/cssom/WindowGetComputedStyle.idl
new file mode 100644
index 0000000..e9b3105
--- /dev/null
+++ b/core/css/cssom/WindowGetComputedStyle.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://drafts.css-houdini.org/css-typed-om/#computed-stylepropertymap-objects
+
+[
+    ImplementedAs=WindowGetComputedStyle,
+    RuntimeEnabled=CSSTypedOM
+] partial interface Window {
+    [NewObject] StylePropertyMapReadonly getComputedStyleMap(Element element, optional DOMString? pseudoElement = null);
+};
diff --git a/core/dom/AccessibleNode.idl b/core/dom/AccessibleNode.idl
new file mode 100644
index 0000000..f19a3ac
--- /dev/null
+++ b/core/dom/AccessibleNode.idl
@@ -0,0 +1,69 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Accessibility Object Model node
+// Explainer: https://github.com/WICG/aom/blob/master/explainer.md
+// Spec: https://wicg.github.io/aom/spec/
+[
+    Constructor,
+    ConstructorCallWith=Document,
+    RuntimeEnabled=AccessibilityObjectModel
+] interface AccessibleNode : EventTarget {
+    attribute AccessibleNode? activeDescendant;
+    attribute boolean? atomic;
+    attribute DOMString? autocomplete;
+    attribute boolean? busy;
+    attribute DOMString? checked;
+    attribute long? colCount;
+    attribute unsigned long? colIndex;
+    attribute unsigned long? colSpan;
+    attribute AccessibleNodeList? controls;
+    attribute DOMString? current;
+    attribute AccessibleNodeList? describedBy;
+    attribute AccessibleNode? details;
+    attribute boolean? disabled;
+    attribute AccessibleNode? errorMessage;
+    attribute boolean? expanded;
+    attribute AccessibleNodeList? flowTo;
+    attribute DOMString? hasPopUp;
+    attribute boolean? hidden;
+    attribute DOMString? invalid;
+    attribute DOMString? keyShortcuts;
+    attribute DOMString? label;
+    attribute AccessibleNodeList? labeledBy;
+    attribute unsigned long? level;
+    attribute DOMString? live;
+    attribute boolean? modal;
+    attribute boolean? multiline;
+    attribute boolean? multiselectable;
+    attribute DOMString? orientation;
+    attribute AccessibleNodeList? owns;
+    attribute DOMString? placeholder;
+    attribute unsigned long? posInSet;
+    attribute DOMString? pressed;
+    attribute boolean? readOnly;
+    attribute DOMString? relevant;
+    attribute boolean? required;
+    attribute DOMString? role;
+    attribute DOMString? roleDescription;
+    attribute long? rowCount;
+    attribute unsigned long? rowIndex;
+    attribute unsigned long? rowSpan;
+    attribute boolean? selected;
+    attribute long? setSize;
+    attribute DOMString? sort;
+    attribute double? valueMax;
+    attribute double? valueMin;
+    attribute double? valueNow;
+    attribute DOMString? valueText;
+
+    attribute EventHandler onaccessibleclick;
+    attribute EventHandler onaccessiblecontextmenu;
+    attribute EventHandler onaccessibledecrement;
+    attribute EventHandler onaccessiblefocus;
+    attribute EventHandler onaccessibleincrement;
+    attribute EventHandler onaccessiblescrollintoview;
+
+    [RaisesException] void appendChild(AccessibleNode child);
+};
diff --git a/core/dom/AccessibleNodeList.idl b/core/dom/AccessibleNodeList.idl
new file mode 100644
index 0000000..ec9a2b1
--- /dev/null
+++ b/core/dom/AccessibleNodeList.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Accessibility Object Model node list
+// Explainer: https://github.com/WICG/aom/blob/master/explainer.md
+// Spec: https://wicg.github.io/aom/spec/
+[
+    Constructor(optional sequence<AccessibleNode> nodes = []),
+    RuntimeEnabled=AccessibilityObjectModel
+] interface AccessibleNodeList {
+  attribute unsigned long length;
+  getter AccessibleNode? item(unsigned long index);
+  [RaisesException] setter void (unsigned long index, AccessibleNode node);
+  void add(AccessibleNode node, optional AccessibleNode? before = null);
+  void remove(long index);
+};
diff --git a/core/dom/ArrayBuffer.idl b/core/dom/ArrayBuffer.idl
deleted file mode 100644
index 12c506b..0000000
--- a/core/dom/ArrayBuffer.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#ARRAYBUFFER
-
-[
-    ImplementedAs=DOMArrayBuffer,
-    NoInterfaceObject,
-] interface ArrayBuffer {
-    readonly attribute unsigned long byteLength;
-};
diff --git a/core/dom/ArrayBufferView.idl b/core/dom/ArrayBufferView.idl
deleted file mode 100644
index d300904..0000000
--- a/core/dom/ArrayBufferView.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#ARRAYBUFFERVIEW
-
-[
-    ImplementedAs=DOMArrayBufferView,
-    NoInterfaceObject,
-] interface ArrayBufferView {
-    readonly attribute ArrayBuffer buffer;
-    readonly attribute unsigned long byteOffset;
-    readonly attribute unsigned long byteLength;
-};
diff --git a/core/dom/Attr.idl b/core/dom/Attr.idl
index 54540ba..0d099d8 100644
--- a/core/dom/Attr.idl
+++ b/core/dom/Attr.idl
@@ -20,17 +20,14 @@
 
 // https://dom.spec.whatwg.org/#interface-attr
 
-// FIXME: Attr should not inherit from Node. crbug.com/305105
 interface Attr : Node {
     readonly attribute DOMString? namespaceURI;
     readonly attribute DOMString? prefix;
     readonly attribute DOMString localName;
     readonly attribute DOMString name;
-    [ImplementedAs=valueForBindings, CustomElementCallbacks] attribute DOMString value;
-    [TreatNullAs=EmptyString, ImplementedAs=valueForBindings, MeasureAs=AttrNodeValue] attribute DOMString nodeValue; // legacy alias of .value
-    [TreatNullAs=EmptyString, ImplementedAs=valueForBindings, MeasureAs=AttrTextContent] attribute DOMString textContent; // legacy alias of .value
+    [CEReactions, CustomElementCallbacks] attribute DOMString value;
 
-    [MeasureAs=AttributeOwnerElement] readonly attribute Element? ownerElement;
+    readonly attribute Element? ownerElement;
 
-    [MeasureAs=AttributeSpecified] readonly attribute boolean specified; // useless; always returns true
+    readonly attribute boolean specified; // useless; always returns true
 };
diff --git a/core/dom/CDATASection.idl b/core/dom/CDATASection.idl
index d672cce..6cd8f22 100644
--- a/core/dom/CDATASection.idl
+++ b/core/dom/CDATASection.idl
@@ -17,9 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// https://dom.spec.whatwg.org/#cdatasection
+// https://dom.spec.whatwg.org/#interface-cdatasection
 
-// FIXME: CDATASection has been removed from the spec. crbug.com/437205
 interface CDATASection : Text {
 };
-
diff --git a/core/dom/CharacterData.idl b/core/dom/CharacterData.idl
index 5be7888..1d21611 100644
--- a/core/dom/CharacterData.idl
+++ b/core/dom/CharacterData.idl
@@ -20,7 +20,7 @@
 // https://dom.spec.whatwg.org/#interface-characterdata
 
 interface CharacterData : Node {
-    [TreatNullAs=NullString] attribute DOMString data;
+    attribute [TreatNullAs=NullString] DOMString data;
     readonly attribute unsigned long length;
     [RaisesException] DOMString substringData(unsigned long offset, unsigned long count);
     void appendData(DOMString data);
diff --git a/core/dom/ChildNode.idl b/core/dom/ChildNode.idl
index 8c2f9f3..1d71889 100644
--- a/core/dom/ChildNode.idl
+++ b/core/dom/ChildNode.idl
@@ -24,11 +24,10 @@
 
 [
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface ChildNode {
-    // [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();
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void before((Node or DOMString) ... nodes);
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void after((Node or DOMString)... nodes);
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void replaceWith((Node or DOMString)... nodes);
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void remove();
 };
diff --git a/core/dom/ClientRect.idl b/core/dom/ClientRect.idl
deleted file mode 100644
index 5d68b87..0000000
--- a/core/dom/ClientRect.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 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 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.
- *
- */
-
-// An old version of CSSOM View Module defines the ClientRect interface:
-// http://www.w3.org/TR/2011/WD-cssom-view-20110804/#the-clientrect-interface
-
-// It has since been replaced by DOMRect in CSSOM View Module and
-// Geometry Interfaces Module:
-// http://dev.w3.org/csswg/cssom-view/#extension-to-the-element-interface
-// http://dev.w3.org/fxtf/geometry/#DOMRect
-
-[
-    GarbageCollected,
-] interface ClientRect {
-    readonly attribute float top;
-    readonly attribute float right;
-    readonly attribute float bottom;
-    readonly attribute float left;
-    readonly attribute float width;
-    readonly attribute float height;
-};
diff --git a/core/dom/ClientRectList.idl b/core/dom/ClientRectList.idl
deleted file mode 100644
index 38eb2a6..0000000
--- a/core/dom/ClientRectList.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 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 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.
- *
- */
-
-// An old version of CSSOM View Module defines the ClientRectList interface:
-// http://www.w3.org/TR/2011/WD-cssom-view-20110804/#the-clientrectlist-interface
-
-// It has since been replace by DOMRectList in CSSOM View Module and
-// Geometry Interfaces Module:
-// http://dev.w3.org/csswg/cssom-view/#extension-to-the-element-interface
-// http://dev.w3.org/fxtf/geometry/#DOMRectList
-
-// CSSOM View Module also says: "The DOMRectList interface is at-risk.
-// The authors of this specification await feedback from implementers
-// if the item() function of DOMRectList is currently in use on legacy
-// interfaces. If there is no/not enough content to justify
-// DOMRectList, legacy interfaces must use sequences instead and
-// DOMRectList will be removed from this specification."
-
-[
-    GarbageCollected,
-] interface ClientRectList {
-    readonly attribute unsigned long length;
-    [MeasureAs=ClientRectListItem] ClientRect item(unsigned long index);
-    getter ClientRect (unsigned long index);
-};
diff --git a/core/dom/Comment.idl b/core/dom/Comment.idl
index 6ecf8f0..c22cc4a 100644
--- a/core/dom/Comment.idl
+++ b/core/dom/Comment.idl
@@ -21,6 +21,6 @@
 
 [
     Constructor(optional DOMString data = ""),
-    ConstructorCallWith=Document,
+    ConstructorCallWith=Document
 ] interface Comment : CharacterData {
 };
diff --git a/core/dom/CommonDefinitions.idl b/core/dom/CommonDefinitions.idl
index 30bb95f..d9e3f29 100644
--- a/core/dom/CommonDefinitions.idl
+++ b/core/dom/CommonDefinitions.idl
@@ -2,7 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://heycam.github.io/webidl/#common
+// https://heycam.github.io/webidl/#common
 
 typedef (ArrayBuffer or ArrayBufferView) BufferSource;
 typedef unsigned long long DOMTimeStamp;
+
+// typedefs used in multiple files.
+
+typedef object JSON;
diff --git a/core/dom/CompositorProxy.idl b/core/dom/CompositorProxy.idl
deleted file mode 100644
index 53de14b..0000000
--- a/core/dom/CompositorProxy.idl
+++ /dev/null
@@ -1,20 +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(Element element, DOMString[] attributeArray),
-    ConstructorCallWith=ExecutionContext,
-    Exposed=(Window,CompositorWorker),
-    GarbageCollected,
-    RaisesException=Constructor,
-    RuntimeEnabled=CompositorWorker,
-] interface CompositorProxy {
-    [RaisesException] attribute double opacity;
-    [RaisesException] attribute double scrollLeft;
-    [RaisesException] attribute double scrollTop;
-    [RaisesException] attribute DOMMatrix transform;
-
-    boolean supports(DOMString attribute);
-    void disconnect();
-};
diff --git a/core/dom/DOMError.idl b/core/dom/DOMError.idl
deleted file mode 100644
index d0c9544..0000000
--- a/core/dom/DOMError.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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/#domerror
-
-// FIXME: DOMError has been removed from the spec. crbug.com/460725
-[
-    Constructor(DOMString name, optional DOMString message = null),
-    GarbageCollected,
-    Measure,
-] interface DOMError {
-    [Measure] readonly attribute DOMString name;
-    [Measure] readonly attribute DOMString message;
-};
diff --git a/core/dom/DOMException.idl b/core/dom/DOMException.idl
index a2f4571..bbf3701 100644
--- a/core/dom/DOMException.idl
+++ b/core/dom/DOMException.idl
@@ -27,23 +27,19 @@
  */
 
 // Web IDL exceptions are defined in prose rather than IDL.
-// http://heycam.github.io/webidl/#idl-exceptions
-// http://heycam.github.io/webidl/#es-DOMException
+// https://heycam.github.io/webidl/#idl-exceptions
+// https://heycam.github.io/webidl/#es-DOMException
 
 [
     Constructor(optional DOMString message = "", optional DOMString name = "Error"),
     Exposed=(Window,Worker),
-    DoNotCheckConstants,
-    GarbageCollected,
-] exception DOMException {
+    DoNotCheckConstants
+] interface DOMException {
 
     readonly attribute unsigned short   code;
     readonly attribute DOMString        name;
     readonly attribute DOMString        message;
 
-    // Override in a Mozilla compatible format
-    [NotEnumerable] DOMString toString();
-
     // ExceptionCode
     const unsigned short      INDEX_SIZE_ERR                 = 1;
     const unsigned short      DOMSTRING_SIZE_ERR             = 2;
diff --git a/core/dom/DOMImplementation.idl b/core/dom/DOMImplementation.idl
index b058f29..55871f8 100644
--- a/core/dom/DOMImplementation.idl
+++ b/core/dom/DOMImplementation.idl
@@ -21,14 +21,12 @@
 // https://dom.spec.whatwg.org/#interface-domimplementation
 
 [
-    SetWrapperReferenceFrom=document,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface DOMImplementation {
     [NewObject, RaisesException] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
     [NewObject, RaisesException] XMLDocument createDocument(DOMString? namespaceURI, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
     // FIXME: createHTMLDocument should return a Document. crbug.com/238368
-    // FIXME: The title argument should not have a default value. crbug.com/335871
-    [NewObject] HTMLDocument createHTMLDocument(optional DOMString title = null);
+    [NewObject] Document createHTMLDocument(optional DOMString title);
 
     // useless; always returns true
     boolean hasFeature();
diff --git a/core/dom/DOMMatrix.idl b/core/dom/DOMMatrix.idl
deleted file mode 100644
index ee0290d..0000000
--- a/core/dom/DOMMatrix.idl
+++ /dev/null
@@ -1,59 +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://dev.w3.org/fxtf/geometry/#DOMMatrix
-
-[
-    Constructor,
-    Constructor(DOMMatrixReadOnly other),
-    // FIXME: Should implement more constructors (See: crbug.com/388780)
-    // FIXME: Exposed=(Window,Worker)
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMMatrix : DOMMatrixReadOnly {
-    // These attributes are simple aliases for certain elements of the 4x4 matrix
-    inherit attribute unrestricted double a;
-    inherit attribute unrestricted double b;
-    inherit attribute unrestricted double c;
-    inherit attribute unrestricted double d;
-    inherit attribute unrestricted double e;
-    inherit attribute unrestricted double f;
-
-    inherit attribute unrestricted double m11;
-    inherit attribute unrestricted double m12;
-    inherit attribute unrestricted double m13;
-    inherit attribute unrestricted double m14;
-    inherit attribute unrestricted double m21;
-    inherit attribute unrestricted double m22;
-    inherit attribute unrestricted double m23;
-    inherit attribute unrestricted double m24;
-    inherit attribute unrestricted double m31;
-    inherit attribute unrestricted double m32;
-    inherit attribute unrestricted double m33;
-    inherit attribute unrestricted double m34;
-    inherit attribute unrestricted double m41;
-    inherit attribute unrestricted double m42;
-    inherit attribute unrestricted double m43;
-    inherit attribute unrestricted double m44;
-
-    // FIXME: Should implement some methods (See: crbug.com/388780)
-    // Mutable transform methods
-    DOMMatrix multiplySelf(DOMMatrix other);
-    DOMMatrix preMultiplySelf(DOMMatrix other);
-    DOMMatrix translateSelf(unrestricted double tx,
-                            unrestricted double ty,
-                            optional unrestricted double tz = 0);
-    DOMMatrix scaleSelf(unrestricted double scale,
-                        optional unrestricted double originX = 0,
-                        optional unrestricted double originY = 0);
-    DOMMatrix scale3dSelf(unrestricted double scale,
-                          optional unrestricted double originX = 0,
-                          optional unrestricted double originY = 0,
-                          optional unrestricted double originZ = 0);
-    DOMMatrix scaleNonUniformSelf(unrestricted double scaleX,
-                                  optional unrestricted double scaleY = 1,
-                                  optional unrestricted double scaleZ = 1,
-                                  optional unrestricted double originX = 0,
-                                  optional unrestricted double originY = 0,
-                                  optional unrestricted double originZ = 0);
-};
diff --git a/core/dom/DOMMatrixReadOnly.idl b/core/dom/DOMMatrixReadOnly.idl
deleted file mode 100644
index f0cd565..0000000
--- a/core/dom/DOMMatrixReadOnly.idl
+++ /dev/null
@@ -1,63 +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://dev.w3.org/fxtf/geometry/#DOMMatrix
-
-[
-    // FIXME: Constructor(sequence<unrestricted double> numberSequence)
-    // FIXME: Exposed=(Window,Worker)
-    GarbageCollected,
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMMatrixReadOnly {
-    // These attributes are simple aliases for certain elements of the 4x4 matrix
-    readonly attribute unrestricted double a;
-    readonly attribute unrestricted double b;
-    readonly attribute unrestricted double c;
-    readonly attribute unrestricted double d;
-    readonly attribute unrestricted double e;
-    readonly attribute unrestricted double f;
-
-    readonly attribute unrestricted double m11;
-    readonly attribute unrestricted double m12;
-    readonly attribute unrestricted double m13;
-    readonly attribute unrestricted double m14;
-    readonly attribute unrestricted double m21;
-    readonly attribute unrestricted double m22;
-    readonly attribute unrestricted double m23;
-    readonly attribute unrestricted double m24;
-    readonly attribute unrestricted double m31;
-    readonly attribute unrestricted double m32;
-    readonly attribute unrestricted double m33;
-    readonly attribute unrestricted double m34;
-    readonly attribute unrestricted double m41;
-    readonly attribute unrestricted double m42;
-    readonly attribute unrestricted double m43;
-    readonly attribute unrestricted double m44;
-
-    readonly attribute boolean is2D;
-    readonly attribute boolean isIdentity;
-
-    // FIXME: Should implement some methods (See: crbug.com/388780)
-    // Immutable transform methods
-    DOMMatrix translate(unrestricted double tx,
-                        unrestricted double ty,
-                        optional unrestricted double tz = 0);
-    DOMMatrix scale(unrestricted double scale,
-                    optional unrestricted double originX = 0,
-                    optional unrestricted double originY = 0);
-    DOMMatrix scale3d(unrestricted double scale,
-                      optional unrestricted double originX = 0,
-                      optional unrestricted double originY = 0,
-                      optional unrestricted double originZ = 0);
-    DOMMatrix scaleNonUniform(unrestricted double scaleX,
-                              optional unrestricted double scaleY = 1,
-                              optional unrestricted double scaleZn = 1,
-                              optional unrestricted double originX = 0,
-                              optional unrestricted double originY = 0,
-                              optional unrestricted double originZ = 0);
-    DOMMatrix multiply(DOMMatrix other);
-
-    Float32Array toFloat32Array();
-    Float64Array toFloat64Array();
-};
diff --git a/core/dom/DOMPoint.idl b/core/dom/DOMPoint.idl
deleted file mode 100644
index 8c99323..0000000
--- a/core/dom/DOMPoint.idl
+++ /dev/null
@@ -1,20 +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://dev.w3.org/fxtf/geometry/#DOMPoint
-
-[
-    // FIXME: The point argument is optional in the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28108
-    Constructor(DOMPointInit point),
-    Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
-                optional unrestricted double z = 0, optional unrestricted double w = 1),
-    // FIXME: Exposed=(Window,Worker)
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMPoint : DOMPointReadOnly {
-    inherit attribute unrestricted double x;
-    inherit attribute unrestricted double y;
-    inherit attribute unrestricted double z;
-    inherit attribute unrestricted double w;
-};
diff --git a/core/dom/DOMPointInit.idl b/core/dom/DOMPointInit.idl
deleted file mode 100644
index 136627f..0000000
--- a/core/dom/DOMPointInit.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.
-
-// http://dev.w3.org/fxtf/geometry/#DOMPoint
-
-dictionary DOMPointInit {
-    unrestricted double x = 0;
-    unrestricted double y = 0;
-    unrestricted double z = 0;
-    unrestricted double w = 1;
-};
diff --git a/core/dom/DOMPointReadOnly.idl b/core/dom/DOMPointReadOnly.idl
deleted file mode 100644
index e33d4f2..0000000
--- a/core/dom/DOMPointReadOnly.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// http://dev.w3.org/fxtf/geometry/#DOMPoint
-
-[
-    Constructor(unrestricted double x, unrestricted double y,
-                unrestricted double z, unrestricted double w),
-    // FIXME: Exposed=(Window,Worker)
-    GarbageCollected,
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMPointReadOnly {
-    readonly attribute unrestricted double x;
-    readonly attribute unrestricted double y;
-    readonly attribute unrestricted double z;
-    readonly attribute unrestricted double w;
-
-    // FIXME: Implement matrixTransform.
-    // DOMPoint matrixTransform(DOMMatrixReadOnly matrix);
-};
diff --git a/core/dom/DOMRect.idl b/core/dom/DOMRect.idl
deleted file mode 100644
index 185d3ff..0000000
--- a/core/dom/DOMRect.idl
+++ /dev/null
@@ -1,19 +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://dev.w3.org/fxtf/geometry/#DOMRect
-
-[
-    Constructor(optional unrestricted double x = 0,
-                optional unrestricted double y = 0,
-                optional unrestricted double width = 0,
-                optional unrestricted double height = 0),
-    // FIXME: Exposed=(Window,Worker)
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMRect : DOMRectReadOnly {
-    inherit attribute unrestricted double x;
-    inherit attribute unrestricted double y;
-    inherit attribute unrestricted double width;
-    inherit attribute unrestricted double height;
-};
diff --git a/core/dom/DOMRectReadOnly.idl b/core/dom/DOMRectReadOnly.idl
deleted file mode 100644
index ca8532a..0000000
--- a/core/dom/DOMRectReadOnly.idl
+++ /dev/null
@@ -1,22 +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://dev.w3.org/fxtf/geometry/#DOMRect
-
-[
-    Constructor(unrestricted double x, unrestricted double y,
-                unrestricted double width, unrestricted double height),
-    // FIXME: Exposed=(Window,Worker)
-    GarbageCollected,
-    RuntimeEnabled=GeometryInterfaces,
-] interface DOMRectReadOnly {
-    readonly attribute unrestricted double x;
-    readonly attribute unrestricted double y;
-    readonly attribute unrestricted double width;
-    readonly attribute unrestricted double height;
-    readonly attribute unrestricted double top;
-    readonly attribute unrestricted double right;
-    readonly attribute unrestricted double bottom;
-    readonly attribute unrestricted double left;
-};
diff --git a/core/dom/DOMStringList.idl b/core/dom/DOMStringList.idl
index 3821bd8..aabd5f5 100644
--- a/core/dom/DOMStringList.idl
+++ b/core/dom/DOMStringList.idl
@@ -23,15 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://dom.spec.whatwg.org/#domstringlist
+// https://html.spec.whatwg.org/multipage/infrastructure.html#domstringlist
 
-// FIXME: DOMStringList has been removed from the spec. crbug.com/460726
-[
-    WillBeGarbageCollected,
-] interface DOMStringList {
+[Exposed=(Window,Worker)]
+interface DOMStringList {
     readonly attribute unsigned long length;
-    getter DOMString? (unsigned long index);
-
-    [CallWith=ExecutionContext] DOMString? item(unsigned long index);
-    [CallWith=ExecutionContext,MeasureAs=DOMStringListContains] boolean contains(DOMString string);
+    getter DOMString? item(unsigned long index);
+    boolean contains(DOMString string);
 };
diff --git a/core/dom/DOMStringMap.idl b/core/dom/DOMStringMap.idl
index 2034eac..7e1045e 100644
--- a/core/dom/DOMStringMap.idl
+++ b/core/dom/DOMStringMap.idl
@@ -26,17 +26,10 @@
 // https://html.spec.whatwg.org/#the-domstringmap-interface
 
 [
-    OverrideBuiltins,
-    SetWrapperReferenceFrom=element,
-    WillBeGarbageCollected,
+    DependentLifetime,
+    OverrideBuiltins
 ] interface DOMStringMap {
     [ImplementedAs=item] getter DOMString (DOMString name);
-    [RaisesException] setter void (DOMString name, DOMString value);
-    deleter void (DOMString name);
-
-    // FIXME: The indexed getter, setter and deleter are not in the
-    // spec and simply converts the index to a string.
-    [NotEnumerable] getter DOMString (unsigned long index);
-    [RaisesException] setter void (unsigned long index, DOMString value);
-    deleter void (unsigned long index);
+    [CEReactions, RaisesException] setter void (DOMString name, DOMString value);
+    [CEReactions] deleter void (DOMString name);
 };
diff --git a/core/dom/DOMTokenList.idl b/core/dom/DOMTokenList.idl
index e49a183..1f8ef8c 100644
--- a/core/dom/DOMTokenList.idl
+++ b/core/dom/DOMTokenList.idl
@@ -10,37 +10,33 @@
  *     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.
+ * 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-domtokenlist
 
 [
-    SetWrapperReferenceFrom=element,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface DOMTokenList {
     readonly attribute unsigned long length;
     getter DOMString? item(unsigned long index);
-    [RaisesException] boolean contains(DOMString token);
-    [RaisesException, CustomElementCallbacks] void add(DOMString... tokens);
-    [RaisesException, CustomElementCallbacks] void remove(DOMString... tokens);
-    [RaisesException, CustomElementCallbacks] boolean toggle(DOMString token, optional boolean force);
+    boolean contains(DOMString token);
+    [RaisesException, CEReactions, CustomElementCallbacks] void add(DOMString... tokens);
+    [RaisesException, CEReactions, CustomElementCallbacks] void remove(DOMString... tokens);
+    [RaisesException, CEReactions, CustomElementCallbacks] boolean toggle(DOMString token, optional boolean force);
+    [RaisesException, CEReactions] void replace(DOMString token, DOMString newToken);
     [RaisesException, CustomElementCallbacks] boolean supports(DOMString token);
-    attribute DOMString value;
-    // FIXME: stringifier should be enumerable.
-    [NotEnumerable] stringifier;
+    [CEReactions] attribute DOMString value;
+    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
deleted file mode 100644
index 876a0a8..0000000
--- a/core/dom/DataView.idl
+++ /dev/null
@@ -1,31 +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 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 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://www.khronos.org/registry/typedarray/specs/latest/#DATAVIEW
-
-[
-    ImplementedAs=DOMDataView,
-] interface DataView : ArrayBufferView {
-};
diff --git a/core/dom/Document.idl b/core/dom/Document.idl
index aafcdaf..48f6600 100644
--- a/core/dom/Document.idl
+++ b/core/dom/Document.idl
@@ -18,24 +18,32 @@
  * Boston, MA 02110-1301, USA.
  */
 
-callback CustomElementConstructor = Element ();
+[Custom] callback CustomElementConstructor = Element ();
 
 // https://html.spec.whatwg.org/#the-document-object
 enum DocumentReadyState { "loading", "interactive", "complete" };
 
-// http://www.w3.org/TR/page-visibility/#VisibilityState
-enum VisibilityState { "hidden", "visible", "prerender", "unloaded" };
+
+// https://w3c.github.io/page-visibility/#visibility-states-and-the-visibilitystate-enum
+enum VisibilityState { "hidden", "visible", "prerender"};
+
+// https://wicg.github.io/cors-rfc1918/#feature-detect
+enum AddressSpace { "local", "private", "public" };
+
+typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement;
 
 // https://dom.spec.whatwg.org/#interface-document
 
-// FIXME: Document should have a constructor. crbug.com/238234
-interface Document : Node {
+[
+    Constructor(),
+    ConstructorCallWith=Document
+] interface Document : Node {
     [SameObject] readonly attribute DOMImplementation implementation;
-    readonly attribute DOMString URL;
+    [ImplementedAs=urlForBinding] readonly attribute DOMString URL;
     // FIXME: documentURI should not be nullable.
-    [ImplementedAs=url] readonly attribute DOMString? documentURI;
-    readonly attribute DOMString origin;
-    [RuntimeEnabled=suborigins] readonly attribute DOMString suborigin;
+    [ImplementedAs=urlForBinding] readonly attribute DOMString? documentURI;
+    [MeasureAs=DocumentOrigin] readonly attribute DOMString origin;
+    [RuntimeEnabled=Suborigins] readonly attribute DOMString suborigin;
     readonly attribute DOMString compatMode;
 
     readonly attribute DOMString characterSet;
@@ -49,20 +57,21 @@
     HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
     HTMLCollection getElementsByClassName(DOMString classNames);
 
-    [NewObject, CustomElementCallbacks, PerWorldBindings, RaisesException] Element createElement(DOMString localName);
-    [NewObject, CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName);
+    [NewObject, DoNotTestNewObject, CustomElementCallbacks, PerWorldBindings, RaisesException] Element createElement(DOMString localName);
+    [NewObject, DoNotTestNewObject, CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName);
     [NewObject] DocumentFragment createDocumentFragment();
     [NewObject] Text createTextNode(DOMString data);
+    [NewObject, RaisesException] CDATASection createCDATASection(DOMString data);
     [NewObject] Comment createComment(DOMString data);
     [NewObject, RaisesException] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
 
-    [NewObject, CustomElementCallbacks, RaisesException] Node importNode(Node node, optional boolean deep = false);
-    [RaisesException, CustomElementCallbacks] Node adoptNode(Node node);
+    [NewObject, DoNotTestNewObject, CEReactions, CustomElementCallbacks, RaisesException] Node importNode(Node node, optional boolean deep = false);
+    [RaisesException, CEReactions, 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, CallWith=ExecutionContext] Event createEvent(DOMString eventType);
+    [NewObject, RaisesException, CallWith=ScriptState] Event createEvent(DOMString eventType);
 
     [NewObject] Range createRange();
 
@@ -70,8 +79,8 @@
     [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);
+    // NonDocumentRootScroller (https://github.com/bokand/NonDocumentRootScroller)
+    [RaisesException=Setter, RuntimeEnabled=SetRootScroller, Measure] attribute Element? rootScroller;
 
     // FIXME: xmlEncoding/xmlVersion/xmlStandalone have been removed from the spec.
     [MeasureAs=DocumentXMLEncoding] readonly attribute DOMString? xmlEncoding;
@@ -83,45 +92,47 @@
 
     // 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;
-    [RaisesException] attribute DOMString cookie;
+    [RaisesException, RuntimeCallStatsCounter=DocumentCookie] attribute DOMString cookie;
     readonly attribute DOMString lastModified;
     readonly attribute DocumentReadyState readyState;
 
     // DOM tree accessors
-    [CustomElementCallbacks] attribute DOMString title;
-    [CustomElementCallbacks] attribute DOMString dir;
-    [RaisesException=Setter, CustomElementCallbacks, PerWorldBindings] attribute HTMLElement? body;
+    // Named getter is implemented without IDL code generation for better
+    // performance. See LocalWindowProxy.cpp.
+    // getter object (DOMString name);
+    [CEReactions, CustomElementCallbacks] attribute DOMString title;
+    [CEReactions, CustomElementCallbacks] attribute DOMString dir;
+    [CEReactions, RaisesException=Setter, CustomElementCallbacks, PerWorldBindings] attribute HTMLElement? body;
     readonly attribute HTMLHeadElement? head;
-    [SameObject] readonly attribute HTMLCollection images;
-    [SameObject] readonly attribute HTMLCollection embeds;
-    [SameObject, ImplementedAs=embeds] readonly attribute HTMLCollection plugins;
-    [SameObject] readonly attribute HTMLCollection links;
-    [SameObject] readonly attribute HTMLCollection forms;
-    [SameObject] readonly attribute HTMLCollection scripts;
+    [SameObject, Measure] readonly attribute HTMLCollection images;
+    [SameObject, Measure] readonly attribute HTMLCollection embeds;
+    [SameObject, ImplementedAs=embeds, Measure] readonly attribute HTMLCollection plugins;
+    [SameObject, Measure] readonly attribute HTMLCollection links;
+    [SameObject, Measure] readonly attribute HTMLCollection forms;
+    [SameObject, Measure] readonly attribute HTMLCollection scripts;
     [PerWorldBindings] NodeList getElementsByName(DOMString elementName);
-    readonly attribute HTMLScriptElement? currentScript;
+    [ImplementedAs=currentScriptForBinding] readonly attribute HTMLOrSVGScriptElement? currentScript;
 
     // dynamic markup insertion
     // FIXME: There are two open() methods in the spec.
-    [Custom, CustomElementCallbacks, RaisesException] void open();
-    [RaisesException] void close();
-    [CallWith=FirstWindow, CustomElementCallbacks, RaisesException] void write(DOMString... text);
-    [CallWith=FirstWindow, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
+    [Custom, CEReactions, CustomElementCallbacks, RaisesException, MeasureAs=DocumentOpen] void open();
+    [CEReactions, RaisesException] void close();
+    [CallWith=EnteredWindow, CEReactions, CustomElementCallbacks, RaisesException] void write(DOMString... text);
+    [CallWith=EnteredWindow, CEReactions, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
+
+    // TrustedTypes variants of the above.
+    // TODO(mkwst): Write a spec for this.
+    [RuntimeEnabled=TrustedDOMTypes, CallWith=EnteredWindow, CEReactions, CustomElementCallbacks, RaisesException] void write(TrustedHTML text);
+    [RuntimeEnabled=TrustedDOMTypes, CallWith=EnteredWindow, CEReactions, CustomElementCallbacks, RaisesException] void writeln(TrustedHTML text);
 
     // user interaction
-    [ImplementedAs=domWindow] readonly attribute Window? defaultView;
-    readonly attribute Element? activeElement;
+    readonly attribute Window? defaultView;
     boolean hasFocus();
-    [CustomElementCallbacks, MeasureAs=DocumentDesignMode] attribute DOMString designMode;
-    [CustomElementCallbacks, RaisesException] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
+    [CEReactions, CustomElementCallbacks, MeasureAs=DocumentDesignMode] attribute DOMString designMode;
+    [CEReactions, CustomElementCallbacks, RaisesException] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
     [RaisesException] boolean queryCommandEnabled(DOMString commandId);
     [RaisesException] boolean queryCommandIndeterm(DOMString commandId);
     [RaisesException] boolean queryCommandState(DOMString commandId);
@@ -135,71 +146,64 @@
 
     // FIXME: *Color are on HTMLDocument.
 
-    readonly attribute HTMLCollection anchors;
-    readonly attribute HTMLCollection applets;
+    [Measure] readonly attribute HTMLCollection anchors;
+    [Measure] readonly attribute HTMLCollection applets;
 
     // FIXME: clear(), captureEvents(), releaseEvents() and all are on HTMLDocument.
 
     // CSS Object Model (CSSOM)
-    // http://dev.w3.org/csswg/cssom/#extensions-to-the-document-interface
-    [SameObject] readonly attribute StyleSheetList styleSheets;
+    // https://drafts.csswg.org/cssom/#extensions-to-the-document-interface
     attribute DOMString? selectedStylesheetSet;
     readonly attribute DOMString? preferredStylesheetSet;
 
-    // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-document-interface
-    // FIXME: The x and y arguments should be of type double.
-    Element? elementFromPoint(long x, long y);
-    sequence<Element> elementsFromPoint(long x, long y);
     readonly attribute Element? scrollingElement;
 
-    // Selection API
-    // http://w3c.github.io/selection-api/#extensions-to-document-interface
-    Selection? getSelection();
-
     // Pointer Lock
-    // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-document-interface
+    // https://w3c.github.io/pointerlock/#extensions-to-the-document-interface
     attribute EventHandler onpointerlockchange;
     attribute EventHandler onpointerlockerror;
-    [MeasureAs=DocumentPointerLockElement] readonly attribute Element? pointerLockElement;
     [MeasureAs=DocumentExitPointerLock] void exitPointerLock();
 
     // 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, 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);
+    // https://w3c.github.io/touch-events/#extensions-to-the-document-interface
+    [OriginTrialEnabled=TouchEventFeatureDetection, Measure, LegacyInterfaceTypeChecking, Custom=CallPrologue]
+    Touch createTouch(Window view,
+                      EventTarget target,
+                      long identifier,
+                      double pageX,
+                      double pageY,
+                      double screenX,
+                      double screenY,
+                      optional unrestricted double radiusX = 0,
+                      optional unrestricted double radiusY = 0,
+                      optional unrestricted float rotationAngle = 0,
+                      optional unrestricted float force = 0);
+    [OriginTrialEnabled=TouchEventFeatureDetection] TouchList createTouchList(Touch... touches);
 
     // Custom Elements
-    // http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register
+    // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register
     // FIXME: The registerElement return type should be Function.
     [CallWith=ScriptState, CustomElementCallbacks, RaisesException, MeasureAs=DocumentRegisterElement] CustomElementConstructor registerElement(DOMString type, optional ElementRegistrationOptions options);
-    // http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate
+    // https://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate
     // FIXME: The typeExtension arguments should not be nullable.
-    [CustomElementCallbacks, PerWorldBindings, RaisesException] Element createElement(DOMString localName, DOMString? typeExtension);
-    [CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName, DOMString? typeExtension);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException] Element createElement(DOMString localName, (DOMString or Dictionary)? options);
+    [CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName, (DOMString or Dictionary)? options);
 
     // Page Visibility
-    // http://www.w3.org/TR/page-visibility/#sec-document-interface
+    // https://w3c.github.io/page-visibility/#extensions-to-the-document-interface
     readonly attribute boolean hidden;
     readonly attribute VisibilityState visibilityState;
 
+    // CORS and RFC1918
+    // https://wicg.github.io/cors-rfc1918/#feature-detect
+    [RuntimeEnabled=CorsRFC1918, ImplementedAs=addressSpaceForBindings] readonly attribute AddressSpace addressSpace;
+
     // Non-standard APIs
     [MeasureAs=DocumentCaretRangeFromPoint] Range caretRangeFromPoint([Default=Undefined] optional long x, [Default=Undefined] optional long y);
 
     // Deprecated prefixed page visibility API.
     // TODO(davidben): This is a property so attaching a deprecation warning results in false positives when outputting
-    // document in the console. It's possible http://crbug.com/43394 will resolve this.
+    // document in the console. It's possible https://crbug.com/43394 will resolve this.
     [MeasureAs=PrefixedPageVisibility, ImplementedAs=visibilityState] readonly attribute DOMString webkitVisibilityState;
     [MeasureAs=PrefixedPageVisibility, ImplementedAs=hidden] readonly attribute boolean webkitHidden;
 
@@ -214,9 +218,11 @@
     [RuntimeEnabled=ExperimentalContentSecurityPolicyFeatures] attribute EventHandler onsecuritypolicyviolation;
     attribute EventHandler onselectionchange;
     attribute EventHandler onselectstart;
-    attribute EventHandler onwheel;
+    attribute EventHandler onvisibilitychange;
 };
 
 Document implements GlobalEventHandlers;
 Document implements ParentNode;
 Document implements NonElementParentNode;
+Document implements DocumentOrShadowRoot;
+Document implements FontFaceSource;
diff --git a/core/dom/DocumentFragment.idl b/core/dom/DocumentFragment.idl
index e4df24a..ab728d2 100644
--- a/core/dom/DocumentFragment.idl
+++ b/core/dom/DocumentFragment.idl
@@ -21,7 +21,7 @@
 
 [
     Constructor,
-    ConstructorCallWith=Document,
+    ConstructorCallWith=Document
 ] interface DocumentFragment : Node {
 };
 
diff --git a/core/dom/DocumentFullscreen.idl b/core/dom/DocumentFullscreen.idl
deleted file mode 100644
index 808ac15..0000000
--- a/core/dom/DocumentFullscreen.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org>
- * Copyright (C) 2013 Google Inc. All rights reserved.
- *
- * 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://fullscreen.spec.whatwg.org/#api
-
-partial interface Document {
-    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute boolean fullscreenEnabled;
-    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute Element? fullscreenElement;
-
-    [RuntimeEnabled=FullscreenUnprefixed] void exitFullscreen();
-
-    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenchange;
-    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenerror;
-
-    // Mozilla version
-    [MeasureAs=PrefixedDocumentIsFullscreen, ImplementedAs=webkitCurrentFullScreenElement] readonly attribute boolean webkitIsFullScreen;
-    [MeasureAs=PrefixedDocumentCurrentFullScreenElement] readonly attribute Element webkitCurrentFullScreenElement;
-    [MeasureAs=PrefixedDocumentCancelFullScreen, ImplementedAs=exitFullscreen] void webkitCancelFullScreen();
-
-    // W3C version
-    [MeasureAs=PrefixedDocumentFullscreenEnabled, ImplementedAs=fullscreenEnabled] readonly attribute boolean webkitFullscreenEnabled;
-    [MeasureAs=PrefixedDocumentFullscreenElement, ImplementedAs=fullscreenElement] readonly attribute Element webkitFullscreenElement;
-    [MeasureAs=PrefixedDocumentExitFullscreen, ImplementedAs=exitFullscreen] void webkitExitFullscreen();
-
-    attribute EventHandler onwebkitfullscreenchange;
-    attribute EventHandler onwebkitfullscreenerror;
-};
diff --git a/core/dom/DocumentOrShadowRoot.idl b/core/dom/DocumentOrShadowRoot.idl
new file mode 100644
index 0000000..49f8af9
--- /dev/null
+++ b/core/dom/DocumentOrShadowRoot.idl
@@ -0,0 +1,27 @@
+// 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://dom.spec.whatwg.org/#mixin-documentorshadowroot
+// https://w3c.github.io/webcomponents/spec/shadow/#extensions-to-the-documentorshadowroot-mixin
+[
+    LegacyTreatAsPartialInterface,
+    NoInterfaceObject
+] interface DocumentOrShadowRoot {
+    // Selection API
+    // https://w3c.github.io/selection-api/#extensions-to-document-interface
+    Selection? getSelection();
+    // CSSOM View Module
+    // https://drafts.csswg.org/cssom-view/#extensions-to-the-document-interface
+    // TODO(foolip): The x and y arguments should be of type double.
+    Element? elementFromPoint(long x, long y);
+    sequence<Element> elementsFromPoint(long x, long y);
+    readonly attribute Element? activeElement;
+    [SameObject] readonly attribute StyleSheetList styleSheets;
+    // PointerLock API
+    // https://w3c.github.io/pointerlock/
+    readonly attribute Element? pointerLockElement;
+    // Fullscreen API
+    // https://fullscreen.spec.whatwg.org/
+    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute Element? fullscreenElement;
+};
diff --git a/core/dom/Element.idl b/core/dom/Element.idl
index a516e09..6c8cf93 100644
--- a/core/dom/Element.idl
+++ b/core/dom/Element.idl
@@ -31,61 +31,73 @@
     readonly attribute DOMString localName;
     readonly attribute DOMString tagName;
 
-    [Reflect] attribute DOMString id;
-    [Reflect=class] attribute DOMString className;
-    [SameObject, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList classList;
+    [CEReactions, Reflect] attribute DOMString id;
+    [CEReactions, Reflect=class] attribute DOMString className;
+    [SameObject, CEReactions, PerWorldBindings, PutForwards=value] readonly attribute DOMTokenList classList;
+    [Unscopable, CEReactions, Reflect] attribute DOMString slot;
 
-    [MeasureAs=HasAttributes] boolean hasAttributes();
+    // Pointer Events
+    // https://w3c.github.io/pointerevents/#extensions-to-the-element-interface
+    [RaisesException] void setPointerCapture (long pointerId);
+    [RaisesException] void releasePointerCapture (long pointerId);
+    boolean hasPointerCapture (long pointerId);
+
+    boolean hasAttributes();
     [SameObject, PerWorldBindings, ImplementedAs=attributesForBindings] readonly attribute NamedNodeMap attributes;
+    sequence<DOMString> getAttributeNames();
     DOMString? getAttribute(DOMString name);
     DOMString? getAttributeNS(DOMString? namespaceURI, DOMString localName);
-    [RaisesException, CustomElementCallbacks] void setAttribute(DOMString name, DOMString value);
-    [RaisesException, CustomElementCallbacks] void setAttributeNS(DOMString? namespaceURI, DOMString name, DOMString value);
-    [CustomElementCallbacks] void removeAttribute(DOMString name);
-    [CustomElementCallbacks] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
+    [RaisesException, CEReactions, CustomElementCallbacks] void setAttribute(DOMString name, DOMString value);
+    [RaisesException, CEReactions, CustomElementCallbacks] void setAttributeNS(DOMString? namespaceURI, DOMString name, DOMString value);
+    [CEReactions, CustomElementCallbacks] void removeAttribute(DOMString name);
+    [CEReactions, CustomElementCallbacks] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
     boolean hasAttribute(DOMString name);
     boolean hasAttributeNS(DOMString? namespaceURI, DOMString localName);
 
-    [MeasureAs=ElementGetAttributeNode] Attr? getAttributeNode(DOMString name);
-    [MeasureAs=ElementGetAttributeNodeNS] Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
-    [RaisesException, CustomElementCallbacks, MeasureAs=ElementSetAttributeNode] Attr? setAttributeNode(Attr attr);
-    [RaisesException, CustomElementCallbacks, MeasureAs=ElementSetAttributeNodeNS] Attr? setAttributeNodeNS(Attr attr);
-    [RaisesException, CustomElementCallbacks, MeasureAs=ElementRemoveAttributeNode] Attr removeAttributeNode(Attr attr);
+    Attr? getAttributeNode(DOMString name);
+    Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
+    [RaisesException, CEReactions, CustomElementCallbacks] Attr? setAttributeNode(Attr attr);
+    [RaisesException, CEReactions, CustomElementCallbacks] Attr? setAttributeNodeNS(Attr attr);
+    [RaisesException, CEReactions, CustomElementCallbacks] Attr removeAttributeNode(Attr attr);
 
     [RaisesException] Element? closest(DOMString selectors);
     [RaisesException] boolean matches(DOMString selectors);
+    [RaisesException, ImplementedAs=matches, MeasureAs=ElementPrefixedMatchesSelector] boolean webkitMatchesSelector(DOMString selectors); // historical alias of .matches
+
+    [RaisesException, CallWith=ScriptState, MeasureAs=ElementAttachShadow] ShadowRoot attachShadow(ShadowRootInit shadowRootInitDict);
+    [PerWorldBindings, ImplementedAs=OpenShadowRoot] readonly attribute ShadowRoot? shadowRoot;
 
     HTMLCollection getElementsByTagName(DOMString localName);
     HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
     HTMLCollection getElementsByClassName(DOMString classNames);
 
-    // DOM Parsing and Serialization
-    // https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#extensions-to-the-element-interface
-    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString innerHTML;
-    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString outerHTML;
-    [CustomElementCallbacks, RaisesException, MeasureAs=InsertAdjacentHTML] void insertAdjacentHTML(DOMString position, DOMString text);
+    [RaisesException, CEReactions, CustomElementCallbacks] Element? insertAdjacentElement(DOMString where, Element element);
+    [RaisesException] void insertAdjacentText(DOMString where, DOMString data);
 
-    // Shadow DOM
-    // http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-element-interface
-    [RaisesException, CallWith=ScriptState, MeasureAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot();
-    [RuntimeEnabled=ShadowDOMV1, RaisesException, CallWith=ScriptState, MeasureAs=ElementAttachShadow] ShadowRoot attachShadow(ShadowRootInit shadowRootInitDict);
-    NodeList getDestinationInsertionPoints();
-    [PerWorldBindings, ImplementedAs=openShadowRoot] readonly attribute ShadowRoot? shadowRoot;
-    [RuntimeEnabled=ShadowDOMV1, Reflect] attribute DOMString slot;
-    [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot;
+    // Mixin Slotable
+    // https://dom.spec.whatwg.org/#mixin-slotable
+    [ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement? assignedSlot;
+
+    // DOM Parsing and Serialization
+    // https://w3c.github.io/DOM-Parsing/#extensions-to-the-element-interface
+    //
+    // TODO(mkwst): Write a spec for the `TrustedHTML` variants.
+    [TreatNullAs=NullString, CEReactions, CustomElementCallbacks, RaisesException=Setter, RuntimeCallStatsCounter=ElementInnerHTML] attribute HTMLString innerHTML;
+    [TreatNullAs=NullString, CEReactions, CustomElementCallbacks, RaisesException=Setter] attribute HTMLString outerHTML;
+    [CEReactions, CustomElementCallbacks, RaisesException] void insertAdjacentHTML(DOMString position, HTMLString text);
 
     // Pointer Lock
-    // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-element-interface
+    // https://w3c.github.io/pointerlock/#extensions-to-the-element-interface
     [MeasureAs=ElementRequestPointerLock] void requestPointerLock();
 
     // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extension-to-the-element-interface
-    // FIXME: getClientRect() and getBoundingClientRect() should
-    // return DOMRectList and DOMRect respectively.
-    ClientRectList getClientRects();
-    ClientRect getBoundingClientRect();
-    // FIXME: scrollIntoView() should have a ScrollIntoViewOptions dictionary argument.
-    void scrollIntoView(optional boolean alignWithTop);
+    // https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface
+    DOMRectList getClientRects();
+    [RuntimeCallStatsCounter=ElementGetBoundingClientRect] DOMRect getBoundingClientRect();
+
+    // TODO(sunyunjia): Add default value for scrollIntoView() once
+    // crbug.com/734599 is fixed.
+    void scrollIntoView(optional (ScrollIntoViewOptions or boolean) arg);
     [RuntimeEnabled=CSSOMSmoothScroll, ImplementedAs=scrollTo] void scroll(optional ScrollToOptions options);
     [RuntimeEnabled=CSSOMSmoothScroll, ImplementedAs=scrollTo] void scroll(unrestricted double x, unrestricted double y);
     [RuntimeEnabled=CSSOMSmoothScroll] void scrollTo(optional ScrollToOptions options);
@@ -105,17 +117,22 @@
     [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
-    [RaisesException, CustomElementCallbacks, MeasureAs=InsertAdjacentElement] Element insertAdjacentElement(DOMString where, Element element);
-    [RaisesException, MeasureAs=InsertAdjacentText] void insertAdjacentText(DOMString where, DOMString text);
+    // Typed OM
+    // https://drafts.css-houdini.org/css-typed-om/#inline-stylepropertymap-objects
+    [RuntimeEnabled=CSSTypedOM, SameObject] readonly attribute StylePropertyMap styleMap;
+
+    // Non-standard API
     [MeasureAs=ElementScrollIntoViewIfNeeded] void scrollIntoViewIfNeeded(optional boolean centerIfNeeded);
-    [RaisesException, ImplementedAs=matches, MeasureAs=ElementPrefixedMatchesSelector] boolean webkitMatchesSelector(DOMString selectors);
+    [RuntimeEnabled=ShadowDOMV0, RaisesException, CallWith=ScriptState, MeasureAs=ElementCreateShadowRoot] ShadowRoot createShadowRoot();
+    [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints();
 
     // Experimental accessibility API
     [RuntimeEnabled=ComputedAccessibilityInfo] readonly attribute DOMString? computedRole;
     [RuntimeEnabled=ComputedAccessibilityInfo] readonly attribute DOMString? computedName;
 
+    // Accessibility Object Model
+    [RuntimeEnabled=AccessibilityObjectModel] readonly attribute AccessibleNode? accessibleNode;
+
     // Event handler attributes
     attribute EventHandler onbeforecopy;
     attribute EventHandler onbeforecut;
@@ -125,7 +142,6 @@
     attribute EventHandler onpaste;
     attribute EventHandler onsearch;
     attribute EventHandler onselectstart;
-    attribute EventHandler onwheel;
 };
 
 Element implements ParentNode;
diff --git a/core/dom/ElementCreationOptions.idl b/core/dom/ElementCreationOptions.idl
new file mode 100644
index 0000000..feae6b5
--- /dev/null
+++ b/core/dom/ElementCreationOptions.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.
+
+// https://dom.spec.whatwg.org/#dictdef-elementcreationoptions
+
+dictionary ElementCreationOptions {
+  DOMString is;
+};
diff --git a/core/dom/ElementDefinitionOptions.idl b/core/dom/ElementDefinitionOptions.idl
new file mode 100644
index 0000000..e0844ed
--- /dev/null
+++ b/core/dom/ElementDefinitionOptions.idl
@@ -0,0 +1,7 @@
+// 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.
+// Spec: https://html.spec.whatwg.org/#elementdefinitionoptions
+dictionary ElementDefinitionOptions {
+    DOMString? extends = null;
+};
diff --git a/core/dom/ElementFullscreen.idl b/core/dom/ElementFullscreen.idl
deleted file mode 100644
index e27ee3d..0000000
--- a/core/dom/ElementFullscreen.idl
+++ /dev/null
@@ -1,18 +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://fullscreen.spec.whatwg.org/#api
-
-partial interface Element {
-    [RuntimeEnabled=FullscreenUnprefixed] void requestFullscreen();
-
-    // Mozilla version
-    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullScreen, ImplementedAs=webkitRequestFullscreen] void webkitRequestFullScreen();
-
-    // W3C version
-    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullscreen] void webkitRequestFullscreen();
-
-    attribute EventHandler onwebkitfullscreenchange;
-    attribute EventHandler onwebkitfullscreenerror;
-};
diff --git a/core/dom/ElementRegistrationOptions.idl b/core/dom/ElementRegistrationOptions.idl
index cbda61d..0dba4c3 100644
--- a/core/dom/ElementRegistrationOptions.idl
+++ b/core/dom/ElementRegistrationOptions.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://w3c.github.io/webcomponents/spec/custom/#api-element-registration-options
+// Spec: https://w3c.github.io/webcomponents/spec/custom/#api-element-registration-options
 
 dictionary ElementRegistrationOptions {
     object? prototype = null;
diff --git a/core/dom/Float32Array.idl b/core/dom/Float32Array.idl
deleted file mode 100644
index a0f1e1a..0000000
--- a/core/dom/Float32Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMFloat32Array,
-    NoInterfaceObject,
-] interface Float32Array : ArrayBufferView {
-};
diff --git a/core/dom/Float64Array.idl b/core/dom/Float64Array.idl
deleted file mode 100644
index f384340..0000000
--- a/core/dom/Float64Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMFloat64Array,
-    NoInterfaceObject,
-] interface Float64Array : ArrayBufferView {
-};
diff --git a/core/dom/FrameRequestCallback.idl b/core/dom/FrameRequestCallback.idl
index ddf7cda..927a889 100644
--- a/core/dom/FrameRequestCallback.idl
+++ b/core/dom/FrameRequestCallback.idl
@@ -28,10 +28,6 @@
  * 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.
-    void handleEvent(double highResTime);
-};
+// https://html.spec.whatwg.org/multipage/window-object.html#framerequestcallback
+
+callback FrameRequestCallback = void(DOMHighResTimeStamp highResTime);
diff --git a/core/dom/FunctionStringCallback.idl b/core/dom/FunctionStringCallback.idl
new file mode 100644
index 0000000..9df2be6
--- /dev/null
+++ b/core/dom/FunctionStringCallback.idl
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2011 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/#the-datatransferitem-interface
+
+callback FunctionStringCallback = void (DOMString data);
diff --git a/core/dom/GetRootNodeOptions.idl b/core/dom/GetRootNodeOptions.idl
new file mode 100644
index 0000000..f0a99c7
--- /dev/null
+++ b/core/dom/GetRootNodeOptions.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.
+
+// https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions
+
+dictionary GetRootNodeOptions {
+     boolean composed = false;
+};
diff --git a/core/dom/GlobalEventHandlers.idl b/core/dom/GlobalEventHandlers.idl
index 5366bd8..861515d 100644
--- a/core/dom/GlobalEventHandlers.idl
+++ b/core/dom/GlobalEventHandlers.idl
@@ -31,11 +31,9 @@
 
 [
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface GlobalEventHandlers {
     attribute EventHandler onabort;
-    [RuntimeEnabled=RequestAutocomplete] attribute EventHandler onautocomplete;
-    [RuntimeEnabled=RequestAutocomplete] attribute EventHandler onautocompleteerror;
     attribute EventHandler onblur;
     attribute EventHandler oncancel;
     attribute EventHandler oncanplay;
@@ -88,7 +86,6 @@
     attribute EventHandler onseeked;
     attribute EventHandler onseeking;
     attribute EventHandler onselect;
-    attribute EventHandler onshow;
     //attribute EventHandler onsort;
     attribute EventHandler onstalled;
     attribute EventHandler onsubmit;
@@ -97,22 +94,29 @@
     attribute EventHandler ontoggle;
     attribute EventHandler onvolumechange;
     attribute EventHandler onwaiting;
+    attribute EventHandler onwheel;
+
+    // auxclick
+    // https://wicg.github.io/auxclick/
+    attribute EventHandler onauxclick;
 
     // 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;
+    attribute EventHandler ongotpointercapture;
+    attribute EventHandler onlostpointercapture;
+    attribute EventHandler onpointerdown;
+    attribute EventHandler onpointermove;
+    attribute EventHandler onpointerup;
+    attribute EventHandler onpointercancel;
+    attribute EventHandler onpointerover;
+    attribute EventHandler onpointerout;
+    attribute EventHandler onpointerenter;
+    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;
+    [OriginTrialEnabled=TouchEventFeatureDetection] attribute EventHandler ontouchcancel;
+    [OriginTrialEnabled=TouchEventFeatureDetection] attribute EventHandler ontouchend;
+    [OriginTrialEnabled=TouchEventFeatureDetection] attribute EventHandler ontouchmove;
+    [OriginTrialEnabled=TouchEventFeatureDetection] attribute EventHandler ontouchstart;
 };
diff --git a/core/dom/IdleDeadline.idl b/core/dom/IdleDeadline.idl
index 1550789..806691f 100644
--- a/core/dom/IdleDeadline.idl
+++ b/core/dom/IdleDeadline.idl
@@ -2,10 +2,9 @@
 // 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 {
+// https://w3c.github.io/requestidlecallback/#window_extensions
+
+interface IdleDeadline {
     double timeRemaining();
     readonly attribute boolean didTimeout;
 };
diff --git a/core/dom/IdleRequestCallback.idl b/core/dom/IdleRequestCallback.idl
index b4cda7e..e2f9c0c 100644
--- a/core/dom/IdleRequestCallback.idl
+++ b/core/dom/IdleRequestCallback.idl
@@ -2,9 +2,6 @@
 // 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);
-};
+// https://w3c.github.io/requestidlecallback/#window_extensions
+
+callback IdleRequestCallback = void (IdleDeadline deadline);
diff --git a/core/dom/IdleRequestOptions.idl b/core/dom/IdleRequestOptions.idl
index cd89101..9764baa 100644
--- a/core/dom/IdleRequestOptions.idl
+++ b/core/dom/IdleRequestOptions.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.
 
+// https://w3c.github.io/requestidlecallback/#window_extensions
+
 dictionary IdleRequestOptions {
     unsigned long timeout = 0;
 };
diff --git a/core/dom/Int16Array.idl b/core/dom/Int16Array.idl
deleted file mode 100644
index 19edc3c..0000000
--- a/core/dom/Int16Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMInt16Array,
-    NoInterfaceObject,
-] interface Int16Array : ArrayBufferView {
-};
diff --git a/core/dom/Int32Array.idl b/core/dom/Int32Array.idl
deleted file mode 100644
index 76a42f6..0000000
--- a/core/dom/Int32Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMInt32Array,
-    NoInterfaceObject,
-] interface Int32Array : ArrayBufferView {
-};
diff --git a/core/dom/Int8Array.idl b/core/dom/Int8Array.idl
deleted file mode 100644
index a56cf6d..0000000
--- a/core/dom/Int8Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMInt8Array,
-    NoInterfaceObject,
-] interface Int8Array : ArrayBufferView {
-};
diff --git a/core/dom/IntersectionObserver.idl b/core/dom/IntersectionObserver.idl
deleted file mode 100644
index eb6122b..0000000
--- a/core/dom/IntersectionObserver.idl
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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
deleted file mode 100644
index 14d7268..0000000
--- a/core/dom/IntersectionObserverEntry.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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
deleted file mode 100644
index f333646..0000000
--- a/core/dom/IntersectionObserverInit.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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/Iterator.idl b/core/dom/Iterator.idl
index 4a13fe5..106a46a 100644
--- a/core/dom/Iterator.idl
+++ b/core/dom/Iterator.idl
@@ -5,9 +5,7 @@
 // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-iterator-interface
 
 [
-    Iterable,
-    GarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface Iterator {
     [CallWith=ScriptState, RaisesException] any next(optional any value);
 };
diff --git a/core/dom/MessageChannel.idl b/core/dom/MessageChannel.idl
index 35aa1c0..8462ff0 100644
--- a/core/dom/MessageChannel.idl
+++ b/core/dom/MessageChannel.idl
@@ -29,8 +29,7 @@
 [
     CustomConstructor,
     Exposed=(Window,Worker),
-    GarbageCollected,
-    Measure,
+    Measure
 ] interface MessageChannel {
     readonly attribute MessagePort port1;
     readonly attribute MessagePort port2;
diff --git a/core/dom/MessagePort.idl b/core/dom/MessagePort.idl
index 895e05e..d42739e 100644
--- a/core/dom/MessagePort.idl
+++ b/core/dom/MessagePort.idl
@@ -28,14 +28,15 @@
 // https://html.spec.whatwg.org/#message-ports
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
-    Exposed=(Window,Worker),
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface MessagePort : EventTarget {
-    [PostMessage, RaisesException, Measure] void postMessage(any message, optional sequence<Transferable> transfer);
+    [PostMessage, RaisesException, Measure] void postMessage(any message, optional sequence<object> transfer = []);
     [Measure] void start();
     [Measure] void close();
 
     // event handlers
     attribute EventHandler onmessage;
+    attribute EventHandler onmessageerror;
 };
diff --git a/core/dom/MutationObserver.idl b/core/dom/MutationObserver.idl
index 467b454..e266d48 100644
--- a/core/dom/MutationObserver.idl
+++ b/core/dom/MutationObserver.idl
@@ -30,12 +30,16 @@
 
 // https://dom.spec.whatwg.org/#interface-mutationobserver
 
+callback MutationCallback = void (sequence<MutationRecord> mutations,
+                                  MutationObserver observer);
+
 [
-    CustomConstructor(MutationCallback callback),
-    Custom=VisitDOMWrapper,
-    WillBeGarbageCollected,
+    ConstructorCallWith=ScriptState,
+    Constructor(MutationCallback callback),
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface MutationObserver {
-    [RaisesException] void observe(Node target, MutationObserverInit options);
+    [RaisesException] void observe(Node target, optional MutationObserverInit options);
     void disconnect();
     sequence<MutationRecord> takeRecords();
 };
diff --git a/core/dom/MutationRecord.idl b/core/dom/MutationRecord.idl
index 0ca53dc..7231500 100644
--- a/core/dom/MutationRecord.idl
+++ b/core/dom/MutationRecord.idl
@@ -30,9 +30,7 @@
 
 // https://dom.spec.whatwg.org/#interface-mutationrecord
 
-[
-    WillBeGarbageCollected,
-] interface MutationRecord {
+interface MutationRecord {
     readonly attribute DOMString type;
     readonly attribute Node target;
     [SameObject] readonly attribute NodeList addedNodes;
diff --git a/core/dom/NamedNodeMap.idl b/core/dom/NamedNodeMap.idl
index b5af211..4b7fa55 100644
--- a/core/dom/NamedNodeMap.idl
+++ b/core/dom/NamedNodeMap.idl
@@ -21,17 +21,15 @@
 // https://dom.spec.whatwg.org/#interface-namednodemap
 
 [
-    SetWrapperReferenceFrom=element,
-    WillBeGarbageCollected,
+    DependentLifetime,
+    LegacyUnenumerableNamedProperties
 ] interface NamedNodeMap {
     readonly attribute unsigned long length;
     [MeasureAs=NamedNodeMapItem] getter Attr? item(unsigned long index);
-    // FIXME: getNamedItem should be an enumerable getter.
-    [MeasureAs=NamedNodeMapGetNamedItem] Attr? getNamedItem(DOMString name);
-    [NotEnumerable, ImplementedAs=getNamedItem] getter Attr? (DOMString name);
+    [MeasureAs=NamedNodeMapGetNamedItem] getter Attr? getNamedItem(DOMString name);
     [MeasureAs=NamedNodeMapGetNamedItemNS] Attr? getNamedItemNS(DOMString? namespaceURI, DOMString localName);
-    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapSetNamedItem] Attr? setNamedItem(Attr attr);
-    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapSetNamedItemNS] Attr? setNamedItemNS(Attr attr);
-    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItem] Attr removeNamedItem(DOMString name);
-    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItemNS] Attr removeNamedItemNS(DOMString? namespaceURI, DOMString localName);
+    [RaisesException, CEReactions, CustomElementCallbacks, MeasureAs=NamedNodeMapSetNamedItem] Attr? setNamedItem(Attr attr);
+    [RaisesException, CEReactions, CustomElementCallbacks, MeasureAs=NamedNodeMapSetNamedItemNS] Attr? setNamedItemNS(Attr attr);
+    [RaisesException, CEReactions, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItem] Attr removeNamedItem(DOMString name);
+    [RaisesException, CEReactions, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItemNS] Attr removeNamedItemNS(DOMString? namespaceURI, DOMString localName);
 };
diff --git a/core/dom/Node.idl b/core/dom/Node.idl
index d3271a4..bcee1ff 100644
--- a/core/dom/Node.idl
+++ b/core/dom/Node.idl
@@ -21,13 +21,11 @@
 // https://dom.spec.whatwg.org/#interface-node
 
 [
-    DependentLifetime,
+    DependentLifetime
 ] interface Node : EventTarget {
     const unsigned short ELEMENT_NODE = 1;
-    // FIXME: Attr should not inherit from Node. crbug.com/305105
     const unsigned short ATTRIBUTE_NODE = 2;
     const unsigned short TEXT_NODE = 3;
-    // FIXME: CDATASection has been removed from the spec. crbug.com/437205
     const unsigned short CDATA_SECTION_NODE = 4;
     const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
     const unsigned short ENTITY_NODE = 6; // historical
@@ -38,10 +36,11 @@
     const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
     const unsigned short NOTATION_NODE = 12; // historical
     [ImplementedAs=getNodeType] readonly attribute unsigned short nodeType;
-    readonly attribute DOMString nodeName;
+    [RuntimeCallStatsCounter=NodeName] readonly attribute DOMString nodeName;
 
-    readonly attribute DOMString? baseURI;
+    readonly attribute USVString baseURI;
 
+    [Measure] readonly attribute boolean isConnected;
     [PerWorldBindings] readonly attribute Document? ownerDocument;
     [PerWorldBindings] readonly attribute Node? parentNode;
     [PerWorldBindings] readonly attribute Element? parentElement;
@@ -51,15 +50,16 @@
     [PerWorldBindings] readonly attribute Node? lastChild;
     [PerWorldBindings] readonly attribute Node? previousSibling;
     [PerWorldBindings] readonly attribute Node? nextSibling;
-    [RuntimeEnabled=ShadowDOMV1, MeasureAs=NodeTreeRoot] readonly attribute Node treeRoot;
+    [MeasureAs=NodeGetRootNode] Node getRootNode(optional GetRootNodeOptions options);
 
-    [CustomElementCallbacks] attribute DOMString? nodeValue;
-    // FIXME: textContent should not have [TreatUndefinedAs=NullString].
-    [TreatUndefinedAs=NullString, CustomElementCallbacks] attribute DOMString? textContent;
-    [CustomElementCallbacks] void normalize();
+    [CEReactions, CustomElementCallbacks] attribute DOMString? nodeValue;
 
-    [NewObject, CustomElementCallbacks] Node cloneNode(optional boolean deep = false);
-    boolean isEqualNode(Node? node);
+    [CEReactions, CustomElementCallbacks] attribute DOMString? textContent;
+    [CEReactions, CustomElementCallbacks] void normalize();
+
+    [NewObject, DoNotTestNewObject, CEReactions, CustomElementCallbacks, RaisesException] Node cloneNode(optional boolean deep = false);
+    boolean isEqualNode(Node? otherNode);
+    boolean isSameNode(Node? otherNode); // historical alias of ===
 
     const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
     const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
@@ -74,12 +74,8 @@
     DOMString? lookupNamespaceURI(DOMString? prefix);
     boolean isDefaultNamespace(DOMString? namespaceURI);
 
-    [CustomElementCallbacks, PerWorldBindings, RaisesException] Node insertBefore(Node node, Node? child);
-    [CustomElementCallbacks, PerWorldBindings, RaisesException] Node appendChild(Node node);
-    [CustomElementCallbacks, PerWorldBindings, RaisesException] Node replaceChild(Node node, Node child);
-    [CustomElementCallbacks, RaisesException] Node removeChild(Node child);
-
-    // FIXME: isSameNode has been removed from the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27424
-    [MeasureAs=NodeIsSameNode, ImplementedAs=isSameNodeDeprecated] boolean isSameNode(Node? other);
+    [CEReactions, CustomElementCallbacks, PerWorldBindings, RaisesException] Node insertBefore(Node node, Node? child);
+    [CEReactions, CustomElementCallbacks, PerWorldBindings, RaisesException, RuntimeCallStatsCounter=NodeAppendChild] Node appendChild(Node node);
+    [CEReactions, CustomElementCallbacks, PerWorldBindings, RaisesException] Node replaceChild(Node node, Node child);
+    [CEReactions, CustomElementCallbacks, RaisesException, RuntimeCallStatsCounter=NodeRemoveChild] Node removeChild(Node child);
 };
diff --git a/core/dom/NodeFilter.idl b/core/dom/NodeFilter.idl
index bcb5557..dac845f 100644
--- a/core/dom/NodeFilter.idl
+++ b/core/dom/NodeFilter.idl
@@ -20,11 +20,9 @@
 
 // https://dom.spec.whatwg.org/#interface-nodefilter
 
-// FIXME: NodeFilter should be a callback interface. crbug.com/462946
 [
-    DependentLifetime,
-    WillBeGarbageCollected,
-] interface NodeFilter {
+    DependentLifetime
+] callback interface NodeFilter {
     // Constants for acceptNode()
     const unsigned short FILTER_ACCEPT = 1;
     const unsigned short FILTER_REJECT = 2;
@@ -35,7 +33,7 @@
     const unsigned long SHOW_ELEMENT = 0x1;
     const unsigned long SHOW_ATTRIBUTE = 0x2; // historical
     const unsigned long SHOW_TEXT = 0x4;
-    const unsigned long SHOW_CDATA_SECTION = 0x8; // historical
+    const unsigned long SHOW_CDATA_SECTION = 0x8;
     const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical
     const unsigned long SHOW_ENTITY = 0x20; // historical
     const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
@@ -45,6 +43,8 @@
     const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
     const unsigned long SHOW_NOTATION = 0x800; // historical
 
-    // FIXME: The node argument should not be optional.
-    [RaisesException, LegacyInterfaceTypeChecking] unsigned short acceptNode([Default=Undefined] optional Node node);
+    // This function declaration doesn't generate any code because
+    // V8NodeFilterCondition represents this callback interface in Blink.
+    // TODO(bashi): Fix crbug.com/630986, and use generated code.
+    [RaisesException] unsigned short acceptNode(Node node);
 };
diff --git a/core/dom/NodeIterator.idl b/core/dom/NodeIterator.idl
index 4262b7a..b6c4a39 100644
--- a/core/dom/NodeIterator.idl
+++ b/core/dom/NodeIterator.idl
@@ -21,8 +21,7 @@
 // https://dom.spec.whatwg.org/#interface-nodeiterator
 
 [
-    SetWrapperReferenceTo(NodeFilter filter),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface NodeIterator {
     [SameObject] readonly attribute Node root;
     readonly attribute Node referenceNode;
diff --git a/core/dom/NodeList.idl b/core/dom/NodeList.idl
index 0d85493..6a6e594 100644
--- a/core/dom/NodeList.idl
+++ b/core/dom/NodeList.idl
@@ -21,11 +21,9 @@
 // https://dom.spec.whatwg.org/#interface-nodelist
 
 [
-    DependentLifetime,
-    SetWrapperReferenceFrom=virtualOwnerNode,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface NodeList {
     getter Node? item(unsigned long index);
     readonly attribute unsigned long length;
-    [RuntimeEnabled=IterableCollections] iterable<Node>;
+    iterable<Node>;
 };
diff --git a/core/dom/NonDocumentTypeChildNode.idl b/core/dom/NonDocumentTypeChildNode.idl
index b2883c4..d186e00 100644
--- a/core/dom/NonDocumentTypeChildNode.idl
+++ b/core/dom/NonDocumentTypeChildNode.idl
@@ -6,8 +6,8 @@
 
 [
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface NonDocumentTypeChildNode {
-    [PerWorldBindings] readonly attribute Element previousElementSibling;
-    [PerWorldBindings] readonly attribute Element nextElementSibling;
+    [PerWorldBindings] readonly attribute Element? previousElementSibling;
+    [PerWorldBindings] readonly attribute Element? nextElementSibling;
 };
diff --git a/core/dom/NonElementParentNode.idl b/core/dom/NonElementParentNode.idl
index 3f4ef6e..03511a6 100644
--- a/core/dom/NonElementParentNode.idl
+++ b/core/dom/NonElementParentNode.idl
@@ -6,7 +6,7 @@
 
 [
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface NonElementParentNode {
     [PerWorldBindings] Element? getElementById(DOMString elementId);
 };
diff --git a/core/dom/NoncedElement.idl b/core/dom/NoncedElement.idl
new file mode 100644
index 0000000..cf3b6d7
--- /dev/null
+++ b/core/dom/NoncedElement.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/whatwg/html/pull/2373/
+//
+// TODO(mkwst): Update the link iff this lands.
+
+[
+    NoInterfaceObject
+] interface NoncedElement {
+    [CEReactions] attribute DOMString nonce;
+};
diff --git a/core/dom/ParentNode.idl b/core/dom/ParentNode.idl
index e660f6c..e73eac8 100644
--- a/core/dom/ParentNode.idl
+++ b/core/dom/ParentNode.idl
@@ -32,18 +32,18 @@
 
 [
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface ParentNode {
     [SameObject, PerWorldBindings] readonly attribute HTMLCollection children;
     [PerWorldBindings] readonly attribute Element? firstElementChild;
     [PerWorldBindings] readonly attribute Element? lastElementChild;
     readonly attribute unsigned long childElementCount;
 
-    // [Unscopeable] void prepend((Node or DOMString)... nodes);
-    // [Unscopeable] void append((Node or DOMString)... nodes);
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void prepend((Node or DOMString)... nodes);
+    [Unscopable, RaisesException, CEReactions, CustomElementCallbacks] void append((Node or DOMString)... nodes);
 
-    // [Unscopeable] Element? query(DOMString relativeSelectors);
-    // [NewObject, Unscopeable] Elements queryAll(DOMString relativeSelectors);
+    // [Unscopable] Element? query(DOMString relativeSelectors);
+    // [NewObject, Unscopable] Elements queryAll(DOMString relativeSelectors);
     [RaisesException] Element? querySelector(DOMString selectors);
     [NewObject, RaisesException] NodeList querySelectorAll(DOMString selectors);
 };
diff --git a/core/dom/ProcessingInstruction.idl b/core/dom/ProcessingInstruction.idl
index 650e74c..e466208 100644
--- a/core/dom/ProcessingInstruction.idl
+++ b/core/dom/ProcessingInstruction.idl
@@ -24,6 +24,6 @@
     readonly attribute DOMString target;
 
     // ProcessingInstruction implements LinkStyle
-    // http://dev.w3.org/csswg/cssom/#requirements-on-user-agents-implementing-the-xml-stylesheet-processing-instruction
-    readonly attribute StyleSheet sheet;
+    // https://drafts.csswg.org/cssom/#requirements-on-user-agents-implementing-the-xml-stylesheet-processing-instruction
+    readonly attribute StyleSheet? sheet;
 };
diff --git a/core/dom/Range.idl b/core/dom/Range.idl
index 88a4a36..b52226d 100644
--- a/core/dom/Range.idl
+++ b/core/dom/Range.idl
@@ -19,22 +19,19 @@
  */
 
 // https://dom.spec.whatwg.org/#interface-range
-
-// FIXME: All long types in this interface should be unsigned long.
 [
     Constructor,
-    ConstructorCallWith=Document,
-    WillBeGarbageCollected,
+    ConstructorCallWith=Document
 ] interface Range {
     readonly attribute Node startContainer;
-    readonly attribute long startOffset;
+    readonly attribute unsigned long startOffset;
     readonly attribute Node endContainer;
-    readonly attribute long endOffset;
+    readonly attribute unsigned long endOffset;
     readonly attribute boolean collapsed;
     readonly attribute Node commonAncestorContainer;
 
-    [RaisesException] void setStart(Node node, long offset);
-    [RaisesException] void setEnd(Node node, long offset);
+    [RaisesException] void setStart(Node node, unsigned long offset);
+    [RaisesException] void setEnd(Node node, unsigned long offset);
     [RaisesException] void setStartBefore(Node node);
     [RaisesException] void setStartAfter(Node node);
     [RaisesException] void setEndBefore(Node node);
@@ -49,32 +46,30 @@
     const unsigned short END_TO_START = 3;
     [RaisesException] short compareBoundaryPoints(unsigned short how, Range sourceRange);
 
-    [RaisesException, CustomElementCallbacks] void deleteContents();
-    [NewObject, RaisesException, CustomElementCallbacks] DocumentFragment extractContents();
-    [NewObject, RaisesException, CustomElementCallbacks] DocumentFragment cloneContents();
-    [RaisesException, CustomElementCallbacks] void insertNode(Node node);
-    [RaisesException, CustomElementCallbacks] void surroundContents(Node newParent);
+    [RaisesException, CEReactions, CustomElementCallbacks] void deleteContents();
+    [NewObject, RaisesException, CEReactions, CustomElementCallbacks] DocumentFragment extractContents();
+    [NewObject, RaisesException, CEReactions, CustomElementCallbacks] DocumentFragment cloneContents();
+    [RaisesException, CEReactions, CustomElementCallbacks] void insertNode(Node node);
+    [RaisesException, CEReactions, CustomElementCallbacks] void surroundContents(Node newParent);
 
     [NewObject] Range cloneRange();
     [MeasureAs=RangeDetach] void detach();
 
-    [RaisesException] boolean isPointInRange(Node node, long offset);
-    [RaisesException] short comparePoint(Node node, long offset);
+    [RaisesException] boolean isPointInRange(Node node, unsigned long offset);
+    [RaisesException] short comparePoint(Node node, unsigned long offset);
 
     [RaisesException] boolean intersectsNode(Node node);
 
     stringifier;
 
     // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-range-interface
-    // FIXME: getClientRect() and getBoundingClientRect() should
-    // return DOMRectList and DOMRect respectively.
-    ClientRectList getClientRects();
-    ClientRect getBoundingClientRect();
+    // https://drafts.csswg.org/cssom-view/#extensions-to-the-range-interface
+    DOMRectList getClientRects();
+    DOMRect getBoundingClientRect();
 
     // DOM Parsing and Serialization
-    // https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#extensions-to-the-range-interface
-    [NewObject, RaisesException, CustomElementCallbacks] DocumentFragment createContextualFragment(DOMString fragment);
+    // https://w3c.github.io/DOM-Parsing/#extensions-to-the-range-interface
+    [NewObject, RaisesException, CEReactions, CustomElementCallbacks] DocumentFragment createContextualFragment(DOMString fragment);
 
     // Non-standard API
     [RaisesException, DeprecateAs=RangeExpand] void expand([Default=Undefined] optional DOMString unit);
diff --git a/core/dom/ShadowRoot.idl b/core/dom/ShadowRoot.idl
new file mode 100644
index 0000000..cbf84ee
--- /dev/null
+++ b/core/dom/ShadowRoot.idl
@@ -0,0 +1,37 @@
+/*
+ * 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface
+
+interface ShadowRoot : DocumentFragment {
+    readonly attribute ShadowRootMode mode;
+    readonly attribute Element host;
+    [ImplementedAs=olderShadowRootForBindings] readonly attribute ShadowRoot? olderShadowRoot;
+    [TreatNullAs=NullString, CEReactions, CustomElementCallbacks, RaisesException=Setter] attribute HTMLString innerHTML;
+    readonly attribute boolean delegatesFocus;
+};
+
+ShadowRoot implements DocumentOrShadowRoot;
diff --git a/core/dom/ShadowRootInit.idl b/core/dom/ShadowRootInit.idl
new file mode 100644
index 0000000..6bba7b9
--- /dev/null
+++ b/core/dom/ShadowRootInit.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.
+
+// Spec: https://w3c.github.io/webcomponents/spec/shadow/#shadowrootinit-dictionary
+
+enum ShadowRootMode { "open", "closed" };
+
+dictionary ShadowRootInit {
+    required ShadowRootMode mode;
+    boolean delegatesFocus;
+};
diff --git a/core/dom/SharedArrayBuffer.idl b/core/dom/SharedArrayBuffer.idl
deleted file mode 100644
index 9ba56d5..0000000
--- a/core/dom/SharedArrayBuffer.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.
-
-// Draft spec: https://github.com/lars-t-hansen/ecmascript_sharedmem
-[
-    ImplementedAs=DOMSharedArrayBuffer,
-    NoInterfaceObject,
-    RuntimeEnabled=SharedArrayBuffer,
-] interface SharedArrayBuffer {
-    readonly attribute unsigned long byteLength;
-};
diff --git a/core/dom/StaticRange.idl b/core/dom/StaticRange.idl
new file mode 100644
index 0000000..2cb4a71
--- /dev/null
+++ b/core/dom/StaticRange.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://garykac.github.io/staticrange/#interface-staticrange
+
+[
+    RuntimeEnabled=InputEvent
+] interface StaticRange {
+    readonly attribute Node startContainer;
+    readonly attribute unsigned long startOffset;
+    readonly attribute Node endContainer;
+    readonly attribute unsigned long endOffset;
+    readonly attribute boolean collapsed;
+};
diff --git a/core/dom/StringCallback.idl b/core/dom/StringCallback.idl
deleted file mode 100644
index b26a090..0000000
--- a/core/dom/StringCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-callback interface StringCallback {
-    void handleEvent(DOMString data);
-};
diff --git a/core/dom/Text.idl b/core/dom/Text.idl
index f970d49..36f98f5 100644
--- a/core/dom/Text.idl
+++ b/core/dom/Text.idl
@@ -21,13 +21,15 @@
 
 [
     Constructor(optional DOMString data = ""),
-    ConstructorCallWith=Document,
+    ConstructorCallWith=Document
 ] interface Text : CharacterData {
-    [NewObject, RaisesException] Text splitText(unsigned long offset);
+    [NewObject, DoNotTestNewObject, RaisesException] Text splitText(unsigned long offset);
     [MeasureAs=TextWholeText] readonly attribute DOMString wholeText;
 
-    // Shadow DOM
-    // http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-text-interface
-    NodeList getDestinationInsertionPoints();
-    [RuntimeEnabled=ShadowDOMV1, ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement assignedSlot;
+    // Mixin Slotable
+    // https://dom.spec.whatwg.org/#mixin-slotable
+    [ImplementedAs=assignedSlotForBinding] readonly attribute HTMLSlotElement? assignedSlot;
+
+    // Non-standard API:
+    [RuntimeEnabled=ShadowDOMV0] NodeList getDestinationInsertionPoints();
 };
diff --git a/core/dom/Touch.idl b/core/dom/Touch.idl
deleted file mode 100644
index a48a023..0000000
--- a/core/dom/Touch.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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://w3c.github.io/touch-events/#touch-interface
-
-[
-    Constructor(TouchInit initDict),
-    ConstructorCallWith=Document,
-    WillBeGarbageCollected,
-] interface Touch {
-    readonly attribute long identifier;
-    readonly attribute EventTarget target;
-    readonly attribute double screenX;
-    readonly attribute double screenY;
-    readonly attribute double clientX;
-    readonly attribute double clientY;
-    readonly attribute double pageX;
-    readonly attribute double pageY;
-    readonly attribute float radiusX;
-    readonly attribute float radiusY;
-    readonly attribute float rotationAngle;
-    readonly attribute float force;
-};
diff --git a/core/dom/TouchInit.idl b/core/dom/TouchInit.idl
deleted file mode 100644
index ba733b6..0000000
--- a/core/dom/TouchInit.idl
+++ /dev/null
@@ -1,20 +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/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
deleted file mode 100644
index ea7d013..0000000
--- a/core/dom/TouchList.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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://w3c.github.io/touch-events/#touchlist-interface
-
-[
-    WillBeGarbageCollected,
-] interface TouchList {
-    readonly attribute unsigned long length;
-    getter Touch? item(unsigned long index);
-};
diff --git a/core/dom/TreeWalker.idl b/core/dom/TreeWalker.idl
index 4fa1298..3be3c86 100644
--- a/core/dom/TreeWalker.idl
+++ b/core/dom/TreeWalker.idl
@@ -21,8 +21,7 @@
 // https://dom.spec.whatwg.org/#interface-treewalker
 
 [
-    SetWrapperReferenceTo(NodeFilter filter),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface TreeWalker {
     [SameObject] readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
diff --git a/core/dom/URL.idl b/core/dom/URL.idl
deleted file mode 100644
index f5df0bb..0000000
--- a/core/dom/URL.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2012 Motorola Mobility Inc.
- *
- * 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 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 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://url.spec.whatwg.org/#url
-
-[
-    Constructor(USVString url, optional USVString base),
-    Exposed=(Window,Worker),
-    ImplementedAs=DOMURL,
-    RaisesException=Constructor,
-    GarbageCollected,
-] interface URL {
-    // TODO(philipj): Implement domainToASCII() and domainToUnicode().
-    // crbug.com/493908
-    // static USVString domainToASCII(USVString domain);
-    // static USVString domainToUnicode(USVString domain);
-
-    // TODO(philipj): This should be in a partial interface definition:
-    // File API
-    // https://w3c.github.io/FileAPI/#creating-revoking
-    // TODO(philipj): The return type should not be nullable.
-    [RaisesException, CallWith=ExecutionContext] static DOMString? createObjectURL(Blob blob);
-    [CallWith=ExecutionContext] static void revokeObjectURL(DOMString url);
-};
-
-URL implements URLUtils;
diff --git a/core/dom/URLSearchParams.idl b/core/dom/URLSearchParams.idl
deleted file mode 100644
index 409542c..0000000
--- a/core/dom/URLSearchParams.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://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/URLUtils.idl b/core/dom/URLUtils.idl
deleted file mode 100644
index 8826e11..0000000
--- a/core/dom/URLUtils.idl
+++ /dev/null
@@ -1,49 +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:
- * 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://url.spec.whatwg.org/#urlutils
-
-[
-    NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
-] interface URLUtils {
-    // FIXME: should be stringifier: http://crbug.com/306606
-    // stringifier attribute USVString href;
-    attribute USVString href;
-    [NotEnumerable, ImplementedAs=href] USVString toString();
-    readonly attribute USVString origin;
-
-    attribute USVString protocol;
-    attribute USVString username;
-    attribute USVString password;
-    attribute USVString host;
-    attribute USVString hostname;
-    attribute USVString port;
-    attribute USVString pathname;
-    attribute USVString search;
-    // Not yet implemented.
-    // attribute URLSearchParams searchParams;
-    attribute USVString hash;
-};
diff --git a/core/dom/URLUtilsReadOnly.idl b/core/dom/URLUtilsReadOnly.idl
deleted file mode 100644
index 9f5aac0..0000000
--- a/core/dom/URLUtilsReadOnly.idl
+++ /dev/null
@@ -1,45 +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:
- * 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://url.spec.whatwg.org/#urlutilsreadonly
-
-[
-    NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
-] interface URLUtilsReadOnly {
-    // FIXME: should be stringifier: http://crbug.com/306606
-    // stringifier readonly attribute USVString href;
-    readonly attribute USVString href;
-    [NotEnumerable, ImplementedAs=href] USVString toString();
-    readonly attribute USVString origin;
-
-    readonly attribute USVString protocol;
-    readonly attribute USVString host;
-    readonly attribute USVString hostname;
-    readonly attribute USVString port;
-    readonly attribute USVString pathname;
-    readonly attribute USVString search;
-    readonly attribute USVString hash;
-};
diff --git a/core/dom/Uint16Array.idl b/core/dom/Uint16Array.idl
deleted file mode 100644
index c494d06..0000000
--- a/core/dom/Uint16Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMUint16Array,
-    NoInterfaceObject,
-] interface Uint16Array : ArrayBufferView {
-};
diff --git a/core/dom/Uint32Array.idl b/core/dom/Uint32Array.idl
deleted file mode 100644
index c68b421..0000000
--- a/core/dom/Uint32Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMUint32Array,
-    NoInterfaceObject,
-] interface Uint32Array : ArrayBufferView {
-};
diff --git a/core/dom/Uint8Array.idl b/core/dom/Uint8Array.idl
deleted file mode 100644
index 5070342..0000000
--- a/core/dom/Uint8Array.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMUint8Array,
-    NoInterfaceObject,
-] interface Uint8Array : ArrayBufferView {
-};
diff --git a/core/dom/Uint8ClampedArray.idl b/core/dom/Uint8ClampedArray.idl
deleted file mode 100644
index 0b74baf..0000000
--- a/core/dom/Uint8ClampedArray.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.
-
-// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
-
-[
-    ImplementedAs=DOMUint8ClampedArray,
-    NoInterfaceObject,
-] interface Uint8ClampedArray : ArrayBufferView {
-};
diff --git a/core/dom/events/AddEventListenerOptions.idl b/core/dom/events/AddEventListenerOptions.idl
new file mode 100644
index 0000000..1d9e744
--- /dev/null
+++ b/core/dom/events/AddEventListenerOptions.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://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions
+
+dictionary AddEventListenerOptions : EventListenerOptions {
+    boolean passive;
+    boolean once = false;
+};
diff --git a/core/dom/events/CustomEvent.idl b/core/dom/events/CustomEvent.idl
new file mode 100644
index 0000000..410a1d7
--- /dev/null
+++ b/core/dom/events/CustomEvent.idl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
+ *
+ * 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://dom.spec.whatwg.org/#interface-customevent
+
+[
+    Constructor(DOMString type, optional CustomEventInit eventInitDict),
+    ConstructorCallWith=ScriptState,
+    DependentLifetime,
+    Exposed=(Window,Worker)
+] interface CustomEvent : Event {
+    [CallWith=ScriptState] readonly attribute any detail;
+
+    [Measure, CallWith=ScriptState] void initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null);
+};
diff --git a/core/events/CustomEventInit.idl b/core/dom/events/CustomEventInit.idl
similarity index 100%
rename from core/events/CustomEventInit.idl
rename to core/dom/events/CustomEventInit.idl
diff --git a/core/dom/events/Event.idl b/core/dom/events/Event.idl
new file mode 100644
index 0000000..b2115a2
--- /dev/null
+++ b/core/dom/events/Event.idl
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2006, 2007, 2009, 2011 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://dom.spec.whatwg.org/#interface-event
+
+[
+    Constructor(DOMString type, optional EventInit eventInitDict),
+    Exposed=(Window,Worker)
+] interface Event {
+    readonly attribute DOMString type;
+    readonly attribute EventTarget? target;
+    readonly attribute EventTarget? currentTarget;
+    [MeasureAs=EventComposedPath, CallWith=ScriptState] sequence<EventTarget> composedPath();
+
+    const unsigned short NONE = 0;
+    const unsigned short CAPTURING_PHASE = 1;
+    const unsigned short AT_TARGET = 2;
+    const unsigned short BUBBLING_PHASE = 3;
+    readonly attribute unsigned short eventPhase;
+
+    [Measure] void stopPropagation();
+    [Measure] void stopImmediatePropagation();
+
+    readonly attribute boolean bubbles;
+    readonly attribute boolean cancelable;
+    void preventDefault();
+    readonly attribute boolean defaultPrevented;
+
+    [MeasureAs=EventComposed] readonly attribute boolean composed;
+
+    [Unforgeable] readonly attribute boolean isTrusted;
+
+    [CallWith=ScriptState] readonly attribute DOMHighResTimeStamp timeStamp;
+
+    [Measure] void initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false);
+
+    // Non-standard APIs
+    [MeasureAs=EventSrcElement] readonly attribute EventTarget srcElement;
+    [MeasureAs=EventReturnValue, CallWith=ScriptState, ImplementedAs=legacyReturnValue] attribute boolean returnValue;
+    [MeasureAs=EventCancelBubble, CallWith=ScriptState] attribute boolean cancelBubble;
+    [MeasureAs=EventPath, CallWith=ScriptState] readonly attribute object path;
+};
diff --git a/core/dom/events/EventInit.idl b/core/dom/events/EventInit.idl
new file mode 100644
index 0000000..97c7963
--- /dev/null
+++ b/core/dom/events/EventInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://dom.spec.whatwg.org/#interface-event
+
+dictionary EventInit {
+    boolean bubbles = false;
+    boolean cancelable = false;
+    boolean composed = false;
+};
diff --git a/core/dom/events/EventListener.idl b/core/dom/events/EventListener.idl
new file mode 100644
index 0000000..3f601bd
--- /dev/null
+++ b/core/dom/events/EventListener.idl
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc.
+ * 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://dom.spec.whatwg.org/#callbackdef-eventlistener
+
+callback interface EventListener {
+    void handleEvent(Event event);
+};
diff --git a/core/dom/events/EventListenerOptions.idl b/core/dom/events/EventListenerOptions.idl
new file mode 100644
index 0000000..fc7785b
--- /dev/null
+++ b/core/dom/events/EventListenerOptions.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://dom.spec.whatwg.org/#dictdef-eventlisteneroptions
+
+dictionary EventListenerOptions {
+    boolean capture = false;
+};
diff --git a/core/dom/events/EventModifierInit.idl b/core/dom/events/EventModifierInit.idl
new file mode 100644
index 0000000..73da090
--- /dev/null
+++ b/core/dom/events/EventModifierInit.idl
@@ -0,0 +1,19 @@
+// 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/uievents/#idl-def-EventModifierInit
+
+dictionary EventModifierInit : UIEventInit {
+    boolean ctrlKey = false;
+    boolean shiftKey = false;
+    boolean altKey = false;
+    boolean metaKey = false;
+    boolean modifierAltGraph = false;
+    boolean modifierCapsLock = false;
+    boolean modifierFn = false;
+    boolean modifierNumLock = false;
+    boolean modifierScrollLock = false;
+    boolean modifierSymbol = false;
+    // FIXME: Add modifierXXX members when needed.
+};
diff --git a/core/dom/events/EventTarget.idl b/core/dom/events/EventTarget.idl
new file mode 100644
index 0000000..7567440
--- /dev/null
+++ b/core/dom/events/EventTarget.idl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2006, 2007 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://dom.spec.whatwg.org/#interface-eventtarget
+
+[
+    CheckSecurity=Receiver,
+    Exposed=(Window,Worker),
+    ImmutablePrototype
+] interface EventTarget {
+    [Custom=CallPrologue] void addEventListener(DOMString type, EventListener? listener, optional (AddEventListenerOptions or boolean) options);
+    [Custom=CallPrologue] void removeEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options);
+    [ImplementedAs=dispatchEventForBindings, RaisesException, RuntimeCallStatsCounter=EventTargetDispatchEvent] boolean dispatchEvent(Event event);
+};
diff --git a/core/dom/shadow/ShadowRoot.idl b/core/dom/shadow/ShadowRoot.idl
deleted file mode 100644
index f783a41..0000000
--- a/core/dom/shadow/ShadowRoot.idl
+++ /dev/null
@@ -1,46 +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:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * 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://w3c.github.io/webcomponents/spec/shadow/#the-shadowroot-interface
-
-interface ShadowRoot : DocumentFragment {
-    Selection? getSelection();
-    // TODO(philipj): The x and y arguments should be of type double.
-    Element? elementFromPoint(long x, long y);
-    sequence<Element> elementsFromPoint(long x, long y);
-    readonly attribute Element? activeElement;
-    readonly attribute Element host;
-    [ImplementedAs=olderShadowRootForBindings] readonly attribute ShadowRoot? olderShadowRoot;
-    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString innerHTML;
-    readonly attribute StyleSheetList styleSheets;
-    [RuntimeEnabled=ShadowRootDelegatesFocus] readonly attribute boolean delegatesFocus;
-
-    // TODO(philipj): The spec does not override cloneNode() on the ShadowRoot
-    // 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(optional boolean deep = false);
-};
diff --git a/core/dom/shadow/ShadowRootInit.idl b/core/dom/shadow/ShadowRootInit.idl
deleted file mode 100644
index 69321e7..0000000
--- a/core/dom/shadow/ShadowRootInit.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.
-
-// Spec: https://w3c.github.io/webcomponents/spec/shadow/#shadowrootinit-dictionary
-
-enum ShadowRootMode { "open", "closed" };
-
-dictionary ShadowRootInit {
-    required ShadowRootMode mode;
-    [RuntimeEnabled=ShadowRootDelegatesFocus] boolean delegatesFocus;
-};
diff --git a/core/dom/trustedtypes/TrustedHTML.idl b/core/dom/trustedtypes/TrustedHTML.idl
new file mode 100644
index 0000000..6ddc306
--- /dev/null
+++ b/core/dom/trustedtypes/TrustedHTML.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium 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 (DOMString or TrustedHTML) HTMLString;
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=TrustedDOMTypes
+] interface TrustedHTML {
+    [CallWith=ScriptState] static TrustedHTML escape(DOMString html);
+    [CallWith=ScriptState] static TrustedHTML unsafelyCreate(DOMString html);
+
+
+    stringifier;
+};
+
diff --git a/core/dom/trustedtypes/TrustedScriptURL.idl b/core/dom/trustedtypes/TrustedScriptURL.idl
new file mode 100644
index 0000000..67fff86
--- /dev/null
+++ b/core/dom/trustedtypes/TrustedScriptURL.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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 (DOMString or TrustedScriptURL) ScriptURLString;
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=TrustedDOMTypes
+] interface TrustedScriptURL {
+    [CallWith=ScriptState] static TrustedScriptURL unsafelyCreate(DOMString url);
+
+    stringifier;
+};
diff --git a/core/dom/trustedtypes/TrustedURL.idl b/core/dom/trustedtypes/TrustedURL.idl
new file mode 100644
index 0000000..c83585a
--- /dev/null
+++ b/core/dom/trustedtypes/TrustedURL.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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 (DOMString or TrustedURL) URLString;
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=TrustedDOMTypes
+] interface TrustedURL {
+    [CallWith=ScriptState] static TrustedURL create(DOMString url);
+    [CallWith=ScriptState] static TrustedURL unsafelyCreate(DOMString url);
+
+    stringifier;
+};
diff --git a/core/editing/Selection.idl b/core/editing/Selection.idl
index 51c2879..fc128c0 100644
--- a/core/editing/Selection.idl
+++ b/core/editing/Selection.idl
@@ -27,55 +27,43 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// 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
+// https://w3c.github.io/selection-api/#selection-interface
 [
-    ImplementedAs=DOMSelection,
-    WillBeGarbageCollected,
+    ImplementedAs=DOMSelection
 ] interface Selection {
     [MeasureAs=SelectionAnchorNode] readonly attribute Node? anchorNode;
-    [MeasureAs=SelectionAnchorOffset] readonly attribute long anchorOffset;
+    [MeasureAs=SelectionAnchorOffset] readonly attribute unsigned long anchorOffset;
     [MeasureAs=SelectionFocusNode] readonly attribute Node? focusNode;
-    [MeasureAs=SelectionFocusOffset] readonly attribute long focusOffset;
+    [MeasureAs=SelectionFocusOffset] readonly attribute unsigned long focusOffset;
     [MeasureAs=SelectionIsCollapsed] readonly attribute boolean isCollapsed;
-    [MeasureAs=SelectionRangeCount] readonly attribute long rangeCount;
+    [MeasureAs=SelectionRangeCount] readonly attribute unsigned long rangeCount;
     [MeasureAs=SelectionType] readonly attribute DOMString type;
-    [MeasureAs=SelectionGetRangeAt, RaisesException] Range getRangeAt(long index);
+    [MeasureAs=SelectionGetRangeAt, RaisesException] Range getRangeAt(unsigned long index);
     [MeasureAs=SelectionAddRange] void addRange(Range range);
-    // TODO(yoichio): Implement removeRange. crbug.com/391673
-    //void removeRange(Range range);
+    void removeRange(Range range);
     [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=SelectionCollapse, RaisesException] void collapse(Node? node, optional unsigned long offset = 0);
+    [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException] void setPosition(Node? node, optional unsigned 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 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=SelectionExtend, RaisesException] void extend(Node node, optional unsigned long offset = 0);
+    // TODO(foolip): The arguments should be anchorNode, anchorOffset,
+    // focusNode and focusOffset, and none of them are nullable in the spec.
+    [MeasureAs=SelectionSetBaseAndExtent, RaisesException] void setBaseAndExtent(Node? baseNode, unsigned long baseOffset,
+                                                                                 Node? extentNode, unsigned long extentOffset);
     [MeasureAs=SelectionSelectAllChildren, RaisesException] void selectAllChildren(Node node);
-    [MeasureAs=SelectionDeleteDromDocument, CustomElementCallbacks] void deleteFromDocument();
+    [MeasureAs=SelectionDeleteDromDocument, CEReactions, 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
-    [MeasureAs=SelectionDOMString, NotEnumerable] stringifier DOMString();
+    [MeasureAs=SelectionDOMString] stringifier;
 
     // Non-standard APIs
 
     // https://github.com/w3c/selection-api/issues/34
     [MeasureAs=SelectionBaseNode] readonly attribute Node? baseNode;
-    [MeasureAs=SelectionBaseOffset] readonly attribute long baseOffset;
+    [MeasureAs=SelectionBaseOffset] readonly attribute unsigned long baseOffset;
     [MeasureAs=SelectionExtentNode] readonly attribute Node? extentNode;
-    [MeasureAs=SelectionExtentOffset] readonly attribute long extentOffset;
+    [MeasureAs=SelectionExtentOffset] readonly attribute unsigned long extentOffset;
 
     // https://github.com/w3c/selection-api/issues/37
     [MeasureAs=SelectionModify] void modify([Default=Undefined] optional DOMString alter,
diff --git a/core/events/AnimationEvent.idl b/core/events/AnimationEvent.idl
index 8b0b794..7daded3 100644
--- a/core/events/AnimationEvent.idl
+++ b/core/events/AnimationEvent.idl
@@ -23,13 +23,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-animations/#interface-animationevent
+// https://drafts.csswg.org/css-animations/#interface-animationevent
 
 [
-    Constructor(DOMString type, optional AnimationEventInit eventInitDict),
+    Constructor(DOMString type, optional AnimationEventInit eventInitDict)
 ] interface AnimationEvent : Event {
     readonly attribute DOMString animationName;
-    // TODO(philipj): elapsedTime should be float.
+    // TODO(foolip): elapsedTime should be float.
     readonly attribute double elapsedTime;
-    // TODO(philipj): readonly attribute DOMString pseudoElement;
+    // TODO(foolip): readonly attribute DOMString pseudoElement;
 };
diff --git a/core/events/AnimationEventInit.idl b/core/events/AnimationEventInit.idl
index ae6c9b9..c50bd68 100644
--- a/core/events/AnimationEventInit.idl
+++ b/core/events/AnimationEventInit.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://dev.w3.org/csswg/css-animations/#interface-animationevent
+// https://drafts.csswg.org/css-animations/#interface-animationevent
 
 dictionary AnimationEventInit : EventInit {
     DOMString animationName = "";
-    // TODO(philipj): elapsedTime should be float.
+    // TODO(foolip): elapsedTime should be float.
     double elapsedTime = 0.0;
-    // TODO(philipj): DOMString pseudoElement = "";
+    // TODO(foolip): DOMString pseudoElement = "";
 };
diff --git a/core/events/AnimationPlaybackEvent.idl b/core/events/AnimationPlaybackEvent.idl
new file mode 100644
index 0000000..7558260
--- /dev/null
+++ b/core/events/AnimationPlaybackEvent.idl
@@ -0,0 +1,13 @@
+// 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/web-animations/#the-animationplaybackevent-interface
+
+[
+    Constructor(DOMString type, optional AnimationPlaybackEventInit eventInitDict),
+    RuntimeEnabled=WebAnimationsAPI
+] interface AnimationPlaybackEvent : Event {
+    readonly attribute double? currentTime;
+    readonly attribute double? timelineTime;
+};
diff --git a/core/events/AnimationPlaybackEventInit.idl b/core/events/AnimationPlaybackEventInit.idl
new file mode 100644
index 0000000..c8c82b1
--- /dev/null
+++ b/core/events/AnimationPlaybackEventInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/web-animations/#the-animationplaybackevent-interface
+
+dictionary AnimationPlaybackEventInit : EventInit {
+    double? currentTime = null;
+    double? timelineTime = null;
+};
diff --git a/core/events/AnimationPlayerEvent.idl b/core/events/AnimationPlayerEvent.idl
deleted file mode 100644
index 291567a..0000000
--- a/core/events/AnimationPlayerEvent.idl
+++ /dev/null
@@ -1,16 +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://www.w3.org/TR/web-animations/#the-animationplayerevent-interface
-
-// TODO(dstockwell): This interface has been removed in the latest spec:
-// https://w3c.github.io/web-animations/
-
-[
-    Constructor(DOMString type, optional AnimationPlayerEventInit eventInitDict),
-    RuntimeEnabled=WebAnimationsAPI,
-] interface AnimationPlayerEvent : Event {
-    readonly attribute double? currentTime;
-    readonly attribute double timelineTime;
-};
diff --git a/core/events/AnimationPlayerEventInit.idl b/core/events/AnimationPlayerEventInit.idl
deleted file mode 100644
index f77620d..0000000
--- a/core/events/AnimationPlayerEventInit.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.
-
-// http://www.w3.org/TR/web-animations/#the-animationplayerevent-interface
-
-// TODO(dstockwell): This dictionary has been removed in the latest spec:
-// https://w3c.github.io/web-animations/
-
-dictionary AnimationPlayerEventInit : EventInit {
-    double? currentTime = null;
-    double? timelineTime = null;
-};
diff --git a/core/events/ApplicationCacheErrorEvent.idl b/core/events/ApplicationCacheErrorEvent.idl
index debc4a0..8bb5374 100644
--- a/core/events/ApplicationCacheErrorEvent.idl
+++ b/core/events/ApplicationCacheErrorEvent.idl
@@ -5,11 +5,11 @@
 // ApplicationCache Error Detail Proposal:
 // https://docs.google.com/document/d/1nlk7WgRD3d0ZcfK1xrwBFVZ3DI_e44j7QoMd5gAJC4E/edit
 
-// TODO(philipj): Update the spec link once this is in the HTML spec:
+// TODO(foolip): Update the spec link once this is in the HTML spec:
 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22702
 
 [
-    Constructor(DOMString type, optional ApplicationCacheErrorEventInit eventInitDict),
+    Constructor(DOMString type, optional ApplicationCacheErrorEventInit eventInitDict)
 ] interface ApplicationCacheErrorEvent : Event {
     readonly attribute DOMString reason;
     readonly attribute DOMString url;
diff --git a/core/events/AutocompleteErrorEvent.idl b/core/events/AutocompleteErrorEvent.idl
deleted file mode 100644
index a65f1ee..0000000
--- a/core/events/AutocompleteErrorEvent.idl
+++ /dev/null
@@ -1,33 +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:
- * 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://html.spec.whatwg.org/multipage/forms.html#the-autocompleteerrorevent-interface
-
-enum AutocompleteErrorReason { "" /* empty string */, "cancel", "disabled", "invalid" };
-
-[
-    Constructor(DOMString type, optional AutocompleteErrorEventInit eventInitDict),
-] interface AutocompleteErrorEvent : Event {
-    readonly attribute AutocompleteErrorReason reason;
-};
diff --git a/core/events/AutocompleteErrorEventInit.idl b/core/events/AutocompleteErrorEventInit.idl
deleted file mode 100644
index 840ce04..0000000
--- a/core/events/AutocompleteErrorEventInit.idl
+++ /dev/null
@@ -1,9 +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://html.spec.whatwg.org/multipage/forms.html#the-autocompleteerrorevent-interface
-
-dictionary AutocompleteErrorEventInit : EventInit {
-    AutocompleteErrorReason reason;
-};
diff --git a/core/events/ClipboardEvent.idl b/core/events/ClipboardEvent.idl
index 0b10b27..157705b 100644
--- a/core/events/ClipboardEvent.idl
+++ b/core/events/ClipboardEvent.idl
@@ -4,8 +4,8 @@
 
 // https://w3c.github.io/clipboard-apis/#clipboard-event-interfaces
 
-// TODO(philipj): There should be a constructor which takes a ClipboardEventInit
-// dictionary. crbug.com/496394
-interface ClipboardEvent : Event {
-    readonly attribute DataTransfer clipboardData;
+[
+    Constructor(DOMString type, optional ClipboardEventInit eventInitDict)
+] interface ClipboardEvent : Event {
+    readonly attribute DataTransfer? clipboardData;
 };
diff --git a/core/events/ClipboardEventInit.idl b/core/events/ClipboardEventInit.idl
new file mode 100644
index 0000000..81ea1a4
--- /dev/null
+++ b/core/events/ClipboardEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2016 The Chromium Authors. All rihts reserved.
+// Use of this source code is governed by a BST-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/clipboard-apis/#clipboard-event-interfaces
+
+dictionary ClipboardEventInit : EventInit {
+  DataTransfer? clipboardData = null;
+};
diff --git a/core/events/CompositionEvent.idl b/core/events/CompositionEvent.idl
index 3d2a209..6a98cfe 100644
--- a/core/events/CompositionEvent.idl
+++ b/core/events/CompositionEvent.idl
@@ -26,12 +26,12 @@
 // https://w3c.github.io/uievents/#interface-CompositionEvent
 
 [
-    Constructor(DOMString type, optional CompositionEventInit eventInitDict),
+    Constructor(DOMString type, optional CompositionEventInit eventInitDict)
 ] interface CompositionEvent : UIEvent {
     readonly attribute DOMString data;
 
     // https://w3c.github.io/uievents/#idl-interface-CompositionEvent-initializers
-    // TODO(philipj): None of the initCompositionEvent() arguments should be
+    // TODO(foolip): None of the initCompositionEvent() arguments should be
     // optional, and the spec has a locale argument after data.
     [Measure] void initCompositionEvent([Default=Undefined] optional DOMString type,
                                         [Default=Undefined] optional boolean bubbles,
diff --git a/core/events/CustomEvent.idl b/core/events/CustomEvent.idl
deleted file mode 100644
index ca1e27f..0000000
--- a/core/events/CustomEvent.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * 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://dom.spec.whatwg.org/#interface-customevent
-
-[
-    // 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;
-
-    [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
index 04047e2..13cf4b6 100644
--- a/core/events/DragEvent.idl
+++ b/core/events/DragEvent.idl
@@ -5,7 +5,7 @@
 // https://html.spec.whatwg.org/multipage/interaction.html#dragevent
 
 [
-    Constructor(DOMString type, optional DragEventInit eventInitDict),
+    Constructor(DOMString type, optional DragEventInit eventInitDict)
 ] interface DragEvent : MouseEvent {
-    readonly attribute DataTransfer dataTransfer;
+    [ImplementedAs=getDataTransfer] readonly attribute DataTransfer? dataTransfer;
 };
diff --git a/core/events/DragEventInit.idl b/core/events/DragEventInit.idl
index 3b90386..ccf5837 100644
--- a/core/events/DragEventInit.idl
+++ b/core/events/DragEventInit.idl
@@ -5,5 +5,5 @@
 // https://html.spec.whatwg.org/multipage/interaction.html#drageventinit
 
 dictionary DragEventInit : MouseEventInit {
-    DataTransfer? dataTransfer;
+    [ImplementedAs=getDataTransfer] DataTransfer? dataTransfer;
 };
diff --git a/core/events/ErrorEvent.idl b/core/events/ErrorEvent.idl
index a26bac6..d6298b1 100644
--- a/core/events/ErrorEvent.idl
+++ b/core/events/ErrorEvent.idl
@@ -32,7 +32,8 @@
 
 [
     Constructor(DOMString type, optional ErrorEventInit eventInitDict),
-    // TODO(philipj): Exposed=(Window,Worker)
+    ConstructorCallWith=ScriptState
+    // TODO(foolip): Exposed=(Window,Worker)
 ] interface ErrorEvent : Event {
     readonly attribute DOMString message;
     readonly attribute DOMString filename;
diff --git a/core/events/Event.idl b/core/events/Event.idl
deleted file mode 100644
index e2f5a1c..0000000
--- a/core/events/Event.idl
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2011 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://dom.spec.whatwg.org/#interface-event
-
-[
-    Constructor(DOMString type, optional EventInit eventInitDict),
-    Exposed=(Window,Worker),
-    WillBeGarbageCollected,
-] interface Event {
-    readonly attribute DOMString type;
-    readonly attribute EventTarget? target;
-    readonly attribute EventTarget? currentTarget;
-
-    const unsigned short NONE = 0;
-    const unsigned short CAPTURING_PHASE = 1;
-    const unsigned short AT_TARGET = 2;
-    const unsigned short BUBBLING_PHASE = 3;
-    readonly attribute unsigned short eventPhase;
-
-    void stopPropagation();
-    void stopImmediatePropagation();
-
-    readonly attribute boolean bubbles;
-    readonly attribute boolean cancelable;
-    void preventDefault();
-    readonly attribute boolean defaultPrevented;
-
-    [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,
-                             [Default=Undefined] optional boolean bubbles,
-                             [Default=Undefined] optional boolean cancelable);
-
-    // 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;
-    const unsigned short MOUSEUP   = 2;
-    const unsigned short MOUSEOVER = 4;
-    const unsigned short MOUSEOUT  = 8;
-    const unsigned short MOUSEMOVE = 16;
-    const unsigned short MOUSEDRAG = 32;
-    const unsigned short CLICK     = 64;
-    const unsigned short DBLCLICK  = 128;
-    const unsigned short KEYDOWN   = 256;
-    const unsigned short KEYUP     = 512;
-    const unsigned short KEYPRESS  = 1024;
-    const unsigned short DRAGDROP  = 2048;
-    const unsigned short FOCUS     = 4096;
-    const unsigned short BLUR      = 8192;
-    const unsigned short SELECT    = 16384;
-    const unsigned short CHANGE    = 32768;
-    [MeasureAs=EventSrcElement] readonly attribute EventTarget srcElement;
-    [MeasureAs=EventReturnValue, CallWith=ExecutionContext, ImplementedAs=legacyReturnValue] attribute boolean returnValue;
-    [MeasureAs=EventCancelBubble] attribute boolean cancelBubble;
-};
diff --git a/core/events/EventInit.idl b/core/events/EventInit.idl
deleted file mode 100644
index 0ddc8ca..0000000
--- a/core/events/EventInit.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.
-
-// https://dom.spec.whatwg.org/#interface-event
-
-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
deleted file mode 100644
index 2823f16..0000000
--- a/core/events/EventListener.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * 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://dom.spec.whatwg.org/#callbackdef-eventlistener
-
-[
-    WillBeGarbageCollected
-] callback interface EventListener {
-    void handleEvent(Event event);
-};
diff --git a/core/events/EventListenerOptions.idl b/core/events/EventListenerOptions.idl
deleted file mode 100644
index f670de3..0000000
--- a/core/events/EventListenerOptions.idl
+++ /dev/null
@@ -1,15 +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/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
deleted file mode 100644
index 44caeb1..0000000
--- a/core/events/EventModifierInit.idl
+++ /dev/null
@@ -1,20 +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/uievents/#idl-def-EventModifierInit
-
-dictionary EventModifierInit : UIEventInit {
-    boolean ctrlKey = false;
-    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
deleted file mode 100644
index b17db3f..0000000
--- a/core/events/EventTarget.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 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://dom.spec.whatwg.org/#interface-eventtarget
-
-[
-    CheckSecurity=Receiver,
-    WillBeGarbageCollected,
-    Exposed=(Window,Worker)
-] interface EventTarget {
-    [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/FocusEvent.idl b/core/events/FocusEvent.idl
index 2f95287..a1cdb61 100644
--- a/core/events/FocusEvent.idl
+++ b/core/events/FocusEvent.idl
@@ -26,7 +26,7 @@
 // https://w3c.github.io/uievents/#interface-FocusEvent
 
 [
-    Constructor(DOMString type, optional FocusEventInit eventInitDict),
+    Constructor(DOMString type, optional FocusEventInit eventInitDict)
 ] interface FocusEvent : UIEvent {
     readonly attribute EventTarget? relatedTarget;
 };
diff --git a/core/events/HashChangeEvent.idl b/core/events/HashChangeEvent.idl
index 40d4ec3..2629746 100644
--- a/core/events/HashChangeEvent.idl
+++ b/core/events/HashChangeEvent.idl
@@ -20,8 +20,8 @@
 // https://html.spec.whatwg.org/multipage/browsers.html#the-hashchangeevent-interface
 
 [
-    Constructor(DOMString type, optional HashChangeEventInit eventInitDict),
-    // TODO(philipj): Exposed=(Window,Worker)
+    Constructor(DOMString type, optional HashChangeEventInit eventInitDict)
+    // TODO(foolip): Exposed=(Window,Worker)
 ] interface HashChangeEvent : Event {
     readonly attribute DOMString oldURL;
     readonly attribute DOMString newURL;
diff --git a/core/events/InputEvent.idl b/core/events/InputEvent.idl
index cc1d595..ce2862c 100644
--- a/core/events/InputEvent.idl
+++ b/core/events/InputEvent.idl
@@ -2,11 +2,19 @@
 // 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
+// UI Events
+// https://w3c.github.io/uievents/#idl-inputevent
 
 [
     Constructor(DOMString type, optional InputEventInit eventInitDict),
-    RuntimeEnabled=InputEvent,
+    RuntimeEnabled=InputEvent
 ] interface InputEvent : UIEvent {
-    // TODO(chongz): Add 'inputType', 'data', 'isComposing' and 'targetRanges'
+    readonly attribute DOMString? data;
+    readonly attribute boolean isComposing;
+
+    // Input Events Level 1
+    // https://www.w3.org/TR/2017/WD-input-events-1-20170321/#interface-InputEvent
+    readonly attribute DOMString inputType;
+    readonly attribute DataTransfer? dataTransfer;
+    sequence<StaticRange> getTargetRanges();
 };
diff --git a/core/events/InputEventInit.idl b/core/events/InputEventInit.idl
index 6b2d07d..9f59850 100644
--- a/core/events/InputEventInit.idl
+++ b/core/events/InputEventInit.idl
@@ -2,10 +2,16 @@
 // 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
+// UI Events
+// https://w3c.github.io/uievents/#idl-inputeventinit
 
-[
-    RuntimeEnabled=InputEvent,
-] dictionary InputEventInit : UIEventInit {
-    // TODO(chongz): Add 'inputType', 'data', 'isComposing' and 'targetRanges'
+dictionary InputEventInit : UIEventInit {
+    DOMString? data;
+    boolean isComposing = false;
+
+    // Input Events Level 1
+    // https://www.w3.org/TR/2017/WD-input-events-1-20170321/#interface-InputEvent
+    DOMString inputType = "";
+    DataTransfer? dataTransfer;
+    sequence<StaticRange> targetRanges = [];
 };
diff --git a/core/events/KeyboardEvent.idl b/core/events/KeyboardEvent.idl
index 15990ac..c9d23ec 100644
--- a/core/events/KeyboardEvent.idl
+++ b/core/events/KeyboardEvent.idl
@@ -22,42 +22,37 @@
 
 [
     Constructor(DOMString type, optional KeyboardEventInit eventInitDict),
-    ConstructorCallWith=ScriptState,
+    ConstructorCallWith=ScriptState
 ] interface KeyboardEvent : UIEvent {
     // KeyLocationCode
     const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
     const unsigned long DOM_KEY_LOCATION_LEFT     = 0x01;
     const unsigned long DOM_KEY_LOCATION_RIGHT    = 0x02;
     const unsigned long DOM_KEY_LOCATION_NUMPAD   = 0x03;
-    [RuntimeEnabled=KeyboardEventKey]  readonly attribute DOMString     key;
-    [RuntimeEnabled=KeyboardEventCode] readonly attribute DOMString     code;
+    readonly attribute DOMString        key;
+    readonly attribute DOMString        code;
     readonly attribute unsigned long    location;
     readonly attribute boolean          ctrlKey;
     readonly attribute boolean          shiftKey;
     readonly attribute boolean          altKey;
     readonly attribute boolean          metaKey;
     readonly attribute boolean          repeat;
-    // TODO(philipj): readonly attribute boolean isComposing;
+    readonly attribute boolean          isComposing;
     boolean getModifierState(DOMString keyArg);
 
     // https://w3c.github.io/uievents/#idl-interface-KeyboardEvent-initializers
-    // FIXME: this does not match the version in the spec.
-    [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 DOMString keyIdentifier,
-                                                           [Default=Undefined] optional unsigned long location,
-                                                           [Default=Undefined] optional boolean ctrlKey,
-                                                           [Default=Undefined] optional boolean altKey,
-                                                           [Default=Undefined] optional boolean shiftKey,
-                                                           [Default=Undefined] optional boolean metaKey);
+    [CallWith=ScriptState, Measure] void initKeyboardEvent(DOMString type,
+                                                           optional boolean bubbles = false,
+                                                           optional boolean cancelable = false,
+                                                           optional Window? view = null,
+                                                           optional DOMString keyIdentifier = "",
+                                                           optional unsigned long location = 0,
+                                                           optional boolean ctrlKey = false,
+                                                           optional boolean altKey = false,
+                                                           optional boolean shiftKey = false,
+                                                           optional boolean metaKey = false);
 
     // https://w3c.github.io/uievents/#KeyboardEvent-supplemental-interface
     readonly attribute long charCode;
     readonly attribute long keyCode;
-    readonly attribute long which;
-
-    // Non-standard APIs
-    [Measure] readonly attribute DOMString keyIdentifier;
 };
diff --git a/core/events/KeyboardEventInit.idl b/core/events/KeyboardEventInit.idl
index d45a16d..e3091b9 100644
--- a/core/events/KeyboardEventInit.idl
+++ b/core/events/KeyboardEventInit.idl
@@ -5,12 +5,9 @@
 // https://w3c.github.io/uievents/#idl-def-KeyboardEventInit
 
 dictionary KeyboardEventInit : EventModifierInit {
-    [RuntimeEnabled=KeyboardEventKey] DOMString key = "";
-    [RuntimeEnabled=KeyboardEventCode] DOMString code = "";
+    DOMString key = "";
+    DOMString code = "";
     unsigned long location = 0;
     boolean repeat = false;
-    // TODO(philipj): boolean isComposing = false;
-
-    // Non-standard APIs
-    DOMString keyIdentifier = "";
+    boolean isComposing = false;
 };
diff --git a/core/events/MessageEvent.idl b/core/events/MessageEvent.idl
index 536ba1f..c6cbbad 100644
--- a/core/events/MessageEvent.idl
+++ b/core/events/MessageEvent.idl
@@ -30,24 +30,25 @@
 [
     Constructor(DOMString type, optional MessageEventInit eventInitDict),
     Exposed=(Window,Worker),
-    RaisesException=Constructor,
+    RaisesException=Constructor
 ] interface MessageEvent : Event {
     [Custom=Getter] readonly attribute any data;
     readonly attribute DOMString origin;
     readonly attribute DOMString lastEventId;
     // TODO(bashi): |source| should be (WindowProxy or MessagePort)?
     readonly attribute EventTarget? source;
-    readonly attribute MessagePort[]? ports;
-    [RuntimeEnabled=suborigins] readonly attribute DOMString suborigin;
+    [CachedAttribute=isPortsDirty] readonly attribute FrozenArray<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.
+    // TODO(foolip): |typeArg| should not be optional, none of the arguments
+    // should have [Default=Undefined] (they have other default values in the
+    // spec) and |sourceArg|'s type is wrong.
     [Custom, MeasureAs=InitMessageEvent] void initMessageEvent([Default=Undefined] optional DOMString typeArg,
                                    [Default=Undefined] optional boolean canBubbleArg,
                                    [Default=Undefined] optional boolean cancelableArg,
                                    [Default=Undefined] optional any dataArg,
                                    [Default=Undefined] optional DOMString originArg,
                                    [Default=Undefined] optional DOMString lastEventIdArg,
-                                   [Default=Undefined] optional Window sourceArg,
-                                   [Default=Undefined] optional MessagePort[] portsArg);
+                                   [Default=Undefined] optional EventTarget sourceArg,
+                                   [Default=Undefined] optional sequence<MessagePort> portsArg);
 };
diff --git a/core/events/MessageEventInit.idl b/core/events/MessageEventInit.idl
index d252965..bab4872 100644
--- a/core/events/MessageEventInit.idl
+++ b/core/events/MessageEventInit.idl
@@ -9,8 +9,6 @@
     DOMString origin;
     DOMString lastEventId;
     // TODO(bashi): |source| should be (WindowProxy or MessagePort)?
-    EventTarget source;
-    // Per spec, |ports| isn't nullable, but it seems it should be.
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=23176
-    sequence<MessagePort>? ports;
+    EventTarget? source;
+    sequence<MessagePort> ports = [];
 };
diff --git a/core/events/MouseEvent.idl b/core/events/MouseEvent.idl
index 0f4eab1..bf41fc8 100644
--- a/core/events/MouseEvent.idl
+++ b/core/events/MouseEvent.idl
@@ -21,12 +21,12 @@
 
 [
     Constructor(DOMString type, optional MouseEventInit eventInitDict),
-    ConstructorCallWith=ScriptState,
+    ConstructorCallWith=ScriptState
 ] interface MouseEvent : UIEvent {
-    readonly attribute long             screenX;
-    readonly attribute long             screenY;
-    readonly attribute long             clientX;
-    readonly attribute long             clientY;
+    readonly attribute double           screenX;
+    readonly attribute double           screenY;
+    readonly attribute double           clientX;
+    readonly attribute double           clientY;
     readonly attribute boolean          ctrlKey;
     readonly attribute boolean          shiftKey;
     readonly attribute boolean          altKey;
@@ -37,7 +37,7 @@
     boolean getModifierState(DOMString keyArg);
 
     // https://w3c.github.io/uievents/#idl-interface-MouseEvent-initializers
-    // TODO(philipj): None of the initMouseEvent() arguments should be optional.
+    // TODO(foolip): None of the initMouseEvent() arguments should be optional.
     [CallWith=ScriptState, Measure] void initMouseEvent([Default=Undefined] optional DOMString type,
                                                         [Default=Undefined] optional boolean bubbles,
                                                         [Default=Undefined] optional boolean cancelable,
@@ -54,26 +54,25 @@
                                                         [Default=Undefined] optional unsigned short button,
                                                         [Default=Undefined] optional EventTarget? relatedTarget);
 
-    // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-mouseevent-interface
-    // TODO(philipj): These attributes should be of type double, and the spec
-    // also redefines screenX/Y and clientX/Y as double.
-    readonly attribute long pageX;
-    readonly attribute long pageY;
-    [MeasureAs=MouseEventX] readonly attribute long x;
-    [MeasureAs=MouseEventY] readonly attribute long y;
-    [MeasureAs=MouseEventOffsetX] readonly attribute long offsetX;
-    [MeasureAs=MouseEventOffsetY] readonly attribute long offsetY;
+    readonly attribute double pageX;
+    readonly attribute double pageY;
+    [MeasureAs=MouseEventX] readonly attribute double x;
+    [MeasureAs=MouseEventY] readonly attribute double y;
+    [MeasureAs=MouseEventOffsetX] readonly attribute double offsetX;
+    [MeasureAs=MouseEventOffsetY] readonly attribute double offsetY;
 
     // Pointer Lock
-    // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-mouseevent-interface
+    // https://w3c.github.io/pointerlock/#extensions-to-the-mouseevent-interface
     [MeasureAs=MouseEventMovementX] readonly attribute long movementX;
     [MeasureAs=MouseEventMovementY] readonly attribute long movementY;
 
+    // Canvas Hit Regions
+    // https://html.spec.whatwg.org/multipage/scripting.html#MouseEvent-partial
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute DOMString? region;
+
     // Non-standard
     [MeasureAs=MouseEventFromElement] readonly attribute Node fromElement;
     [MeasureAs=MouseEventToElement] readonly attribute Node toElement;
-    [MeasureAs=MouseEventWhich] readonly attribute long which;
     [Measure] readonly attribute long layerX;
     [Measure] readonly attribute long layerY;
 };
diff --git a/core/events/MouseEventInit.idl b/core/events/MouseEventInit.idl
index cbb4d7d..001c4ad 100644
--- a/core/events/MouseEventInit.idl
+++ b/core/events/MouseEventInit.idl
@@ -5,16 +5,20 @@
 // https://w3c.github.io/uievents/#idl-def-MouseEventInit
 
 dictionary MouseEventInit : EventModifierInit {
-    long screenX = 0;
-    long screenY = 0;
-    long clientX = 0;
-    long clientY = 0;
+    double screenX = 0;
+    double screenY = 0;
+    double clientX = 0;
+    double clientY = 0;
     short button = 0;
     unsigned short buttons = 0;
     EventTarget? relatedTarget = null;
 
     // Pointer Lock
-    // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#extensions-to-the-mouseeventinit-dictionary
+    // https://w3c.github.io/pointerlock/#extensions-to-the-mouseeventinit-dictionary
     long movementX = 0;
     long movementY = 0;
+
+    // Canvas Hit Regions
+    // https://html.spec.whatwg.org/multipage/scripting.html#hit-regions:mouseeventinit
+    DOMString? region = null;
 };
diff --git a/core/events/MutationEvent.idl b/core/events/MutationEvent.idl
index d3607a4..c377ae5 100644
--- a/core/events/MutationEvent.idl
+++ b/core/events/MutationEvent.idl
@@ -30,7 +30,7 @@
     readonly attribute DOMString      newValue;
     readonly attribute DOMString      attrName;
     readonly attribute unsigned short attrChange;
-    // TODO(philipj): None of the initMutationEvent() arguments should be optional.
+    // TODO(foolip): None of the initMutationEvent() arguments should be optional.
     [Measure] void initMutationEvent([Default=Undefined] optional DOMString type,
                                      [Default=Undefined] optional boolean bubbles,
                                      [Default=Undefined] optional boolean cancelable,
diff --git a/core/events/NavigatorEvents.idl b/core/events/NavigatorEvents.idl
index 433a944..0bc89e2 100644
--- a/core/events/NavigatorEvents.idl
+++ b/core/events/NavigatorEvents.idl
@@ -30,6 +30,8 @@
 
 // https://w3c.github.io/pointerevents/#extensions-to-the-navigator-interface
 
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorEvents
+] partial interface Navigator {
     readonly attribute long maxTouchPoints;
 };
diff --git a/core/events/PageTransitionEvent.idl b/core/events/PageTransitionEvent.idl
index 7dc109e..edd5d8b 100644
--- a/core/events/PageTransitionEvent.idl
+++ b/core/events/PageTransitionEvent.idl
@@ -26,8 +26,8 @@
 // https://html.spec.whatwg.org/multipage/browsers.html#the-pagetransitionevent-interface
 
 [
-    Constructor(DOMString type, optional PageTransitionEventInit eventInitDict),
-    // TODO(philipj): Exposed=(Window,Worker)
+    Constructor(DOMString type, optional PageTransitionEventInit eventInitDict)
+    // TODO(foolip): Exposed=(Window,Worker)
 ] interface PageTransitionEvent : Event {
     readonly attribute boolean persisted;
 };
diff --git a/core/events/PointerEvent.idl b/core/events/PointerEvent.idl
index cecf01e..28f2625 100644
--- a/core/events/PointerEvent.idl
+++ b/core/events/PointerEvent.idl
@@ -5,15 +5,19 @@
 // https://w3c.github.io/pointerevents/#pointerevent-interface
 
 [
-    Constructor(DOMString type, optional PointerEventInit eventInitDict),
-    RuntimeEnabled=PointerEvent,
+    Constructor(DOMString type, optional PointerEventInit eventInitDict)
 ] interface PointerEvent : MouseEvent {
-    readonly    attribute long      pointerId;
-    readonly    attribute double    width;
-    readonly    attribute double    height;
-    readonly    attribute float     pressure;
-    readonly    attribute long      tiltX;
-    readonly    attribute long      tiltY;
-    readonly    attribute DOMString pointerType;
-    readonly    attribute boolean   isPrimary;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute long      pointerId;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute double    width;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute double    height;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute float     pressure;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute long      tiltX;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute long      tiltY;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute float     tangentialPressure;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute long      twist;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute DOMString pointerType;
+    [MeasureAs=PointerEventAttributeCount]   readonly    attribute boolean   isPrimary;
+
+    // https://w3c.github.io/pointerevents/extension.html#extensions-to-the-pointerevent-interface
+    [RuntimeEnabled=CoalescedEvents] sequence<PointerEvent> getCoalescedEvents();
 };
diff --git a/core/events/PointerEventInit.idl b/core/events/PointerEventInit.idl
index d474bcd..2cd7d44 100644
--- a/core/events/PointerEventInit.idl
+++ b/core/events/PointerEventInit.idl
@@ -4,15 +4,18 @@
 
 // https://w3c.github.io/pointerevents/#pointerevent-interface
 
-[
-    RuntimeEnabled=PointerEvent,
-] dictionary PointerEventInit : MouseEventInit {
+dictionary PointerEventInit : MouseEventInit {
     long      pointerId = 0;
-    double    width = 0;
-    double    height = 0;
+    double    width = 1;
+    double    height = 1;
     float     pressure = 0;
     long      tiltX = 0;
     long      tiltY = 0;
+    float     tangentialPressure = 0;
+    long      twist = 0;
     DOMString pointerType = "";
     boolean   isPrimary = false;
+
+    // https://w3c.github.io/pointerevents/extension.html#extensions-to-the-pointerevent-interface
+    [RuntimeEnabled=CoalescedEvents] sequence<PointerEvent> coalescedEvents = [];
 };
diff --git a/core/events/PopStateEvent.idl b/core/events/PopStateEvent.idl
index 5d05163..ae8210c 100644
--- a/core/events/PopStateEvent.idl
+++ b/core/events/PopStateEvent.idl
@@ -28,7 +28,8 @@
 
 [
     Constructor(DOMString type, optional PopStateEventInit eventInitDict),
-    // TODO(philipj): Exposed=(Window,Worker)
+    ConstructorCallWith=ScriptState
+    // TODO(foolip): Exposed=(Window,Worker)
 ] interface PopStateEvent : Event {
     [Custom=Getter] readonly attribute any state;
 };
diff --git a/core/events/PromiseRejectionEvent.idl b/core/events/PromiseRejectionEvent.idl
index 6cb2adf..074bb08 100644
--- a/core/events/PromiseRejectionEvent.idl
+++ b/core/events/PromiseRejectionEvent.idl
@@ -5,11 +5,10 @@
 // https://github.com/domenic/unhandled-rejections-browser-spec
 
 [
-    RuntimeEnabled=PromiseRejectionEvent,
-    Custom=VisitDOMWrapper,
     Constructor(DOMString type, PromiseRejectionEventInit eventInitDict),
     ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
+    DependentLifetime
 ] interface PromiseRejectionEvent : Event {
     [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 caa0e7e..fc5c110 100644
--- a/core/events/PromiseRejectionEventInit.idl
+++ b/core/events/PromiseRejectionEventInit.idl
@@ -4,9 +4,7 @@
 
 // https://github.com/domenic/unhandled-rejections-browser-spec
 
-[
-    RuntimeEnabled=PromiseRejectionEvent,
-] dictionary PromiseRejectionEventInit : EventInit {
+dictionary PromiseRejectionEventInit : EventInit {
     required Promise<any> promise;
     any reason;
 };
diff --git a/core/events/RelatedEvent.idl b/core/events/RelatedEvent.idl
deleted file mode 100644
index 142bf29..0000000
--- a/core/events/RelatedEvent.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.
-
-// https://html.spec.whatwg.org/#the-relatedevent-interfaces
-
-[
-    Constructor(DOMString type, optional RelatedEventInit eventInitDict),
-    RuntimeEnabled=ContextMenu,
-] interface RelatedEvent : Event {
-    readonly attribute EventTarget? relatedTarget;
-};
diff --git a/core/events/RelatedEventInit.idl b/core/events/RelatedEventInit.idl
deleted file mode 100644
index 3322b55..0000000
--- a/core/events/RelatedEventInit.idl
+++ /dev/null
@@ -1,9 +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://html.spec.whatwg.org/#the-relatedevent-interfaces
-
-dictionary RelatedEventInit : EventInit {
-    EventTarget? relatedTarget;
-};
diff --git a/core/events/ResourceProgressEvent.idl b/core/events/ResourceProgressEvent.idl
index 660b8b1..e55a362 100644
--- a/core/events/ResourceProgressEvent.idl
+++ b/core/events/ResourceProgressEvent.idl
@@ -31,8 +31,7 @@
 // constructable by web content at all, and so does not provide the usual
 // EventInit pattern for Event construction.
 [
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface ResourceProgressEvent : ProgressEvent {
     readonly attribute DOMString url;
 };
-
diff --git a/core/events/SecurityPolicyViolationEvent.idl b/core/events/SecurityPolicyViolationEvent.idl
index 2ae1dbf..c928820 100644
--- a/core/events/SecurityPolicyViolationEvent.idl
+++ b/core/events/SecurityPolicyViolationEvent.idl
@@ -10,33 +10,40 @@
  *     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.
+ * 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.
  */
 
-// http://w3c.github.io/webappsec/specs/content-security-policy/#securitypolicyviolationevent-interface
+// https://w3c.github.io/webappsec-csp/#idl-index
+
+enum SecurityPolicyViolationEventDisposition {
+    "enforce", "report"
+};
 
 [
-    Constructor(DOMString type, optional SecurityPolicyViolationEventInit eventInitDict),
+    Constructor(DOMString type, optional SecurityPolicyViolationEventInit eventInitDict)
 ] interface SecurityPolicyViolationEvent : Event {
-    // TODO(philipj): The spec says "documentURL".
+    // TODO(foolip): The spec says "documentURL".
     [Measure] readonly attribute DOMString documentURI;
     readonly attribute DOMString referrer;
-    // TODO(philipj): The spec says "blockedURL".
+    // TODO(foolip): The spec says "blockedURL".
     [Measure] readonly attribute DOMString blockedURI;
     readonly attribute DOMString violatedDirective;
     readonly attribute DOMString effectiveDirective;
     readonly attribute DOMString originalPolicy;
+    readonly attribute SecurityPolicyViolationEventDisposition disposition;
     readonly attribute DOMString sourceFile;
     [Measure] readonly attribute unsigned short statusCode;
     readonly attribute long      lineNumber;
     readonly attribute long      columnNumber;
+    readonly attribute DOMString sample;
 };
diff --git a/core/events/SecurityPolicyViolationEventInit.idl b/core/events/SecurityPolicyViolationEventInit.idl
index 77d3db3..4230272 100644
--- a/core/events/SecurityPolicyViolationEventInit.idl
+++ b/core/events/SecurityPolicyViolationEventInit.idl
@@ -2,19 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://w3c.github.io/webappsec/specs/content-security-policy/#securitypolicyviolationevent-interface
+// https://w3c.github.io/webappsec-csp/#idl-index
 
 dictionary SecurityPolicyViolationEventInit : EventInit {
-    // TODO(philipj): The spec says "documentURL".
+    // TODO(foolip): The spec says "documentURL".
     DOMString documentURI;
     DOMString referrer;
-    // TODO(philipj): The spec says "blockedURL".
+    // TODO(foolip): The spec says "blockedURL".
     DOMString blockedURI;
     DOMString violatedDirective;
     DOMString effectiveDirective;
     DOMString originalPolicy;
+    SecurityPolicyViolationEventDisposition disposition;
     DOMString sourceFile;
     unsigned short statusCode;
     long      lineNumber;
     long      columnNumber;
+    DOMString sample;
 };
diff --git a/core/events/TextEvent.idl b/core/events/TextEvent.idl
index b49c98f..2ae52eb 100644
--- a/core/events/TextEvent.idl
+++ b/core/events/TextEvent.idl
@@ -25,8 +25,9 @@
 
 // http://www.w3.org/TR/2011/WD-DOM-Level-3-Events-20110531/#webidl-events-TextEvent
 
-// TODO(philipj): Remove the textinput event and the TextEvent interface. They
-// were removed from the spec in 2012:
+// TODO(foolip): Remove the textinput event and the TextEvent interface.
+// https://crbug.com/701480
+// They were removed from the spec in 2012:
 // https://www.w3.org/Bugs/Public/show_bug.cgi?id=12958
 // https://github.com/w3c/uievents/commit/1a2aa02b474fd4feaf43fdced06e6fd7214196a4
 
diff --git a/core/events/TouchEvent.idl b/core/events/TouchEvent.idl
index 42e234d..04300c5 100644
--- a/core/events/TouchEvent.idl
+++ b/core/events/TouchEvent.idl
@@ -26,7 +26,7 @@
 // https://w3c.github.io/touch-events/#touchevent-interface
 
 [
-    Constructor(DOMString type, optional TouchEventInit eventInitDict),
+    Constructor(DOMString type, optional TouchEventInit eventInitDict)
 ] interface TouchEvent : UIEvent {
     readonly attribute TouchList touches;
     readonly attribute TouchList targetTouches;
@@ -35,18 +35,4 @@
     readonly attribute boolean metaKey;
     readonly attribute boolean ctrlKey;
     readonly attribute boolean shiftKey;
-
-    [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/TransitionEvent.idl b/core/events/TransitionEvent.idl
index 2cf9480..1491fa0 100644
--- a/core/events/TransitionEvent.idl
+++ b/core/events/TransitionEvent.idl
@@ -24,13 +24,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/css-transitions/#transition-events
+// https://dev.w3.org/csswg/css-transitions/#transition-events
 
 [
-    Constructor(DOMString type, optional TransitionEventInit eventInitDict),
+    Constructor(DOMString type, optional TransitionEventInit eventInitDict)
 ] interface TransitionEvent : Event {
     readonly attribute DOMString propertyName;
-    // TODO(philipj): elapsedTime should be float.
+    // TODO(foolip): elapsedTime should be float.
     readonly attribute double elapsedTime;
     readonly attribute DOMString pseudoElement;
 };
diff --git a/core/events/TransitionEventInit.idl b/core/events/TransitionEventInit.idl
index 8a0f8ea..3d82d4f 100644
--- a/core/events/TransitionEventInit.idl
+++ b/core/events/TransitionEventInit.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/csswg/css-transitions/#transition-events
+// https://dev.w3.org/csswg/css-transitions/#transition-events
 
 dictionary TransitionEventInit : EventInit {
     DOMString propertyName = "";
diff --git a/core/events/UIEvent.idl b/core/events/UIEvent.idl
index c0ae319..2b0e986 100644
--- a/core/events/UIEvent.idl
+++ b/core/events/UIEvent.idl
@@ -24,16 +24,15 @@
 ] interface UIEvent : Event {
     readonly attribute Window? view;
     readonly attribute long detail;
-    [RuntimeEnabled=InputDeviceCapabilities] readonly attribute InputDeviceCapabilities? sourceCapabilities;
+    readonly attribute InputDeviceCapabilities? sourceCapabilities;
 
     // https://w3c.github.io/uievents/#idl-interface-UIEvent-initializers
-    // TODO(philipj): None of the initUIEvent() arguments should be optional.
+    // TODO(foolip): None of the initUIEvent() arguments should be optional.
     [Measure] void initUIEvent([Default=Undefined] optional DOMString type,
                                [Default=Undefined] optional boolean bubbles,
                                [Default=Undefined] optional boolean cancelable,
                                [Default=Undefined] optional Window? view,
                                [Default=Undefined] optional long detail);
 
-    // FIXME: this belongs on the KeyboardEvent interface
-    [MeasureAs=UIEventWhich] readonly attribute long which;
+    readonly attribute unsigned long which;
 };
diff --git a/core/events/UIEventInit.idl b/core/events/UIEventInit.idl
index e1f9cbe..a994a6b 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=InputDeviceCapabilities] InputDeviceCapabilities? sourceCapabilities = null; 
-};
\ No newline at end of file
+    InputDeviceCapabilities? sourceCapabilities = null;
+};
diff --git a/core/events/WheelEvent.idl b/core/events/WheelEvent.idl
index cf556e4..4d1163f 100644
--- a/core/events/WheelEvent.idl
+++ b/core/events/WheelEvent.idl
@@ -22,7 +22,7 @@
 // https://w3c.github.io/uievents/#interface-WheelEvent
 
 [
-    Constructor(DOMString type, optional WheelEventInit eventInitDict),
+    Constructor(DOMString type, optional WheelEventInit eventInitDict)
 ] interface WheelEvent : MouseEvent {
     // DeltaModeCode
     const unsigned long DOM_DELTA_PIXEL = 0x00;
diff --git a/core/fileapi/Blob.idl b/core/fileapi/Blob.idl
index 4abe9ed..fa0d250 100644
--- a/core/fileapi/Blob.idl
+++ b/core/fileapi/Blob.idl
@@ -30,20 +30,16 @@
 
 // https://w3c.github.io/FileAPI/#blob
 
+typedef (ArrayBuffer or ArrayBufferView or Blob or USVString) BlobPart;
 [
-    GarbageCollected,
-    Constructor,
-    Constructor(sequence<(ArrayBuffer or ArrayBufferView or Blob or DOMString)> blobParts, optional BlobPropertyBag options),
+    Constructor(optional sequence<BlobPart> blobParts, optional BlobPropertyBag options),
+    ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface Blob {
     readonly attribute unsigned long long size;
     readonly attribute DOMString type;
-    // TODO(jsbell): Implement:
-    // readonly attribute boolean isClosed;
 
     // TODO(jsbell): start and end arguments should be [Clamp]
-    // TODO(philipj): contentType should not be optional or nullable.
-    [RaisesException] Blob slice(optional long long start, optional long long end, [TreatUndefinedAs=NullString] optional DOMString? contentType);
-    [RaisesException, CallWith=ExecutionContext, RuntimeEnabled=FileAPIBlobClose] void close();
+    [RaisesException] Blob slice(optional long long start, optional long long end, optional DOMString contentType);
 };
diff --git a/core/fileapi/File.idl b/core/fileapi/File.idl
index 666b073..a74bece 100644
--- a/core/fileapi/File.idl
+++ b/core/fileapi/File.idl
@@ -26,11 +26,10 @@
 // https://w3c.github.io/FileAPI/#file
 
 [
-    // TODO(jsbell): fileName parameter has [EnsureUTF16] in the spec; use
-    // USVString? https://github.com/w3c/FileAPI/issues/9
-    Constructor(sequence<(Blob or DOMString or ArrayBufferView or ArrayBuffer)> fileBits, DOMString fileName, optional FilePropertyBag options),
+    Constructor(sequence<BlobPart> fileBits, USVString fileName, optional FilePropertyBag options),
+    ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface File : Blob {
     readonly attribute DOMString name;
     readonly attribute long long lastModified;
diff --git a/core/fileapi/FileError.idl b/core/fileapi/FileError.idl
deleted file mode 100644
index 9022489..0000000
--- a/core/fileapi/FileError.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// 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;
-    const unsigned short ABORT_ERR = 3;
-    const unsigned short NOT_READABLE_ERR = 4;
-    const unsigned short ENCODING_ERR = 5;
-    const unsigned short NO_MODIFICATION_ALLOWED_ERR = 6;
-    const unsigned short INVALID_STATE_ERR = 7;
-    const unsigned short SYNTAX_ERR = 8;
-    const unsigned short INVALID_MODIFICATION_ERR = 9;
-    const unsigned short QUOTA_EXCEEDED_ERR = 10;
-    const unsigned short TYPE_MISMATCH_ERR = 11;
-    const unsigned short PATH_EXISTS_ERR = 12;
-
-    [DeprecateAs=FileError] readonly attribute unsigned short code;
-};
diff --git a/core/fileapi/FileList.idl b/core/fileapi/FileList.idl
index 9bbd8a5..25db9a0 100644
--- a/core/fileapi/FileList.idl
+++ b/core/fileapi/FileList.idl
@@ -26,8 +26,7 @@
 // https://w3c.github.io/FileAPI/#filelist-section
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface FileList {
     getter File? item(unsigned long index);
     readonly attribute unsigned long length;
diff --git a/core/fileapi/FilePropertyBag.idl b/core/fileapi/FilePropertyBag.idl
index 950fc84..692b138 100644
--- a/core/fileapi/FilePropertyBag.idl
+++ b/core/fileapi/FilePropertyBag.idl
@@ -4,11 +4,6 @@
 
 // https://w3c.github.io/FileAPI/#file
 
-dictionary FilePropertyBag {
-    DOMString type = "";
+dictionary FilePropertyBag : BlobPropertyBag {
     long long lastModified;
-
-    // TODO(jsbell): This member is non-standard.
-    // https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob
-    NormalizeLineEndings endings = "transparent";
 };
diff --git a/core/fileapi/FileReader.idl b/core/fileapi/FileReader.idl
index c299840..7d223a9 100644
--- a/core/fileapi/FileReader.idl
+++ b/core/fileapi/FileReader.idl
@@ -32,17 +32,15 @@
 // https://w3c.github.io/FileAPI/#APIASynch
 
 [
-    GarbageCollected,
+    ActiveScriptWrappable,
     DependentLifetime,
     Constructor,
     ConstructorCallWith=ExecutionContext,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface FileReader : EventTarget {
     // async read methods
     [RaisesException] void readAsArrayBuffer(Blob blob);
-    // TODO(philipj): readAsBinaryString() was removed from the spec in 2012:
-    // https://github.com/w3c/FileAPI/commit/8cce54559dc27bf8b8244f3f0ca9fb3e4d96efdb
-    [RaisesException, Measure] void readAsBinaryString(Blob blob);
+    [RaisesException] void readAsBinaryString(Blob blob);
     [RaisesException] void readAsText(Blob blob, optional DOMString label);
     [RaisesException] void readAsDataURL(Blob blob);
 
@@ -56,10 +54,10 @@
     [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
 
     // File or Blob data
+    [CallWith=ScriptState]
     readonly attribute (DOMString or ArrayBuffer)? result;
 
-    // TODO(philipj): error should be DOMError. crbug.com/496901
-    [Measure] readonly attribute FileError? error;
+    readonly attribute DOMException? error;
 
     // event handler attributes
     attribute EventHandler onloadstart;
diff --git a/core/fileapi/FileReaderSync.idl b/core/fileapi/FileReaderSync.idl
index d587242..702b27a 100644
--- a/core/fileapi/FileReaderSync.idl
+++ b/core/fileapi/FileReaderSync.idl
@@ -31,14 +31,13 @@
 // https://w3c.github.io/FileAPI/#FileReaderSync
 
 [
-    GarbageCollected,
-    Exposed=Worker,
+    Exposed=(DedicatedWorker,SharedWorker),
     Constructor,
+    ConstructorCallWith=ExecutionContext,
+    Measure
 ] interface FileReaderSync {
-    [CallWith=ExecutionContext, RaisesException] ArrayBuffer readAsArrayBuffer(Blob blob);
-    // TODO(philipj): readAsBinaryString() was removed from the spec in 2012:
-    // https://github.com/w3c/FileAPI/commit/8cce54559dc27bf8b8244f3f0ca9fb3e4d96efdb
-    [CallWith=ExecutionContext, RaisesException, Measure] DOMString readAsBinaryString(Blob blob);
-    [CallWith=ExecutionContext, RaisesException] DOMString readAsText(Blob blob, optional DOMString label);
-    [CallWith=ExecutionContext, RaisesException] DOMString readAsDataURL(Blob blob);
+    [CallWith=ScriptState, RaisesException] ArrayBuffer readAsArrayBuffer(Blob blob);
+    [CallWith=ScriptState, RaisesException] DOMString readAsBinaryString(Blob blob);
+    [CallWith=ScriptState, RaisesException] DOMString readAsText(Blob blob, optional DOMString label);
+    [CallWith=ScriptState, RaisesException] DOMString readAsDataURL(Blob blob);
 };
diff --git a/core/fileapi/URLFileAPI.idl b/core/fileapi/URLFileAPI.idl
new file mode 100644
index 0000000..da2b186
--- /dev/null
+++ b/core/fileapi/URLFileAPI.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/FileAPI/#creating-revoking
+[
+    ImplementedAs=URLFileAPI
+] partial interface URL {
+    [Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState, RaisesException] static DOMString createObjectURL(Blob blob);
+    [Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState] static void revokeObjectURL(DOMString url);
+};
diff --git a/core/frame/BarProp.idl b/core/frame/BarProp.idl
index 278b34d..433d23a 100644
--- a/core/frame/BarProp.idl
+++ b/core/frame/BarProp.idl
@@ -28,8 +28,6 @@
 
 // https://html.spec.whatwg.org/#barprop
 
-[
-    WillBeGarbageCollected,
-] interface BarProp {
+interface BarProp {
     readonly attribute boolean visible;
 };
diff --git a/core/frame/Console.idl b/core/frame/Console.idl
deleted file mode 100644
index 66e8ec3..0000000
--- a/core/frame/Console.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * 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:
- *
- * 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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-// Console API (non-standard but widely implemented in some form)
-// https://developer.chrome.com/devtools/docs/console-api
-
-// TODO(philipj): Both Firefox and IE expose the Console interface object, and
-// that interface does not inherit from a ConsoleBase or similar interface.
-
-[
-    NoInterfaceObject
-] interface Console : ConsoleBase {
-};
diff --git a/core/frame/ConsoleBase.idl b/core/frame/ConsoleBase.idl
deleted file mode 100644
index 057aca9..0000000
--- a/core/frame/ConsoleBase.idl
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * 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:
- *
- * 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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-// Console API (non-standard but widely implemented in some form)
-// https://developer.chrome.com/devtools/docs/console-api
-
-[
-    NoInterfaceObject,
-    GarbageCollected,
-] interface ConsoleBase {
-    [CallWith=(ScriptArguments,ScriptState)] void debug();
-    [CallWith=(ScriptArguments,ScriptState)] void error();
-    [CallWith=(ScriptArguments,ScriptState)] void info();
-    [CallWith=(ScriptArguments,ScriptState)] void log();
-    [CallWith=(ScriptArguments,ScriptState)] void warn();
-    [CallWith=(ScriptArguments,ScriptState)] void dir();
-    [CallWith=(ScriptArguments,ScriptState)] void dirxml();
-    [CallWith=(ScriptArguments,ScriptState)] void table();
-    [CallWith=(ScriptArguments,ScriptState)] void trace();
-    [CallWith=(ScriptArguments,ScriptState), ImplementedAs=assertCondition] void assert([Default=Undefined] optional boolean condition);
-    [CallWith=(ScriptArguments,ScriptState)] void count();
-    [DeprecateAs=ConsoleMarkTimeline] void markTimeline(optional DOMString title = null);
-
-    void profile(optional DOMString title = null);
-    void profileEnd(optional DOMString title = null);
-
-    void time(optional DOMString title = null);
-    [CallWith=ScriptState] void timeEnd(optional DOMString title = null);
-    void timeStamp(optional DOMString title = null);
-
-    [DeprecateAs=ConsoleTimeline,CallWith=ScriptState] void timeline(optional DOMString title = null);
-    [DeprecateAs=ConsoleTimelineEnd,CallWith=ScriptState] void timelineEnd(optional DOMString title = null);
-
-    [CallWith=(ScriptArguments,ScriptState)] void group();
-    [CallWith=(ScriptArguments,ScriptState)] void groupCollapsed();
-    void groupEnd();
-    [CallWith=(ScriptArguments,ScriptState)] void clear();
-};
diff --git a/core/frame/DeprecationReport.idl b/core/frame/DeprecationReport.idl
new file mode 100644
index 0000000..6836be7
--- /dev/null
+++ b/core/frame/DeprecationReport.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/WICG/reporting/blob/master/EXPLAINER.md#reportingobserver---observing-reports-from-javascript
+
+[
+    NoInterfaceObject,
+    RuntimeEnabled=ReportingObserver
+] interface DeprecationReport : ReportBody {
+  // TODO(paulmeyer): Add additional data, including: id, anticipatedRemoval.
+  readonly attribute DOMString message;
+  readonly attribute DOMString sourceFile;
+  readonly attribute long lineNumber;
+};
diff --git a/core/frame/External.idl b/core/frame/External.idl
new file mode 100644
index 0000000..977e4e0
--- /dev/null
+++ b/core/frame/External.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.
+
+[NoInterfaceObject]
+interface External {
+  void AddSearchProvider();
+  void IsSearchProviderInstalled();
+};
diff --git a/core/frame/History.idl b/core/frame/History.idl
index bec0890..376d6c5 100644
--- a/core/frame/History.idl
+++ b/core/frame/History.idl
@@ -27,18 +27,14 @@
 
 enum ScrollRestoration {"auto", "manual"};
 
-[
-    GarbageCollected,
-] interface History {
-    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;
-    [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'.
-    [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);
+interface History {
+    [RaisesException] readonly attribute unsigned long length;
+    [Measure, RaisesException] attribute ScrollRestoration scrollRestoration;
+    // TODO(foolip): The SerializedScriptValue type should be any.
+    [CachedAttribute=stateChanged, RaisesException] readonly attribute SerializedScriptValue state;
+    [CallWith=ScriptState, RaisesException] void go(optional long delta = 0);
+    [CallWith=ScriptState, RaisesException] void back();
+    [CallWith=ScriptState, RaisesException] void forward();
+    [RaisesException] void pushState(SerializedScriptValue data, DOMString title, optional DOMString? url = null);
+    [RaisesException] void replaceState(SerializedScriptValue data, DOMString title, optional DOMString? url = null);
 };
diff --git a/core/frame/ImageBitmap.idl b/core/frame/ImageBitmap.idl
deleted file mode 100644
index b47435f..0000000
--- a/core/frame/ImageBitmap.idl
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2013 The Chromium 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/#images
-
-[
-    Exposed=(Window,Worker),
-    WillBeGarbageCollected,
-] interface ImageBitmap {
-    readonly attribute unsigned long width;
-    readonly attribute unsigned long height;
-    [RuntimeEnabled=ExperimentalCanvasFeatures] void close();
-};
diff --git a/core/frame/InterventionReport.idl b/core/frame/InterventionReport.idl
new file mode 100644
index 0000000..aa0c81d
--- /dev/null
+++ b/core/frame/InterventionReport.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/WICG/reporting/blob/master/EXPLAINER.md#reportingobserver---observing-reports-from-javascript
+
+[
+    NoInterfaceObject,
+    RuntimeEnabled=ReportingObserver
+] interface InterventionReport : ReportBody {
+  // TODO(paulmeyer): Add additional data, such as id.
+  readonly attribute DOMString message;
+  readonly attribute DOMString sourceFile;
+  readonly attribute long lineNumber;
+};
diff --git a/core/frame/Location.idl b/core/frame/Location.idl
index 592474d..c1c14d0 100644
--- a/core/frame/Location.idl
+++ b/core/frame/Location.idl
@@ -26,42 +26,52 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://html.spec.whatwg.org/#the-location-interface
+// https://html.spec.whatwg.org/multipage/browsers.html#location
 
 [
     CheckSecurity=Receiver,
-    Unforgeable,
-    WillBeGarbageCollected,
+    DependentLifetime,
+    Unforgeable
 ] interface Location {
-    // |assign|, |replace|, and *writing* |href| do not require a security
-    // check, as they *change* the page, and thus these do not change any
-    // property of an *existing* document at a different origin.
+    // |assign| is *NOT* cross-origin accessible in the spec, but it needs
+    // the Incumbent realm when navigating the page.  See the below link.
+    // https://html.spec.whatwg.org/multipage/browsers.html#location-object-navigate
+    // Unfortunately, Blink does not support the Incumbent realm so far, and
+    // we need a hack of assignOriginSafeMethodGetter to simulate the Incumbent
+    // realm.  Thus, we have [CrossOrigin] here just for the hack although
+    // |assign| itself is not cross-origin accessible.
+    // TODO(yukishiino): Remove [CrossOrigin] once we support the Incumbent
+    // realm correctly.
+    [CallWith=(CurrentWindow,EnteredWindow), CrossOrigin, RaisesException] void assign(DOMString url);
+
+    // |replace|, and *writing* |href| do not require a security check, as they
+    // *change* the page, and thus these do not change any property of an
+    // *existing* document at a different origin.
     // However, *reading* |href|, or accessing any component, is a security
     // problem, since that allows tracking navigation.
-    [CallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity] void assign(DOMString url);
-    [CallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity] void replace(DOMString url);
-    [CallWith=ActiveWindow] void reload();
+    // https://html.spec.whatwg.org/multipage/browsers.html#crossoriginproperties-(-o-)
+    [CallWith=(CurrentWindow,EnteredWindow), CrossOrigin, RaisesException] void replace(DOMString url);
+    [CallWith=CurrentWindow] void reload();
 
-    // TODO(philipj): ancestorOrigins should have [SameObject] and be of type
-    // DOMString[], i.e. it should return the same array every time.
-    [Measure] readonly attribute DOMStringList ancestorOrigins;
+    // TODO(foolip): |ancestorOrigins| should have [Unforgeable, SameObject].
+    readonly attribute DOMStringList ancestorOrigins;
 
-    // TODO(philipj): Per spec, Location implements URLUtils. The below is
+    // TODO(foolip): Per spec, Location implements URLUtils. The below is
     // mostly like the URLUtils interface, but with some members missing and
     // using DOMString instead of USVString.
-    [SetterCallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity=Setter] attribute DOMString href;
-    [NotEnumerable, ImplementedAs=href] DOMString toString();
-    readonly attribute DOMString origin;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), CrossOrigin=Setter, RaisesException=Setter] attribute URLString href;
+    [NotEnumerable] DOMString toString();
+    [MeasureAs=LocationOrigin] readonly attribute DOMString origin;
 
-    [SetterCallWith=(ActiveWindow,FirstWindow), RaisesException=Setter] attribute DOMString protocol;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString host;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString hostname;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString port;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString pathname;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString search;
-    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString hash;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString protocol;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString host;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString hostname;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString port;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString pathname;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString search;
+    [SetterCallWith=(CurrentWindow,EnteredWindow), RaisesException=Setter] attribute DOMString hash;
 
-    // TODO(philipj): Location does not have a valueOf() override in the spec.
+    // TODO(foolip): Location does not have a valueOf() override in the spec.
     // See the comment in Location.h for the purpose of this.
     [NotEnumerable, CallWith=ThisValue] any valueOf();
 };
diff --git a/core/frame/Navigator.idl b/core/frame/Navigator.idl
index d9665b0..622910d 100644
--- a/core/frame/Navigator.idl
+++ b/core/frame/Navigator.idl
@@ -19,23 +19,25 @@
 
 // https://html.spec.whatwg.org/#the-navigator-object
 
-[
-    GarbageCollected,
-] interface Navigator {
+interface Navigator {
     // objects implementing this interface also implement the interfaces given below
 
-    // TODO(philipj): vendorSub should be on NavigatorID.
+    // TODO(foolip): vendorSub should be on NavigatorID.
     [MeasureAs=NavigatorVendorSub] readonly attribute DOMString vendorSub;
 
-    // TODO(philipj): productSub and vendor are not yet in the spec:
+    // TODO(foolip): productSub and vendor are not yet in the spec:
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27954
     [MeasureAs=NavigatorProductSub] readonly attribute DOMString productSub;
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=27786
     [MeasureAs=NavigatorVendor] readonly attribute DOMString vendor;
+    // https://github.com/w3c/device-memory#the-web-exposed-api
+    [MeasureAs=NavigatorDeviceMemory,RuntimeEnabled=NavigatorDeviceMemory,SecureContext]
+    readonly attribute float deviceMemory;
 };
 
-Navigator implements NavigatorCPU;
+Navigator implements NavigatorConcurrentHardware;
+Navigator implements NavigatorCookies;
 Navigator implements NavigatorID;
 Navigator implements NavigatorLanguage;
 Navigator implements NavigatorOnLine;
-Navigator implements NavigatorStorageUtils;
+Navigator implements NavigatorAutomationInformation;
diff --git a/core/frame/NavigatorAutomationInformation.idl b/core/frame/NavigatorAutomationInformation.idl
new file mode 100644
index 0000000..e14af26
--- /dev/null
+++ b/core/frame/NavigatorAutomationInformation.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/webdriver/webdriver-spec.html#interface
+
+[
+    NoInterfaceObject, // Always used on target of 'implements'
+    Exposed=(Window),
+    RuntimeEnabled=AutomationControlled
+] interface NavigatorAutomationInformation {
+    readonly attribute boolean webdriver;
+};
diff --git a/core/frame/NavigatorCPU.idl b/core/frame/NavigatorCPU.idl
deleted file mode 100644
index a951a1d..0000000
--- a/core/frame/NavigatorCPU.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.
-
-// https://wiki.whatwg.org/wiki/Navigator_HW_Concurrency
-
-[
-    NoInterfaceObject,
-    Exposed=(Window,Worker),
-] interface NavigatorCPU {
-    readonly attribute unsigned long hardwareConcurrency;
-};
diff --git a/core/frame/NavigatorClipboard.idl b/core/frame/NavigatorClipboard.idl
new file mode 100644
index 0000000..aaa5ee9
--- /dev/null
+++ b/core/frame/NavigatorClipboard.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/clipboard-apis/#navigator-interface
+
+[
+  ImplementedAs=NavigatorClipboard,
+  RuntimeEnabled=AsyncClipboard
+] partial interface Navigator {
+  [CallWith=ScriptState, SecureContext, SameObject]
+  readonly attribute Clipboard clipboard;
+};
diff --git a/core/frame/NavigatorConcurrentHardware.idl b/core/frame/NavigatorConcurrentHardware.idl
new file mode 100644
index 0000000..b6f63bb
--- /dev/null
+++ b/core/frame/NavigatorConcurrentHardware.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://html.spec.whatwg.org/multipage/workers.html#navigator.hardwareconcurrency
+
+[
+    NoInterfaceObject,
+    Exposed=(Window,Worker)
+] interface NavigatorConcurrentHardware {
+    readonly attribute unsigned long long hardwareConcurrency;
+};
diff --git a/core/frame/NavigatorCookies.idl b/core/frame/NavigatorCookies.idl
new file mode 100644
index 0000000..c77322a
--- /dev/null
+++ b/core/frame/NavigatorCookies.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://html.spec.whatwg.org/multipage/webappapis.html#cookies
+
+[NoInterfaceObject]
+interface NavigatorCookies {
+  readonly attribute boolean cookieEnabled;
+};
diff --git a/core/frame/NavigatorID.idl b/core/frame/NavigatorID.idl
index 0bf48d5..a00b98c 100644
--- a/core/frame/NavigatorID.idl
+++ b/core/frame/NavigatorID.idl
@@ -32,7 +32,7 @@
 
 [
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface NavigatorID {
     readonly attribute DOMString appCodeName; // constant "Mozilla"
     readonly attribute DOMString appName; // constant "Netscape"
diff --git a/core/frame/NavigatorLanguage.idl b/core/frame/NavigatorLanguage.idl
index d36183d..d77bba5 100644
--- a/core/frame/NavigatorLanguage.idl
+++ b/core/frame/NavigatorLanguage.idl
@@ -6,8 +6,8 @@
 
 [
     NoInterfaceObject,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface NavigatorLanguage {
-    readonly attribute DOMString? language;
-    [CachedAttribute=hasLanguagesChanged] readonly attribute DOMString[] languages;
+    readonly attribute DOMString language;
+    [CachedAttribute=hasLanguagesChanged] readonly attribute FrozenArray<DOMString> languages;
 };
diff --git a/core/frame/NavigatorOnLine.idl b/core/frame/NavigatorOnLine.idl
index 94468aa..d9f71c1 100644
--- a/core/frame/NavigatorOnLine.idl
+++ b/core/frame/NavigatorOnLine.idl
@@ -32,7 +32,7 @@
 
 [
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface NavigatorOnLine {
     readonly attribute boolean onLine;
 };
diff --git a/core/frame/NavigatorStorageUtils.idl b/core/frame/NavigatorStorageUtils.idl
deleted file mode 100644
index b408dc7..0000000
--- a/core/frame/NavigatorStorageUtils.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.
-
-// https://html.spec.whatwg.org/#manually-releasing-the-storage-mutex
-
-[
-    NoInterfaceObject, // Always used on target of 'implements'
-] interface NavigatorStorageUtils {
-    readonly attribute boolean cookieEnabled;
-};
diff --git a/core/frame/PRESUBMIT.py b/core/frame/PRESUBMIT.py
index eba4c2f..a702108 100644
--- a/core/frame/PRESUBMIT.py
+++ b/core/frame/PRESUBMIT.py
@@ -12,29 +12,32 @@
 def _RunUseCounterChecks(input_api, output_api):
     for f in input_api.AffectedFiles():
         if f.LocalPath().endswith('UseCounter.cpp'):
-            useCounterCpp = f
+            use_counter_cpp_file = f
             break
     else:
         return []
 
-    largestFoundBucket = 0
-    maximumBucket = 0
-    # Looking for a line like "case CSSPropertyGrid: return 453;"
-    bucketFinder = input_api.re.compile(r'.*CSSProperty.*return\s*([0-9]+).*')
-    # Looking for a line like "static int maximumCSSSampleId() { return 452; }"
-    maximumFinder = input_api.re.compile(
-        r'static int maximumCSSSampleId\(\) { return ([0-9]+)')
-    for line in useCounterCpp.NewContents():
-        bucketMatch = bucketFinder.match(line)
-        if bucketMatch:
-            bucket = int(bucketMatch.group(1))
-            largestFoundBucket = max(largestFoundBucket, bucket)
-        else:
-            maximumMatch = maximumFinder.match(line)
-            if maximumMatch:
-                maximumBucket = int(maximumMatch.group(1))
+    largest_found_bucket = 0
+    expected_max_bucket = 0
 
-    if largestFoundBucket != maximumBucket:
+    # Looking for a line like "case CSSPropertyGrid: return 453;"
+    bucket_finder = input_api.re.compile(
+        r'case CSSProperty\w*?:\s+?return (\d+);',
+        input_api.re.MULTILINE)
+    # Looking for a line like "constexpr int kMaximumCSSSampleId = 452;"
+    expected_max_finder = input_api.re.compile(
+        r'constexpr int kMaximumCSSSampleId = (\d+);')
+    joined_contents = '\n'.join(use_counter_cpp_file.NewContents())
+
+    expected_max_match = expected_max_finder.search(joined_contents)
+    if expected_max_match:
+        expected_max_bucket = int(expected_max_match.group(1))
+
+    for bucket_match in bucket_finder.finditer(joined_contents):
+        bucket = int(bucket_match.group(1))
+        largest_found_bucket = max(largest_found_bucket, bucket)
+
+    if largest_found_bucket != expected_max_bucket:
         if input_api.is_committing:
             message_type = output_api.PresubmitError
         else:
@@ -42,16 +45,20 @@
 
         return [message_type(
             'Largest found CSSProperty bucket Id (%d) does not match '
-            'maximumCSSSampleId (%d)' %
-                    (largestFoundBucket, maximumBucket),
-            items=[useCounterCpp.LocalPath()])]
+            'maximumCSSSampleId (%d)' % (
+                largest_found_bucket, expected_max_bucket),
+            items=[use_counter_cpp_file.LocalPath()])]
 
     return []
 
 
 def CheckChangeOnUpload(input_api, output_api):
-    return _RunUseCounterChecks(input_api, output_api)
+    results = []
+    results.extend(_RunUseCounterChecks(input_api, output_api))
+    return results
 
 
 def CheckChangeOnCommit(input_api, output_api):
-    return _RunUseCounterChecks(input_api, output_api)
+    results = []
+    results.extend(_RunUseCounterChecks(input_api, output_api))
+    return results
diff --git a/core/frame/Report.idl b/core/frame/Report.idl
new file mode 100644
index 0000000..b1a271d
--- /dev/null
+++ b/core/frame/Report.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/WICG/reporting/blob/master/EXPLAINER.md#reportingobserver---observing-reports-from-javascript
+
+[
+    NoInterfaceObject,
+    RuntimeEnabled=ReportingObserver
+] interface Report {
+    readonly attribute DOMString type;
+    readonly attribute DOMString url;
+    readonly attribute ReportBody? body;
+};
diff --git a/core/frame/ReportBody.idl b/core/frame/ReportBody.idl
new file mode 100644
index 0000000..4ff3db0
--- /dev/null
+++ b/core/frame/ReportBody.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/WICG/reporting/blob/master/EXPLAINER.md#reportingobserver---observing-reports-from-javascript
+
+[
+    NoInterfaceObject,
+    RuntimeEnabled=ReportingObserver
+] interface ReportBody {
+};
diff --git a/core/frame/ReportingObserver.idl b/core/frame/ReportingObserver.idl
new file mode 100644
index 0000000..f3cbb92
--- /dev/null
+++ b/core/frame/ReportingObserver.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/WICG/reporting/blob/master/EXPLAINER.md#reportingobserver---observing-reports-from-javascript
+
+callback ReportingObserverCallback = void (sequence<Report> reports, ReportingObserver observer);
+
+[
+    Constructor(ReportingObserverCallback callback),
+    ConstructorCallWith=ExecutionContext,
+    RuntimeEnabled=ReportingObserver
+] interface ReportingObserver {
+    void observe();
+    void disconnect();
+};
diff --git a/core/frame/Screen.idl b/core/frame/Screen.idl
index 33d9afc..90fa671 100644
--- a/core/frame/Screen.idl
+++ b/core/frame/Screen.idl
@@ -26,11 +26,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/csswg/cssom-view/#the-screen-interface
+// https://drafts.csswg.org/cssom-view/#the-screen-interface
 
-[
-    GarbageCollected,
-] interface Screen {
+interface Screen {
     readonly attribute long availWidth;
     readonly attribute long availHeight;
     readonly attribute long width;
diff --git a/core/frame/ScrollIntoViewOptions.idl b/core/frame/ScrollIntoViewOptions.idl
new file mode 100644
index 0000000..8e22c35
--- /dev/null
+++ b/core/frame/ScrollIntoViewOptions.idl
@@ -0,0 +1,6 @@
+enum ScrollLogicalPosition { "start", "center", "end", "nearest" };
+
+dictionary ScrollIntoViewOptions : ScrollOptions {
+    ScrollLogicalPosition block = "center";
+    [ImplementedAs=inlinePosition] ScrollLogicalPosition inline = "center";
+};
\ No newline at end of file
diff --git a/core/frame/ScrollOptions.idl b/core/frame/ScrollOptions.idl
index b09ded9..d34b3ff 100644
--- a/core/frame/ScrollOptions.idl
+++ b/core/frame/ScrollOptions.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/csswg/cssom-view/#extensions-to-the-window-interface
+// https://drafts.csswg.org/cssom-view/#extensions-to-the-window-interface
 
 enum ScrollBehavior { "auto", "instant", "smooth" };
 
diff --git a/core/frame/ScrollToOptions.idl b/core/frame/ScrollToOptions.idl
index b324e7a..1a54d9c 100644
--- a/core/frame/ScrollToOptions.idl
+++ b/core/frame/ScrollToOptions.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/csswg/cssom-view/#extensions-to-the-window-interface
+// https://drafts.csswg.org/cssom-view/#extensions-to-the-window-interface
 
 dictionary ScrollToOptions : ScrollOptions {
     unrestricted double left;
diff --git a/core/frame/VisualViewport.idl b/core/frame/VisualViewport.idl
new file mode 100644
index 0000000..be7e37d
--- /dev/null
+++ b/core/frame/VisualViewport.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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.
+ */
+
+ // Visual Viewport API.
+ // WICG proposal: https://github.com/WICG/ViewportAPI
+
+[
+    RuntimeEnabled=VisualViewportAPI,
+    ImplementedAs=DOMVisualViewport
+] interface VisualViewport : EventTarget {
+    [Measure] readonly attribute double offsetLeft;
+    [Measure] readonly attribute double offsetTop;
+
+    [Measure] readonly attribute double pageLeft;
+    [Measure] readonly attribute double pageTop;
+
+    [Measure] readonly attribute double width;
+    [Measure] readonly attribute double height;
+
+    [Measure] readonly attribute double scale;
+
+    attribute EventHandler onresize;
+    attribute EventHandler onscroll;
+};
diff --git a/core/frame/Window.idl b/core/frame/Window.idl
index f73fac7..ac6f1c8 100644
--- a/core/frame/Window.idl
+++ b/core/frame/Window.idl
@@ -26,19 +26,20 @@
 
 // https://html.spec.whatwg.org/#the-window-object
 
-// FIXME: explain all uses of [DoNotCheckSecurity]
+// FIXME: explain all uses of [CrossOrigin]
 [
     CheckSecurity=Receiver,
     ImplementedAs=DOMWindow,
-    PrimaryGlobal,
+    PrimaryGlobal
 ] interface Window : EventTarget {
     // the current browsing context
     // FIXME: The spec uses the WindowProxy type for this and many other attributes.
-    [Unforgeable, DoNotCheckSecurity] readonly attribute Window window;
-    [Replaceable, DoNotCheckSecurity] readonly attribute Window self;
-    [Unforgeable] readonly attribute Document document;
+    [Unforgeable, CrossOrigin] readonly attribute Window window;
+    [Replaceable, CrossOrigin] readonly attribute Window self;
+    [Unforgeable, CachedAccessor] readonly attribute Document document;
+    [Replaceable] readonly attribute DOMString origin;
     attribute DOMString name;
-    [PutForwards=href, Unforgeable, DoNotCheckSecurity] readonly attribute Location location;
+    [PutForwards=href, Unforgeable, CrossOrigin=(Getter,Setter), Custom=Getter] readonly attribute Location location;
     readonly attribute History history;
     [Replaceable, MeasureAs=BarPropLocationbar] readonly attribute BarProp locationbar;
     [Replaceable, MeasureAs=BarPropMenubar] readonly attribute BarProp menubar;
@@ -47,57 +48,78 @@
     [Replaceable, MeasureAs=BarPropStatusbar] readonly attribute BarProp statusbar;
     [Replaceable, MeasureAs=BarPropToolbar] readonly attribute BarProp toolbar;
     attribute DOMString status;
-    [DoNotCheckSecurity, CallWith=ExecutionContext] void close();
-    [DoNotCheckSecurity] readonly attribute boolean closed;
+    // https://html.spec.whatwg.org/multipage/window-object.html#dom-window-close
+    // TODO(yukishiino): Replace |CurrentWindow| with the incumbent window or
+    // something once the incumbent realm is implemented.  Currently,
+    // OriginSafeMethodGetter + CurrentWindow are used instead of the incumbent
+    // one.
+    [CrossOrigin, CallWith=CurrentWindow] void close();
+    [CrossOrigin] readonly attribute boolean closed;
     void stop();
-    [DoNotCheckSecurity, CallWith=ExecutionContext] void focus();
-    [DoNotCheckSecurity] void blur();
+    // https://html.spec.whatwg.org/multipage/interaction.html#dom-window-focus
+    // https://html.spec.whatwg.org/multipage/interaction.html#focusing-steps
+    // TODO(yukishiino): Remove [CallWith=CurrentWindow] or clarify why
+    // we need it.  focus() is not supposed to use the incumbent realm.
+    // So, we shouldn't need to use CurrentWindow here, however, somehow
+    // DOMWindow::focus() is checking if the incumbent window is eligible to
+    // focus another window.
+    [CrossOrigin, CallWith=CurrentWindow] void focus();
+    [CrossOrigin] void blur();
 
     // other browsing contexts
-    [Replaceable, DoNotCheckSecurity] readonly attribute Window frames;
-    [Replaceable, DoNotCheckSecurity] readonly attribute unsigned long length;
-    [Unforgeable, DoNotCheckSecurity] readonly attribute Window top;
+    [Replaceable, CrossOrigin] readonly attribute Window frames;
+    [Replaceable, CrossOrigin] readonly attribute unsigned long length;
+    [Unforgeable, CrossOrigin] readonly attribute Window? top;
     // FIXME: opener should be of type any.
-    [DoNotCheckSecurity, Custom=Setter] attribute Window opener;
-    [Replaceable, DoNotCheckSecurity] readonly attribute Window parent;
+    [CrossOrigin, Custom=Setter] attribute Window opener;
+    [Replaceable, CrossOrigin] readonly attribute Window? parent;
     [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);
-    // FIXME: These getters should not have [NotEnumerable].
-    [NotEnumerable, DoNotCheckSecurity] getter Window (unsigned long index);
-    [Custom, NotEnumerable, DoNotCheckSecurity] getter object (DOMString name);
+    [Custom, RaisesException] Window? open(DOMString url, DOMString target, optional DOMString features);
+
+    // indexed properties
+    // https://html.spec.whatwg.org/C/browsers.html#windowproxy-getownproperty
+    [NotEnumerable, CrossOrigin] getter Window (unsigned long index);
+
+    // named properties
+    [Custom, NotEnumerable, CrossOrigin] getter object (DOMString name);
 
     // the user agent
     [LogActivity=GetterOnly] readonly attribute Navigator navigator;
-    [RuntimeEnabled=ApplicationCache, LogActivity=GetterOnly] readonly attribute ApplicationCache applicationCache;
+    [LogActivity=GetterOnly] readonly attribute ApplicationCache applicationCache;
 
     // user prompts
-    [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();
+    [Measure, CallWith=ScriptState] void alert();
+    [Measure, CallWith=ScriptState] void alert(DOMString message);
+    [Measure, CallWith=ScriptState] boolean confirm(optional DOMString message = "");
+    [Measure, CallWith=ScriptState] DOMString? prompt(optional DOMString message = "", optional DOMString defaultValue = "");
+    [Measure, CallWith=ScriptState] void print();
 
     [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);
+    [Measure] long requestIdleCallback(IdleRequestCallback callback, optional IdleRequestOptions options);
+    void cancelIdleCallback(long handle);
 
-    [DoNotCheckSecurity, Custom, RaisesException] void postMessage(any message, DOMString targetOrigin, optional sequence<Transferable> transfer);
+    [CrossOrigin, Custom, RaisesException] void postMessage(any message, DOMString targetOrigin, optional sequence<object> transfer = []);
+
+    // Custom elements
+    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-api
+    [CallWith=ScriptState] readonly attribute CustomElementRegistry customElements;
 
     // HTML obsolete features
     // https://html.spec.whatwg.org/#Window-partial
     [MeasureAs=WindowCaptureEvents] void captureEvents();
     [MeasureAs=WindowReleaseEvents] void releaseEvents();
 
+    [Replaceable, SameObject] readonly attribute External external;
+
     // 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] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt = null);
+    // https://drafts.csswg.org/cssom/#extensions-to-the-window-interface
+    [NewObject] CSSStyleDeclaration getComputedStyle(Element elt, optional DOMString? pseudoElt);
 
     // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-window-interface
+    // https://drafts.csswg.org/cssom-view/#extensions-to-the-window-interface
     [NewObject] MediaQueryList matchMedia(DOMString query);
     [SameObject, Replaceable] readonly attribute Screen screen;
 
@@ -123,6 +145,10 @@
     [RuntimeEnabled=CSSOMSmoothScroll] void scrollBy(optional ScrollToOptions options);
     void scrollBy(unrestricted double x, unrestricted double y);
 
+    // Visual Viewport API
+    // https://github.com/WICG/ViewportAPI
+    [RuntimeEnabled=VisualViewportAPI, Replaceable, SameObject] readonly attribute VisualViewport visualViewport;
+
     // client
     [Replaceable] readonly attribute long screenX;
     [Replaceable] readonly attribute long screenY;
@@ -131,12 +157,22 @@
     [Replaceable] readonly attribute double devicePixelRatio;
 
     // Selection API
-    // http://w3c.github.io/selection-api/#extensions-to-window-interface
+    // https://w3c.github.io/selection-api/#extensions-to-window-interface
     Selection? getSelection();
 
-    // Console API (non-standard but widely implemented in some form)
-    // https://developer.chrome.com/devtools/docs/console-api
-    [Replaceable] readonly attribute Console console;
+    // Console API
+    // https://console.spec.whatwg.org/#console-interface
+    // [Replaceable] readonly attribute Console console;
+    // Console is installed by v8 inspector when context is created
+    // and is left commented here just for documentation.
+
+    // Compatibility
+    // https://compat.spec.whatwg.org/#windoworientation-interface
+    [RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;
+    // 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.
+    [MeasureAs=WindowOrientation, RuntimeEnabled=OrientationEvent] readonly attribute long orientation;
 
     // Non-standard APIs
     [MeasureAs=WindowClientInformation, Replaceable] readonly attribute Navigator clientInformation;
@@ -154,15 +190,10 @@
     [MeasureAs=WindowDefaultStatus] attribute DOMString defaultStatus;
     [MeasureAs=WindowDefaultstatus, ImplementedAs=defaultStatus] attribute DOMString defaultstatus;
     [MeasureAs=StyleMedia] readonly attribute StyleMedia styleMedia;
-    [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.
-    [MeasureAs=WindowOrientation, RuntimeEnabled=OrientationEvent] readonly attribute long orientation;
+    [RuntimeEnabled=GetMatchedCSSRules, DeprecateAs=GetMatchedCSSRules, LegacyInterfaceTypeChecking] CSSRuleList getMatchedCSSRules([Default=Undefined] optional Element element,
+                                                                                                 [Default=Undefined] optional DOMString? pseudoElement);
     [DeprecateAs=PrefixedRequestAnimationFrame] long webkitRequestAnimationFrame(FrameRequestCallback callback);
     [DeprecateAs=PrefixedCancelAnimationFrame, ImplementedAs=cancelAnimationFrame] void webkitCancelAnimationFrame(long id);
-    [DeprecateAs=PrefixedCancelRequestAnimationFrame, ImplementedAs=cancelAnimationFrame] void webkitCancelRequestAnimationFrame(long id);
     [MeasureAs=PrefixedTransitionEventConstructor] attribute TransitionEventConstructor WebKitTransitionEvent;
     [Measure] attribute AnimationEventConstructor WebKitAnimationEvent;
     [DeprecateAs=PrefixedWindowURL] attribute URLConstructor webkitURL;
@@ -172,33 +203,18 @@
     attribute EventHandler onanimationend;
     attribute EventHandler onanimationiteration;
     attribute EventHandler onanimationstart;
-    [RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;
     attribute EventHandler onsearch;
     attribute EventHandler ontransitionend;
     attribute EventHandler onwebkitanimationend;
     attribute EventHandler onwebkitanimationiteration;
     attribute EventHandler onwebkitanimationstart;
     attribute EventHandler onwebkittransitionend;
-    attribute EventHandler onwheel;
 
     // 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
-//
-// Expressing the Transferable typedef in IDL depends on http://crbug.com/240176.
-// The postMessage() methods taking a Transferable array argument have custom
-// binding code that is able to handle the Transferables that we currently
-// recognize. To be able to declare a postMessage() signature that matches
-// the implementation, we provide a Transferable typedef but with an
-// incomplete type.
-//
-// FIXME: make this typedef accurate once enough of http://crbug.com/240176
-// is in place.
-// FIXME: consider putting this typedef in an .idl file containing spec-wide
-// utility type definitions.
-typedef MessagePort Transferable;
+    attribute DOMMatrixConstructor WebKitCSSMatrix;
+};
 
 Window implements GlobalEventHandlers;
 Window implements WindowBase64;
diff --git a/core/frame/WindowBase64.idl b/core/frame/WindowBase64.idl
index fe2fe8a..a19439e 100644
--- a/core/frame/WindowBase64.idl
+++ b/core/frame/WindowBase64.idl
@@ -29,7 +29,7 @@
 
 [
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface WindowBase64 {
     [RaisesException] DOMString btoa(DOMString btoa);
     [RaisesException] DOMString atob(DOMString atob);
diff --git a/core/frame/WindowEventHandlers.idl b/core/frame/WindowEventHandlers.idl
index 9b76672..9bd850d 100644
--- a/core/frame/WindowEventHandlers.idl
+++ b/core/frame/WindowEventHandlers.idl
@@ -32,25 +32,23 @@
 [
     ImplementedAs=DOMWindowEventHandlers,
     LegacyTreatAsPartialInterface,
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface WindowEventHandlers {
-    //attribute EventHandler onafterprint;
-    //attribute EventHandler onbeforeprint;
+    attribute EventHandler onafterprint;
+    attribute EventHandler onbeforeprint;
     // FIXME: onbeforeunload should be an OnBeforeUnloadEventHandler.
     attribute EventHandler onbeforeunload;
     attribute EventHandler onhashchange;
     attribute EventHandler onlanguagechange;
     attribute EventHandler onmessage;
+    attribute EventHandler onmessageerror;
     attribute EventHandler onoffline;
     attribute EventHandler ononline;
     attribute EventHandler onpagehide;
     attribute EventHandler onpageshow;
     attribute EventHandler onpopstate;
+    attribute EventHandler onrejectionhandled;
     attribute EventHandler onstorage;
+    attribute EventHandler onunhandledrejection;
     attribute EventHandler onunload;
-
-    // Unhandled Promise Rejection Events
-    // https://github.com/domenic/unhandled-rejections-browser-spec
-    [RuntimeEnabled=PromiseRejectionEvent] attribute EventHandler onrejectionhandled;
-    [RuntimeEnabled=PromiseRejectionEvent] attribute EventHandler onunhandledrejection;
 };
diff --git a/core/frame/WindowTimers.idl b/core/frame/WindowTimers.idl
index 0840392..9f8fc07 100644
--- a/core/frame/WindowTimers.idl
+++ b/core/frame/WindowTimers.idl
@@ -31,12 +31,12 @@
     ImplementedAs=DOMWindowTimers,
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface WindowTimers {
     // FIXME: would be clearer as a union type, like:
     // typedef (Function or DOMString) Handler
     // Needs spec update and better union support: http://crbug.com/240176
-    [CallWith=ScriptState] long setTimeout(Function handler, optional long timeout = 0, any... arguments);
+    [CallWith=ScriptState, RuntimeCallStatsCounter=WindowSetTimeout] long setTimeout(Function handler, optional long timeout = 0, any... arguments);
     [CallWith=ScriptState] long setTimeout(DOMString handler, optional long timeout = 0, any... arguments);
     void clearTimeout(optional long handle = 0);
     [CallWith=ScriptState] long setInterval(Function handler, optional long timeout = 0, any... arguments);
diff --git a/core/fullscreen/DocumentFullscreen.idl b/core/fullscreen/DocumentFullscreen.idl
new file mode 100644
index 0000000..de3a8a2
--- /dev/null
+++ b/core/fullscreen/DocumentFullscreen.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org>
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * 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://fullscreen.spec.whatwg.org/#api
+
+[
+    ImplementedAs=DocumentFullscreen
+] partial interface Document {
+    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute boolean fullscreenEnabled;
+
+    [RuntimeEnabled=FullscreenUnprefixed] void exitFullscreen();
+
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenchange;
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenerror;
+
+    // Mozilla version
+    [MeasureAs=PrefixedDocumentIsFullscreen, ImplementedAs=fullscreenElement] readonly attribute boolean webkitIsFullScreen;
+    [MeasureAs=PrefixedDocumentCurrentFullScreenElement, ImplementedAs=fullscreenElement] readonly attribute Element webkitCurrentFullScreenElement;
+    [MeasureAs=PrefixedDocumentCancelFullScreen, ImplementedAs=exitFullscreen] void webkitCancelFullScreen();
+
+    // W3C version
+    [MeasureAs=PrefixedDocumentFullscreenEnabled, ImplementedAs=fullscreenEnabled] readonly attribute boolean webkitFullscreenEnabled;
+    [MeasureAs=PrefixedDocumentFullscreenElement, ImplementedAs=fullscreenElement] readonly attribute Element webkitFullscreenElement;
+    [MeasureAs=PrefixedDocumentExitFullscreen, ImplementedAs=exitFullscreen] void webkitExitFullscreen();
+
+    attribute EventHandler onwebkitfullscreenchange;
+    attribute EventHandler onwebkitfullscreenerror;
+};
diff --git a/core/fullscreen/ElementFullscreen.idl b/core/fullscreen/ElementFullscreen.idl
new file mode 100644
index 0000000..723279f
--- /dev/null
+++ b/core/fullscreen/ElementFullscreen.idl
@@ -0,0 +1,23 @@
+// 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://fullscreen.spec.whatwg.org/#api
+
+[
+    ImplementedAs=ElementFullscreen
+] partial interface Element {
+    [RuntimeEnabled=FullscreenUnprefixed] void requestFullscreen();
+
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenchange;
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenerror;
+
+    // Mozilla version
+    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullScreen, ImplementedAs=webkitRequestFullscreen] void webkitRequestFullScreen();
+
+    // W3C version
+    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullscreen] void webkitRequestFullscreen();
+
+    attribute EventHandler onwebkitfullscreenchange;
+    attribute EventHandler onwebkitfullscreenerror;
+};
diff --git a/core/geometry/DOMMatrix.idl b/core/geometry/DOMMatrix.idl
new file mode 100644
index 0000000..5f3378c
--- /dev/null
+++ b/core/geometry/DOMMatrix.idl
@@ -0,0 +1,73 @@
+// 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://drafts.fxtf.org/geometry/#DOMMatrix
+
+[
+    Constructor(optional (DOMString or sequence<unrestricted double>) init),
+    RaisesException=Constructor,
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMMatrix : DOMMatrixReadOnly {
+    [RaisesException, NewObject] static DOMMatrix fromMatrix(optional DOMMatrixInit other);
+    [RaisesException, NewObject] static DOMMatrix fromFloat32Array(Float32Array array32);
+    [RaisesException, NewObject] static DOMMatrix fromFloat64Array(Float64Array array64);
+
+    // These attributes are simple aliases for certain elements of the 4x4 matrix
+    inherit attribute unrestricted double a;
+    inherit attribute unrestricted double b;
+    inherit attribute unrestricted double c;
+    inherit attribute unrestricted double d;
+    inherit attribute unrestricted double e;
+    inherit attribute unrestricted double f;
+
+    inherit attribute unrestricted double m11;
+    inherit attribute unrestricted double m12;
+    inherit attribute unrestricted double m13;
+    inherit attribute unrestricted double m14;
+    inherit attribute unrestricted double m21;
+    inherit attribute unrestricted double m22;
+    inherit attribute unrestricted double m23;
+    inherit attribute unrestricted double m24;
+    inherit attribute unrestricted double m31;
+    inherit attribute unrestricted double m32;
+    inherit attribute unrestricted double m33;
+    inherit attribute unrestricted double m34;
+    inherit attribute unrestricted double m41;
+    inherit attribute unrestricted double m42;
+    inherit attribute unrestricted double m43;
+    inherit attribute unrestricted double m44;
+
+    // Mutable transform methods
+    [RaisesException] DOMMatrix multiplySelf(optional DOMMatrixInit other);
+    [RaisesException] DOMMatrix preMultiplySelf(optional DOMMatrixInit other);
+    DOMMatrix translateSelf(optional unrestricted double tx = 0,
+                            optional unrestricted double ty = 0,
+                            optional unrestricted double tz = 0);
+    DOMMatrix scaleSelf(optional unrestricted double scaleX = 1,
+                        optional unrestricted double scaleY,
+                        optional unrestricted double scaleZ = 1,
+                        optional unrestricted double originX = 0,
+                        optional unrestricted double originY = 0,
+                        optional unrestricted double originZ = 0);
+    DOMMatrix scale3dSelf(optional unrestricted double scale = 1,
+                          optional unrestricted double originX = 0,
+                          optional unrestricted double originY = 0,
+                          optional unrestricted double originZ = 0);
+    DOMMatrix rotateSelf(optional unrestricted double rotX = 0,
+                          optional unrestricted double rotY,
+                          optional unrestricted double rotZ);
+    DOMMatrix rotateFromVectorSelf(optional unrestricted double x = 0,
+                                  optional unrestricted double y = 0);
+    DOMMatrix rotateAxisAngleSelf(optional unrestricted double x = 0,
+                                  optional unrestricted double y = 0,
+                                  optional unrestricted double z = 0,
+                                  optional unrestricted double angle = 0);
+    DOMMatrix skewXSelf(optional unrestricted double sx = 0);
+    DOMMatrix skewYSelf(optional unrestricted double sy = 0);
+    DOMMatrix invertSelf();
+
+    [Exposed=Window, RaisesException] DOMMatrix setMatrixValue(DOMString transformList);
+};
diff --git a/core/geometry/DOMMatrix2DInit.idl b/core/geometry/DOMMatrix2DInit.idl
new file mode 100644
index 0000000..78d90b5
--- /dev/null
+++ b/core/geometry/DOMMatrix2DInit.idl
@@ -0,0 +1,20 @@
+// Copyright 2017 The Chromium 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.fxtf.org/geometry/#dictdef-dommatrix2dinit
+
+dictionary DOMMatrix2DInit {
+    unrestricted double a;
+    unrestricted double b;
+    unrestricted double c;
+    unrestricted double d;
+    unrestricted double e;
+    unrestricted double f;
+    unrestricted double m11;
+    unrestricted double m12;
+    unrestricted double m21;
+    unrestricted double m22;
+    unrestricted double m41;
+    unrestricted double m42;
+};
\ No newline at end of file
diff --git a/core/geometry/DOMMatrixInit.idl b/core/geometry/DOMMatrixInit.idl
new file mode 100644
index 0000000..9608a63
--- /dev/null
+++ b/core/geometry/DOMMatrixInit.idl
@@ -0,0 +1,19 @@
+// 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.fxtf.org/geometry/#dictdef-dommatrixinit
+
+dictionary DOMMatrixInit : DOMMatrix2DInit {
+    unrestricted double m13 = 0;
+    unrestricted double m14 = 0;
+    unrestricted double m23 = 0;
+    unrestricted double m24 = 0;
+    unrestricted double m31 = 0;
+    unrestricted double m32 = 0;
+    unrestricted double m33 = 1;
+    unrestricted double m34 = 0;
+    unrestricted double m43 = 0;
+    unrestricted double m44 = 1;
+    boolean is2D;
+};
diff --git a/core/geometry/DOMMatrixReadOnly.idl b/core/geometry/DOMMatrixReadOnly.idl
new file mode 100644
index 0000000..5bf2e2a
--- /dev/null
+++ b/core/geometry/DOMMatrixReadOnly.idl
@@ -0,0 +1,81 @@
+// 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://drafts.fxtf.org/geometry/#DOMMatrix
+
+[
+    Constructor(optional (DOMString or sequence<unrestricted double>) init),
+    RaisesException=Constructor,
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMMatrixReadOnly {
+    [RaisesException, NewObject] static DOMMatrixReadOnly fromMatrix(optional DOMMatrixInit other);
+    [RaisesException, NewObject] static DOMMatrixReadOnly fromFloat32Array(Float32Array array32);
+    [RaisesException, NewObject] static DOMMatrixReadOnly fromFloat64Array(Float64Array array64);
+
+    // These attributes are simple aliases for certain elements of the 4x4 matrix
+    readonly attribute unrestricted double a;
+    readonly attribute unrestricted double b;
+    readonly attribute unrestricted double c;
+    readonly attribute unrestricted double d;
+    readonly attribute unrestricted double e;
+    readonly attribute unrestricted double f;
+
+    readonly attribute unrestricted double m11;
+    readonly attribute unrestricted double m12;
+    readonly attribute unrestricted double m13;
+    readonly attribute unrestricted double m14;
+    readonly attribute unrestricted double m21;
+    readonly attribute unrestricted double m22;
+    readonly attribute unrestricted double m23;
+    readonly attribute unrestricted double m24;
+    readonly attribute unrestricted double m31;
+    readonly attribute unrestricted double m32;
+    readonly attribute unrestricted double m33;
+    readonly attribute unrestricted double m34;
+    readonly attribute unrestricted double m41;
+    readonly attribute unrestricted double m42;
+    readonly attribute unrestricted double m43;
+    readonly attribute unrestricted double m44;
+
+    readonly attribute boolean is2D;
+    readonly attribute boolean isIdentity;
+
+    // Immutable transform methods
+    DOMMatrix translate(optional unrestricted double tx = 0,
+                        optional unrestricted double ty = 0,
+                        optional unrestricted double tz = 0);
+    DOMMatrix scale(optional unrestricted double scaleX = 1,
+                    optional unrestricted double scaleY,
+                    optional unrestricted double scaleZ = 1,
+                    optional unrestricted double originX = 0,
+                    optional unrestricted double originY = 0,
+                    optional unrestricted double originZ = 0);
+    DOMMatrix scale3d(optional unrestricted double scale = 1,
+                      optional unrestricted double originX = 0,
+                      optional unrestricted double originY = 0,
+                      optional unrestricted double originZ = 0);
+    DOMMatrix rotate(optional unrestricted double rotX = 0,
+                     optional unrestricted double rotY,
+                     optional unrestricted double rotZ);
+    DOMMatrix rotateFromVector(optional unrestricted double x = 0,
+                           optional unrestricted double y = 0);
+    DOMMatrix rotateAxisAngle(optional unrestricted double x = 0,
+                              optional unrestricted double y = 0,
+                              optional unrestricted double z = 0,
+                              optional unrestricted double angle = 0);
+    DOMMatrix skewX(optional unrestricted double sx = 0);
+    DOMMatrix skewY(optional unrestricted double sy = 0);
+    [RaisesException] DOMMatrix multiply(optional DOMMatrixInit other);
+    DOMMatrix flipX();
+    DOMMatrix flipY();
+    DOMMatrix inverse();
+
+    DOMPoint transformPoint(optional DOMPointInit point);
+    Float32Array toFloat32Array();
+    Float64Array toFloat64Array();
+    [Exposed=Window, RaisesException] stringifier;
+    serializer = { attribute };
+};
diff --git a/core/geometry/DOMPoint.idl b/core/geometry/DOMPoint.idl
new file mode 100644
index 0000000..63f084c
--- /dev/null
+++ b/core/geometry/DOMPoint.idl
@@ -0,0 +1,18 @@
+// 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://drafts.fxtf.org/geometry/#DOMPoint
+
+[
+    Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+                optional unrestricted double z = 0, optional unrestricted double w = 1),
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMPoint : DOMPointReadOnly {
+    [NewObject] static DOMPoint fromPoint(optional DOMPointInit other);
+    inherit attribute unrestricted double x;
+    inherit attribute unrestricted double y;
+    inherit attribute unrestricted double z;
+    inherit attribute unrestricted double w;
+};
diff --git a/core/geometry/DOMPointInit.idl b/core/geometry/DOMPointInit.idl
new file mode 100644
index 0000000..e901792
--- /dev/null
+++ b/core/geometry/DOMPointInit.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://drafts.fxtf.org/geometry/#DOMPoint
+
+dictionary DOMPointInit {
+    unrestricted double x = 0;
+    unrestricted double y = 0;
+    unrestricted double z = 0;
+    unrestricted double w = 1;
+};
diff --git a/core/geometry/DOMPointReadOnly.idl b/core/geometry/DOMPointReadOnly.idl
new file mode 100644
index 0000000..3ac60c5
--- /dev/null
+++ b/core/geometry/DOMPointReadOnly.idl
@@ -0,0 +1,23 @@
+// 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://drafts.fxtf.org/geometry/#dompointreadonly
+
+[
+    Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+                optional unrestricted double z = 0, optional unrestricted double w = 1),
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMPointReadOnly {
+    [NewObject] static DOMPointReadOnly fromPoint(optional DOMPointInit other);
+
+    readonly attribute unrestricted double x;
+    readonly attribute unrestricted double y;
+    readonly attribute unrestricted double z;
+    readonly attribute unrestricted double w;
+
+    [RaisesException] DOMPoint matrixTransform(optional DOMMatrixInit matrix);
+
+    serializer = { attribute };
+};
diff --git a/core/geometry/DOMQuad.idl b/core/geometry/DOMQuad.idl
new file mode 100644
index 0000000..72f4b2f
--- /dev/null
+++ b/core/geometry/DOMQuad.idl
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium 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.fxtf.org/geometry/#domquad
+
+[
+ Constructor(optional DOMPointInit p1, optional DOMPointInit p2,
+                  optional DOMPointInit p3, optional DOMPointInit p4),
+ Exposed=(Window,Worker),
+ RuntimeEnabled=GeometryInterfaces
+]
+interface DOMQuad {
+    [NewObject] static DOMQuad fromRect(optional DOMRectInit other);
+    [NewObject] static DOMQuad fromQuad(optional DOMQuadInit other);
+
+    [SameObject] readonly attribute DOMPoint p1;
+    [SameObject] readonly attribute DOMPoint p2;
+    [SameObject] readonly attribute DOMPoint p3;
+    [SameObject] readonly attribute DOMPoint p4;
+    [NewObject] DOMRect getBounds();
+
+    serializer = { attribute };
+};
diff --git a/core/geometry/DOMQuadInit.idl b/core/geometry/DOMQuadInit.idl
new file mode 100644
index 0000000..126a47a
--- /dev/null
+++ b/core/geometry/DOMQuadInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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.fxtf.org/geometry/#dictdef-domquadinit
+
+dictionary DOMQuadInit {
+    DOMPointInit p1;
+    DOMPointInit p2;
+    DOMPointInit p3;
+    DOMPointInit p4;
+};
diff --git a/core/geometry/DOMRect.idl b/core/geometry/DOMRect.idl
new file mode 100644
index 0000000..6fa18c6
--- /dev/null
+++ b/core/geometry/DOMRect.idl
@@ -0,0 +1,21 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://drafts.fxtf.org/geometry/#DOMRect
+
+[
+    Constructor(optional unrestricted double x = 0,
+                optional unrestricted double y = 0,
+                optional unrestricted double width = 0,
+                optional unrestricted double height = 0),
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMRect : DOMRectReadOnly {
+    [NewObject] static DOMRect fromRect(optional DOMRectInit other);
+
+    inherit attribute unrestricted double x;
+    inherit attribute unrestricted double y;
+    inherit attribute unrestricted double width;
+    inherit attribute unrestricted double height;
+};
diff --git a/core/geometry/DOMRectInit.idl b/core/geometry/DOMRectInit.idl
new file mode 100644
index 0000000..2bcc9f3
--- /dev/null
+++ b/core/geometry/DOMRectInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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.fxtf.org/geometry/#dictdef-domrectinit
+
+dictionary DOMRectInit {
+    unrestricted double x = 0;
+    unrestricted double y = 0;
+    unrestricted double width = 0;
+    unrestricted double height = 0;
+};
diff --git a/core/geometry/DOMRectList.idl b/core/geometry/DOMRectList.idl
new file mode 100644
index 0000000..4d3d608
--- /dev/null
+++ b/core/geometry/DOMRectList.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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.fxtf.org/geometry/#DOMRectList
+// Spec update: https://github.com/w3c/fxtf-drafts/pull/186
+
+// DOMRectList only exists for compatibility with legacy web content.
+// When specifying a new API, use sequence<DOMRect> instead.
+
+// TODO: Spec also includes LegacyArrayClass that our IDL doesn't support yet.
+[ NoInterfaceObject ] interface DOMRectList {
+    readonly attribute unsigned long length;
+    [MeasureAs=ClientRectListItem] getter DOMRect? item(unsigned long index);
+};
diff --git a/core/geometry/DOMRectReadOnly.idl b/core/geometry/DOMRectReadOnly.idl
new file mode 100644
index 0000000..05854af
--- /dev/null
+++ b/core/geometry/DOMRectReadOnly.idl
@@ -0,0 +1,25 @@
+// 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://drafts.fxtf.org/geometry/#DOMRect
+
+[
+    Constructor(optional unrestricted double x = 0, optional unrestricted double y = 0,
+                optional unrestricted double width = 0, optional unrestricted double height = 0),
+    Exposed=(Window,Worker),
+    RuntimeEnabled=GeometryInterfaces
+] interface DOMRectReadOnly {
+    [NewObject] static DOMRectReadOnly fromRect(optional DOMRectInit other);
+
+    readonly attribute unrestricted double x;
+    readonly attribute unrestricted double y;
+    readonly attribute unrestricted double width;
+    readonly attribute unrestricted double height;
+    readonly attribute unrestricted double top;
+    readonly attribute unrestricted double right;
+    readonly attribute unrestricted double bottom;
+    readonly attribute unrestricted double left;
+
+    serializer = { attribute };
+};
diff --git a/core/html/AssignedNodesOptions.idl b/core/html/AssignedNodesOptions.idl
index 5247c06..5d699ec 100644
--- a/core/html/AssignedNodesOptions.idl
+++ b/core/html/AssignedNodesOptions.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://w3c.github.io/webcomponents/spec/shadow/#idl-def-AssignedNodesOptions
+// https://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
deleted file mode 100644
index 70df8fe..0000000
--- a/core/html/FormData.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// https://xhr.spec.whatwg.org/#interface-formdata
-
-// TODO(philipj): The FormDataEntryValue typedef should use Blob, not File.
-typedef (File or USVString) FormDataEntryValue;
-
-[
-    Constructor(optional HTMLFormElement form),
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    LegacyInterfaceTypeChecking,
-] interface FormData {
-    // TODO(philipj): The value argument should be FormDataEntryValue and there
-    // should be no optional filename argument. crbug.com/498790
-    [CallWith=ExecutionContext] void append(USVString name, Blob value, optional USVString filename);
-    void append(USVString name, USVString value);
-
-    [RuntimeEnabled=FormDataNewMethods, ImplementedAs=deleteEntry] void delete(USVString name);
-    [RuntimeEnabled=FormDataNewMethods] FormDataEntryValue? get(USVString name);
-    [RuntimeEnabled=FormDataNewMethods] sequence<FormDataEntryValue> getAll(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);
-    [RuntimeEnabled=FormDataNewMethods] void set(USVString name, USVString value);
-    [RuntimeEnabled=FormDataNewMethods] iterable<USVString, FormDataEntryValue>;
-};
diff --git a/core/html/HTMLAllCollection.idl b/core/html/HTMLAllCollection.idl
index dc4ba0d..e3c39c6 100644
--- a/core/html/HTMLAllCollection.idl
+++ b/core/html/HTMLAllCollection.idl
@@ -29,15 +29,14 @@
 [
     Custom=LegacyCallAsFunction,
     DependentLifetime,
-    SetWrapperReferenceFrom=ownerNode,
-    WillBeGarbageCollected,
+    LegacyUnenumerableNamedProperties
 ] interface HTMLAllCollection {
     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: namedItem() should be a legacycaller. crbug.com/465009
+    // FIXME: namedItem() should be a legacycaller.
     // 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 255acf0..1b736f4 100644
--- a/core/html/HTMLAnchorElement.idl
+++ b/core/html/HTMLAnchorElement.idl
@@ -21,25 +21,25 @@
 // https://html.spec.whatwg.org/#the-a-element
 
 interface HTMLAnchorElement : HTMLElement {
-    [Reflect] attribute DOMString target;
-    [Reflect] attribute DOMString download;
+    [CEReactions, Reflect] attribute DOMString target;
+    [CEReactions, Reflect] attribute DOMString download;
     // FIXME: ping should be a DOMTokenList.
-    [Reflect] attribute DOMString ping;
-    [Reflect] attribute DOMString rel;
+    [CEReactions, Reflect] attribute DOMString ping;
+    [CEReactions, 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;
+    [CEReactions, Reflect] attribute DOMString hreflang;
+    [CEReactions, Reflect] attribute DOMString type;
+    [CEReactions, 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;
+    [CEReactions, ImplementedAs=textContent] attribute DOMString text;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLAnchorElement-partial
-    [Reflect] attribute DOMString coords;
-    [Reflect] attribute DOMString charset;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString rev;
-    [Reflect] attribute DOMString shape;
+    [CEReactions, Reflect] attribute DOMString coords;
+    [CEReactions, Reflect] attribute DOMString charset;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString rev;
+    [CEReactions, Reflect] attribute DOMString shape;
 };
 
-HTMLAnchorElement implements URLUtils;
+HTMLAnchorElement implements HTMLHyperlinkElementUtils;
diff --git a/core/html/HTMLAreaElement.idl b/core/html/HTMLAreaElement.idl
index 4782665..55b3a88 100644
--- a/core/html/HTMLAreaElement.idl
+++ b/core/html/HTMLAreaElement.idl
@@ -21,18 +21,20 @@
 // https://html.spec.whatwg.org/#the-area-element
 
 interface HTMLAreaElement : HTMLElement {
-    [Reflect] attribute DOMString alt;
-    [Reflect] attribute DOMString coords;
-    [Reflect] attribute DOMString shape;
-    [Reflect] attribute DOMString target;
+    [CEReactions, Reflect] attribute DOMString alt;
+    [CEReactions, Reflect] attribute DOMString coords;
+    [CEReactions, Reflect] attribute DOMString download;
+    [CEReactions, Reflect] attribute DOMString shape;
+    [CEReactions, Reflect] attribute DOMString target;
     // FIXME: ping should be a DOMTokenList.
-    [Reflect] attribute DOMString ping;
-    // 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;
+    [CEReactions, Reflect] attribute DOMString ping;
+    [CEReactions, Reflect] attribute DOMString rel;
+    // FIXME: relList is missing
+    [CEReactions, 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
-    [Reflect] attribute boolean noHref;
+    [CEReactions, Reflect] attribute boolean noHref;
 };
 
-HTMLAreaElement implements URLUtils;
+HTMLAreaElement implements HTMLHyperlinkElementUtils;
diff --git a/core/html/HTMLAudioElement.idl b/core/html/HTMLAudioElement.idl
index 5e1076b..13ea2f7 100644
--- a/core/html/HTMLAudioElement.idl
+++ b/core/html/HTMLAudioElement.idl
@@ -26,9 +26,7 @@
 // https://html.spec.whatwg.org/#the-audio-element
 
 [
-    RuntimeEnabled=Media,
-    // FIXME: The src argument should have no default value.
-    NamedConstructor=Audio(optional DOMString src = null),
+    NamedConstructor=Audio(optional DOMString src),
     ConstructorCallWith=Document
 ] interface HTMLAudioElement : HTMLMediaElement {
 };
diff --git a/core/html/HTMLBRElement.idl b/core/html/HTMLBRElement.idl
index 0f10d28..11020c1 100644
--- a/core/html/HTMLBRElement.idl
+++ b/core/html/HTMLBRElement.idl
@@ -22,5 +22,5 @@
 interface HTMLBRElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLBRElement-partial
-    [Reflect] attribute DOMString clear;
+    [CEReactions, Reflect] attribute DOMString clear;
 };
diff --git a/core/html/HTMLBaseElement.idl b/core/html/HTMLBaseElement.idl
index 4a6273d..63229fe 100644
--- a/core/html/HTMLBaseElement.idl
+++ b/core/html/HTMLBaseElement.idl
@@ -20,6 +20,6 @@
 // https://html.spec.whatwg.org/#the-base-element
 
 interface HTMLBaseElement : HTMLElement {
-    attribute DOMString href;
-    [Reflect] attribute DOMString target;
+    [CEReactions] attribute DOMString href;
+    [CEReactions, Reflect] attribute DOMString target;
 };
diff --git a/core/html/HTMLBodyElement.idl b/core/html/HTMLBodyElement.idl
index 51f0308..a8011d5 100644
--- a/core/html/HTMLBodyElement.idl
+++ b/core/html/HTMLBodyElement.idl
@@ -23,14 +23,14 @@
 interface HTMLBodyElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLBodyElement-partial
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString text;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString link;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString vLink;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString aLink;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
-    [Reflect] attribute DOMString background;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString text;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString link;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString vLink;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString aLink;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
+    [CEReactions, Reflect] attribute DOMString background;
 
-    // TODO(philipj): These event handler attributes should be inherited from
+    // TODO(foolip): These event handler attributes should be inherited from
     // HTMLElement (which implements GlobalEventHandlers), but have different
     // behavior. See https://www.w3.org/Bugs/Public/show_bug.cgi?id=28166
     attribute EventHandler onblur;
@@ -40,7 +40,8 @@
     attribute EventHandler onresize;
     attribute EventHandler onscroll;
 
-    // Non-standard APIs
+    // Compatibility
+    // https://compat.spec.whatwg.org/#windoworientation-interface
     [RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;
 };
 
diff --git a/core/html/HTMLButtonElement.idl b/core/html/HTMLButtonElement.idl
deleted file mode 100644
index a6c47d6..0000000
--- a/core/html/HTMLButtonElement.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2006, 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-button-element
-
-interface HTMLButtonElement : HTMLElement {
-    [Reflect] attribute boolean autofocus;
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    attribute DOMString formAction;
-    attribute DOMString formEnctype;
-    attribute DOMString formMethod;
-    [Reflect] attribute boolean formNoValidate;
-    [Reflect] attribute DOMString formTarget;
-    [Reflect] attribute DOMString name;
-    attribute DOMString type;
-    [Reflect] attribute DOMString value;
-    // FIXME: attribute HTMLMenuElement? menu;
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-};
diff --git a/core/html/HTMLCanvasElement.idl b/core/html/HTMLCanvasElement.idl
index 15e7e50..2541c49 100644
--- a/core/html/HTMLCanvasElement.idl
+++ b/core/html/HTMLCanvasElement.idl
@@ -28,30 +28,16 @@
 
 interface HTMLCanvasElement : HTMLElement
 {
-    // FIXME: width and height should be unsigned long.
-    attribute long width;
-    attribute long height;
+    // Note: Due to dependecies on modules, getContext is defined in a partial
+    // interface in HTMLCanvasElementModule.idl
 
-    // Note: this differs deliberately from the specified Web IDL for this function:
-    //     RenderingContext? getContext(DOMString contextId, any... arguments);
-    // in order to eliminate the custom binding. It is functionally equivalent.
-    //
-    // The PermissiveDictionaryConversion extended attribute is needed to allow the
-    // autogenerated code to match the behavior of the custom binding. Web IDL
-    // requires throwing TypeError if the incoming argument is not an object type
-    // (and is not undefined or null). The binding must ignore this.
-    //
-    // Also note: the only reason this must return type "any" is to allow the
-    // InspectorInstrumentation wrappers to be called for canvases. If that could be
-    // handled differently the return type could be changed to "RenderingContext?"
-    // and the [CallWith=ScriptState] extended attribute removed.
-    //
-    [CallWith=ScriptState] any getContext(DOMString contextId, [PermissiveDictionaryConversion] optional CanvasContextCreationAttributes attributes);
+    [RaisesException=Setter, CEReactions] attribute unsigned long width;
+    [RaisesException=Setter, CEReactions] attribute unsigned long height;
 
     // Note: The arguments argument is variadic in the spec, but not here as
     // only one extra argument is actually used.
     // FIXME: type should not have a default value.
-    [RaisesException] DOMString toDataURL(optional DOMString type = null, optional any arguments);
+    [MeasureAs=CanvasToDataURL, RaisesException] DOMString toDataURL(optional DOMString type = null, optional any arguments);
 
-    [RaisesException] void toBlob(BlobCallback _callback, optional DOMString type = null, optional any arguments);
+    [MeasureAs=CanvasToBlob, 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 b285517..7bbe9b3 100644
--- a/core/html/HTMLCollection.idl
+++ b/core/html/HTMLCollection.idl
@@ -23,8 +23,7 @@
 
 [
     DependentLifetime,
-    SetWrapperReferenceFrom=ownerNode,
-    WillBeGarbageCollected,
+    LegacyUnenumerableNamedProperties
 ] interface HTMLCollection {
     readonly attribute unsigned long length;
     getter Element? item(unsigned long index);
diff --git a/core/html/HTMLContentElement.idl b/core/html/HTMLContentElement.idl
index 0979cf8..937de47 100644
--- a/core/html/HTMLContentElement.idl
+++ b/core/html/HTMLContentElement.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/webcomponents/spec/shadow/#the-content-element
+// https://w3c.github.io/webcomponents/spec/shadow/#the-content-element
 
 interface HTMLContentElement : HTMLElement {
     [Reflect] attribute DOMString select;
diff --git a/core/html/HTMLDListElement.idl b/core/html/HTMLDListElement.idl
index 9813b53..23813a5 100644
--- a/core/html/HTMLDListElement.idl
+++ b/core/html/HTMLDListElement.idl
@@ -22,5 +22,5 @@
 interface HTMLDListElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLDListElement-partial
-    [Reflect] attribute boolean compact;
+    [CEReactions, Reflect] attribute boolean compact;
 };
diff --git a/core/html/HTMLDataElement.idl b/core/html/HTMLDataElement.idl
new file mode 100644
index 0000000..6f65099
--- /dev/null
+++ b/core/html/HTMLDataElement.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/text-level-semantics.html#the-data-element
+
+[HTMLConstructor]
+interface HTMLDataElement : HTMLElement {
+    [CEReactions, Reflect] attribute DOMString value;
+};
\ No newline at end of file
diff --git a/core/html/HTMLDetailsElement.idl b/core/html/HTMLDetailsElement.idl
index e3711bc..10e96f4 100644
--- a/core/html/HTMLDetailsElement.idl
+++ b/core/html/HTMLDetailsElement.idl
@@ -20,5 +20,5 @@
 // https://html.spec.whatwg.org/#the-details-element
 
 interface HTMLDetailsElement : HTMLElement {
-    [Reflect] attribute boolean open;
+    [CEReactions, Reflect] attribute boolean open;
 };
diff --git a/core/html/HTMLDialogElement.idl b/core/html/HTMLDialogElement.idl
index b6d8711..c26d9f8 100644
--- a/core/html/HTMLDialogElement.idl
+++ b/core/html/HTMLDialogElement.idl
@@ -26,11 +26,9 @@
 // https://html.spec.whatwg.org/#the-dialog-element
 
 interface HTMLDialogElement : HTMLElement {
-    [Reflect] attribute boolean open;
+    [CEReactions, Reflect] attribute boolean open;
     attribute DOMString returnValue;
-    // FIXME: show() and showModal() should take an anchor argument.
-    void show();
-    [RaisesException] void showModal();
-    // FIXME: The returnValue argument should have no default value.
-    [RaisesException] void close(optional DOMString returnValue = null);
+    [CEReactions] void show();
+    [CEReactions, RaisesException] void showModal();
+    [CEReactions] void close(optional DOMString returnValue);
 };
diff --git a/core/html/HTMLDirectoryElement.idl b/core/html/HTMLDirectoryElement.idl
index ea9d1a5..64e76d5 100644
--- a/core/html/HTMLDirectoryElement.idl
+++ b/core/html/HTMLDirectoryElement.idl
@@ -20,5 +20,5 @@
 // https://html.spec.whatwg.org/#htmldirectoryelement
 
 interface HTMLDirectoryElement : HTMLElement {
-    [Reflect] attribute boolean compact;
+    [CEReactions, Reflect] attribute boolean compact;
 };
diff --git a/core/html/HTMLDivElement.idl b/core/html/HTMLDivElement.idl
index 9ee666d..2eb1215 100644
--- a/core/html/HTMLDivElement.idl
+++ b/core/html/HTMLDivElement.idl
@@ -18,9 +18,9 @@
  */
 
 // https://html.spec.whatwg.org/#the-div-element
-
+[HTMLConstructor]
 interface HTMLDivElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLDivElement-partial
-    [Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString align;
 };
diff --git a/core/html/HTMLDocument.idl b/core/html/HTMLDocument.idl
index 2b3f5b9..7a49a53 100644
--- a/core/html/HTMLDocument.idl
+++ b/core/html/HTMLDocument.idl
@@ -26,16 +26,16 @@
 interface HTMLDocument : Document {
     // https://html.spec.whatwg.org/#Document-partial
 
-    [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;
+    [CEReactions, CustomElementCallbacks] attribute [TreatNullAs=EmptyString] DOMString fgColor;
+    [CEReactions, CustomElementCallbacks] attribute [TreatNullAs=EmptyString] DOMString linkColor;
+    [CEReactions, CustomElementCallbacks] attribute [TreatNullAs=EmptyString] DOMString vlinkColor;
+    [CEReactions, CustomElementCallbacks] attribute [TreatNullAs=EmptyString] DOMString alinkColor;
+    [CEReactions, CustomElementCallbacks] attribute [TreatNullAs=EmptyString] DOMString bgColor;
 
     [MeasureAs=DocumentClear] void clear();
     [MeasureAs=DocumentCaptureEvents] void captureEvents();
     [MeasureAs=DocumentReleaseEvents] void releaseEvents();
 
     // FIXME: all should not be [Replaceable].
-    [Replaceable, ImplementedAs=allForBinding] readonly attribute HTMLAllCollection all;
+    [Replaceable, MeasureAs=DocumentAll] readonly attribute HTMLAllCollection all;
 };
diff --git a/core/html/HTMLElement.idl b/core/html/HTMLElement.idl
index d39a27a..de97f7e 100644
--- a/core/html/HTMLElement.idl
+++ b/core/html/HTMLElement.idl
@@ -19,47 +19,48 @@
  */
 
 // https://html.spec.whatwg.org/#htmlelement
-
+[HTMLConstructor]
 interface HTMLElement : Element {
     // metadata attributes
-    [Reflect] attribute DOMString title;
-    [Reflect] attribute DOMString lang;
-    attribute boolean translate;
-    attribute DOMString dir;
+    [CEReactions, Reflect] attribute DOMString title;
+    [CEReactions, Reflect] attribute DOMString lang;
+    [CEReactions] attribute boolean translate;
+    [CEReactions] attribute DOMString dir;
     [SameObject, PerWorldBindings] readonly attribute DOMStringMap dataset;
 
     // user interaction
-    [Reflect] attribute boolean hidden;
-    [ImplementedAs=clickForBindings] void click();
-    [CustomElementCallbacks] attribute long tabIndex;
+    [CEReactions, Reflect] attribute boolean hidden;
+    [RuntimeCallStatsCounter=HTMLElementClick] void click();
+    [CEReactions, CustomElementCallbacks] attribute long tabIndex;
+    [CEReactions, RuntimeEnabled=InertAttribute, Reflect] attribute boolean inert;
     void focus();
     void blur();
-    [Reflect] attribute DOMString accessKey;
-    [CustomElementCallbacks] attribute boolean draggable;
-    [RuntimeEnabled=ContextMenu] attribute HTMLMenuElement? contextMenu;
-    attribute boolean spellcheck;
+    [CEReactions, Reflect] attribute DOMString accessKey;
+    [CEReactions, CustomElementCallbacks] attribute boolean draggable;
+    [CEReactions] attribute boolean spellcheck;
 
     // HTMLElement implements ElementContentEditable
     // https://html.spec.whatwg.org/#contenteditable
-    [CustomElementCallbacks, RaisesException=Setter] attribute DOMString contentEditable;
-    readonly attribute boolean isContentEditable;
+    [CEReactions, CustomElementCallbacks, RaisesException=Setter] attribute DOMString contentEditable;
+    [ImplementedAs=isContentEditableForBinding] readonly attribute boolean isContentEditable;
+    [RuntimeEnabled=InputModeAttribute, CEReactions, Reflect] attribute DOMString inputMode;
 
     // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-htmlelement-interface
-    [PerWorldBindings] readonly attribute Element? offsetParent;
-    readonly attribute long offsetTop;
-    readonly attribute long offsetLeft;
-    readonly attribute long offsetWidth;
-    readonly attribute long offsetHeight;
+    // https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface
+    [PerWorldBindings, ImplementedAs=unclosedOffsetParent] readonly attribute Element? offsetParent;
+    [ImplementedAs=offsetTopForBinding] readonly attribute long offsetTop;
+    [ImplementedAs=offsetLeftForBinding] readonly attribute long offsetLeft;
+    [ImplementedAs=offsetWidthForBinding] readonly attribute long offsetWidth;
+    [ImplementedAs=offsetHeightForBinding] readonly attribute long offsetHeight;
 
     // CSS Object Model (CSSOM)
-    // http://dev.w3.org/csswg/cssom/#the-elementcssinlinestyle-interface
+    // https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface
     [SameObject, PerWorldBindings, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 
     // Non-standard APIs
-    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter, MeasureAs=HTMLElementInnerText] attribute DOMString innerText;
-    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter, MeasureAs=HTMLElementOuterText] attribute DOMString outerText;
-    [Reflect, TreatNullAs=NullString, MeasureAs=PrefixedHTMLElementDropzone] attribute DOMString webkitdropzone;
+    [CEReactions, CustomElementCallbacks, RaisesException=Setter, MeasureAs=HTMLElementInnerText] attribute [TreatNullAs=NullString] DOMString innerText;
+    [CEReactions, CustomElementCallbacks, RaisesException=Setter, MeasureAs=HTMLElementOuterText] attribute [TreatNullAs=NullString] DOMString outerText;
 };
 
 HTMLElement implements GlobalEventHandlers;
+HTMLElement implements NoncedElement;
diff --git a/core/html/HTMLEmbedElement.idl b/core/html/HTMLEmbedElement.idl
index 11f7722..f9df7f0 100644
--- a/core/html/HTMLEmbedElement.idl
+++ b/core/html/HTMLEmbedElement.idl
@@ -22,26 +22,21 @@
 
 // TODO(yukishiino): HTMLEmbedElement should not have [OverrideBuiltins].
 [
-// FIXMEDART: TODO(terry): Needed to remove Custom=LegacyCallAsFunction from Embed and Object
-//                         otherwise an anonymous function is returned.
-//    Custom=LegacyCallAsFunction,
     OverrideBuiltins,
+    ActiveScriptWrappable
 ] interface HTMLEmbedElement : HTMLElement {
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString type;
-    [Reflect] attribute DOMString width;
-    [Reflect] attribute DOMString height;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString height;
     [CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
-    // FIXME: The spec has a legacycaller any (any... arguments); crbug.com/465009
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLEmbedElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString name;
 
     // FIXME: None of these getters and setters are 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/HTMLFieldSetElement.idl b/core/html/HTMLFieldSetElement.idl
deleted file mode 100644
index fb86dc8..0000000
--- a/core/html/HTMLFieldSetElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-// https://html.spec.whatwg.org/#the-fieldset-element
-
-interface HTMLFieldSetElement : HTMLElement {
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [Reflect] attribute DOMString name;
-
-    readonly attribute DOMString type;
-
-    [Measure] readonly attribute HTMLFormControlsCollection elements;
-
-    readonly attribute boolean willValidate;
-    [SameObject] readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-};
diff --git a/core/html/HTMLFontElement.idl b/core/html/HTMLFontElement.idl
index c6ec865..d006f90 100644
--- a/core/html/HTMLFontElement.idl
+++ b/core/html/HTMLFontElement.idl
@@ -20,7 +20,7 @@
 // https://html.spec.whatwg.org/#htmlfontelement
 
 interface HTMLFontElement : HTMLElement {
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString color;
-    [Reflect] attribute DOMString face;
-    [Reflect] attribute DOMString size;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString color;
+    [CEReactions, Reflect] attribute DOMString face;
+    [CEReactions, Reflect] attribute DOMString size;
 };
diff --git a/core/html/HTMLFormControlsCollection.idl b/core/html/HTMLFormControlsCollection.idl
deleted file mode 100644
index 90ca091..0000000
--- a/core/html/HTMLFormControlsCollection.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2012 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2014 Samsung Electronics. All rights reserved.
- *
- * 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-htmlformcontrolscollection-interface
-
-[
-    DependentLifetime,
-    SetWrapperReferenceFrom=ownerNode,
-] interface HTMLFormControlsCollection : HTMLCollection {
-    // inherits length and item()
-    // FIXME: namedItem() should be a legacycaller. crbug.com/465009
-    [ImplementedAs=namedGetter] getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
-    // FIXME: This getter is not in the spec.
-    [ImplementedAs=item] getter Node (unsigned long index);
-};
diff --git a/core/html/HTMLFormElement.idl b/core/html/HTMLFormElement.idl
deleted file mode 100644
index d9e9d4c..0000000
--- a/core/html/HTMLFormElement.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2006, 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-form-element
-
-[
-    OverrideBuiltins,
-] interface HTMLFormElement : HTMLElement {
-    [Reflect=accept_charset] attribute DOMString acceptCharset;
-    [Reflect, URL] attribute DOMString action;
-    [Reflect, ReflectOnly=("on","off"), ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete;
-    [CustomElementCallbacks] attribute DOMString enctype;
-    [CustomElementCallbacks] attribute DOMString encoding;
-    [CustomElementCallbacks] attribute DOMString method;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute boolean noValidate;
-    [Reflect] attribute DOMString target;
-
-    readonly attribute HTMLFormControlsCollection elements;
-    readonly attribute long length;
-    [ImplementedAs=item] getter Element (unsigned long index);
-    // FIXME: This getter should not have [NotEnumerable].
-    [NotEnumerable] getter (RadioNodeList or Element) (DOMString name);
-
-    [ImplementedAs=submitFromJavaScript] void submit();
-    [CustomElementCallbacks] void reset();
-    boolean checkValidity();
-    boolean reportValidity();
-
-    [RuntimeEnabled=RequestAutocomplete, MeasureAs=RequestAutocomplete] void requestAutocomplete();
-};
diff --git a/core/html/HTMLFrameElement.idl b/core/html/HTMLFrameElement.idl
index 54e2901..a20103f 100644
--- a/core/html/HTMLFrameElement.idl
+++ b/core/html/HTMLFrameElement.idl
@@ -21,15 +21,15 @@
 // https://html.spec.whatwg.org/#htmlframeelement
 
 interface HTMLFrameElement : HTMLElement {
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString scrolling;
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString frameBorder;
-    [Reflect, URL] attribute DOMString longDesc;
-    [Reflect] attribute boolean noResize;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString scrolling;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString frameBorder;
+    [CEReactions, Reflect, URL] attribute DOMString longDesc;
+    [CEReactions, Reflect] attribute boolean noResize;
     [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
     readonly attribute Window? contentWindow;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
 };
diff --git a/core/html/HTMLFrameSetElement.idl b/core/html/HTMLFrameSetElement.idl
index 21caf79..aa00c48 100644
--- a/core/html/HTMLFrameSetElement.idl
+++ b/core/html/HTMLFrameSetElement.idl
@@ -22,12 +22,12 @@
 
 // FIXME: HTMLFrameSetElement should not have [OverrideBuiltins].
 [
-    OverrideBuiltins,
+    OverrideBuiltins
 ] interface HTMLFrameSetElement : HTMLElement {
-    [Reflect] attribute DOMString cols;
-    [Reflect] attribute DOMString rows;
+    [CEReactions, Reflect] attribute DOMString cols;
+    [CEReactions, Reflect] attribute DOMString rows;
 
-    // TODO(philipj): These event handler attributes should be inherited from
+    // TODO(foolip): These event handler attributes should be inherited from
     // HTMLElement (which implements GlobalEventHandlers), but have different
     // behavior. See https://www.w3.org/Bugs/Public/show_bug.cgi?id=28166
     attribute EventHandler onblur;
diff --git a/core/html/HTMLHRElement.idl b/core/html/HTMLHRElement.idl
index 1023126..bed39c7 100644
--- a/core/html/HTMLHRElement.idl
+++ b/core/html/HTMLHRElement.idl
@@ -17,15 +17,14 @@
  * Boston, MA 02110-1301, USA.
  */
 
-
 // https://html.spec.whatwg.org/#the-hr-element
 
 interface HTMLHRElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLHRElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString color;
-    [Reflect] attribute boolean noShade;
-    [Reflect] attribute DOMString size;
-    [Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString color;
+    [CEReactions, Reflect] attribute boolean noShade;
+    [CEReactions, Reflect] attribute DOMString size;
+    [CEReactions, Reflect] attribute DOMString width;
 };
diff --git a/core/html/HTMLHeadingElement.idl b/core/html/HTMLHeadingElement.idl
index 4ce52c9..db2088e 100644
--- a/core/html/HTMLHeadingElement.idl
+++ b/core/html/HTMLHeadingElement.idl
@@ -22,5 +22,5 @@
 interface HTMLHeadingElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLHeadingElement-partial
-    [Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString align;
 };
diff --git a/core/html/HTMLHtmlElement.idl b/core/html/HTMLHtmlElement.idl
index c302e46..43de481 100644
--- a/core/html/HTMLHtmlElement.idl
+++ b/core/html/HTMLHtmlElement.idl
@@ -22,5 +22,5 @@
 interface HTMLHtmlElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLHtmlElement-partial
-    [Reflect] attribute DOMString version;
+    [CEReactions, Reflect] attribute DOMString version;
 };
diff --git a/core/html/HTMLHyperlinkElementUtils.idl b/core/html/HTMLHyperlinkElementUtils.idl
new file mode 100644
index 0000000..ac6f340
--- /dev/null
+++ b/core/html/HTMLHyperlinkElementUtils.idl
@@ -0,0 +1,22 @@
+// 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://html.spec.whatwg.org/#htmlhyperlinkelementutils
+
+[
+    NoInterfaceObject // Always used on target of 'implements'
+] interface HTMLHyperlinkElementUtils {
+    [CEReactions] stringifier attribute USVString href;
+    readonly attribute USVString origin;
+
+    [CEReactions] attribute USVString protocol;
+    [CEReactions] attribute USVString username;
+    [CEReactions] attribute USVString password;
+    [CEReactions] attribute USVString host;
+    [CEReactions] attribute USVString hostname;
+    [CEReactions] attribute USVString port;
+    [CEReactions] attribute USVString pathname;
+    [CEReactions] attribute USVString search;
+    [CEReactions] attribute USVString hash;
+};
diff --git a/core/html/HTMLIFrameElement.idl b/core/html/HTMLIFrameElement.idl
index 1c98d81..fd0ef48 100644
--- a/core/html/HTMLIFrameElement.idl
+++ b/core/html/HTMLIFrameElement.idl
@@ -21,27 +21,32 @@
 // https://html.spec.whatwg.org/#the-iframe-element
 
 interface HTMLIFrameElement : HTMLElement {
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString srcdoc;
-    [Reflect] attribute DOMString name;
-    [PutForwards=value] readonly attribute DOMTokenList sandbox;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString srcdoc;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, 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;
+    [CEReactions, Reflect] attribute boolean allowFullscreen;
+    [CEReactions, Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString height;
+
     [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
     readonly attribute Window? contentWindow;
     [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;
+    [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy;
+    // https://w3c.github.io/webappsec-csp/embedded/#dom-htmliframeelement-csp
+    [RuntimeEnabled=EmbedderCSPEnforcement, CEReactions, Reflect] attribute DOMString csp;
 
-
+    // Feature Policy allow attribute
+    // https://wicg.github.io/feature-policy/
+    [RuntimeEnabled=FeaturePolicy, CEReactions, Reflect] attribute DOMString allow;
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLIFrameElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString scrolling;
-    [Reflect] attribute DOMString frameBorder;
-    [Reflect, URL] attribute DOMString longDesc;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString scrolling;
+    [CEReactions, Reflect] attribute DOMString frameBorder;
+    [CEReactions, Reflect, URL] attribute DOMString longDesc;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
 };
diff --git a/core/html/HTMLImageElement.idl b/core/html/HTMLImageElement.idl
index abec4c2..d0c7448 100644
--- a/core/html/HTMLImageElement.idl
+++ b/core/html/HTMLImageElement.idl
@@ -20,39 +20,42 @@
 
 // https://html.spec.whatwg.org/#the-img-element
 
-// TODO(philipj): All long types in this interfaces should be unsigned long.
 [
-    NamedConstructor=Image(optional long width, optional long height),
-    ConstructorCallWith=Document
+    ActiveScriptWrappable,
+    ConstructorCallWith=Document,
+    NamedConstructor=Image(optional unsigned long width, optional unsigned long height)
 ] interface HTMLImageElement : HTMLElement {
-    [Reflect] attribute DOMString alt;
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString srcset;
-    [Reflect] attribute DOMString sizes;
-    [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
-    [Reflect] attribute DOMString useMap;
-    [Reflect] attribute boolean isMap;
-    attribute long width;
-    attribute long height;
-    readonly attribute long naturalWidth;
-    readonly attribute long naturalHeight;
+    [CEReactions, Reflect] attribute DOMString alt;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString srcset;
+    [CEReactions, Reflect] attribute DOMString sizes;
+    [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
+    [CEReactions, Reflect] attribute DOMString useMap;
+    [CEReactions, Reflect] attribute boolean isMap;
+    [CEReactions] attribute unsigned long width;
+    [CEReactions] attribute unsigned long height;
+    readonly attribute unsigned long naturalWidth;
+    readonly attribute unsigned 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;
+    [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy;
+    [RuntimeEnabled=ImageAsyncAttribute, CEReactions, Reflect] attribute DOMString async;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLImageElement-partial
-    [Reflect] attribute DOMString name;
-    [Reflect, URL] attribute DOMString lowsrc;
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute long hspace;
-    [Reflect] attribute long vspace;
-    [Reflect, URL] attribute DOMString longDesc;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect, URL] attribute DOMString lowsrc;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute unsigned long hspace;
+    [CEReactions, Reflect] attribute unsigned long vspace;
+    [CEReactions, Reflect, URL] attribute DOMString longDesc;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString border;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString border;
 
     // CSSOM View Module
-    // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-htmlimageelement-interface
+    // https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlimageelement-interface
     [MeasureAs=HTMLImageElementX] readonly attribute long x;
     [MeasureAs=HTMLImageElementY] readonly attribute long y;
+
+    [RuntimeEnabled=JSImageDecode, CallWith=ScriptState, RaisesException] Promise decode();
 };
diff --git a/core/html/HTMLInputElement.idl b/core/html/HTMLInputElement.idl
deleted file mode 100644
index b82f096..0000000
--- a/core/html/HTMLInputElement.idl
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2012 Samsung Electronics. All rights reserved.
- *
- * 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-input-element
-
-enum SelectionMode { "select", "start", "end", "preserve" };
-
-interface HTMLInputElement : HTMLElement {
-    [Reflect] attribute DOMString accept;
-    [Reflect] attribute DOMString alt;
-    [Reflect] attribute DOMString autocomplete;
-    [Reflect] attribute boolean autofocus;
-    [Reflect=checked] attribute boolean defaultChecked;
-    attribute boolean checked;
-    [Reflect] attribute DOMString dirName;
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    // The 'files' attribute is intentionally not readonly.
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22682
-    attribute FileList? files;
-    attribute DOMString formAction;
-    [CustomElementCallbacks] attribute DOMString formEnctype;
-    [CustomElementCallbacks] attribute DOMString formMethod;
-    [Reflect] attribute boolean formNoValidate;
-    [Reflect] attribute DOMString formTarget;
-    [CustomElementCallbacks] attribute unsigned long height;
-    attribute boolean indeterminate;
-    [RuntimeEnabled=InputModeAttribute, Reflect] attribute DOMString inputMode;
-    readonly attribute HTMLElement? list;
-    [Reflect] attribute DOMString max;
-    [RaisesException=Setter, CustomElementCallbacks] attribute long maxLength;
-    [Reflect] attribute DOMString min;
-    [RaisesException=Setter, CustomElementCallbacks] attribute long minLength;
-    [Reflect] attribute boolean multiple;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString pattern;
-    [Reflect] attribute DOMString placeholder;
-    [Reflect] attribute boolean readOnly;
-    [Reflect] attribute boolean required;
-    [RaisesException=Setter, CustomElementCallbacks] attribute unsigned long size;
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString step;
-    [CustomElementCallbacks] attribute DOMString type;
-    [Reflect=value, CustomElementCallbacks] attribute DOMString defaultValue;
-    [TreatNullAs=EmptyString, RaisesException=Setter, CustomElementCallbacks] attribute DOMString value;
-    [RaisesException=Setter, CustomElementCallbacks] attribute Date? valueAsDate;
-    [RaisesException=Setter, CustomElementCallbacks] attribute unrestricted double valueAsNumber;
-    // Note: The spec has valueLow and valueHigh for two-valued range controls.
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=13154
-    [CustomElementCallbacks] attribute unsigned long width;
-
-    [RaisesException, CustomElementCallbacks] void stepUp(optional long n = 1);
-    [RaisesException, CustomElementCallbacks] void stepDown(optional long n = 1);
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-
-    void select();
-    // FIXME: selectionStart and selectionEnd should be unsigned long.
-    [RaisesException, ImplementedAs=selectionStartForBinding] attribute long selectionStart;
-    [RaisesException, ImplementedAs=selectionEndForBinding] attribute long selectionEnd;
-    [RaisesException, ImplementedAs=selectionDirectionForBinding] attribute DOMString selectionDirection;
-    [RaisesException] void setRangeText(DOMString replacement);
-    [RaisesException] void setRangeText(DOMString replacement,
-                                        unsigned long start,
-                                        unsigned long end,
-                                        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,
-                           [Default=Undefined] optional long end,
-                           optional DOMString direction);
-
-    // obsolete members
-    // https://html.spec.whatwg.org/#HTMLInputElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString useMap;
-
-    // HTML autocapitalize proposal
-    // https://github.com/mounirlamouri/html-autocapitalize/blob/master/proposal.md
-    [Measure] attribute DOMString autocapitalize;
-
-    // HTML Media Capture
-    // http://www.w3.org/TR/html-media-capture/
-    [RuntimeEnabled=MediaCapture, Reflect] attribute boolean capture;
-
-    // Non-standard APIs
-    [Reflect, MeasureAs=PrefixedDirectoryAttribute] attribute boolean webkitdirectory;
-    [Reflect, MeasureAs=IncrementalAttribute] attribute boolean incremental;
-};
diff --git a/core/html/HTMLKeygenElement.idl b/core/html/HTMLKeygenElement.idl
deleted file mode 100644
index 011687d..0000000
--- a/core/html/HTMLKeygenElement.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2011 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/#the-keygen-element
-
-interface HTMLKeygenElement : HTMLElement {
-    [Reflect] attribute boolean autofocus;
-    [Reflect] attribute DOMString challenge;
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [Reflect, ReflectOnly="rsa", ReflectMissing="rsa"] attribute DOMString keytype;
-    [Reflect] attribute DOMString name;
-
-    readonly attribute DOMString type;
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-};
diff --git a/core/html/HTMLLIElement.idl b/core/html/HTMLLIElement.idl
index b80c489..b9ed2de 100644
--- a/core/html/HTMLLIElement.idl
+++ b/core/html/HTMLLIElement.idl
@@ -20,9 +20,9 @@
 // https://html.spec.whatwg.org/#the-li-element
 
 interface HTMLLIElement : HTMLElement {
-    [Reflect] attribute long value;
+    [CEReactions, Reflect] attribute long value;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLLIElement-partial
-    [Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute DOMString type;
 };
diff --git a/core/html/HTMLLabelElement.idl b/core/html/HTMLLabelElement.idl
deleted file mode 100644
index 4db6d18..0000000
--- a/core/html/HTMLLabelElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 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-label-element
-
-interface HTMLLabelElement : HTMLElement {
-    [ImplementedAs=formForBinding, MeasureAs=HTMLLabelElementFormIDLAttribute] readonly attribute HTMLFormElement? form;
-    [Reflect=for] attribute DOMString htmlFor;
-    readonly attribute HTMLElement? control;
-};
diff --git a/core/html/HTMLLegendElement.idl b/core/html/HTMLLegendElement.idl
deleted file mode 100644
index 452bcfe..0000000
--- a/core/html/HTMLLegendElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 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-legend-element
-
-interface HTMLLegendElement : HTMLElement {
-    readonly attribute HTMLFormElement? form;
-
-    // obsolete members
-    // https://html.spec.whatwg.org/#HTMLLegendElement-partial
-    [Reflect] attribute DOMString align;
-};
diff --git a/core/html/HTMLLinkElement.idl b/core/html/HTMLLinkElement.idl
index 1d19a86..54d1948 100644
--- a/core/html/HTMLLinkElement.idl
+++ b/core/html/HTMLLinkElement.idl
@@ -26,23 +26,24 @@
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14703
     [Reflect, Measure] attribute boolean disabled;
     [Reflect, URL] attribute DOMString href;
-    [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
-    [Reflect] attribute DOMString rel;
-    [RuntimeEnabled=LinkPreload, PutForwards=value] readonly attribute DOMTokenList relList;
-    [Reflect] attribute DOMString media;
-    [Reflect] attribute DOMString hreflang;
-    [Reflect] attribute DOMString type;
-    [Reflect, RuntimeEnabled=LinkPreload] attribute DOMString as;
-    [PutForwards=value] readonly attribute DOMTokenList sizes;
+    [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
+    [CEReactions, Reflect] attribute DOMString rel;
+    [CEReactions, PutForwards=value] readonly attribute DOMTokenList relList;
+    [CEReactions, Reflect] attribute DOMString media;
+    [CEReactions, Reflect] attribute DOMString hreflang;
+    [CEReactions, Reflect] attribute DOMString type;
+    [Reflect, ReflectOnly=("script","style","image","video", "audio", "track", "font", "fetch")] attribute DOMString as;
+    [CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy;
+    [CEReactions, PutForwards=value] readonly attribute DOMTokenList sizes;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLLinkElement-partial
-    [Reflect] attribute DOMString charset;
-    [Reflect] attribute DOMString rev;
-    [Reflect] attribute DOMString target;
+    [CEReactions, Reflect] attribute DOMString charset;
+    [CEReactions, Reflect] attribute DOMString rev;
+    [CEReactions, Reflect] attribute DOMString target;
 
     // HTMLLinkElement implements LinkStyle
-    // http://dev.w3.org/csswg/cssom/#the-linkstyle-interface
+    // https://drafts.csswg.org/cssom/#the-linkstyle-interface
     readonly attribute StyleSheet? sheet;
 
     // HTML Imports
@@ -50,6 +51,10 @@
     readonly attribute Document? import;
 
     // Subresource Integrity
-    // http://w3c.github.io/webappsec/specs/subresourceintegrity/#htmllinkelement-1
+    // https://w3c.github.io/webappsec-subresource-integrity/#HTMLLinkElement
     [Reflect] attribute DOMString integrity;
+
+    // Service workers
+    // https://w3c.github.io/ServiceWorker/#link-element-interface-extensions
+    [Reflect, OriginTrialEnabled=LinkServiceWorker] attribute USVString scope;
 };
diff --git a/core/html/HTMLMapElement.idl b/core/html/HTMLMapElement.idl
index 21b7b20..5a6e5f1 100644
--- a/core/html/HTMLMapElement.idl
+++ b/core/html/HTMLMapElement.idl
@@ -21,6 +21,6 @@
 // https://html.spec.whatwg.org/#the-map-element
 
 interface HTMLMapElement : HTMLElement {
-    [Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString name;
     readonly attribute HTMLCollection areas;
 };
diff --git a/core/html/HTMLMarqueeElement.idl b/core/html/HTMLMarqueeElement.idl
index 4103315..4260c5b 100644
--- a/core/html/HTMLMarqueeElement.idl
+++ b/core/html/HTMLMarqueeElement.idl
@@ -20,18 +20,17 @@
 // https://html.spec.whatwg.org/#htmlmarqueeelement
 
 interface HTMLMarqueeElement : HTMLElement {
-    [ImplementedInPrivateScript, Reflect] attribute DOMString behavior;
-    [ImplementedInPrivateScript, Reflect] attribute DOMString bgColor;
-    [ImplementedInPrivateScript, Reflect] attribute DOMString direction;
-    [ImplementedInPrivateScript, Reflect] attribute DOMString height;
-    [ImplementedInPrivateScript, Reflect] attribute unsigned long hspace;
-    [ImplementedInPrivateScript] attribute long loop;
-    // FIXME: scrollAmount and scrollDelay should be unsigned long.
-    [ImplementedInPrivateScript] attribute long scrollAmount;
-    [ImplementedInPrivateScript] attribute long scrollDelay;
-    [ImplementedInPrivateScript, Reflect] attribute boolean trueSpeed;
-    [ImplementedInPrivateScript, Reflect] attribute unsigned long vspace;
-    [ImplementedInPrivateScript, Reflect] attribute DOMString width;
+    [Reflect] attribute DOMString behavior;
+    [Reflect] attribute DOMString bgColor;
+    [Reflect] attribute DOMString direction;
+    [Reflect] attribute DOMString height;
+    [Reflect] attribute unsigned long hspace;
+    [RaisesException=Setter] attribute long loop;
+    attribute unsigned long scrollAmount;
+    attribute unsigned long scrollDelay;
+    [Reflect] attribute boolean trueSpeed;
+    [Reflect] attribute unsigned long vspace;
+    [Reflect] attribute DOMString width;
 
     // FIXME: Implement the following event handler attributes
     // https://bugs.webkit.org/show_bug.cgi?id=49788
@@ -39,12 +38,6 @@
     // attribute EventHandler onfinish;
     // attribute EventHandler onstart;
 
-    [ImplementedInPrivateScript] void start();
-    [ImplementedInPrivateScript] void stop();
-
-    // Private script APIs
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void createdCallback();
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void attachedCallback();
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void detachedCallback();
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void attributeChangedCallback(DOMString name, DOMString oldValue, DOMString newValue);
+    void start();
+    void stop();
 };
diff --git a/core/html/HTMLMediaElement.idl b/core/html/HTMLMediaElement.idl
index 80899b4..071e8b2 100644
--- a/core/html/HTMLMediaElement.idl
+++ b/core/html/HTMLMediaElement.idl
@@ -27,24 +27,24 @@
 
 enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
 [
-    DependentLifetime,
-    RuntimeEnabled=Media,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface HTMLMediaElement : HTMLElement {
 
     // error state
     readonly attribute MediaError? error;
 
     // network state
-    [Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect, URL] attribute DOMString src;
     // FIXME: attribute MediaProvider? srcObject; crbug.com/387740
     readonly attribute DOMString currentSrc;
-    [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
+    [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
     const unsigned short NETWORK_EMPTY = 0;
     const unsigned short NETWORK_IDLE = 1;
     const unsigned short NETWORK_LOADING = 2;
     const unsigned short NETWORK_NO_SOURCE = 3;
-    readonly attribute unsigned short networkState;
-    attribute DOMString preload;
+    [ImplementedAs=getNetworkState] readonly attribute unsigned short networkState;
+    [CEReactions] attribute DOMString preload;
     readonly attribute TimeRanges buffered;
     void load();
     CanPlayTypeResult canPlayType(DOMString type);
@@ -69,16 +69,18 @@
     readonly attribute TimeRanges played;
     readonly attribute TimeRanges seekable;
     readonly attribute boolean ended;
-    [Reflect] attribute boolean autoplay;
-    [Reflect] attribute boolean loop;
+    [CEReactions, Reflect] attribute boolean autoplay;
+    [CEReactions, Reflect] attribute boolean loop;
     [CallWith=ScriptState, ImplementedAs=playForBindings] Promise<void> play();
     void pause();
 
     // controls
-    [Reflect] attribute boolean controls;
+    [CEReactions, Reflect] attribute boolean controls;
+    // Spec: https://wicg.github.io/controls-list/html-output/multipage/embedded-content.html#attr-media-controlslist
+    [SameObject, PutForwards=value] readonly attribute DOMTokenList controlsList;
     [RaisesException=Setter] attribute double volume;
     attribute boolean muted;
-    [Reflect=muted] attribute boolean defaultMuted;
+    [CEReactions, Reflect=muted] attribute boolean defaultMuted;
 
     // tracks
     [SameObject, RuntimeEnabled=AudioVideoTracks] readonly attribute AudioTrackList audioTracks;
diff --git a/core/html/HTMLMenuElement.idl b/core/html/HTMLMenuElement.idl
index 9d54c09..e7913e2 100644
--- a/core/html/HTMLMenuElement.idl
+++ b/core/html/HTMLMenuElement.idl
@@ -20,10 +20,7 @@
 // https://html.spec.whatwg.org/#the-menu-element
 
 interface HTMLMenuElement : HTMLElement {
-    [RuntimeEnabled=ContextMenu, Reflect] attribute DOMString type;
-    [RuntimeEnabled=ContextMenu, Reflect] attribute DOMString label;
-
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLMenuElement-partial
-    [Reflect] attribute boolean compact;
+    [CEReactions, Reflect] attribute boolean compact;
 };
diff --git a/core/html/HTMLMenuItemElement.idl b/core/html/HTMLMenuItemElement.idl
deleted file mode 100644
index 99cd880..0000000
--- a/core/html/HTMLMenuItemElement.idl
+++ /dev/null
@@ -1,18 +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://html.spec.whatwg.org/#the-menuitem-element
-
-[
-    RuntimeEnabled=ContextMenu,
-] interface HTMLMenuItemElement : HTMLElement {
-    [Reflect] attribute DOMString type;
-    [Reflect] attribute DOMString label;
-    [Reflect] attribute DOMString icon;
-    [Reflect] attribute boolean disabled;
-    [Reflect] attribute boolean checked;
-    [Reflect] attribute DOMString radiogroup;
-    [Reflect] attribute boolean default;
-    // FIXME: readonly attribute HTMLElement? command;
-};
diff --git a/core/html/HTMLMetaElement.idl b/core/html/HTMLMetaElement.idl
index c575e03..e07c48d 100644
--- a/core/html/HTMLMetaElement.idl
+++ b/core/html/HTMLMetaElement.idl
@@ -20,11 +20,11 @@
 // https://html.spec.whatwg.org/#the-meta-element
 
 interface HTMLMetaElement : HTMLElement {
-    [Reflect] attribute DOMString name;
-    [Reflect=http_equiv] attribute DOMString httpEquiv;
-    [Reflect] attribute DOMString content;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect=http_equiv] attribute DOMString httpEquiv;
+    [CEReactions, Reflect] attribute DOMString content;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLMetaElement-partial
-    [Reflect] attribute DOMString scheme;
+    [CEReactions, Reflect] attribute DOMString scheme;
 };
diff --git a/core/html/HTMLMeterElement.idl b/core/html/HTMLMeterElement.idl
index bb457ee..7e1e755 100644
--- a/core/html/HTMLMeterElement.idl
+++ b/core/html/HTMLMeterElement.idl
@@ -20,11 +20,11 @@
 // https://html.spec.whatwg.org/#the-meter-element
 
 interface HTMLMeterElement : HTMLElement {
-    attribute double value;
-    attribute double min;
-    attribute double max;
-    attribute double low;
-    attribute double high;
-    attribute double optimum;
+    [CEReactions] attribute double value;
+    [CEReactions] attribute double min;
+    [CEReactions] attribute double max;
+    [CEReactions] attribute double low;
+    [CEReactions] attribute double high;
+    [CEReactions] attribute double optimum;
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLModElement.idl b/core/html/HTMLModElement.idl
index cde233c..5ef7dea 100644
--- a/core/html/HTMLModElement.idl
+++ b/core/html/HTMLModElement.idl
@@ -21,6 +21,6 @@
 // https://html.spec.whatwg.org/#the-del-element
 
 interface HTMLModElement : HTMLElement {
-    [Reflect, URL] attribute DOMString cite;
-    [Reflect] attribute DOMString dateTime;
+    [CEReactions, Reflect, URL] attribute DOMString cite;
+    [CEReactions, Reflect] attribute DOMString dateTime;
 };
diff --git a/core/html/HTMLOListElement.idl b/core/html/HTMLOListElement.idl
index 52294de..de98778 100644
--- a/core/html/HTMLOListElement.idl
+++ b/core/html/HTMLOListElement.idl
@@ -20,11 +20,11 @@
 // https://html.spec.whatwg.org/#the-ol-element
 
 interface HTMLOListElement : HTMLElement {
-    [Reflect] attribute boolean reversed;
-    attribute long start;
-    [Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute boolean reversed;
+    [CEReactions] attribute long start;
+    [CEReactions, Reflect] attribute DOMString type;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLOListElement-partial
-    [Reflect] attribute boolean compact;
+    [CEReactions, Reflect] attribute boolean compact;
 };
diff --git a/core/html/HTMLObjectElement.idl b/core/html/HTMLObjectElement.idl
index d71a2cc..f160057 100644
--- a/core/html/HTMLObjectElement.idl
+++ b/core/html/HTMLObjectElement.idl
@@ -22,21 +22,20 @@
 
 // TODO(yukishiino): HTMLObjectElement should not have [OverrideBuiltins].
 [
-// FIXMEDART: TODO(terry): Needed to remove Custom=LegacyCallAsFunction from Embed and Object
-//                         otherwise an anonymous function is returned.
-//    Custom=LegacyCallAsFunction,
     OverrideBuiltins,
+    ActiveScriptWrappable
 ] interface HTMLObjectElement : HTMLElement {
-    [Reflect, URL] attribute DOMString data;
-    [Reflect] attribute DOMString type;
-    // TODO(philipj): attribute boolean typeMustMatch;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString useMap;
+    [CEReactions, Reflect, URL] attribute DOMString data;
+    [CEReactions, Reflect] attribute DOMString type;
+    // TODO(foolip): attribute boolean typeMustMatch;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString useMap;
     [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [Reflect] attribute DOMString width;
-    [Reflect] attribute DOMString height;
+    [CEReactions, Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString height;
     [CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
-    // TODO(philipj): readonly attribute WindowProxy? contentWindow;
+    // TODO(shanmuga.m): The spec uses the WindowProxy type for this attribute.
+    readonly attribute Window? contentWindow;
     [CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
 
     readonly attribute boolean willValidate;
@@ -46,26 +45,21 @@
     boolean reportValidity();
     void setCustomValidity(DOMString error);
 
-    // TODO(philipj): legacycaller any (any... arguments); crbug.com/465009
-
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLObjectElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString archive;
-    [Reflect] attribute DOMString code;
-    [Reflect] attribute boolean declare;
-    // TODO(philipj): hspace and vspace should be unsigned long.
-    [Reflect] attribute long hspace;
-    [Reflect] attribute DOMString standby;
-    [Reflect] attribute long vspace;
-    [Reflect, URL] attribute DOMString codeBase;
-    [Reflect] attribute DOMString codeType;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString archive;
+    [CEReactions, Reflect] attribute DOMString code;
+    [CEReactions, Reflect] attribute boolean declare;
+    [CEReactions, Reflect] attribute unsigned long hspace;
+    [CEReactions, Reflect] attribute DOMString standby;
+    [CEReactions, Reflect] attribute unsigned long vspace;
+    [CEReactions, Reflect, URL] attribute DOMString codeBase;
+    [CEReactions, Reflect] attribute DOMString codeType;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString border;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString border;
 
-    // TODO(philipj): These getters and setters are not in the spec.
-    [Custom, NotEnumerable] getter boolean (unsigned long index);
-    [Custom] setter boolean (unsigned long index, Node value);
+    // TODO(foolip): These getters and setters are not in the spec.
     [Custom, NotEnumerable] getter Node (DOMString name);
     [Custom] setter Node (DOMString name, Node value);
 };
diff --git a/core/html/HTMLOptGroupElement.idl b/core/html/HTMLOptGroupElement.idl
deleted file mode 100644
index 8820449..0000000
--- a/core/html/HTMLOptGroupElement.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * 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-optgroup-element
-
-interface HTMLOptGroupElement : HTMLElement {
-    [Reflect] attribute boolean disabled;
-    [Reflect] attribute DOMString label;
-};
diff --git a/core/html/HTMLOptionElement.idl b/core/html/HTMLOptionElement.idl
deleted file mode 100644
index 92a2323..0000000
--- a/core/html/HTMLOptionElement.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 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-option-element
-
-[
-    NamedConstructor=Option(optional DOMString data = null,
-                            optional DOMString value = null,
-                            optional boolean defaultSelected = false,
-                            optional boolean selected = false),
-    ConstructorCallWith=Document,
-    RaisesException=Constructor
-] interface HTMLOptionElement : HTMLElement {
-    [Reflect] attribute boolean disabled;
-    readonly attribute HTMLFormElement? form;
-    attribute DOMString label;
-    [Reflect=selected] attribute boolean defaultSelected;
-    [ImplementedAs=selectedForBinding] attribute boolean selected;
-    attribute DOMString value;
-
-    // TODO(philipj): The text setter should never throw.
-    [RaisesException=Setter] attribute DOMString text;
-    readonly attribute long index;
-};
diff --git a/core/html/HTMLOptionsCollection.idl b/core/html/HTMLOptionsCollection.idl
deleted file mode 100644
index 6907ffb..0000000
--- a/core/html/HTMLOptionsCollection.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2013, 2014 Samsung Electronics. All rights reserved.
- *
- * 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-htmloptionscollection-interface
-
-[
-    DependentLifetime,
-    SetWrapperReferenceFrom=ownerNode,
-] interface HTMLOptionsCollection : HTMLCollection {
-    // inherits item()
-    [RaisesException=Setter] attribute unsigned long length; // shadows inherited length
-    // FIXME: The spec has a legacycaller HTMLOptionElement? (DOMString name);
-    [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
-    // getters inherited from HTMLCollection always return an Element.
-    [ImplementedAs=item] getter Node (unsigned long index);
-    [ImplementedAs=namedGetter] getter (NodeList or Element)? namedItem(DOMString name);
-};
diff --git a/core/html/HTMLOutputElement.idl b/core/html/HTMLOutputElement.idl
deleted file mode 100644
index 8efb9a0..0000000
--- a/core/html/HTMLOutputElement.idl
+++ /dev/null
@@ -1,44 +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://html.spec.whatwg.org/#the-output-element
-
-interface HTMLOutputElement : HTMLElement {
-    [PutForwards=value] readonly attribute DOMTokenList htmlFor;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [Reflect] attribute DOMString name;
-
-    readonly attribute DOMString type;
-    attribute DOMString defaultValue;
-    attribute DOMString value;
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-};
diff --git a/core/html/HTMLParagraphElement.idl b/core/html/HTMLParagraphElement.idl
index 840231e..48ca805 100644
--- a/core/html/HTMLParagraphElement.idl
+++ b/core/html/HTMLParagraphElement.idl
@@ -18,9 +18,9 @@
  */
 
 // https://html.spec.whatwg.org/#the-p-element
-
+[HTMLConstructor]
 interface HTMLParagraphElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLParagraphElement-partial
-    [Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString align;
 };
diff --git a/core/html/HTMLParamElement.idl b/core/html/HTMLParamElement.idl
index cd4cb67..a711d71 100644
--- a/core/html/HTMLParamElement.idl
+++ b/core/html/HTMLParamElement.idl
@@ -20,11 +20,11 @@
 // https://html.spec.whatwg.org/#the-param-element
 
 interface HTMLParamElement : HTMLElement {
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString value;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString value;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLParamElement-partial
-    [Reflect] attribute DOMString type;
-    [Reflect] attribute DOMString valueType;
+    [CEReactions, Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute DOMString valueType;
 };
diff --git a/core/html/HTMLPreElement.idl b/core/html/HTMLPreElement.idl
index 2da036d..2141a2b 100644
--- a/core/html/HTMLPreElement.idl
+++ b/core/html/HTMLPreElement.idl
@@ -23,5 +23,5 @@
 interface HTMLPreElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLPreElement-partial
-    [Reflect] attribute long width;
+    [CEReactions, Reflect] attribute long width;
 };
diff --git a/core/html/HTMLProgressElement.idl b/core/html/HTMLProgressElement.idl
index ffe0d51..85da4e1 100644
--- a/core/html/HTMLProgressElement.idl
+++ b/core/html/HTMLProgressElement.idl
@@ -20,8 +20,8 @@
 // https://html.spec.whatwg.org/#the-progress-element
 
 interface HTMLProgressElement : HTMLElement {
-    attribute double value;
-    attribute double max;
+    [CEReactions] attribute double value;
+    [CEReactions] attribute double max;
     readonly attribute double position;
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLQuoteElement.idl b/core/html/HTMLQuoteElement.idl
index d559397..5e5d7bf 100644
--- a/core/html/HTMLQuoteElement.idl
+++ b/core/html/HTMLQuoteElement.idl
@@ -21,5 +21,5 @@
 // https://html.spec.whatwg.org/#the-q-element
 
 interface HTMLQuoteElement : HTMLElement {
-    [Reflect, URL] attribute DOMString cite;
+    [CEReactions, Reflect, URL] attribute DOMString cite;
 };
diff --git a/core/html/HTMLScriptElement.idl b/core/html/HTMLScriptElement.idl
index 064e63a..89f8ddb 100644
--- a/core/html/HTMLScriptElement.idl
+++ b/core/html/HTMLScriptElement.idl
@@ -20,26 +20,23 @@
 // https://html.spec.whatwg.org/#the-script-element
 
 interface HTMLScriptElement : HTMLElement {
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString type;
-    [Reflect] attribute DOMString charset;
-    attribute boolean async;
-    [Reflect] attribute boolean defer;
-    [Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
-    attribute DOMString text;
+    [CEReactions, Reflect, URL, RaisesException=Setter] attribute ScriptURLString src;
+    [CEReactions, Reflect] attribute DOMString type;
+    [CEReactions, Reflect, RuntimeEnabled=ModuleScripts] attribute boolean noModule;
+    [CEReactions, Reflect] attribute DOMString charset;
+    [CEReactions] attribute boolean async;
+    [CEReactions, Reflect] attribute boolean defer;
+    [CEReactions, Reflect, ReflectOnly=("anonymous","use-credentials"), ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString? crossOrigin;
+    [CEReactions] attribute DOMString text;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLScriptElement-partial
-    // TODO(philipj): The event and htmlFor attributes should return the empty
+    // TODO(foolip): The event and htmlFor attributes should return the empty
     // string on getting, and do nothing on setting.
-    [Reflect] attribute DOMString event;
-    [Reflect=for] attribute DOMString htmlFor;
-
-    // Content Security Policy
-    // https://w3c.github.io/webappsec/specs/content-security-policy/#script-src-the-nonce-attribute
-    [Reflect, RuntimeEnabled=ExperimentalContentSecurityPolicyFeatures] attribute DOMString nonce;
+    [CEReactions, Reflect] attribute DOMString event;
+    [CEReactions, Reflect=for] attribute DOMString htmlFor;
 
     // Subresource Integrity
-    // https://w3c.github.io/webappsec/specs/subresourceintegrity/#htmlscriptelement-1
+    // https://w3c.github.io/webappsec-subresource-integrity/#HTMLScriptElement
     [Reflect] attribute DOMString integrity;
 };
diff --git a/core/html/HTMLSelectElement.idl b/core/html/HTMLSelectElement.idl
deleted file mode 100644
index f631cc2..0000000
--- a/core/html/HTMLSelectElement.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2013 Samsung Electronics. All rights reserved.
- *
- * 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-select-element
-
-interface HTMLSelectElement : HTMLElement {
-    // TODO(philipj): attribute DOMString autocomplete;
-    [Reflect] attribute boolean autofocus;
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    attribute boolean multiple;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute boolean required;
-    attribute unsigned long size;
-
-    readonly attribute DOMString type;
-
-    readonly attribute HTMLOptionsCollection options;
-    // TODO(philipj): The length setter should never throw.
-    [RaisesException=Setter] attribute unsigned long length;
-    getter Element? item(unsigned long index);
-    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] setter void (unsigned long index, HTMLOptionElement? option);
-
-    readonly attribute HTMLCollection selectedOptions;
-    attribute long selectedIndex;
-    attribute DOMString value;
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-};
diff --git a/core/html/HTMLSlotElement.idl b/core/html/HTMLSlotElement.idl
index 3dc032a..ad93831 100644
--- a/core/html/HTMLSlotElement.idl
+++ b/core/html/HTMLSlotElement.idl
@@ -24,11 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/webcomponents/spec/shadow/#the-slot-element
+// https://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);
+interface HTMLSlotElement : HTMLElement {
+    [CEReactions, Reflect] attribute DOMString name;
+    [ImplementedAs=assignedNodesForBinding] sequence<Node> assignedNodes(optional AssignedNodesOptions options);
 };
diff --git a/core/html/HTMLSourceElement.idl b/core/html/HTMLSourceElement.idl
index 50efebd..5a7882a 100644
--- a/core/html/HTMLSourceElement.idl
+++ b/core/html/HTMLSourceElement.idl
@@ -25,14 +25,12 @@
 
 // https://html.spec.whatwg.org/#the-source-element
 
-[
-    RuntimeEnabled=Media
-] interface HTMLSourceElement : HTMLElement {
-    [Reflect, URL] attribute DOMString src;
-    attribute DOMString type;
+interface HTMLSourceElement : HTMLElement {
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions] attribute DOMString type;
 
     // https://html.spec.whatwg.org/#the-source-element-when-used-with-the-picture-element
-    [Reflect] attribute DOMString srcset;
-    [Reflect] attribute DOMString sizes;
-    [Reflect] attribute DOMString media;
+    [CEReactions, Reflect] attribute DOMString srcset;
+    [CEReactions, Reflect] attribute DOMString sizes;
+    [CEReactions, Reflect] attribute DOMString media;
 };
diff --git a/core/html/HTMLStyleElement.idl b/core/html/HTMLStyleElement.idl
index 8c035ff..befeb9a 100644
--- a/core/html/HTMLStyleElement.idl
+++ b/core/html/HTMLStyleElement.idl
@@ -21,13 +21,13 @@
 // https://html.spec.whatwg.org/#the-style-element
 
 interface HTMLStyleElement : HTMLElement {
-    // TODO(philipj): The disabled attribute has been removed from the spec:
+    // TODO(foolip): The disabled attribute has been removed from the spec:
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14703
     [Measure] attribute boolean disabled;
-    [Reflect] attribute DOMString media;
-    [Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute DOMString media;
+    [CEReactions, Reflect] attribute DOMString type;
 
     // HTMLStyleElement implements LinkStyle
-    // http://dev.w3.org/csswg/cssom/#the-linkstyle-interface
+    // https://drafts.csswg.org/cssom/#the-linkstyle-interface
     readonly attribute StyleSheet? sheet;
 };
diff --git a/core/html/HTMLTableCaptionElement.idl b/core/html/HTMLTableCaptionElement.idl
index 9f9b728..b9307a8 100644
--- a/core/html/HTMLTableCaptionElement.idl
+++ b/core/html/HTMLTableCaptionElement.idl
@@ -23,5 +23,5 @@
 interface HTMLTableCaptionElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLTableCaptionElement-partial
-    [Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString align;
 };
diff --git a/core/html/HTMLTableCellElement.idl b/core/html/HTMLTableCellElement.idl
index 933fedb..6974c3a 100644
--- a/core/html/HTMLTableCellElement.idl
+++ b/core/html/HTMLTableCellElement.idl
@@ -21,31 +21,31 @@
 // https://html.spec.whatwg.org/#attributes-common-to-td-and-th-elements
 
 interface HTMLTableCellElement : HTMLElement {
-    attribute unsigned long colSpan;
-    attribute unsigned long rowSpan;
-    // TODO(philipj): headers should be a [PutForwards=value] readonly attribute
+    [CEReactions] attribute unsigned long colSpan;
+    [CEReactions] attribute unsigned long rowSpan;
+    // TODO(foolip): headers should be a [PutForwards=value] readonly attribute
     // DOMTokenList.
-    [Reflect, TreatNullAs=NullString] attribute DOMString headers;
+    [CEReactions, Reflect, TreatNullAs=NullString] attribute DOMString headers;
     readonly attribute long cellIndex;
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLTableCellElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString axis;
-    [Reflect] attribute DOMString height;
-    [Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString axis;
+    [CEReactions, Reflect] attribute DOMString height;
+    [CEReactions, Reflect] attribute DOMString width;
 
-    [Reflect=char] attribute DOMString ch;
-    [Reflect=charoff] attribute DOMString chOff;
-    [Reflect] attribute boolean noWrap;
-    [Reflect] attribute DOMString vAlign;
+    [CEReactions, Reflect=char] attribute DOMString ch;
+    [CEReactions, Reflect=charoff] attribute DOMString chOff;
+    [CEReactions, Reflect] attribute boolean noWrap;
+    [CEReactions, Reflect] attribute DOMString vAlign;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
 
-    // TODO(philipj): The spec has HTMLTableHeaderCellElement and
+    // TODO(foolip): The spec has HTMLTableHeaderCellElement and
     // HTMLTableDataCellElement interfaces for the th and td elements
     // respectively. HTMLTableHeaderCellElement has the abbr and scope
     // attributes, while HTMLTableDataCellElement has only abbr.
-    [Reflect] attribute DOMString abbr;
-    [Reflect] attribute DOMString scope;
+    [CEReactions, Reflect] attribute DOMString abbr;
+    [CEReactions, Reflect, ReflectOnly=("row", "col", "rowgroup", "colgroup")] attribute DOMString scope;
 };
diff --git a/core/html/HTMLTableColElement.idl b/core/html/HTMLTableColElement.idl
index 8ad6945..2d3dbad 100644
--- a/core/html/HTMLTableColElement.idl
+++ b/core/html/HTMLTableColElement.idl
@@ -22,13 +22,13 @@
 // https://html.spec.whatwg.org/#the-col-element
 
 interface HTMLTableColElement : HTMLElement {
-    attribute unsigned long span;
+    [CEReactions] attribute unsigned long span;
 
     // obsolete attributes
     // https://html.spec.whatwg.org/#HTMLTableColElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect=char] attribute DOMString ch;
-    [Reflect=charoff] attribute DOMString chOff;
-    [Reflect] attribute DOMString vAlign;
-    [Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect=char] attribute DOMString ch;
+    [CEReactions, Reflect=charoff] attribute DOMString chOff;
+    [CEReactions, Reflect] attribute DOMString vAlign;
+    [CEReactions, Reflect] attribute DOMString width;
 };
diff --git a/core/html/HTMLTableElement.idl b/core/html/HTMLTableElement.idl
index b36de85..b785a69 100644
--- a/core/html/HTMLTableElement.idl
+++ b/core/html/HTMLTableElement.idl
@@ -21,34 +21,34 @@
 // https://html.spec.whatwg.org/#the-table-element
 
 interface HTMLTableElement : HTMLElement {
-    // TODO(philipj): The caption, tHead and tFoot setters should never throw.
-    [RaisesException=Setter] attribute HTMLTableCaptionElement? caption;
-    HTMLTableCaptionElement createCaption();
-    void deleteCaption();
-    [RaisesException=Setter] attribute HTMLTableSectionElement? tHead;
-    HTMLTableSectionElement createTHead();
-    void deleteTHead();
-    [RaisesException=Setter] attribute HTMLTableSectionElement? tFoot;
-    HTMLTableSectionElement createTFoot();
-    void deleteTFoot();
+    // TODO(foolip): The caption, tHead and tFoot setters should never throw.
+    [CEReactions, RaisesException=Setter] attribute HTMLTableCaptionElement? caption;
+    [CEReactions] HTMLTableCaptionElement createCaption();
+    [CEReactions] void deleteCaption();
+    [CEReactions, RaisesException=Setter] attribute HTMLTableSectionElement? tHead;
+    [CEReactions] HTMLTableSectionElement createTHead();
+    [CEReactions] void deleteTHead();
+    [CEReactions, RaisesException=Setter] attribute HTMLTableSectionElement? tFoot;
+    [CEReactions] HTMLTableSectionElement createTFoot();
+    [CEReactions] void deleteTFoot();
     readonly attribute HTMLCollection tBodies;
-    HTMLTableSectionElement createTBody();
+    [CEReactions] HTMLTableSectionElement createTBody();
     readonly attribute HTMLCollection rows;
-    [RaisesException] HTMLTableRowElement insertRow(optional long index = -1);
-    [RaisesException] void deleteRow(long index);
+    [CEReactions, RaisesException] HTMLTableRowElement insertRow(optional long index = -1);
+    [CEReactions, RaisesException] void deleteRow(long index);
     // attribute boolean sortable;
     // void stopSorting();
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLTableElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect] attribute DOMString border;
-    [Reflect] attribute DOMString frame;
-    [Reflect] attribute DOMString rules;
-    [Reflect] attribute DOMString summary;
-    [Reflect] attribute DOMString width;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString border;
+    [CEReactions, Reflect] attribute DOMString frame;
+    [CEReactions, Reflect] attribute DOMString rules;
+    [CEReactions, Reflect] attribute DOMString summary;
+    [CEReactions, Reflect] attribute DOMString width;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString cellPadding;
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString cellSpacing;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString cellPadding;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString cellSpacing;
 };
diff --git a/core/html/HTMLTableRowElement.idl b/core/html/HTMLTableRowElement.idl
index bba0de5..5b5707d 100644
--- a/core/html/HTMLTableRowElement.idl
+++ b/core/html/HTMLTableRowElement.idl
@@ -24,15 +24,15 @@
     readonly attribute long rowIndex;
     readonly attribute long sectionRowIndex;
     readonly attribute HTMLCollection cells;
-    [RaisesException] HTMLElement insertCell(optional long index = -1);
-    [RaisesException] void deleteCell(long index);
+    [CEReactions, RaisesException] HTMLElement insertCell(optional long index = -1);
+    [CEReactions, RaisesException] void deleteCell(long index);
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLTableRowElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect=char] attribute DOMString ch;
-    [Reflect=charoff] attribute DOMString chOff;
-    [Reflect] attribute DOMString vAlign;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect=char] attribute DOMString ch;
+    [CEReactions, Reflect=charoff] attribute DOMString chOff;
+    [CEReactions, Reflect] attribute DOMString vAlign;
 
-    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
+    [CEReactions, Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
 };
diff --git a/core/html/HTMLTableSectionElement.idl b/core/html/HTMLTableSectionElement.idl
index f0f19cf..36c47bf 100644
--- a/core/html/HTMLTableSectionElement.idl
+++ b/core/html/HTMLTableSectionElement.idl
@@ -24,13 +24,13 @@
 
 interface HTMLTableSectionElement : HTMLElement {
     readonly attribute HTMLCollection rows;
-    [RaisesException] HTMLElement insertRow(optional long index = -1);
-    [RaisesException] void deleteRow(long index);
+    [CEReactions, RaisesException] HTMLElement insertRow(optional long index = -1);
+    [CEReactions, RaisesException] void deleteRow(long index);
 
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLTableSectionElement-partial
-    [Reflect] attribute DOMString align;
-    [Reflect=char] attribute DOMString ch;
-    [Reflect=charoff] attribute DOMString chOff;
-    [Reflect] attribute DOMString vAlign;
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect=char] attribute DOMString ch;
+    [CEReactions, Reflect=charoff] attribute DOMString chOff;
+    [CEReactions, Reflect] attribute DOMString vAlign;
 };
diff --git a/core/html/HTMLTextAreaElement.idl b/core/html/HTMLTextAreaElement.idl
deleted file mode 100644
index ea7ca76..0000000
--- a/core/html/HTMLTextAreaElement.idl
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2011 Motorola Mobility, Inc. All rights reserved.
- *
- * 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-textarea-element
-
-interface HTMLTextAreaElement : HTMLElement {
-    // attribute DOMString autocomplete;
-    [Reflect] attribute boolean autofocus;
-    attribute unsigned long cols;
-    [Reflect] attribute DOMString dirName;
-    [Reflect] attribute boolean disabled;
-    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
-    [RuntimeEnabled=InputModeAttribute, Reflect] attribute DOMString inputMode;
-    [RaisesException=Setter] attribute long maxLength;
-    [RaisesException=Setter] attribute long minLength;
-    [Reflect] attribute DOMString name;
-    [Reflect] attribute DOMString placeholder;
-    [Reflect] attribute boolean readOnly;
-    [Reflect] attribute boolean required;
-    attribute unsigned long rows;
-    [Reflect] attribute DOMString wrap;
-
-    readonly attribute DOMString type;
-    attribute DOMString defaultValue;
-    [TreatNullAs=NullString] attribute DOMString value;
-    readonly attribute unsigned long textLength;
-
-    readonly attribute boolean willValidate;
-    readonly attribute ValidityState validity;
-    readonly attribute DOMString validationMessage;
-    boolean checkValidity();
-    boolean reportValidity();
-    void setCustomValidity(DOMString error);
-
-    readonly attribute NodeList labels;
-
-    void select();
-    // TODO(philipj): selectionStart and selectionEnd should be unsigned long.
-    attribute long selectionStart;
-    attribute long selectionEnd;
-    attribute DOMString selectionDirection;
-    [RaisesException] void setRangeText(DOMString replacement);
-    [RaisesException] void setRangeText(DOMString replacement,
-                                        unsigned long start,
-                                        unsigned long end,
-                                        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,
-                           [Default=Undefined] optional long end,
-                           optional DOMString direction);
-
-    // HTML autocapitalize proposal
-    // https://github.com/mounirlamouri/html-autocapitalize/blob/master/proposal.md
-    [Measure] attribute DOMString autocapitalize;
-};
diff --git a/core/html/HTMLTimeElement.idl b/core/html/HTMLTimeElement.idl
new file mode 100644
index 0000000..48677ff
--- /dev/null
+++ b/core/html/HTMLTimeElement.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/text-level-semantics.html#the-time-element
+
+[HTMLConstructor]
+interface HTMLTimeElement : HTMLElement {
+    [CEReactions, Reflect] attribute DOMString dateTime;
+};
\ No newline at end of file
diff --git a/core/html/HTMLTitleElement.idl b/core/html/HTMLTitleElement.idl
index f775f8c..4f06106 100644
--- a/core/html/HTMLTitleElement.idl
+++ b/core/html/HTMLTitleElement.idl
@@ -20,5 +20,5 @@
 // https://html.spec.whatwg.org/#the-title-element
 
 interface HTMLTitleElement : HTMLElement {
-    attribute DOMString text;
+    [CEReactions] attribute DOMString text;
 };
diff --git a/core/html/HTMLTrackElement.idl b/core/html/HTMLTrackElement.idl
index 08b3f14..b3334c2 100644
--- a/core/html/HTMLTrackElement.idl
+++ b/core/html/HTMLTrackElement.idl
@@ -26,17 +26,16 @@
 // https://html.spec.whatwg.org/#the-track-element
 
 interface HTMLTrackElement : HTMLElement {
-    attribute DOMString kind;
-    [Reflect, URL] attribute DOMString src;
-    [Reflect] attribute DOMString srclang;
-    [Reflect] attribute DOMString label;
-    [Reflect] attribute boolean default;
+    [CEReactions] attribute DOMString kind;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString srclang;
+    [CEReactions, Reflect] attribute DOMString label;
+    [CEReactions, Reflect] attribute boolean default;
 
     const unsigned short NONE = 0;
     const unsigned short LOADING = 1;
     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;
+    const unsigned short ERROR = 3;
     [ImplementedAs=getReadyState] readonly attribute unsigned short readyState;
 
     readonly attribute TextTrack track;
diff --git a/core/html/HTMLUListElement.idl b/core/html/HTMLUListElement.idl
index 43c6f43..907fd7a 100644
--- a/core/html/HTMLUListElement.idl
+++ b/core/html/HTMLUListElement.idl
@@ -22,6 +22,6 @@
 interface HTMLUListElement : HTMLElement {
     // obsolete members
     // https://html.spec.whatwg.org/#HTMLUListElement-partial
-    [Reflect] attribute boolean compact;
-    [Reflect] attribute DOMString type;
+    [CEReactions, Reflect] attribute boolean compact;
+    [CEReactions, Reflect] attribute DOMString type;
 };
diff --git a/core/html/HTMLVideoElement.idl b/core/html/HTMLVideoElement.idl
index 3f2d0cc..2e9974d 100644
--- a/core/html/HTMLVideoElement.idl
+++ b/core/html/HTMLVideoElement.idl
@@ -26,13 +26,13 @@
 // https://html.spec.whatwg.org/#the-video-element
 
 [
-    RuntimeEnabled=Media
+    ActiveScriptWrappable
 ] interface HTMLVideoElement : HTMLMediaElement {
-    [Reflect] attribute unsigned long width;
-    [Reflect] attribute unsigned long height;
+    [CEReactions, Reflect] attribute unsigned long width;
+    [CEReactions, Reflect] attribute unsigned long height;
     readonly attribute unsigned long videoWidth;
     readonly attribute unsigned long videoHeight;
-    [Reflect, URL] attribute DOMString poster;
+    [CEReactions, Reflect, URL, Measure] attribute DOMString poster;
 
     // Non-standard APIs
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoSupportsFullscreen] readonly attribute boolean webkitSupportsFullscreen;
diff --git a/core/html/ImageData.idl b/core/html/ImageData.idl
index 152a63d..52153cc 100644
--- a/core/html/ImageData.idl
+++ b/core/html/ImageData.idl
@@ -27,17 +27,20 @@
  */
 
 // https://html.spec.whatwg.org/#dom-imagedata
+// https://github.com/junov/CanvasColorSpace/blob/master/CanvasColorSpaceProposal.md#imagedata
+
+typedef (Uint8ClampedArray or Uint16Array or Float32Array) ImageDataArray;
 
 [
     Constructor(unsigned long sw, unsigned long sh),
     Constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh),
     Exposed=(Window,Worker),
-    RaisesException=Constructor,
-    GarbageCollected,
+    RaisesException=Constructor
 ] interface ImageData {
+    [RuntimeEnabled=ExperimentalCanvasFeatures] ImageDataColorSettings getColorSettings();
+
     readonly attribute unsigned long width;
     readonly attribute unsigned long height;
-    // TODO(philipj): Expose data.
-    // FIXMEDART: Uncomment - we need this property.
     readonly attribute Uint8ClampedArray data;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute ImageDataArray dataUnion;
 };
diff --git a/core/html/ImageDataColorSettings.idl b/core/html/ImageDataColorSettings.idl
new file mode 100644
index 0000000..828808c
--- /dev/null
+++ b/core/html/ImageDataColorSettings.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/junov/CanvasColorSpace/blob/master/CanvasColorSpaceProposal.md#imageda
+
+enum ImageDataStorageFormat {
+  "uint8", // default
+  "uint16",
+  "float32",
+};
+
+dictionary ImageDataColorSettings {
+  CanvasColorSpace colorSpace = "srgb";
+  ImageDataStorageFormat storageFormat = "uint8";
+};
diff --git a/core/html/MediaError.idl b/core/html/MediaError.idl
deleted file mode 100644
index 712251d..0000000
--- a/core/html/MediaError.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2007 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/#error-codes
-
-[
-    GarbageCollected,
-    RuntimeEnabled=Media,
-] interface MediaError {
-    const unsigned short MEDIA_ERR_ABORTED = 1;
-    const unsigned short MEDIA_ERR_NETWORK = 2;
-    const unsigned short MEDIA_ERR_DECODE = 3;
-    const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
-    readonly attribute unsigned short code;
-};
diff --git a/core/html/RadioNodeList.idl b/core/html/RadioNodeList.idl
deleted file mode 100644
index d1be414..0000000
--- a/core/html/RadioNodeList.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2012 Motorola Mobility, 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 MOTOROLA MOBILITY, 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 MOTOROLA MOBILITY, 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://html.spec.whatwg.org/#radionodelist
-
-interface RadioNodeList : NodeList {
-    attribute DOMString value;
-
-    // TODO(philipj): This should be inherited from NodeList.
-    [ImplementedAs=item] getter Node? (unsigned long index);
-};
diff --git a/core/html/TextMetrics.idl b/core/html/TextMetrics.idl
index e5d8fdb..68b0ee4 100644
--- a/core/html/TextMetrics.idl
+++ b/core/html/TextMetrics.idl
@@ -25,11 +25,9 @@
 
 // https://html.spec.whatwg.org/#textmetrics
 
-// TODO(philipj): All float types in this interface should be double.
-[
-    // TODO(philipj): Exposed=(Window,Worker)
-    GarbageCollected,
-] interface TextMetrics {
+// TODO(foolip): All float types in this interface should be double.
+// TODO(foolip): Exposed=(Window,Worker)
+interface TextMetrics {
     // x-direction
     readonly attribute float width; // advance width
     [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute float actualBoundingBoxLeft;
diff --git a/core/html/TimeRanges.idl b/core/html/TimeRanges.idl
index 281861e..a7387ff 100644
--- a/core/html/TimeRanges.idl
+++ b/core/html/TimeRanges.idl
@@ -25,10 +25,7 @@
 
 // https://html.spec.whatwg.org/#time-ranges
 
-[
-    GarbageCollected,
-    RuntimeEnabled=Media
-] interface TimeRanges {
+interface TimeRanges {
     readonly attribute unsigned long length;
     [RaisesException] double start(unsigned long index);
     [RaisesException] double end(unsigned long index);
diff --git a/core/html/ValidityState.idl b/core/html/ValidityState.idl
deleted file mode 100644
index 5883d83..0000000
--- a/core/html/ValidityState.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * This file is part of the WebKit project.
- *
- * Copyright (C) 2009 Michelangelo De Simone <micdesim@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/#validitystate
-
-[
-    WillBeGarbageCollected
-] interface ValidityState {
-    readonly attribute boolean valueMissing;
-    readonly attribute boolean typeMismatch;
-    readonly attribute boolean patternMismatch;
-    readonly attribute boolean tooLong;
-    readonly attribute boolean tooShort;
-    readonly attribute boolean rangeUnderflow;
-    readonly attribute boolean rangeOverflow;
-    readonly attribute boolean stepMismatch;
-    readonly attribute boolean badInput;
-    readonly attribute boolean customError;
-    readonly attribute boolean valid;
-};
diff --git a/core/html/VoidCallback.idl b/core/html/VoidCallback.idl
index daf58ab..3b43682 100644
--- a/core/html/VoidCallback.idl
+++ b/core/html/VoidCallback.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// TODO(philipj): This callback interface was added for HTMLMediaElement's
+// TODO(foolip): This callback interface was added for HTMLMediaElement's
 // addCuePoint() and removeCuePoint(), which briefly existed in 2007. It is no
 // longer used in HTML and should be moved to where it is used.
 
diff --git a/core/html/canvas/CanvasContextCreationAttributes.idl b/core/html/canvas/CanvasContextCreationAttributes.idl
index 3d5a8f2..752714c 100644
--- a/core/html/canvas/CanvasContextCreationAttributes.idl
+++ b/core/html/canvas/CanvasContextCreationAttributes.idl
@@ -21,10 +21,28 @@
 //
 // N.B.: Web IDL doesn't support multiple inheritance of dictionaries.
 
+enum CanvasColorSpace {
+    "srgb", // default
+    "rec2020",
+    "p3",
+};
+
+enum CanvasPixelFormat {
+    "8-8-8-8", // default
+    "10-10-10-2",
+    "12-12-12-12",
+    "float16",
+};
+
 [PermissiveDictionaryConversion]
 dictionary CanvasContextCreationAttributes {
     // Canvas 2D attributes
     boolean alpha = true;  // Also used for WebGL.
+    // TODO(crbug.com/637288): Do we keep "legacy-srgb" as the default?
+    // Must decide before shipping.
+    [RuntimeEnabled=ExperimentalCanvasFeatures] CanvasColorSpace colorSpace = "legacy-srgb";
+    [RuntimeEnabled=ExperimentalCanvasFeatures] CanvasPixelFormat pixelFormat = "8-8-8-8";
+    [RuntimeEnabled=ExperimentalCanvasFeatures] boolean linearPixelMath = false;
 
     // WebGL attributes
     boolean depth = true;
diff --git a/core/html/canvas/OffscreenCanvas.idl b/core/html/canvas/OffscreenCanvas.idl
deleted file mode 100644
index be5bf91..0000000
--- a/core/html/canvas/OffscreenCanvas.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.
-
-[
-    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/custom/CustomElementRegistry.idl b/core/html/custom/CustomElementRegistry.idl
new file mode 100644
index 0000000..01ad2a1
--- /dev/null
+++ b/core/html/custom/CustomElementRegistry.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 CustomElementRegistry {
+    [CallWith=ScriptState, CEReactions, CustomElementCallbacks, RaisesException, MeasureAs=CustomElementRegistryDefine] void define(DOMString name, Function constructor, optional ElementDefinitionOptions options);
+    any get(DOMString name);
+    [CallWith=ScriptState,RaisesException] Promise<void> whenDefined(DOMString name);
+};
diff --git a/core/html/forms/FormData.idl b/core/html/forms/FormData.idl
new file mode 100644
index 0000000..2fcaf4b
--- /dev/null
+++ b/core/html/forms/FormData.idl
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// https://xhr.spec.whatwg.org/#interface-formdata
+
+typedef (File or USVString) FormDataEntryValue;
+
+// TODO(foolip): Remove LegacyInterfaceTypeChecking, which allows for
+// `append('name', null, 'filename')` and `set('name', null, 'filename')` to
+// append/set null values instead of throwing. https://crbug.com/561338
+[
+    Constructor(optional HTMLFormElement form),
+    Exposed=(Window,Worker),
+    LegacyInterfaceTypeChecking
+] interface FormData {
+    void append(USVString name, USVString value);
+    [CallWith=ScriptState] void append(USVString name, Blob value, optional USVString filename);
+    [ImplementedAs=deleteEntry] void delete(USVString name);
+    FormDataEntryValue? get(USVString name);
+    sequence<FormDataEntryValue> getAll(USVString name);
+    boolean has(USVString name);
+    void set(USVString name, USVString value);
+    void set(USVString name, Blob value, optional USVString filename);
+    iterable<USVString, FormDataEntryValue>;
+};
diff --git a/core/html/forms/HTMLButtonElement.idl b/core/html/forms/HTMLButtonElement.idl
new file mode 100644
index 0000000..b357e68
--- /dev/null
+++ b/core/html/forms/HTMLButtonElement.idl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2006, 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-button-element
+
+interface HTMLButtonElement : HTMLElement {
+    [CEReactions, Reflect] attribute boolean autofocus;
+    [CEReactions, Reflect] attribute boolean disabled;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [CEReactions] attribute DOMString formAction;
+    [CEReactions] attribute DOMString formEnctype;
+    [CEReactions] attribute DOMString formMethod;
+    [CEReactions, Reflect] attribute boolean formNoValidate;
+    [CEReactions, Reflect] attribute DOMString formTarget;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions] attribute DOMString type;
+    [CEReactions, Reflect] attribute DOMString value;
+    // FIXME: attribute HTMLMenuElement? menu;
+
+    readonly attribute boolean willValidate;
+    readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+
+    readonly attribute NodeList labels;
+};
diff --git a/core/html/HTMLDataListElement.idl b/core/html/forms/HTMLDataListElement.idl
similarity index 100%
rename from core/html/HTMLDataListElement.idl
rename to core/html/forms/HTMLDataListElement.idl
diff --git a/core/html/forms/HTMLFieldSetElement.idl b/core/html/forms/HTMLFieldSetElement.idl
new file mode 100644
index 0000000..dcf557f
--- /dev/null
+++ b/core/html/forms/HTMLFieldSetElement.idl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2006 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// https://html.spec.whatwg.org/#the-fieldset-element
+
+interface HTMLFieldSetElement : HTMLElement {
+    [CEReactions, Reflect] attribute boolean disabled;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [CEReactions, Reflect] attribute DOMString name;
+
+    readonly attribute DOMString type;
+
+    [Measure] readonly attribute HTMLCollection elements;
+
+    readonly attribute boolean willValidate;
+    [SameObject] readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+};
diff --git a/core/html/forms/HTMLFormControlsCollection.idl b/core/html/forms/HTMLFormControlsCollection.idl
new file mode 100644
index 0000000..2cd0ea2
--- /dev/null
+++ b/core/html/forms/HTMLFormControlsCollection.idl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2006, 2007, 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2014 Samsung Electronics. All rights reserved.
+ *
+ * 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-htmlformcontrolscollection-interface
+
+[
+    DependentLifetime
+] interface HTMLFormControlsCollection : HTMLCollection {
+    // inherits length and item()
+    [ImplementedAs=namedGetter] getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
+    // FIXME: This getter is not in the spec.
+    [ImplementedAs=item] getter Node (unsigned long index);
+};
diff --git a/core/html/forms/HTMLFormElement.idl b/core/html/forms/HTMLFormElement.idl
new file mode 100644
index 0000000..342d19b
--- /dev/null
+++ b/core/html/forms/HTMLFormElement.idl
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2006, 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-form-element
+
+[
+    OverrideBuiltins
+] interface HTMLFormElement : HTMLElement {
+    [CEReactions, Reflect=accept_charset] attribute DOMString acceptCharset;
+    [CEReactions, Reflect, URL] attribute DOMString action;
+    [CEReactions, Reflect, ReflectOnly=("on","off"), ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete;
+    [CEReactions, CustomElementCallbacks] attribute DOMString enctype;
+    [CEReactions, CustomElementCallbacks] attribute DOMString encoding;
+    [CEReactions, CustomElementCallbacks] attribute DOMString method;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute boolean noValidate;
+    [CEReactions, Reflect] attribute DOMString target;
+
+    readonly attribute HTMLFormControlsCollection elements;
+    readonly attribute long length;
+    [ImplementedAs=item] getter Element (unsigned long index);
+    // FIXME: This getter should not have [NotEnumerable].
+    [NotEnumerable] getter (RadioNodeList or Element) (DOMString name);
+
+    [ImplementedAs=submitFromJavaScript] void submit();
+    [CEReactions, CustomElementCallbacks] void reset();
+    boolean checkValidity();
+    boolean reportValidity();
+};
diff --git a/core/html/forms/HTMLInputElement.idl b/core/html/forms/HTMLInputElement.idl
new file mode 100644
index 0000000..12495b0
--- /dev/null
+++ b/core/html/forms/HTMLInputElement.idl
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2012 Samsung Electronics. All rights reserved.
+ *
+ * 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-input-element
+
+enum SelectionMode { "select", "start", "end", "preserve" };
+
+[
+    ActiveScriptWrappable
+] interface HTMLInputElement : HTMLElement {
+    [CEReactions, Reflect] attribute DOMString accept;
+    [CEReactions, Reflect] attribute DOMString alt;
+    [CEReactions, Reflect] attribute DOMString autocomplete;
+    [CEReactions, Reflect] attribute boolean autofocus;
+    [CEReactions, Reflect=checked] attribute boolean defaultChecked;
+    attribute boolean checked;
+    [CEReactions, Reflect] attribute DOMString dirName;
+    [CEReactions, Reflect] attribute boolean disabled;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    // The 'files' attribute is intentionally not readonly.
+    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22682
+    attribute FileList? files;
+    [CEReactions] attribute DOMString formAction;
+    [CEReactions, CustomElementCallbacks] attribute DOMString formEnctype;
+    [CEReactions, CustomElementCallbacks] attribute DOMString formMethod;
+    [CEReactions, Reflect] attribute boolean formNoValidate;
+    [CEReactions, Reflect] attribute DOMString formTarget;
+    [CEReactions, CustomElementCallbacks] attribute unsigned long height;
+    attribute boolean indeterminate;
+    readonly attribute HTMLElement? list;
+    [CEReactions, Reflect] attribute DOMString max;
+    [CEReactions, RaisesException=Setter, CustomElementCallbacks] attribute long maxLength;
+    [CEReactions, Reflect] attribute DOMString min;
+    [CEReactions, RaisesException=Setter, CustomElementCallbacks] attribute long minLength;
+    [CEReactions, Reflect] attribute boolean multiple;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString pattern;
+    [CEReactions, Reflect] attribute DOMString placeholder;
+    [CEReactions, Reflect] attribute boolean readOnly;
+    [CEReactions, Reflect] attribute boolean required;
+    [CEReactions, RaisesException=Setter, CustomElementCallbacks] attribute unsigned long size;
+    [CEReactions, Reflect, URL] attribute DOMString src;
+    [CEReactions, Reflect] attribute DOMString step;
+    [CEReactions, CustomElementCallbacks] attribute DOMString type;
+    [CEReactions, Reflect=value, CustomElementCallbacks] attribute DOMString defaultValue;
+    [CEReactions, TreatNullAs=EmptyString, RaisesException=Setter, CustomElementCallbacks] attribute DOMString value;
+    [CEReactions, RaisesException=Setter, CustomElementCallbacks] attribute Date? valueAsDate;
+    [RaisesException=Setter, CustomElementCallbacks] attribute unrestricted double valueAsNumber;
+    // Note: The spec has valueLow and valueHigh for two-valued range controls.
+    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=13154
+    [CEReactions, CustomElementCallbacks] attribute unsigned long width;
+
+    [RaisesException, CustomElementCallbacks] void stepUp(optional long n = 1);
+    [RaisesException, CustomElementCallbacks] void stepDown(optional long n = 1);
+
+    readonly attribute boolean willValidate;
+    readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+
+    readonly attribute NodeList labels;
+
+    void select();
+    [RaisesException, ImplementedAs=selectionStartForBinding] attribute unsigned long? selectionStart;
+    [RaisesException, ImplementedAs=selectionEndForBinding] attribute unsigned long? selectionEnd;
+    [RaisesException, ImplementedAs=selectionDirectionForBinding] attribute DOMString? selectionDirection;
+    [RaisesException] void setRangeText(DOMString replacement);
+    [RaisesException] void setRangeText(DOMString replacement,
+                                        unsigned long start,
+                                        unsigned long end,
+                                        optional SelectionMode selectionMode = "preserve");
+    [RaisesException, ImplementedAs=setSelectionRangeForBinding]
+    void setSelectionRange(unsigned long start,
+                           unsigned long end,
+                           optional DOMString direction);
+
+    // obsolete members
+    // https://html.spec.whatwg.org/#HTMLInputElement-partial
+    [CEReactions, Reflect] attribute DOMString align;
+    [CEReactions, Reflect] attribute DOMString useMap;
+
+    // HTML autocapitalize proposal
+    // https://github.com/mounirlamouri/html-autocapitalize/blob/master/proposal.md
+    [Measure] attribute DOMString autocapitalize;
+
+    // HTML Media Capture
+    // https://w3c.github.io/html-media-capture/#the-capture-attribute
+    // Using DOMString as enum cannot be reflected. https://github.com/w3c/html-media-capture/issues/12
+    [Measure, RuntimeEnabled=MediaCapture, Reflect] attribute DOMString capture;
+
+    // Non-standard APIs
+    [Reflect, MeasureAs=PrefixedDirectoryAttribute] attribute boolean webkitdirectory;
+    [Reflect, MeasureAs=IncrementalAttribute] attribute boolean incremental;
+};
diff --git a/core/html/forms/HTMLLabelElement.idl b/core/html/forms/HTMLLabelElement.idl
new file mode 100644
index 0000000..4106313
--- /dev/null
+++ b/core/html/forms/HTMLLabelElement.idl
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2006, 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-label-element
+
+interface HTMLLabelElement : HTMLElement {
+    readonly attribute HTMLFormElement? form;
+    [CEReactions, Reflect=for] attribute DOMString htmlFor;
+    readonly attribute HTMLElement? control;
+};
diff --git a/core/html/forms/HTMLLegendElement.idl b/core/html/forms/HTMLLegendElement.idl
new file mode 100644
index 0000000..6f52bcd
--- /dev/null
+++ b/core/html/forms/HTMLLegendElement.idl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2006, 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-legend-element
+
+interface HTMLLegendElement : HTMLElement {
+    readonly attribute HTMLFormElement? form;
+
+    // obsolete members
+    // https://html.spec.whatwg.org/#HTMLLegendElement-partial
+    [CEReactions, Reflect] attribute DOMString align;
+};
diff --git a/core/html/forms/HTMLOptGroupElement.idl b/core/html/forms/HTMLOptGroupElement.idl
new file mode 100644
index 0000000..b2f1296
--- /dev/null
+++ b/core/html/forms/HTMLOptGroupElement.idl
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
+ *
+ * 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-optgroup-element
+
+interface HTMLOptGroupElement : HTMLElement {
+    [CEReactions, Reflect] attribute boolean disabled;
+    [CEReactions, Reflect] attribute DOMString label;
+};
diff --git a/core/html/forms/HTMLOptionElement.idl b/core/html/forms/HTMLOptionElement.idl
new file mode 100644
index 0000000..d3325f8
--- /dev/null
+++ b/core/html/forms/HTMLOptionElement.idl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2006, 2007, 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-option-element
+
+[
+    NamedConstructor=Option(optional DOMString data = null,
+                            optional DOMString value = null,
+                            optional boolean defaultSelected = false,
+                            optional boolean selected = false),
+    ConstructorCallWith=Document,
+    RaisesException=Constructor
+] interface HTMLOptionElement : HTMLElement {
+    [CEReactions, Reflect] attribute boolean disabled;
+    readonly attribute HTMLFormElement? form;
+    [CEReactions] attribute DOMString label;
+    [CEReactions, Reflect=selected] attribute boolean defaultSelected;
+    [ImplementedAs=selectedForBinding] attribute boolean selected;
+    [CEReactions] attribute DOMString value;
+
+    // TODO(foolip): The text setter should never throw.
+    [CEReactions, RaisesException=Setter] attribute DOMString text;
+    readonly attribute long index;
+};
diff --git a/core/html/forms/HTMLOptionsCollection.idl b/core/html/forms/HTMLOptionsCollection.idl
new file mode 100644
index 0000000..5948567
--- /dev/null
+++ b/core/html/forms/HTMLOptionsCollection.idl
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2013, 2014 Samsung Electronics. All rights reserved.
+ *
+ * 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-htmloptionscollection-interface
+
+[
+    DependentLifetime
+] interface HTMLOptionsCollection : HTMLCollection {
+    // inherits item()
+    [CEReactions, RaisesException=Setter] attribute unsigned long length; // shadows inherited length
+    // FIXME: The spec has a legacycaller HTMLOptionElement? (DOMString name);
+    [CEReactions, RaisesException] setter void (unsigned long index, HTMLOptionElement? option);
+    [CEReactions, RaisesException] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
+    [CEReactions] void remove(long index);
+    attribute long selectedIndex;
+
+    // TODO(tkent): We need to declare this indexed property getter because our
+    // IDL compiler doesn't support inheritance of indexed property
+    // getters. crbug.com/752877
+    [ImplementedAs=item] getter Element? (unsigned long index);
+
+    // TODO(tkent): This should return only Element. crbug.com/695902
+    [ImplementedAs=namedGetter] getter (NodeList or Element)? namedItem(DOMString name);
+};
diff --git a/core/html/forms/HTMLOutputElement.idl b/core/html/forms/HTMLOutputElement.idl
new file mode 100644
index 0000000..8e55d6c
--- /dev/null
+++ b/core/html/forms/HTMLOutputElement.idl
@@ -0,0 +1,45 @@
+/*
+ * 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://html.spec.whatwg.org/#the-output-element
+
+interface HTMLOutputElement : HTMLElement {
+    [CEReactions, PutForwards=value] readonly attribute DOMTokenList htmlFor;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [CEReactions, Reflect] attribute DOMString name;
+
+    readonly attribute DOMString type;
+    [CEReactions] attribute DOMString defaultValue;
+    [CEReactions] attribute DOMString value;
+
+    readonly attribute boolean willValidate;
+    readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+
+    readonly attribute NodeList labels;
+};
diff --git a/core/html/forms/HTMLSelectElement.idl b/core/html/forms/HTMLSelectElement.idl
new file mode 100644
index 0000000..ef30ae1
--- /dev/null
+++ b/core/html/forms/HTMLSelectElement.idl
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2013 Samsung Electronics. All rights reserved.
+ *
+ * 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-select-element
+
+interface HTMLSelectElement : HTMLElement {
+    // TODO(foolip): attribute DOMString autocomplete;
+    [CEReactions, Reflect] attribute boolean autofocus;
+    [CEReactions, Reflect] attribute boolean disabled;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [CEReactions, Reflect] attribute boolean multiple;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute boolean required;
+    [CEReactions, Reflect] attribute unsigned long size;
+
+    readonly attribute DOMString type;
+
+    readonly attribute HTMLOptionsCollection options;
+    // TODO(foolip): The length setter should never throw.
+    [CEReactions, RaisesException=Setter] attribute unsigned long length;
+    getter Element? item(unsigned long index);
+    HTMLOptionElement? namedItem(DOMString name);
+    [CEReactions, RaisesException] void add((HTMLOptionElement or HTMLOptGroupElement) element,
+                               optional (HTMLElement or long)? before = null);
+    [CEReactions, RaisesException] void remove(); // ChildNode overload
+    [CEReactions] void remove(long index);
+    [CEReactions, RaisesException] setter void (unsigned long index, HTMLOptionElement? option);
+
+    readonly attribute HTMLCollection selectedOptions;
+    attribute long selectedIndex;
+    attribute DOMString value;
+
+    readonly attribute boolean willValidate;
+    readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+
+    readonly attribute NodeList labels;
+};
diff --git a/core/html/forms/HTMLTextAreaElement.idl b/core/html/forms/HTMLTextAreaElement.idl
new file mode 100644
index 0000000..39421b2
--- /dev/null
+++ b/core/html/forms/HTMLTextAreaElement.idl
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2011 Motorola Mobility, Inc. All rights reserved.
+ *
+ * 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-textarea-element
+
+interface HTMLTextAreaElement : HTMLElement {
+    // attribute DOMString autocomplete;
+    [CEReactions, Reflect] attribute boolean autofocus;
+    [CEReactions] attribute unsigned long cols;
+    [CEReactions, Reflect] attribute DOMString dirName;
+    [CEReactions, Reflect] attribute boolean disabled;
+    [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form;
+    [CEReactions, RaisesException=Setter] attribute long maxLength;
+    [CEReactions, RaisesException=Setter] attribute long minLength;
+    [CEReactions, Reflect] attribute DOMString name;
+    [CEReactions, Reflect] attribute DOMString placeholder;
+    [CEReactions, Reflect] attribute boolean readOnly;
+    [CEReactions, Reflect] attribute boolean required;
+    [CEReactions] attribute unsigned long rows;
+    [CEReactions, Reflect] attribute DOMString wrap;
+
+    readonly attribute DOMString type;
+    [CEReactions] attribute DOMString defaultValue;
+    [CEReactions, TreatNullAs=NullString] attribute DOMString value;
+    readonly attribute unsigned long textLength;
+
+    readonly attribute boolean willValidate;
+    readonly attribute ValidityState validity;
+    readonly attribute DOMString validationMessage;
+    boolean checkValidity();
+    boolean reportValidity();
+    void setCustomValidity(DOMString error);
+
+    readonly attribute NodeList labels;
+
+    void select();
+    attribute unsigned long selectionStart;
+    attribute unsigned long selectionEnd;
+    attribute DOMString selectionDirection;
+    [RaisesException] void setRangeText(DOMString replacement);
+    [RaisesException] void setRangeText(DOMString replacement,
+                                        unsigned long start,
+                                        unsigned long end,
+                                        optional SelectionMode selectionMode = "preserve");
+    [ImplementedAs=setSelectionRangeForBinding]
+    void setSelectionRange(unsigned long start,
+                           unsigned long end,
+                           optional DOMString direction);
+
+    // HTML autocapitalize proposal
+    // https://github.com/mounirlamouri/html-autocapitalize/blob/master/proposal.md
+    [Measure] attribute DOMString autocapitalize;
+};
diff --git a/core/html/forms/RadioNodeList.idl b/core/html/forms/RadioNodeList.idl
new file mode 100644
index 0000000..9cd41f6
--- /dev/null
+++ b/core/html/forms/RadioNodeList.idl
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2012 Motorola Mobility, 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 MOTOROLA MOBILITY, 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 MOTOROLA MOBILITY, 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://html.spec.whatwg.org/#radionodelist
+
+interface RadioNodeList : NodeList {
+    attribute DOMString value;
+
+    // TODO(tkent): We need to declare this indexed property getter because our
+    // IDL compiler doesn't support inheritance of indexed property
+    // getters. crbug.com/752877
+    [ImplementedAs=item] getter Node? (unsigned long index);
+};
diff --git a/core/html/forms/ValidityState.idl b/core/html/forms/ValidityState.idl
new file mode 100644
index 0000000..117bb92
--- /dev/null
+++ b/core/html/forms/ValidityState.idl
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the WebKit project.
+ *
+ * Copyright (C) 2009 Michelangelo De Simone <micdesim@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/#validitystate
+
+interface ValidityState {
+    readonly attribute boolean valueMissing;
+    readonly attribute boolean typeMismatch;
+    readonly attribute boolean patternMismatch;
+    readonly attribute boolean tooLong;
+    readonly attribute boolean tooShort;
+    readonly attribute boolean rangeUnderflow;
+    readonly attribute boolean rangeOverflow;
+    readonly attribute boolean stepMismatch;
+    readonly attribute boolean badInput;
+    readonly attribute boolean customError;
+    readonly attribute boolean valid;
+};
diff --git a/core/html/media/MediaError.idl b/core/html/media/MediaError.idl
new file mode 100644
index 0000000..cd551b6
--- /dev/null
+++ b/core/html/media/MediaError.idl
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 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/#error-codes
+
+interface MediaError {
+    const unsigned short MEDIA_ERR_ABORTED = 1;
+    const unsigned short MEDIA_ERR_NETWORK = 2;
+    const unsigned short MEDIA_ERR_DECODE = 3;
+    const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
+    readonly attribute unsigned short code;
+    readonly attribute DOMString message;
+};
diff --git a/core/html/track/AudioTrack.idl b/core/html/track/AudioTrack.idl
index 6299715..5ab1662 100644
--- a/core/html/track/AudioTrack.idl
+++ b/core/html/track/AudioTrack.idl
@@ -5,9 +5,8 @@
 // https://html.spec.whatwg.org/#audiotrack
 
 [
-    RuntimeEnabled=AudioVideoTracks,
-    SetWrapperReferenceFrom=owner,
-    GarbageCollected,
+    DependentLifetime,
+    RuntimeEnabled=AudioVideoTracks
 ] 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 80ba853..98084b0 100644
--- a/core/html/track/AudioTrackList.idl
+++ b/core/html/track/AudioTrackList.idl
@@ -5,9 +5,8 @@
 // https://html.spec.whatwg.org/#audiotracklist
 
 [
-    GarbageCollected,
-    RuntimeEnabled=AudioVideoTracks,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime,
+    RuntimeEnabled=AudioVideoTracks
 ] interface AudioTrackList : EventTarget {
   readonly attribute unsigned long length;
   getter AudioTrack (unsigned long index);
diff --git a/core/html/track/TextTrack.idl b/core/html/track/TextTrack.idl
index 3ce419b..ed942c8 100644
--- a/core/html/track/TextTrack.idl
+++ b/core/html/track/TextTrack.idl
@@ -29,8 +29,7 @@
 enum TextTrackKind { "subtitles",  "captions",  "descriptions",  "chapters",  "metadata" };
 
 [
-    GarbageCollected,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime
 ] interface TextTrack : EventTarget {
     readonly attribute TextTrackKind kind;
     readonly attribute DOMString label;
@@ -48,10 +47,4 @@
     [RaisesException] void removeCue(TextTrackCue cue);
 
     attribute EventHandler oncuechange;
-
-    // TODO(philipj): These WebVTT extensions have been removed from the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24380
-    [RuntimeEnabled=WebVTTRegions] readonly attribute VTTRegionList regions;
-    [RuntimeEnabled=WebVTTRegions] void addRegion(VTTRegion region);
-    [RaisesException, RuntimeEnabled=WebVTTRegions] void removeRegion(VTTRegion region);
 };
diff --git a/core/html/track/TextTrackCue.idl b/core/html/track/TextTrackCue.idl
index 7e4c6c8..8902e31 100644
--- a/core/html/track/TextTrackCue.idl
+++ b/core/html/track/TextTrackCue.idl
@@ -26,8 +26,7 @@
 // https://html.spec.whatwg.org/#texttrackcue
 
 [
-    GarbageCollected,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime
 ] interface TextTrackCue : EventTarget {
     readonly attribute TextTrack? track;
 
diff --git a/core/html/track/TextTrackCueList.idl b/core/html/track/TextTrackCueList.idl
index 116c75c..b6e90f2 100644
--- a/core/html/track/TextTrackCueList.idl
+++ b/core/html/track/TextTrackCueList.idl
@@ -25,9 +25,7 @@
 
 // https://html.spec.whatwg.org/#texttrackcuelist
 
-[
-    GarbageCollected,
-] interface TextTrackCueList {
+interface TextTrackCueList {
     readonly attribute unsigned long length;
     getter TextTrackCue (unsigned long index);
     TextTrackCue? getCueById(DOMString id);
diff --git a/core/html/track/TextTrackList.idl b/core/html/track/TextTrackList.idl
index cef8012..11ccda8 100644
--- a/core/html/track/TextTrackList.idl
+++ b/core/html/track/TextTrackList.idl
@@ -26,8 +26,7 @@
 // https://html.spec.whatwg.org/#texttracklist
 
 [
-    GarbageCollected,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime
 ] interface TextTrackList : EventTarget {
     readonly attribute unsigned long length;
     getter TextTrack (unsigned long index);
diff --git a/core/html/track/TrackEvent.idl b/core/html/track/TrackEvent.idl
index 29066ef..ac013fb 100644
--- a/core/html/track/TrackEvent.idl
+++ b/core/html/track/TrackEvent.idl
@@ -26,7 +26,7 @@
 // https://html.spec.whatwg.org/multipage/embedded-content.html#the-trackevent-interface
 
 [
-    Constructor(DOMString type, optional TrackEventInit eventInitDict),
+    Constructor(DOMString type, optional TrackEventInit eventInitDict)
 ] interface TrackEvent : Event {
     readonly attribute (VideoTrack or AudioTrack or TextTrack)? track;
 };
diff --git a/core/html/track/VideoTrack.idl b/core/html/track/VideoTrack.idl
index 8a6b8f6..980e8de 100644
--- a/core/html/track/VideoTrack.idl
+++ b/core/html/track/VideoTrack.idl
@@ -5,9 +5,8 @@
 // https://html.spec.whatwg.org/#videotrack
 
 [
-    RuntimeEnabled=AudioVideoTracks,
-    SetWrapperReferenceFrom=owner,
-    GarbageCollected,
+    DependentLifetime,
+    RuntimeEnabled=AudioVideoTracks
 ] 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 79727b7..d3f2d66 100644
--- a/core/html/track/VideoTrackList.idl
+++ b/core/html/track/VideoTrackList.idl
@@ -5,9 +5,8 @@
 // https://html.spec.whatwg.org/#videotracklist
 
 [
-    GarbageCollected,
-    RuntimeEnabled=AudioVideoTracks,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime,
+    RuntimeEnabled=AudioVideoTracks
 ] interface VideoTrackList : EventTarget {
   readonly attribute unsigned long length;
   getter VideoTrack (unsigned long index);
diff --git a/core/html/track/vtt/VTTCue.idl b/core/html/track/vtt/VTTCue.idl
index 93c903b..3ea44af 100644
--- a/core/html/track/vtt/VTTCue.idl
+++ b/core/html/track/vtt/VTTCue.idl
@@ -27,21 +27,20 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/html5/webvtt/#the-vttcue-interface
+// https://w3c.github.io/webvtt/#the-vttcue-interface
 
 enum AutoKeyword { "auto" };
 enum DirectionSetting { "" /* horizontal */, "rl", "lr" };
 // enum LineAlignSetting { "start", "middle", "end" };
 // enum PositionAlignSetting { "start", "middle", "end", "auto" };
-enum AlignSetting { "start", "middle", "end", "left", "right" };
+enum AlignSetting { "start", "center", "end", "left", "right" };
 
 [
     Constructor(double startTime, double endTime, DOMString text),
     ConstructorCallWith=Document,
-    SetWrapperReferenceFrom=owner,
+    DependentLifetime
 ] interface VTTCue : TextTrackCue {
-    // TODO(philipj): regionId has been replaced by a region attribute.
-    [RuntimeEnabled=WebVTTRegions] attribute DOMString regionId;
+    [RuntimeEnabled=WebVTTRegions] attribute VTTRegion? region;
     attribute DirectionSetting vertical;
     attribute boolean snapToLines;
     attribute (double or AutoKeyword) line;
diff --git a/core/html/track/vtt/VTTRegion.idl b/core/html/track/vtt/VTTRegion.idl
index a2843fd..e57a8ef 100644
--- a/core/html/track/vtt/VTTRegion.idl
+++ b/core/html/track/vtt/VTTRegion.idl
@@ -23,25 +23,20 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://dev.w3.org/html5/webvtt/#the-vttregion-interface
+// https://w3c.github.io/webvtt/#the-vttregion-interface
+
+enum ScrollSetting { "" /* none */, "up" };
 
 [
     Constructor,
-    RuntimeEnabled=WebVTTRegions,
-    GarbageCollected,
+    RuntimeEnabled=WebVTTRegions
 ] interface VTTRegion {
+    attribute DOMString id;
     [RaisesException=Setter] attribute double width;
-    // TODO(philipj): height should be called lines.
-    [RaisesException=Setter] attribute long height;
+    [RaisesException=Setter] attribute long lines;
     [RaisesException=Setter] attribute double regionAnchorX;
     [RaisesException=Setter] attribute double regionAnchorY;
     [RaisesException=Setter] attribute double viewportAnchorX;
     [RaisesException=Setter] attribute double viewportAnchorY;
-    // TODO(philip): scroll should be of type ScrollSetting.
-    [RaisesException=Setter] attribute DOMString scroll;
-
-    // TODO(philipj): The track/id attributes are gone from the spec:
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=24380
-    readonly attribute TextTrack track;
-    attribute DOMString id;
+    attribute ScrollSetting scroll;
 };
diff --git a/core/html/track/vtt/VTTRegionList.idl b/core/html/track/vtt/VTTRegionList.idl
deleted file mode 100644
index 8eff2cd..0000000
--- a/core/html/track/vtt/VTTRegionList.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:
- * 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): The VTTRegionList interface has been removed from the spec:
-// https://www.w3.org/Bugs/Public/show_bug.cgi?id=24380
-
-[
-    RuntimeEnabled=WebVTTRegions,
-    GarbageCollected,
-] interface VTTRegionList {
-    readonly attribute unsigned long length;
-    getter VTTRegion item(unsigned long index);
-    VTTRegion getRegionById(DOMString id);
-};
diff --git a/core/imagebitmap/ImageBitmap.idl b/core/imagebitmap/ImageBitmap.idl
new file mode 100644
index 0000000..8e0df94
--- /dev/null
+++ b/core/imagebitmap/ImageBitmap.idl
@@ -0,0 +1,13 @@
+// Copyright 2013 The Chromium 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/#images
+
+[
+    Exposed=(Window,Worker)
+] interface ImageBitmap {
+    readonly attribute unsigned long width;
+    readonly attribute unsigned long height;
+    void close();
+};
diff --git a/core/imagebitmap/ImageBitmapFactories.idl b/core/imagebitmap/ImageBitmapFactories.idl
index 02b3425..5ef7a45 100644
--- a/core/imagebitmap/ImageBitmapFactories.idl
+++ b/core/imagebitmap/ImageBitmapFactories.idl
@@ -31,23 +31,23 @@
 // https://html.spec.whatwg.org/#imagebitmapfactories
 
 typedef (HTMLImageElement or
+         SVGImageElement or
          HTMLVideoElement or
          HTMLCanvasElement or
          Blob or
          ImageData or
-         ImageBitmap) ImageBitmapSource;
+         ImageBitmap or
+         OffscreenCanvas) ImageBitmapSource;
 
 [
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface ImageBitmapFactories {
-    [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);
+    [CallWith=ScriptState] Promise createImageBitmap(
+        ImageBitmapSource imageBitmap, optional ImageBitmapOptions options);
+    [CallWith=ScriptState] Promise createImageBitmap(
+        ImageBitmapSource imageBitmap, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
 };
 
 Window implements ImageBitmapFactories;
diff --git a/core/imagebitmap/ImageBitmapOptions.idl b/core/imagebitmap/ImageBitmapOptions.idl
index e8c231d..cffb30c 100644
--- a/core/imagebitmap/ImageBitmapOptions.idl
+++ b/core/imagebitmap/ImageBitmapOptions.idl
@@ -2,9 +2,17 @@
 // 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" };
+// https://html.spec.whatwg.org/#imagebitmapoptions
+
+enum ImageOrientation { "none", "flipY" };
+enum PremultiplyAlpha { "none", "premultiply", "default" };
+enum ColorSpaceConversion { "none", "default", "srgb", "linear-rgb", "rec2020", "p3" };
+[RuntimeEnabled=ExperimentalCanvasFeatures] enum ResizeQuality { "pixelated", "low", "medium", "high" };
 dictionary ImageBitmapOptions {
-    [RuntimeEnabled=ExperimentalCanvasFeatures] PremultiplyAlpha premultiplyAlpha = "default";
-    [RuntimeEnabled=ExperimentalCanvasFeatures] ImageOrientation imageOrientation = "none";
+    ImageOrientation imageOrientation = "none";
+    PremultiplyAlpha premultiplyAlpha = "default";
+    ColorSpaceConversion colorSpaceConversion = "default";
+    [RuntimeEnabled=ExperimentalCanvasFeatures, EnforceRange] unsigned long resizeWidth;
+    [RuntimeEnabled=ExperimentalCanvasFeatures, EnforceRange] unsigned long resizeHeight;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] ResizeQuality resizeQuality = "low";
 };
diff --git a/core/input/InputDeviceCapabilities.idl b/core/input/InputDeviceCapabilities.idl
index 6263af8..16e39ab 100644
--- a/core/input/InputDeviceCapabilities.idl
+++ b/core/input/InputDeviceCapabilities.idl
@@ -3,18 +3,18 @@
 // found in the LICENSE file.
 
 // Represents capabilities for a group of related input devices.
-// To ease implementation, developers cannot rely on comparing two 
+// 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.
 
+// https://wicg.github.io/InputDeviceCapabilities/#the-inputdevicecapabilities-interface
+
 [
-    Constructor(optional InputDeviceCapabilitiesInit deviceInitDict),
-    RuntimeEnabled=InputDeviceCapabilities,
-    GarbageCollected,
+    Constructor(optional InputDeviceCapabilitiesInit deviceInitDict)
 ] 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.
diff --git a/core/input/InputDeviceCapabilitiesInit.idl b/core/input/InputDeviceCapabilitiesInit.idl
index e7ae86d..a4025d4 100644
--- a/core/input/InputDeviceCapabilitiesInit.idl
+++ b/core/input/InputDeviceCapabilitiesInit.idl
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    RuntimeEnabled=InputDeviceCapabilities,
-] dictionary InputDeviceCapabilitiesInit {
+// https://wicg.github.io/InputDeviceCapabilities/#the-inputdevicecapabilities-interface
+
+dictionary InputDeviceCapabilitiesInit {
     boolean firesTouchEvents = false;
 };
diff --git a/core/input/Touch.idl b/core/input/Touch.idl
new file mode 100644
index 0000000..c526612
--- /dev/null
+++ b/core/input/Touch.idl
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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://w3c.github.io/touch-events/#touch-interface
+
+[
+    Constructor(TouchInit initDict),
+    ConstructorCallWith=Document
+] interface Touch {
+    readonly attribute long identifier;
+    readonly attribute EventTarget target;
+    readonly attribute double screenX;
+    readonly attribute double screenY;
+    readonly attribute double clientX;
+    readonly attribute double clientY;
+    readonly attribute double pageX;
+    readonly attribute double pageY;
+    readonly attribute float radiusX;
+    readonly attribute float radiusY;
+    readonly attribute float rotationAngle;
+    readonly attribute float force;
+
+    // Canvas Hit Regions
+    // https://html.spec.whatwg.org/multipage/scripting.html#Touch-partial
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute DOMString? region;
+};
diff --git a/core/input/TouchInit.idl b/core/input/TouchInit.idl
new file mode 100644
index 0000000..2ae7f0f
--- /dev/null
+++ b/core/input/TouchInit.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://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;
+
+             // Canvas Hit Regions
+             // https://github.com/whatwg/html/issues/547
+             DOMString? region = null;
+};
diff --git a/core/input/TouchList.idl b/core/input/TouchList.idl
new file mode 100644
index 0000000..f8381a4
--- /dev/null
+++ b/core/input/TouchList.idl
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2008, The Android Open Source Project
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``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://w3c.github.io/touch-events/#touchlist-interface
+
+interface TouchList {
+    readonly attribute unsigned long length;
+    getter Touch? item(unsigned long index);
+};
diff --git a/core/inspector/CodeGeneratorInstrumentation.py b/core/inspector/CodeGeneratorInstrumentation.py
deleted file mode 100755
index efcdb6d..0000000
--- a/core/inspector/CodeGeneratorInstrumentation.py
+++ /dev/null
@@ -1,548 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-import optparse
-import re
-import string
-import sys
-
-template_h = string.Template("""// Code generated from InspectorInstrumentation.idl
-
-#ifndef ${file_name}_h
-#define ${file_name}_h
-
-${includes}
-
-namespace blink {
-
-${forward_declarations}
-
-namespace InspectorInstrumentation {
-
-$methods
-} // namespace InspectorInstrumentation
-
-} // namespace blink
-
-#endif // !defined(${file_name}_h)
-""")
-
-template_inline = string.Template("""
-inline void ${name}(${params_public})
-{   ${fast_return}
-    if (${condition})
-        ${name}Impl(${params_impl});
-}
-""")
-
-template_inline_forward = string.Template("""
-inline void ${name}(${params_public})
-{   ${fast_return}
-    ${name}Impl(${params_impl});
-}
-""")
-
-template_inline_returns_value = string.Template("""
-inline ${return_type} ${name}(${params_public})
-{   ${fast_return}
-    if (${condition})
-        return ${name}Impl(${params_impl});
-    return ${default_return_value};
-}
-""")
-
-
-template_cpp = string.Template("""// Code generated from InspectorInstrumentation.idl
-
-${includes}
-
-namespace blink {
-${extra_definitions}
-
-namespace InspectorInstrumentation {
-$methods
-
-} // namespace InspectorInstrumentation
-
-} // namespace blink
-""")
-
-template_outofline = string.Template("""
-${return_type} ${name}Impl(${params_impl})
-{${impl_lines}
-}""")
-
-template_agent_call = string.Template("""
-    if (${agent_class}* agent = ${agent_fetch})
-        ${maybe_return}agent->${name}(${params_agent});""")
-
-template_instrumenting_agents_h = string.Template("""// Code generated from InspectorInstrumentation.idl
-
-#ifndef InstrumentingAgentsInl_h
-#define InstrumentingAgentsInl_h
-
-#include "core/CoreExport.h"
-#include "platform/heap/Handle.h"
-#include "wtf/Allocator.h"
-#include "wtf/Noncopyable.h"
-#include "wtf/PassRefPtr.h"
-#include "wtf/RefCounted.h"
-
-namespace blink {
-
-${forward_list}
-
-class CORE_EXPORT InstrumentingAgents : public RefCountedWillBeGarbageCollectedFinalized<InstrumentingAgents> {
-    WTF_MAKE_NONCOPYABLE(InstrumentingAgents);
-    USING_FAST_MALLOC_WILL_BE_REMOVED(InstrumentingAgents);
-public:
-    static PassRefPtrWillBeRawPtr<InstrumentingAgents> create()
-    {
-        return adoptRefWillBeNoop(new InstrumentingAgents());
-    }
-    ~InstrumentingAgents() { }
-    DECLARE_TRACE();
-    void reset();
-
-${accessor_list}
-
-private:
-    InstrumentingAgents();
-
-${member_list}
-};
-
-}
-
-#endif // !defined(InstrumentingAgentsInl_h)
-""")
-
-template_instrumenting_agent_accessor = string.Template("""
-    ${class_name}* ${getter_name}() const { return ${member_name}; }
-    void set${class_name}(${class_name}* agent) { ${member_name} = agent; }""")
-
-template_instrumenting_agents_cpp = string.Template("""
-InstrumentingAgents::InstrumentingAgents()
-    : $init_list
-{
-}
-
-DEFINE_TRACE(InstrumentingAgents)
-{
-    $trace_list
-}
-
-void InstrumentingAgents::reset()
-{
-    $reset_list
-}""")
-
-
-
-def match_and_consume(pattern, source):
-    match = re.match(pattern, source)
-    if match:
-        return match, source[len(match.group(0)):].strip()
-    return None, source
-
-
-def load_model_from_idl(source):
-    source = re.sub("//.*", "", source)  # Remove line comments
-    source = re.sub("/\*(.|\n)*?\*/", "", source, re.MULTILINE)  # Remove block comments
-    source = re.sub("\]\s*?\n\s*", "] ", source)  # Merge the method annotation with the next line
-    source = source.strip()
-
-    model = []
-
-    while len(source):
-        match, source = match_and_consume("interface\s(\w*)\s?\{([^\{]*)\}", source)
-        if not match:
-            sys.stderr.write("Cannot parse %s\n" % source[:100])
-            sys.exit(1)
-        model.append(File(match.group(1), match.group(2)))
-
-    return model
-
-
-class File:
-    def __init__(self, name, source):
-        self.name = name
-        self.header_name = self.name + "Inl"
-        self.includes = [include_inspector_header("InspectorInstrumentation")]
-        self.forward_declarations = []
-        self.declarations = []
-        for line in map(str.strip, source.split("\n")):
-            line = re.sub("\s{2,}", " ", line).strip()  # Collapse whitespace
-            if len(line) == 0:
-                continue
-            if line[0] == "#":
-                self.includes.append(line)
-            elif line.startswith("class "):
-                self.forward_declarations.append(line)
-            else:
-                self.declarations.append(Method(line))
-        self.includes.sort()
-        self.forward_declarations.sort()
-
-    def generate(self, cpp_lines, used_agents):
-        header_lines = []
-        for declaration in self.declarations:
-            for agent in set(declaration.agents):
-                used_agents.add(agent)
-            declaration.generate_header(header_lines)
-            declaration.generate_cpp(cpp_lines)
-
-        return template_h.substitute(None,
-                                     file_name=self.header_name,
-                                     includes="\n".join(self.includes),
-                                     forward_declarations="\n".join(self.forward_declarations),
-                                     methods="\n".join(header_lines))
-
-
-class Method:
-    def __init__(self, source):
-        match = re.match("(\[[\w|,|=|\s]*\])?\s?(\w*\*?) (\w*)\((.*)\)\s?;", source)
-        if not match:
-            sys.stderr.write("Cannot parse %s\n" % source)
-            sys.exit(1)
-
-        self.options = []
-        if match.group(1):
-            options_str = re.sub("\s", "", match.group(1)[1:-1])
-            if len(options_str) != 0:
-                self.options = options_str.split(",")
-
-        self.return_type = match.group(2)
-
-        self.name = match.group(3)
-
-        # Splitting parameters by a comma, assuming that attribute lists contain no more than one attribute.
-        self.params = map(Parameter, map(str.strip, match.group(4).split(",")))
-
-        self.accepts_cookie = len(self.params) and self.params[0].type == "const InspectorInstrumentationCookie&"
-        self.returns_cookie = self.return_type == "InspectorInstrumentationCookie"
-
-        self.returns_value = self.return_type != "void"
-
-        if self.return_type == "bool":
-            self.default_return_value = "false"
-        elif self.return_type == "int":
-            self.default_return_value = "0"
-        elif self.return_type == "String":
-            self.default_return_value = "\"\""
-        else:
-            self.default_return_value = self.return_type + "()"
-
-        for param in self.params:
-            if "DefaultReturn" in param.options:
-                self.default_return_value = param.name
-
-        self.params_impl = self.params
-        if not self.accepts_cookie and not "Inline=Forward" in self.options:
-            if not "Keep" in self.params_impl[0].options:
-                self.params_impl = self.params_impl[1:]
-            self.params_impl = [Parameter("InstrumentingAgents* agents")] + self.params_impl
-
-        self.agents = filter(lambda option: not "=" in option, self.options)
-
-    def generate_header(self, header_lines):
-        if "Inline=Custom" in self.options:
-            return
-
-        header_lines.append("CORE_EXPORT %s %sImpl(%s);" % (
-            self.return_type, self.name, ", ".join(map(Parameter.to_str_class, self.params_impl))))
-
-        if "Inline=FastReturn" in self.options or "Inline=Forward" in self.options:
-            fast_return = "\n    FAST_RETURN_IF_NO_FRONTENDS(%s);" % self.default_return_value
-        else:
-            fast_return = ""
-
-        for param in self.params:
-            if "FastReturn" in param.options:
-                fast_return += "\n    if (!%s)\n        return %s;" % (param.name, self.default_return_value)
-
-        if self.accepts_cookie:
-            condition = "%s.isValid()" % self.params_impl[0].name
-            template = template_inline
-        elif "Inline=Forward" in self.options:
-            condition = ""
-            template = template_inline_forward
-        else:
-            condition = "InstrumentingAgents* agents = instrumentingAgentsFor(%s)" % self.params[0].name
-
-            if self.returns_value:
-                template = template_inline_returns_value
-            else:
-                template = template_inline
-
-        header_lines.append(template.substitute(
-            None,
-            name=self.name,
-            fast_return=fast_return,
-            return_type=self.return_type,
-            default_return_value=self.default_return_value,
-            params_public=", ".join(map(Parameter.to_str_full, self.params)),
-            params_impl=", ".join(map(Parameter.to_str_name, self.params_impl)),
-            condition=condition))
-
-    def generate_cpp(self, cpp_lines):
-        if len(self.agents) == 0:
-            return
-
-        body_lines = map(self.generate_ref_ptr, self.params)
-        body_lines += map(self.generate_agent_call, self.agents)
-
-        if self.returns_cookie:
-            body_lines.append("\n    return InspectorInstrumentationCookie(agents);")
-        elif self.returns_value:
-            body_lines.append("\n    return %s;" % self.default_return_value)
-
-        generated_outofline = template_outofline.substitute(
-            None,
-            return_type=self.return_type,
-            name=self.name,
-            params_impl=", ".join(map(Parameter.to_str_class_and_name, self.params_impl)),
-            impl_lines="".join(body_lines))
-        if generated_outofline not in cpp_lines:
-            cpp_lines.append(generated_outofline)
-
-    def generate_agent_call(self, agent):
-        agent_class, agent_getter = agent_getter_signature(agent)
-
-        leading_param_name = self.params_impl[0].name
-        if not self.accepts_cookie:
-            agent_fetch = "%s->%s()" % (leading_param_name, agent_getter)
-        else:
-            agent_fetch = "%s.instrumentingAgents()->%s()" % (leading_param_name, agent_getter)
-
-        template = template_agent_call
-
-        if not self.returns_value or self.returns_cookie:
-            maybe_return = ""
-        else:
-            maybe_return = "return "
-
-        return template.substitute(
-            None,
-            name=self.name,
-            agent_class=agent_class,
-            agent_fetch=agent_fetch,
-            maybe_return=maybe_return,
-            params_agent=", ".join(map(Parameter.to_str_value, self.params_impl)[1:]))
-
-    def generate_ref_ptr(self, param):
-        if param.is_prp:
-            return "\n    RefPtr<%s> %s = %s;" % (param.inner_type, param.value, param.name)
-        else:
-            return ""
-
-class Parameter:
-    def __init__(self, source):
-        self.options = []
-        match, source = match_and_consume("\[(\w*)\]", source)
-        if match:
-            self.options.append(match.group(1))
-
-        parts = map(str.strip, source.split("="))
-        if len(parts) == 1:
-            self.default_value = None
-        else:
-            self.default_value = parts[1]
-
-        param_decl = parts[0]
-
-        if re.match("(const|unsigned long) ", param_decl):
-            min_type_tokens = 2
-        else:
-            min_type_tokens = 1
-
-        if len(param_decl.split(" ")) > min_type_tokens:
-            parts = param_decl.split(" ")
-            self.type = " ".join(parts[:-1])
-            self.name = parts[-1]
-        else:
-            self.type = param_decl
-            self.name = generate_param_name(self.type)
-
-        if re.match("PassRefPtr<", param_decl):
-            self.is_prp = True
-            self.value = self.name
-            self.name = "prp" + self.name[0].upper() + self.name[1:]
-            self.inner_type = re.match("PassRefPtr<(.+)>", param_decl).group(1)
-        else:
-            self.is_prp = False
-            self.value = self.name
-
-
-    def to_str_full(self):
-        if self.default_value is None:
-            return self.to_str_class_and_name()
-        return "%s %s = %s" % (self.type, self.name, self.default_value)
-
-    def to_str_class_and_name(self):
-        return "%s %s" % (self.type, self.name)
-
-    def to_str_class(self):
-        return self.type
-
-    def to_str_name(self):
-        return self.name
-
-    def to_str_value(self):
-        return self.value
-
-
-def generate_param_name(param_type):
-    base_name = re.match("(const |PassRefPtr<)?(\w*)", param_type).group(2)
-    return "param" + base_name
-
-
-def agent_class_name(agent):
-    custom_agent_names = ["PageDebugger", "PageRuntime", "WorkerRuntime", "PageConsole"]
-    if agent in custom_agent_names:
-        return "%sAgent" % agent
-    if agent == "AsyncCallTracker":
-        return agent
-    return "Inspector%sAgent" % agent
-
-
-def agent_getter_signature(agent):
-    agent_class = agent_class_name(agent)
-    return agent_class, agent_class[0].lower() + agent_class[1:]
-
-
-def include_header(name):
-    return "#include \"%s.h\"" % name
-
-
-def include_inspector_header(name):
-    return include_header("core/inspector/" + name)
-
-
-def generate_instrumenting_agents(used_agents):
-    agents = list(used_agents)
-
-    forward_list = []
-    accessor_list = []
-    member_list = []
-    init_list = []
-    trace_list = []
-    reset_list = []
-
-    for agent in agents:
-        class_name, getter_name = agent_getter_signature(agent)
-        member_name = "m_" + getter_name
-
-        forward_list.append("class %s;" % class_name)
-        accessor_list.append(template_instrumenting_agent_accessor.substitute(
-            None,
-            class_name=class_name,
-            getter_name=getter_name,
-            member_name=member_name))
-        member_list.append("    RawPtrWillBeMember<%s> %s;" % (class_name, member_name))
-        init_list.append("%s(nullptr)" % member_name)
-        trace_list.append("visitor->trace(%s);" % member_name)
-        reset_list.append("%s = nullptr;" % member_name)
-
-    forward_list.sort()
-    accessor_list.sort()
-    member_list.sort()
-    init_list.sort()
-    trace_list.sort()
-    reset_list.sort()
-
-    header_lines = template_instrumenting_agents_h.substitute(
-        None,
-        forward_list="\n".join(forward_list),
-        accessor_list="\n".join(accessor_list),
-        member_list="\n".join(member_list))
-
-    cpp_lines = template_instrumenting_agents_cpp.substitute(
-        None,
-        init_list="\n    , ".join(init_list),
-        trace_list="\n    ".join(trace_list),
-        reset_list="\n    ".join(reset_list))
-
-    return header_lines, cpp_lines
-
-
-def generate(input_path, output_dir):
-    fin = open(input_path, "r")
-    files = load_model_from_idl(fin.read())
-    fin.close()
-
-    cpp_includes = []
-    cpp_lines = []
-    used_agents = set()
-    for f in files:
-        cpp_includes.append(include_header(f.header_name))
-
-        fout = open(output_dir + "/" + f.header_name + ".h", "w")
-        fout.write(f.generate(cpp_lines, used_agents))
-        fout.close()
-
-    for agent in used_agents:
-        cpp_includes.append(include_inspector_header(agent_class_name(agent)))
-    cpp_includes.append(include_header("InstrumentingAgentsInl"))
-    cpp_includes.append(include_header("core/CoreExport"))
-    cpp_includes.sort()
-
-    instrumenting_agents_header, instrumenting_agents_cpp = generate_instrumenting_agents(used_agents)
-
-    fout = open(output_dir + "/" + "InstrumentingAgentsInl.h", "w")
-    fout.write(instrumenting_agents_header)
-    fout.close()
-
-    fout = open(output_dir + "/InspectorInstrumentationImpl.cpp", "w")
-    fout.write(template_cpp.substitute(None,
-                                       includes="\n".join(cpp_includes),
-                                       extra_definitions=instrumenting_agents_cpp,
-                                       methods="\n".join(cpp_lines)))
-    fout.close()
-
-
-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_path = arg_values[0]
-    output_dirpath = arg_options.output_dir
-    if not output_dirpath:
-        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> InspectorInstrumentation.idl\n")
-    exit(1)
-
-generate(input_path, output_dirpath)
diff --git a/core/inspector/DevToolsHost.idl b/core/inspector/DevToolsHost.idl
index 096fd64..7aca074 100644
--- a/core/inspector/DevToolsHost.idl
+++ b/core/inspector/DevToolsHost.idl
@@ -31,13 +31,10 @@
  */
 
 [
-    WillBeGarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface DevToolsHost {
     float zoomFactor();
 
-    void setInjectedScriptForOrigin(DOMString origin, DOMString script);
-
     void copyText(DOMString text);
 
     [Custom] DOMString platform();
diff --git a/core/inspector/InspectorInstrumentation.idl b/core/inspector/InspectorInstrumentation.idl
deleted file mode 100644
index 260db42..0000000
--- a/core/inspector/InspectorInstrumentation.idl
+++ /dev/null
@@ -1,454 +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.
-*/
-
-/*
-* CodeGeneratorInstrumentation.py uses this file as a source to generate
-* InspectorInstrumentationInl.h and InspectorInstrumentationImpl.cpp
-*
-* The code below is not a correct IDL but a mix of IDL and C++.
-*
-* The syntax for an instrumentation method is as follows:
-*
-*    [methodAttributes] returnValue methodName([paramAttr1] param1, [paramAttr2] param2, ...)
-*
-* Where:
-*   methodAttributes - optional list of method attributes.
-*       Attributes containing "=" are code generation options:
-*           Inline=Custom - do not generate the public inline method.
-*           Inline=FastReturn - return early from the inline method if there are no frontends.
-*           Inline=Forward - generate a simple forwarding inline method that does not
-                             modify the parameter list (implies Inline=FastReturn)
-*       Attributes without "=" are the names of the agents to be invoked.
-*           Examples: DOM, Page, Debugger.
-*
-*   paramAttr - optional attribute controlling the parameters handling (one attribute per parameter max).
-*       Keep - pass first parameter (used to access the InstrumentingAgents instance) to agents.
-*       FastReturn - return early from the inline method if this parameter is 0/false.
-*
-*   returnValue: C++ return value. Only "void" and "InspectorInstrumentationCookie" are supported.
-*
-*   methodName: C++ name for the public instrumentation method and agents methods.
-*
-*   paramList: C++ parameter list with optional names. Names will be deduced from types if omitted but you have to
-*        specify explicit names for multiple parameters of the same type.
-*
-* Parameters with type PassRefPtr<T> are converted to raw pointers,
-* so reference will not be passed or released until all agents are notified.
-*/
-
-interface InspectorInstrumentation {
-
-#include "core/dom/PseudoElement.h"
-
-    // We should call PageDebuggerAgent method first otherwise this method resets script cache and removes scripts executed by other agents.
-    [PageDebugger, Page, PageRuntime, Animation]
-    void didClearDocumentOfWindowObject([Keep] LocalFrame*);
-
-    [DOMDebugger, Inline=FastReturn]
-    void willCloseWindow(ExecutionContext*);
-
-    [DOMDebugger, Inline=FastReturn]
-    void willInsertDOMNode([Keep] Node* parent);
-
-    [DOM, DOMDebugger, Inline=FastReturn]
-    void didInsertDOMNode([Keep] Node*);
-
-    [DOMDebugger, DOM, Inline=FastReturn]
-    void willRemoveDOMNode([Keep] Node*);
-
-    [DOMDebugger, DOM, Inline=FastReturn]
-    void willModifyDOMAttr([Keep] Element*, const AtomicString& oldValue, const AtomicString& newValue);
-
-    [DOM, Inline=FastReturn]
-    void didModifyDOMAttr([Keep] Element*, const QualifiedName& name, const AtomicString& value);
-
-    [DOM, Inline=FastReturn]
-    void didRemoveDOMAttr([Keep] Element*, const QualifiedName& name);
-
-    [DOM, Inline=FastReturn]
-    void characterDataModified([Keep] CharacterData*);
-
-    [DOM, DOMDebugger, Inline=FastReturn]
-    void didInvalidateStyleAttr([Keep] Node*);
-
-    [DOM, Inline=FastReturn]
-    void didPerformElementShadowDistribution([Keep] Element*);
-
-    [CSS]
-    void documentDetached([Keep] Document*);
-
-    [CSS, Inline=FastReturn]
-    void activeStyleSheetsUpdated([Keep] Document*);
-
-    [CSS, Inline=FastReturn]
-    void mediaQueryResultChanged(Document*);
-
-    [DOM, Inline=FastReturn]
-    void didPushShadowRoot([Keep] Element* host, ShadowRoot*);
-
-    [DOM, Inline=FastReturn]
-    void willPopShadowRoot([Keep] Element* host, ShadowRoot*);
-
-    [DOMDebugger]
-    void willSetInnerHTML(Element* element);
-
-    [DOMDebugger, Inline=FastReturn]
-    void willSendXMLHttpRequest(ExecutionContext*, const String& url);
-
-    [DOMDebugger, Inline=FastReturn]
-    void didFireWebGLError(Element*, const String& errorName);
-
-    [DOMDebugger, Inline=FastReturn]
-    void didFireWebGLWarning(Element*);
-
-    [DOMDebugger, Inline=FastReturn]
-    void didFireWebGLErrorOrWarning(Element*, const String& message);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    void didInstallTimer([Keep] ExecutionContext*, int timerId, int timeout, bool singleShot);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    void didRemoveTimer([Keep] ExecutionContext*, int timerId);
-
-    [Debugger, Inline=FastReturn]
-    InspectorInstrumentationCookie willExecuteScript(ExecutionContext*, int scriptId);
-
-    [Debugger, Inline=FastReturn]
-    void didExecuteScript(const InspectorInstrumentationCookie&);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didEnqueueEvent([Keep] EventTarget*, Event*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didRemoveEvent([Keep] EventTarget*, Event*);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    InspectorInstrumentationCookie willHandleEvent([Keep] EventTarget*, Event*, EventListener* listener, bool useCapture);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    void didHandleEvent(const InspectorInstrumentationCookie&);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didEnqueueMutationRecord([Keep] ExecutionContext*, MutationObserver*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didClearAllMutationRecords([Keep] ExecutionContext*, MutationObserver*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void willDeliverMutationRecords([Keep] ExecutionContext*, MutationObserver*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didDeliverMutationRecords(ExecutionContext*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didPostExecutionContextTask([Keep] ExecutionContext*, ExecutionContextTask*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didKillAllExecutionContextTasks([Keep] ExecutionContext*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void willPerformExecutionContextTask([Keep] ExecutionContext*, ExecutionContextTask*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didPerformExecutionContextTask(ExecutionContext*);
-
-    [DOMDebugger, Inline=FastReturn]
-    void willEvaluateScript(ExecutionContext*);
-
-    [PageRuntime]
-    void didCreateScriptContext([Keep] LocalFrame*, ScriptState*, SecurityOrigin*, int worldId);
-
-    [PageRuntime, Inline=FastReturn]
-    void willReleaseScriptContext([Keep] LocalFrame*, ScriptState*);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    InspectorInstrumentationCookie willFireTimer([Keep] ExecutionContext*, int timerId);
-
-    [AsyncCallTracker, DOMDebugger, Inline=FastReturn]
-    void didFireTimer(const InspectorInstrumentationCookie&);
-
-    [Page, Inline=FastReturn]
-    void didUpdateLayout(LocalFrame*);
-
-    [Page, Inline=FastReturn]
-    void didResizeMainFrame(LocalFrame*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didDispatchXHRLoadendEvent(ExecutionContext*, XMLHttpRequest*);
-
-    [LayerTree, Inline=FastReturn]
-    void didPaint([Keep] LayoutObject*, const GraphicsLayer*, GraphicsContext&, const LayoutRect&);
-
-    [Resource, Inline=FastReturn]
-    InspectorInstrumentationCookie willRecalculateStyle([Keep] Document*);
-
-    [Resource, Page, Inline=FastReturn]
-    void didRecalculateStyle(const InspectorInstrumentationCookie&, int elementCount);
-
-    [Resource, Inline=FastReturn]
-    void didScheduleStyleRecalculation([Keep] Document*);
-
-    [Resource, Inline=FastReturn]
-    void applyUserAgentOverride(LocalFrame*, String* userAgent);
-
-    [Resource]
-    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);
-
-    [Resource]
-    void didReceiveResourceResponse([Keep] LocalFrame*, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
-
-    [Inline=Forward]
-    void continueAfterXFrameOptionsDenied(LocalFrame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
-
-    [Inline=Forward]
-    void continueWithPolicyIgnore(LocalFrame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
-
-    [Resource, Inline=FastReturn]
-    void didReceiveData([Keep] LocalFrame*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
-
-    [Resource]
-    void didFinishLoading(LocalFrame* frame, unsigned long identifier, double finishTime, int64_t encodedDataLength);
-
-    [Resource]
-    void didReceiveCORSRedirectResponse([Keep] LocalFrame*, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
-
-    [Resource]
-    void didFailLoading(LocalFrame* frame, unsigned long identifier, const ResourceError&);
-
-    [Resource]
-    void documentThreadableLoaderStartedLoadingForClient(ExecutionContext*, unsigned long identifier, ThreadableLoaderClient* client);
-
-    [Resource]
-    void willSendEventSourceRequest(ExecutionContext*, ThreadableLoaderClient* eventSource);
-
-    [Resource]
-    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<EncodedFormData>, const HTTPHeaderMap& headers, bool includeCredentials);
-
-    [Resource]
-    void didFailXHRLoading([Keep] ExecutionContext*, XMLHttpRequest* xhr, ThreadableLoaderClient* client, const AtomicString& method, const String& url);
-
-    [Resource]
-    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]
-    void scriptExecutionBlockedByCSP(ExecutionContext*, const String& directiveText);
-
-    [Resource]
-    void didReceiveScriptResponse(ExecutionContext*, unsigned long identifier);
-
-    [PageDebugger]
-    void didStartProvisionalLoad([Keep] LocalFrame*);
-
-    [DOM, Page]
-    void domContentLoadedEventFired([Keep] LocalFrame*);
-
-    [Page]
-    void loadEventFired([Keep] LocalFrame*);
-
-    [Page]
-    void frameAttachedToParent([Keep] LocalFrame*);
-
-    [Page]
-    void frameDetachedFromParent([Keep] LocalFrame*);
-
-    [Resource, DOM, Page]
-    void didCommitLoad([Keep] LocalFrame*, DocumentLoader*);
-
-    [DOM, Inline=FastReturn]
-    void frameDocumentUpdated([Keep] LocalFrame*);
-
-    [Page]
-    void frameStartedLoading([Keep] LocalFrame*);
-
-    [Page]
-    void frameStoppedLoading([Keep] LocalFrame*);
-
-    [Page, Resource]
-    void frameScheduledNavigation([Keep] LocalFrame*, double delay);
-
-    [Page, Resource]
-    void frameClearedScheduledNavigation([Keep] LocalFrame*);
-
-    [Page, Inline=FastReturn]
-    InspectorInstrumentationCookie willRunJavaScriptDialog(LocalFrame*, const String& message, ChromeClient::DialogType dialogType);
-
-    [Page, Inline=FastReturn]
-    void didRunJavaScriptDialog(const InspectorInstrumentationCookie&, bool result);
-
-    [Inline=Forward]
-    void removedResourceFromMemoryCache(Resource* cachedResource);
-
-    [AsyncCallTracker, DOMDebugger]
-    void didRequestAnimationFrame([Keep] ExecutionContext*, int callbackId);
-
-    [AsyncCallTracker, DOMDebugger]
-    void didCancelAnimationFrame([Keep] ExecutionContext*, int callbackId);
-
-    [AsyncCallTracker, DOMDebugger]
-    InspectorInstrumentationCookie willFireAnimationFrame([Keep] ExecutionContext*, int callbackId);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void didFireAnimationFrame(const InspectorInstrumentationCookie&);
-
-    [Worker]
-    void didStartWorker(ExecutionContext*, WorkerInspectorProxy* proxy, const KURL& url);
-
-    [Worker, PageConsole]
-    void workerTerminated(ExecutionContext*, WorkerInspectorProxy* proxy);
-
-    [Profiler]
-    void willProcessTask(WorkerGlobalScope* context);
-
-    [Profiler]
-    void didProcessTask(WorkerGlobalScope* context);
-
-    [Profiler]
-    void willEnterNestedRunLoop(WorkerGlobalScope* context);
-
-    [Profiler]
-    void didLeaveNestedRunLoop(WorkerGlobalScope* context);
-
-    [Resource]
-    void didCreateWebSocket([Keep] Document*, unsigned long identifier, const KURL& requestURL, const String& protocol);
-
-    [Resource]
-    void willSendWebSocketHandshakeRequest([Keep] Document*, unsigned long identifier, const WebSocketHandshakeRequest* request);
-
-    [Resource]
-    void didReceiveWebSocketHandshakeResponse([Keep] Document*, unsigned long identifier, const WebSocketHandshakeRequest* request, const WebSocketHandshakeResponse* response);
-
-    [Resource]
-    void didCloseWebSocket([Keep] Document*, unsigned long identifier);
-
-    [Resource]
-    void didReceiveWebSocketFrame(Document*, unsigned long identifier, int opCode, bool masked, const char* payload, size_t payloadLength);
-
-    [Resource]
-    void didSendWebSocketFrame(Document*, unsigned long identifier, int opCode, bool masked, const char* payload, size_t payloadLength);
-
-    [Resource]
-    void didReceiveWebSocketFrameError(Document*, unsigned long identifier, const String& errorMessage);
-
-    [ApplicationCache, Inline=FastReturn]
-    void networkStateChanged([Keep] LocalFrame*, bool online);
-
-    [ApplicationCache, Inline=FastReturn]
-    void updateApplicationCacheStatus([Keep] LocalFrame*);
-
-    [LayerTree, Inline=FastReturn]
-    void layerTreeDidChange(LocalFrame*);
-
-    [DOM, Inline=FastReturn]
-    void pseudoElementCreated([Keep] PseudoElement*);
-
-    [DOM, Inline=FastReturn]
-    void pseudoElementDestroyed([Keep] PseudoElement*);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    int traceAsyncOperationStarting([Keep] ExecutionContext*, const String& operationName);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    int traceAsyncOperationStarting([Keep] ExecutionContext*, const String& operationName, int prevOperationId);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void traceAsyncOperationCompleted([Keep] ExecutionContext*, int operationId);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    InspectorInstrumentationCookie traceAsyncOperationCompletedCallbackStarting([Keep] ExecutionContext*, int operationId);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    InspectorInstrumentationCookie traceAsyncCallbackStarting([Keep] ExecutionContext*, int operationId);
-
-    [AsyncCallTracker, Inline=FastReturn]
-    void traceAsyncCallbackCompleted(const InspectorInstrumentationCookie&);
-
-    [Animation, Inline=FastReturn]
-    void didCreateAnimation(Document*, unsigned);
-
-    [Animation, Inline=FastReturn]
-    void animationPlayStateChanged(Document*, Animation*, Animation::AnimationPlayState oldPlayState, Animation::AnimationPlayState newPlayState);
-
-    [Page, Inline=FastReturn]
-    void windowCreated(LocalFrame* opener, LocalFrame* created);
-}
-
-interface InspectorConsoleInstrumentation {
-
-#include "core/inspector/ScriptArguments.h"
-
-class ConsoleMessage;
-
-    [Console]
-    void addMessageToConsole(ExecutionContext* context, ConsoleMessage* consoleMessage);
-
-    [Profiler, Inline=FastReturn]
-    void consoleProfile([Keep] ExecutionContext* context, const String& title);
-
-    [Profiler, Inline=FastReturn]
-    void consoleProfileEnd(ExecutionContext* context, const String& title);
-
-    [Console]
-    void consoleMessagesCleared(ExecutionContext* context);
-}
-
-interface InspectorOverrides {
-    [CSS, Inline=FastReturn]
-    bool forcePseudoState([Keep] Element* element, CSSSelector::PseudoType pseudoState);
-
-    [Worker, Inline=FastReturn]
-    bool shouldPauseDedicatedWorkerOnStart(ExecutionContext* context);
-
-    [Resource, Inline=FastReturn]
-    bool shouldForceCORSPreflight(Document*);
-}
diff --git a/core/inspector/InspectorOverlayHost.idl b/core/inspector/InspectorOverlayHost.idl
index c35fdeb..2f1978e 100644
--- a/core/inspector/InspectorOverlayHost.idl
+++ b/core/inspector/InspectorOverlayHost.idl
@@ -29,15 +29,8 @@
  */
 
 [
-    WillBeGarbageCollected,
     NoInterfaceObject
 ] interface InspectorOverlayHost {
     void resume();
     void stepOver();
-    void startPropertyChange(DOMString propertyName);
-    void changeProperty(float cssDelta);
-    void endPropertyChange();
-    void clearSelection(boolean commitChanges);
-    void nextSelector();
-    void previousSelector();
 };
diff --git a/core/inspector/PRESUBMIT.py b/core/inspector/PRESUBMIT.py
new file mode 100644
index 0000000..5465d00
--- /dev/null
+++ b/core/inspector/PRESUBMIT.py
@@ -0,0 +1,35 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+def _CompileDevtoolsFrontend(input_api, output_api):
+    # Need to get all affected files from change (not just within this subtree)
+    local_paths = [f.AbsoluteLocalPath() for f in input_api.change.AffectedFiles()]
+    devtools = input_api.os_path.realpath(
+        input_api.os_path.join(input_api.PresubmitLocalPath(), '..', '..', 'devtools'))
+
+    # If a devtools file is changed, the PRESUBMIT hook in Source/devtools
+    # will run closure compiler
+    if (any("browser_protocol.json" in path for path in local_paths) and
+            all(devtools not in path for path in local_paths)):
+        compile_path = input_api.os_path.join(
+            input_api.PresubmitLocalPath(), "..", "..", "devtools", "scripts", "compile_frontend.py")
+        out, _ = input_api.subprocess.Popen(
+            [input_api.python_executable, compile_path], stdout=input_api.subprocess.PIPE,
+            stderr=input_api.subprocess.STDOUT).communicate()
+        if "ERROR" in out or "WARNING" in out:
+            return [output_api.PresubmitError(out)]
+        if "NOTE" in out:
+            return [output_api.PresubmitPromptWarning(out)]
+    return []
+
+
+def CheckChangeOnUpload(input_api, output_api):
+    results = []
+    results.extend(_CompileDevtoolsFrontend(input_api, output_api))
+    return results
+
+
+def CheckChangeOnCommit(input_api, output_api):
+    return []
diff --git a/core/intersection_observer/IntersectionObserver.idl b/core/intersection_observer/IntersectionObserver.idl
new file mode 100644
index 0000000..31773be
--- /dev/null
+++ b/core/intersection_observer/IntersectionObserver.idl
@@ -0,0 +1,26 @@
+// 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/IntersectionObserver/#intersection-observer-callback
+
+callback IntersectionObserverCallback = void (sequence<IntersectionObserverEntry> entries, IntersectionObserver observer);
+
+// https://wicg.github.io/IntersectionObserver/#intersection-observer-interface
+
+[
+    Constructor(IntersectionObserverCallback callback, optional IntersectionObserverInit options),
+    ConstructorCallWith=ScriptState,
+    MeasureAs=IntersectionObserver_Constructor,
+    RaisesException=Constructor,
+    DependentLifetime
+] interface IntersectionObserver {
+    readonly attribute Element? root;
+    readonly attribute DOMString rootMargin;
+    // https://github.com/WICG/IntersectionObserver/issues/114
+    readonly attribute FrozenArray<double> thresholds;
+    [RaisesException] void observe(Element target);
+    [RaisesException] void unobserve(Element target);
+    [RaisesException] void disconnect();
+    [RaisesException] sequence<IntersectionObserverEntry> takeRecords();
+};
diff --git a/core/intersection_observer/IntersectionObserverEntry.idl b/core/intersection_observer/IntersectionObserverEntry.idl
new file mode 100644
index 0000000..fb26cf2
--- /dev/null
+++ b/core/intersection_observer/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://wicg.github.io/IntersectionObserver/#intersection-observer-entry
+
+interface IntersectionObserverEntry {
+    readonly attribute DOMHighResTimeStamp time;
+    // TODO(szager): |rootBounds| should not be nullable.
+    readonly attribute DOMRectReadOnly? rootBounds;
+    readonly attribute DOMRectReadOnly boundingClientRect;
+    readonly attribute DOMRectReadOnly intersectionRect;
+    readonly attribute boolean isIntersecting;
+    readonly attribute double intersectionRatio;
+    readonly attribute Element target;
+};
diff --git a/core/intersection_observer/IntersectionObserverInit.idl b/core/intersection_observer/IntersectionObserverInit.idl
new file mode 100644
index 0000000..ef0de4a
--- /dev/null
+++ b/core/intersection_observer/IntersectionObserverInit.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://wicg.github.io/IntersectionObserver/#intersection-observer-init
+
+dictionary IntersectionObserverInit {
+    Element? root = null;
+    DOMString rootMargin = "0px";
+    (double or sequence<double>) threshold = 0;
+};
diff --git a/core/loader/appcache/ApplicationCache.idl b/core/loader/appcache/ApplicationCache.idl
index de2ca5f..1cfcf6f 100644
--- a/core/loader/appcache/ApplicationCache.idl
+++ b/core/loader/appcache/ApplicationCache.idl
@@ -26,9 +26,8 @@
 // https://html.spec.whatwg.org/#application-cache-api
 
 [
-    DoNotCheckConstants,
-    GarbageCollected,
-    // TODO(philipj): Exposed=(Window,SharedWorker)
+    DoNotCheckConstants
+    // TODO(foolip): Exposed=(Window,SharedWorker)
 ] interface ApplicationCache : EventTarget {
     // update status
     const unsigned short UNCACHED = 0;
diff --git a/core/mojo/Mojo.idl b/core/mojo/Mojo.idl
new file mode 100644
index 0000000..294f0b8
--- /dev/null
+++ b/core/mojo/Mojo.idl
@@ -0,0 +1,50 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// IDL for mojo core module. This is not a specced IDL.
+
+typedef unsigned long MojoResult;
+
+enum MojoScope {
+  // Refers to the InterfaceProvider associated with the current execution
+  // context. Either a Document or WorkerGlobalScope.
+  "context",
+  // Refers to the InterfaceProvider of the current process.
+  //
+  // Note: A "process" is not a web concept. In some cases the browser process
+  // concept of a "site instance" may be useful however there is currently no
+  // InterfaceProvider per site instance.
+  "process",
+};
+
+[
+    ContextEnabled=MojoJS,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=MojoJS
+] interface Mojo {
+    const MojoResult RESULT_OK = 0;
+    const MojoResult RESULT_CANCELLED = 1;
+    const MojoResult RESULT_UNKNOWN = 2;
+    const MojoResult RESULT_INVALID_ARGUMENT = 3;
+    const MojoResult RESULT_DEADLINE_EXCEEDED = 4;
+    const MojoResult RESULT_NOT_FOUND = 5;
+    const MojoResult RESULT_ALREADY_EXISTS = 6;
+    const MojoResult RESULT_PERMISSION_DENIED = 7;
+    const MojoResult RESULT_RESOURCE_EXHAUSTED = 8;
+    const MojoResult RESULT_FAILED_PRECONDITION = 9;
+    const MojoResult RESULT_ABORTED = 10;
+    const MojoResult RESULT_OUT_OF_RANGE = 11;
+    const MojoResult RESULT_UNIMPLEMENTED = 12;
+    const MojoResult RESULT_INTERNAL = 13;
+    const MojoResult RESULT_UNAVAILABLE = 14;
+    const MojoResult RESULT_DATA_LOSS = 15;
+    const MojoResult RESULT_BUSY = 16;
+    const MojoResult RESULT_SHOULD_WAIT = 17;
+
+    static MojoCreateMessagePipeResult createMessagePipe();
+    static MojoCreateDataPipeResult createDataPipe(MojoCreateDataPipeOptions options);
+    static MojoCreateSharedBufferResult createSharedBuffer(unsigned long numBytes);
+
+    [CallWith=ScriptState] static void bindInterface(DOMString interfaceName, MojoHandle request_handle, optional MojoScope scope = "context");
+};
diff --git a/core/mojo/MojoCreateDataPipeOptions.idl b/core/mojo/MojoCreateDataPipeOptions.idl
new file mode 100644
index 0000000..0fba87a
--- /dev/null
+++ b/core/mojo/MojoCreateDataPipeOptions.idl
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium 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 MojoCreateDataPipeOptions {
+    unsigned long elementNumBytes;
+    unsigned long capacityNumBytes;
+};
diff --git a/core/mojo/MojoCreateDataPipeResult.idl b/core/mojo/MojoCreateDataPipeResult.idl
new file mode 100644
index 0000000..5066767
--- /dev/null
+++ b/core/mojo/MojoCreateDataPipeResult.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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 MojoCreateDataPipeResult {
+    required MojoResult result;
+    MojoHandle producer;
+    MojoHandle consumer;
+};
diff --git a/core/mojo/MojoCreateMessagePipeResult.idl b/core/mojo/MojoCreateMessagePipeResult.idl
new file mode 100644
index 0000000..eb2d1b0
--- /dev/null
+++ b/core/mojo/MojoCreateMessagePipeResult.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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 MojoCreateMessagePipeResult {
+    // TODO(alokp): Consider raising exception for error.
+    required MojoResult result;
+    MojoHandle handle0;
+    MojoHandle handle1;
+};
diff --git a/core/mojo/MojoCreateSharedBufferResult.idl b/core/mojo/MojoCreateSharedBufferResult.idl
new file mode 100644
index 0000000..336eda2
--- /dev/null
+++ b/core/mojo/MojoCreateSharedBufferResult.idl
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium 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 MojoCreateSharedBufferResult {
+    required MojoResult result;
+    MojoHandle handle;
+};
diff --git a/core/mojo/MojoDiscardDataOptions.idl b/core/mojo/MojoDiscardDataOptions.idl
new file mode 100644
index 0000000..87a62f8
--- /dev/null
+++ b/core/mojo/MojoDiscardDataOptions.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 MojoDiscardDataOptions {
+    boolean allOrNone = false;
+};
diff --git a/core/mojo/MojoDuplicateBufferHandleOptions.idl b/core/mojo/MojoDuplicateBufferHandleOptions.idl
new file mode 100644
index 0000000..4faf0fd
--- /dev/null
+++ b/core/mojo/MojoDuplicateBufferHandleOptions.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 MojoDuplicateBufferHandleOptions {
+    boolean readOnly = false;
+};
diff --git a/core/mojo/MojoHandle.idl b/core/mojo/MojoHandle.idl
new file mode 100644
index 0000000..4fe2ab2
--- /dev/null
+++ b/core/mojo/MojoHandle.idl
@@ -0,0 +1,31 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+callback MojoWatchCallback = void (MojoResult result);
+
+[
+    ContextEnabled=MojoJS,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=MojoJS
+] interface MojoHandle {
+    void close();
+    [CallWith=ScriptState] MojoWatcher watch(MojoHandleSignals signals, MojoWatchCallback callback);
+
+    // TODO(alokp): Create MojoMessagePipeHandle, a subclass of MojoHandle
+    // and move the following member functions.
+    MojoResult writeMessage(BufferSource buffer, sequence<MojoHandle> handles);
+    MojoReadMessageResult readMessage(optional MojoReadMessageFlags flags);
+
+    // TODO(alokp): Create MojoDataPipeProducerHandle and MojoDataPipeConsumerHandle,
+    // subclasses of MojoHandle and move the following member functions.
+    MojoWriteDataResult writeData(BufferSource buffer, optional MojoWriteDataOptions options);
+    MojoReadDataResult queryData();
+    MojoReadDataResult discardData(unsigned long numBytes, optional MojoDiscardDataOptions options);
+    MojoReadDataResult readData(BufferSource buffer, optional MojoReadDataOptions options);
+
+    // TODO(alokp): Create MojoSharedBufferHandle, a subclass of MojoHandle
+    // and move the following member functions.
+    MojoMapBufferResult mapBuffer(unsigned long offset, unsigned long numBytes);
+    MojoCreateSharedBufferResult duplicateBufferHandle(optional MojoDuplicateBufferHandleOptions options);
+};
diff --git a/core/mojo/MojoHandleSignals.idl b/core/mojo/MojoHandleSignals.idl
new file mode 100644
index 0000000..fe0f02d
--- /dev/null
+++ b/core/mojo/MojoHandleSignals.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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 MojoHandleSignals {
+  boolean readable = false;
+  boolean writable = false;
+  boolean peerClosed = false;
+};
diff --git a/core/mojo/MojoMapBufferResult.idl b/core/mojo/MojoMapBufferResult.idl
new file mode 100644
index 0000000..83f4757
--- /dev/null
+++ b/core/mojo/MojoMapBufferResult.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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 MojoMapBufferResult {
+    required MojoResult result;
+
+    // TODO(alokp): Consider wrapping the buffer into a MojoSharedBufferMapping
+    // that would expose an unmap method to free the shared buffer eagerly
+    // rather than waiting for GC. This would be similar to ImageBitmap.close
+    // that disposes of graphical resources.
+    ArrayBuffer buffer;
+};
diff --git a/core/mojo/MojoReadDataOptions.idl b/core/mojo/MojoReadDataOptions.idl
new file mode 100644
index 0000000..b0f027d
--- /dev/null
+++ b/core/mojo/MojoReadDataOptions.idl
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium 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 MojoReadDataOptions {
+    boolean allOrNone = false;
+    boolean peek = false;
+};
diff --git a/core/mojo/MojoReadDataResult.idl b/core/mojo/MojoReadDataResult.idl
new file mode 100644
index 0000000..e3150c5
--- /dev/null
+++ b/core/mojo/MojoReadDataResult.idl
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium 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 MojoReadDataResult {
+    required MojoResult result;
+    required unsigned long numBytes;
+};
diff --git a/core/mojo/MojoReadMessageFlags.idl b/core/mojo/MojoReadMessageFlags.idl
new file mode 100644
index 0000000..3ab6e77
--- /dev/null
+++ b/core/mojo/MojoReadMessageFlags.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 MojoReadMessageFlags {
+  boolean mayDiscard = false;
+};
diff --git a/core/mojo/MojoReadMessageResult.idl b/core/mojo/MojoReadMessageResult.idl
new file mode 100644
index 0000000..f08503c
--- /dev/null
+++ b/core/mojo/MojoReadMessageResult.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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 MojoReadMessageResult {
+  // TODO(alokp): Consider raising exception for read error.
+  required MojoResult result;
+
+  // TODO(alokp): Check if returning DataView makes sense.
+  // It would require some changes in mojo/js/public/[buffer,codec].js.
+  ArrayBuffer buffer;
+
+  sequence<MojoHandle> handles;
+};
diff --git a/core/mojo/MojoWatcher.idl b/core/mojo/MojoWatcher.idl
new file mode 100644
index 0000000..1b370a8
--- /dev/null
+++ b/core/mojo/MojoWatcher.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Exposed=(Window,Worker),
+    ContextEnabled=MojoJS,
+    RuntimeEnabled=MojoJS
+] interface MojoWatcher {
+    MojoResult cancel();
+};
diff --git a/core/mojo/MojoWriteDataOptions.idl b/core/mojo/MojoWriteDataOptions.idl
new file mode 100644
index 0000000..67fa570
--- /dev/null
+++ b/core/mojo/MojoWriteDataOptions.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 MojoWriteDataOptions {
+    boolean allOrNone = false;
+};
diff --git a/core/mojo/MojoWriteDataResult.idl b/core/mojo/MojoWriteDataResult.idl
new file mode 100644
index 0000000..89916a1
--- /dev/null
+++ b/core/mojo/MojoWriteDataResult.idl
@@ -0,0 +1,8 @@
+// Copyright 2017 The Chromium 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 MojoWriteDataResult {
+    required MojoResult result;
+    required unsigned long numBytes;
+};
diff --git a/core/mojo/test/MojoInterfaceInterceptor.idl b/core/mojo/test/MojoInterfaceInterceptor.idl
new file mode 100644
index 0000000..b5456b9
--- /dev/null
+++ b/core/mojo/test/MojoInterfaceInterceptor.idl
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    ActiveScriptWrappable,
+    Constructor(DOMString interfaceName, optional MojoScope scope = "context"),
+    ConstructorCallWith=ExecutionContext,
+    DependentLifetime,
+    Exposed=(Window,Worker),
+    RaisesException=Constructor,
+    ContextEnabled=MojoJSTest,
+    RuntimeEnabled=MojoJSTest
+] interface MojoInterfaceInterceptor : EventTarget {
+    [RaisesException] void start();
+    void stop();
+
+    attribute EventHandler oninterfacerequest;
+};
diff --git a/core/mojo/test/MojoInterfaceRequestEvent.idl b/core/mojo/test/MojoInterfaceRequestEvent.idl
new file mode 100644
index 0000000..21a5a2d
--- /dev/null
+++ b/core/mojo/test/MojoInterfaceRequestEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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, optional MojoInterfaceRequestEventInit eventInitDict),
+    Exposed=(Window,Worker),
+    ContextEnabled=MojoJSTest,
+    RuntimeEnabled=MojoJSTest
+] interface MojoInterfaceRequestEvent : Event {
+    readonly attribute MojoHandle handle;
+};
diff --git a/core/mojo/test/MojoInterfaceRequestEventInit.idl b/core/mojo/test/MojoInterfaceRequestEventInit.idl
new file mode 100644
index 0000000..3eaf1da
--- /dev/null
+++ b/core/mojo/test/MojoInterfaceRequestEventInit.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 MojoInterfaceRequestEventInit : EventInit {
+    MojoHandle handle;
+};
diff --git a/core/offscreencanvas/ImageEncodeOptions.idl b/core/offscreencanvas/ImageEncodeOptions.idl
new file mode 100644
index 0000000..338adc7
--- /dev/null
+++ b/core/offscreencanvas/ImageEncodeOptions.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://html.spec.whatwg.org/multipage/scripting.html#the-offscreencanvas-interface
+
+dictionary ImageEncodeOptions {
+  DOMString type = "image/png";
+  unrestricted double quality = 1.0; // Defaults to 1.0 if value is outside 0:1 range
+};
diff --git a/core/offscreencanvas/OffscreenCanvas.idl b/core/offscreencanvas/OffscreenCanvas.idl
new file mode 100644
index 0000000..a290546
--- /dev/null
+++ b/core/offscreencanvas/OffscreenCanvas.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://html.spec.whatwg.org/multipage/scripting.html#the-offscreencanvas-interface
+
+[
+    Constructor([EnforceRange] unsigned long width, [EnforceRange] unsigned long height),
+    Exposed=(Window,Worker),
+    RuntimeEnabled=ExperimentalCanvasFeatures,
+    MeasureAs=OffscreenCanvas
+] interface OffscreenCanvas : EventTarget {
+    [EnforceRange] attribute unsigned long width;
+    [EnforceRange] attribute unsigned long height;
+
+    [CallWith=ScriptState, RaisesException] ImageBitmap transferToImageBitmap();
+    [MeasureAs=OffscreenCanvasConvertToBlob, RaisesException, CallWith=ScriptState] Promise<Blob> convertToBlob(optional ImageEncodeOptions options);
+};
diff --git a/core/origin_trials/testing/InternalsFrobulate.idl b/core/origin_trials/testing/InternalsFrobulate.idl
deleted file mode 100644
index 7c8c5cb..0000000
--- a/core/origin_trials/testing/InternalsFrobulate.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.
-
-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
deleted file mode 100644
index 05abf39..0000000
--- a/core/page/EventSource.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2009 Ericsson AB. All rights reserved.
- * Copyright (C) 2010, 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.
- * 3. Neither the name of Ericsson 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/multipage/comms.html#the-eventsource-interface
-
-[
-    DependentLifetime,
-    Constructor(DOMString url, optional EventSourceInit eventSourceInitDict),
-    ConstructorCallWith=ExecutionContext,
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    RaisesException=Constructor,
-] interface EventSource : EventTarget {
-    readonly attribute DOMString url;
-    readonly attribute boolean withCredentials;
-
-    // ready state
-    const unsigned short CONNECTING = 0;
-    const unsigned short OPEN = 1;
-    const unsigned short CLOSED = 2;
-    readonly attribute unsigned short readyState;
-
-    // networking
-    attribute EventHandler onopen;
-    attribute EventHandler onmessage;
-    attribute EventHandler onerror;
-    void close();
-};
diff --git a/core/page/PagePopupController.idl b/core/page/PagePopupController.idl
index f32cc46..26668d7 100644
--- a/core/page/PagePopupController.idl
+++ b/core/page/PagePopupController.idl
@@ -28,8 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// PagePopupController provides functions used by form control popup
+// implementations, and it's not exposed to the Web. WebPagePopupImpl class
+// enables this interface by provideContextFeaturesTo().
 [
-    WillBeGarbageCollected,
     NoInterfaceObject,
     RuntimeEnabled=PagePopup
 ] interface PagePopupController {
diff --git a/core/page/scrolling/ScrollState.idl b/core/page/scrolling/ScrollState.idl
index 7e5ff50..e1a9006 100644
--- a/core/page/scrolling/ScrollState.idl
+++ b/core/page/scrolling/ScrollState.idl
@@ -6,20 +6,18 @@
 
 [
   Constructor(optional ScrollStateInit scrollStateInit),
-  WillBeGarbageCollected,
-  RuntimeEnabled = ScrollCustomization,
+  RuntimeEnabled = ScrollCustomization
 ] interface ScrollState
 {
     readonly attribute double deltaX;
     readonly attribute double deltaY;
-    readonly attribute long startPositionX;
-    readonly attribute long startPositionY;
+    readonly attribute long positionX;
+    readonly attribute long positionY;
     readonly attribute double velocityX;
     readonly attribute double velocityY;
     readonly attribute boolean isBeginning;
     readonly attribute boolean inInertialPhase;
     readonly attribute boolean isEnding;
-    readonly attribute boolean shouldPropagate;
     readonly attribute boolean fromUserInput;
     readonly attribute boolean isDirectManipulation;
     readonly attribute double deltaGranularity;
diff --git a/core/page/scrolling/ScrollStateInit.idl b/core/page/scrolling/ScrollStateInit.idl
index d7aa140..d2be156 100644
--- a/core/page/scrolling/ScrollStateInit.idl
+++ b/core/page/scrolling/ScrollStateInit.idl
@@ -7,8 +7,10 @@
 dictionary ScrollStateInit {
     double deltaX = 0;
     double deltaY = 0;
-    long startPositionX = 0;
-    long startPositionY = 0;
+    double deltaXHint = 0;
+    double deltaYHint = 0;
+    long positionX = 0;
+    long positionY = 0;
     double velocityX = 0;
     double velocityY = 0;
     boolean isBeginning = false;
diff --git a/core/resize_observer/ResizeObserver.idl b/core/resize_observer/ResizeObserver.idl
new file mode 100644
index 0000000..a8554d2
--- /dev/null
+++ b/core/resize_observer/ResizeObserver.idl
@@ -0,0 +1,19 @@
+// 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/ResizeObserver/#resize-observer-callback
+
+callback ResizeObserverCallback = void (sequence<ResizeObserverEntry> entries, ResizeObserver observer);
+
+// https://wicg.github.io/ResizeObserver/#resize-observer-interface
+
+[
+    Constructor(ResizeObserverCallback callback),
+    ConstructorCallWith=Document,
+    RuntimeEnabled=ResizeObserver
+] interface ResizeObserver {
+    void observe(Element target);
+    void unobserve(Element target);
+    void disconnect();
+};
diff --git a/core/resize_observer/ResizeObserverEntry.idl b/core/resize_observer/ResizeObserverEntry.idl
new file mode 100644
index 0000000..29e5d96
--- /dev/null
+++ b/core/resize_observer/ResizeObserverEntry.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/ResizeObserver/#resize-observer-entry-interface
+
+[
+    RuntimeEnabled=ResizeObserver
+] interface ResizeObserverEntry {
+    readonly attribute Element target;
+    readonly attribute DOMRectReadOnly contentRect;
+};
diff --git a/core/streams/ReadableByteStream.idl b/core/streams/ReadableByteStream.idl
deleted file mode 100644
index d881c27..0000000
--- a/core/streams/ReadableByteStream.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.
-
-[
-    GarbageCollected,
-    Exposed=(Window,Worker),
-] interface ReadableByteStream {
-    [CallWith=ExecutionContext, RaisesException, ImplementedAs=getBytesReader] ReadableByteStreamReader getReader();
-    [CallWith=ScriptState] Promise<void> cancel(optional any reason);
-};
diff --git a/core/streams/ReadableByteStreamReader.idl b/core/streams/ReadableByteStreamReader.idl
deleted file mode 100644
index c7c1996..0000000
--- a/core/streams/ReadableByteStreamReader.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.
-
-[
-    GarbageCollected,
-    // We don't expose the interface now, because the name is not stable
-    // enough. We will expose it in the future.
-    NoInterfaceObject,
-] interface ReadableByteStreamReader {
-    [CallWith=ScriptState] readonly attribute Promise<void> closed;
-    [CallWith=ScriptState] Promise<any> read();
-
-    [CallWith=ScriptState] Promise<void> cancel(optional any reason);
-    [RaisesException] void releaseLock();
-};
diff --git a/core/streams/ReadableStreamReader.idl b/core/streams/ReadableStreamReader.idl
deleted file mode 100644
index b3419cd..0000000
--- a/core/streams/ReadableStreamReader.idl
+++ /dev/null
@@ -1,18 +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.
-
-[
-    GarbageCollected,
-    DependentLifetime,
-    Exposed=(Window,Worker),
-    NoInterfaceObject,
-] interface ReadableStreamReader {
-    // FIXME: Add constructor.
-
-    [CallWith=ScriptState] readonly attribute Promise<void> closed;
-    [CallWith=ScriptState] Promise<any> read();
-
-    [CallWith=ScriptState] Promise<void> cancel(optional any reason);
-    [RaisesException] void releaseLock();
-};
diff --git a/core/streams/Stream.idl b/core/streams/Stream.idl
deleted file mode 100644
index 1d3128f..0000000
--- a/core/streams/Stream.idl
+++ /dev/null
@@ -1,45 +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.
- */
-
-// FIXME: close() method which is necessary for Stream building feature
-// is omitted for now. Add it when necessary.
-//
-// FIXME: Add a flag to indicate if this stream frees memory when read or not
-// (e.g. boolean isReadOnce()).
-//
-// FIXME: Make the Blob a subclass of the Stream.
-
-[
-    RuntimeEnabled=ExperimentalStream,
-    DependentLifetime,
-    GarbageCollected
-] interface Stream {
-    readonly attribute DOMString type;
-};
diff --git a/core/streams/UnderlyingSourceBase.idl b/core/streams/UnderlyingSourceBase.idl
index 0c0486f..8e7b4ef 100644
--- a/core/streams/UnderlyingSourceBase.idl
+++ b/core/streams/UnderlyingSourceBase.idl
@@ -7,9 +7,16 @@
 // UnderlyingSourceBase, and a JavaScript object can then be generated
 // automatically for use in initializing a ReadableStream.
 
-[NoInterfaceObject, GarbageCollected, DependentLifetime]
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    NoInterfaceObject
+]
 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);
+
+    void notifyLockAcquired();
+    void notifyLockReleased();
 };
diff --git a/core/svg/SVGAElement.idl b/core/svg/SVGAElement.idl
index 15d5148..c8a8956 100644
--- a/core/svg/SVGAElement.idl
+++ b/core/svg/SVGAElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/linking.html#InterfaceSVGAElement
+// https://svgwg.org/svg2-draft/linking.html#InterfaceSVGAElement
 
 interface SVGAElement : SVGGraphicsElement {
     [ImplementedAs=svgTarget, Measure] readonly attribute SVGAnimatedString target;
diff --git a/core/svg/SVGAngle.idl b/core/svg/SVGAngle.idl
index 64aa811..95bcda1 100644
--- a/core/svg/SVGAngle.idl
+++ b/core/svg/SVGAngle.idl
@@ -20,12 +20,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAngle
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAngle
 
 [
-    ImplementedAs=SVGAngleTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGAngleTearOff
 ] interface SVGAngle {
     // Angle Unit Types
     const unsigned short SVG_ANGLETYPE_UNKNOWN = 0;
diff --git a/core/svg/SVGAnimateElement.idl b/core/svg/SVGAnimateElement.idl
index 01eea93..1579217 100644
--- a/core/svg/SVGAnimateElement.idl
+++ b/core/svg/SVGAnimateElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGAnimateElement
+// https://svgwg.org/specs/animations/#InterfaceSVGAnimateElement
 
 interface SVGAnimateElement : SVGAnimationElement {
 };
diff --git a/core/svg/SVGAnimateMotionElement.idl b/core/svg/SVGAnimateMotionElement.idl
index bba3d50..1b5b3ca 100644
--- a/core/svg/SVGAnimateMotionElement.idl
+++ b/core/svg/SVGAnimateMotionElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGAnimateMotionElement
+// https://svgwg.org/specs/animations/#InterfaceSVGAnimateMotionElement
 
 interface SVGAnimateMotionElement : SVGAnimationElement {
 };
diff --git a/core/svg/SVGAnimateTransformElement.idl b/core/svg/SVGAnimateTransformElement.idl
index 0d98368..fe64235 100644
--- a/core/svg/SVGAnimateTransformElement.idl
+++ b/core/svg/SVGAnimateTransformElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGAnimateTransformElement
+// https://svgwg.org/specs/animations/#InterfaceSVGAnimateTransformElement
 
 interface SVGAnimateTransformElement : SVGAnimationElement {
 };
diff --git a/core/svg/SVGAnimatedAngle.idl b/core/svg/SVGAnimatedAngle.idl
index 4bd5848..a69b631 100644
--- a/core/svg/SVGAnimatedAngle.idl
+++ b/core/svg/SVGAnimatedAngle.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedAngle
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedAngle
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedAngle {
     readonly attribute SVGAngle baseVal;
     readonly attribute SVGAngle animVal;
diff --git a/core/svg/SVGAnimatedBoolean.idl b/core/svg/SVGAnimatedBoolean.idl
index 531af6a..4ec6bab 100644
--- a/core/svg/SVGAnimatedBoolean.idl
+++ b/core/svg/SVGAnimatedBoolean.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedBoolean
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedBoolean
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedBoolean {
     [RaisesException=Setter] attribute boolean baseVal;
     readonly attribute boolean animVal;
diff --git a/core/svg/SVGAnimatedEnumeration.idl b/core/svg/SVGAnimatedEnumeration.idl
index 830f2c9..1766bc7 100644
--- a/core/svg/SVGAnimatedEnumeration.idl
+++ b/core/svg/SVGAnimatedEnumeration.idl
@@ -23,12 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedEnumeration
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedEnumeration
 
 [
-    ImplementedAs=SVGAnimatedEnumerationBase,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGAnimatedEnumerationBase
 ] interface SVGAnimatedEnumeration {
     [RaisesException=Setter] attribute unsigned short baseVal;
     readonly attribute unsigned short animVal;
diff --git a/core/svg/SVGAnimatedInteger.idl b/core/svg/SVGAnimatedInteger.idl
index 78520f6..505d444 100644
--- a/core/svg/SVGAnimatedInteger.idl
+++ b/core/svg/SVGAnimatedInteger.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedInteger
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedInteger
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedInteger {
     [RaisesException=Setter] attribute long baseVal;
     readonly attribute long animVal;
diff --git a/core/svg/SVGAnimatedLength.idl b/core/svg/SVGAnimatedLength.idl
index 3fbc245..3da68c9 100644
--- a/core/svg/SVGAnimatedLength.idl
+++ b/core/svg/SVGAnimatedLength.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedLength
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedLength
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedLength {
     readonly attribute SVGLength baseVal;
     readonly attribute SVGLength animVal;
diff --git a/core/svg/SVGAnimatedLengthList.idl b/core/svg/SVGAnimatedLengthList.idl
index 2f79e7f..eeef1ad 100644
--- a/core/svg/SVGAnimatedLengthList.idl
+++ b/core/svg/SVGAnimatedLengthList.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedLengthList
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedLengthList
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedLengthList {
     readonly attribute SVGLengthList baseVal;
     readonly attribute SVGLengthList animVal;
diff --git a/core/svg/SVGAnimatedNumber.idl b/core/svg/SVGAnimatedNumber.idl
index 9f228b4..ddc7fab 100644
--- a/core/svg/SVGAnimatedNumber.idl
+++ b/core/svg/SVGAnimatedNumber.idl
@@ -24,11 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedNumber
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedNumber
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedNumber {
     [RaisesException=Setter] attribute float baseVal;
     readonly attribute float animVal;
diff --git a/core/svg/SVGAnimatedNumberList.idl b/core/svg/SVGAnimatedNumberList.idl
index c38f5cd..c1c49de 100644
--- a/core/svg/SVGAnimatedNumberList.idl
+++ b/core/svg/SVGAnimatedNumberList.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedNumberList
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedNumberList
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedNumberList {
     readonly attribute SVGNumberList baseVal;
     readonly attribute SVGNumberList animVal;
diff --git a/core/svg/SVGAnimatedPreserveAspectRatio.idl b/core/svg/SVGAnimatedPreserveAspectRatio.idl
index e4b4a93..a943f6d 100644
--- a/core/svg/SVGAnimatedPreserveAspectRatio.idl
+++ b/core/svg/SVGAnimatedPreserveAspectRatio.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGAnimatedPreserveAspectRatio
+// https://svgwg.org/svg2-draft/coords.html#InterfaceSVGAnimatedPreserveAspectRatio
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedPreserveAspectRatio {
     readonly attribute SVGPreserveAspectRatio baseVal;
     readonly attribute SVGPreserveAspectRatio animVal;
diff --git a/core/svg/SVGAnimatedRect.idl b/core/svg/SVGAnimatedRect.idl
index d020f95..9bbbcc7 100644
--- a/core/svg/SVGAnimatedRect.idl
+++ b/core/svg/SVGAnimatedRect.idl
@@ -23,13 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedRect
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedRect
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedRect {
-    // TODO(philipj): SVGRect should be DOMRectReadOnly.
+    // TODO(foolip): SVGRect should be DOMRectReadOnly.
     readonly attribute SVGRect baseVal;
     readonly attribute SVGRect animVal;
 };
diff --git a/core/svg/SVGAnimatedString.idl b/core/svg/SVGAnimatedString.idl
index e881925..2bbc8e7 100644
--- a/core/svg/SVGAnimatedString.idl
+++ b/core/svg/SVGAnimatedString.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGAnimatedString
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGAnimatedString
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedString {
     [RaisesException=Setter] attribute DOMString baseVal;
     readonly attribute DOMString animVal;
diff --git a/core/svg/SVGAnimatedTransformList.idl b/core/svg/SVGAnimatedTransformList.idl
index fca3d24..9e58b14 100644
--- a/core/svg/SVGAnimatedTransformList.idl
+++ b/core/svg/SVGAnimatedTransformList.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGAnimatedTransformList
+// https://svgwg.org/svg2-draft/coords.html#InterfaceSVGAnimatedTransformList
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface SVGAnimatedTransformList {
     [MeasureAs=SVGAnimatedTransformListBaseVal] readonly attribute SVGTransformList baseVal;
     readonly attribute SVGTransformList animVal;
diff --git a/core/svg/SVGAnimationElement.idl b/core/svg/SVGAnimationElement.idl
index d20ae51..0eaf56f 100644
--- a/core/svg/SVGAnimationElement.idl
+++ b/core/svg/SVGAnimationElement.idl
@@ -24,9 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGAnimationElement
+// https://svgwg.org/specs/animations/#InterfaceSVGAnimationElement
 
-[RuntimeEnabled=smil]
+[RuntimeEnabled=SMIL]
 interface SVGAnimationElement : SVGElement {
     readonly attribute SVGElement targetElement;
 
@@ -34,14 +34,14 @@
     attribute EventHandler onend;
     attribute EventHandler onrepeat;
 
-    [RaisesException] float getStartTime();
-    float getCurrentTime();
-    [RaisesException] float getSimpleDuration();
+    [MeasureAs=SVGSMILAnimationElementTiming, RaisesException] float getStartTime();
+    [MeasureAs=SVGSMILAnimationElementTiming] float getCurrentTime();
+    [MeasureAs=SVGSMILAnimationElementTiming, RaisesException] float getSimpleDuration();
 
-    void beginElement();
-    void beginElementAt(float offset);
-    void endElement();
-    void endElementAt(float offset);
+    [MeasureAs=SVGSMILBeginEndAnimationElement] void beginElement();
+    [MeasureAs=SVGSMILBeginEndAnimationElement] void beginElementAt(float offset);
+    [MeasureAs=SVGSMILBeginEndAnimationElement] void endElement();
+    [MeasureAs=SVGSMILBeginEndAnimationElement] void endElementAt(float offset);
 };
 
 SVGAnimationElement implements SVGTests;
diff --git a/core/svg/SVGCircleElement.idl b/core/svg/SVGCircleElement.idl
index 00a32e7..76f2a42 100644
--- a/core/svg/SVGCircleElement.idl
+++ b/core/svg/SVGCircleElement.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGCircleElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGCircleElement
 
 interface SVGCircleElement : SVGGeometryElement {
     [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cx;
diff --git a/core/svg/SVGClipPathElement.idl b/core/svg/SVGClipPathElement.idl
index 543feac..de70efd 100644
--- a/core/svg/SVGClipPathElement.idl
+++ b/core/svg/SVGClipPathElement.idl
@@ -24,9 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/css-masking/#InterfaceSVGClipPathElement
+// https://drafts.fxtf.org/css-masking-1/#InterfaceSVGClipPathElement
 
-// TODO(philipj): SVGClipPathElement should inherit from SVGElement and
+// TODO(foolip): SVGClipPathElement should inherit from SVGElement and
 // implement SVGUnitTypes. The transform attribute (which is on
 // SVGGraphicsElement) should also be on SVGClipPathElement.
 interface SVGClipPathElement : SVGGraphicsElement {
diff --git a/core/svg/SVGComponentTransferFunctionElement.idl b/core/svg/SVGComponentTransferFunctionElement.idl
index 8fe18b0..b51e23b 100644
--- a/core/svg/SVGComponentTransferFunctionElement.idl
+++ b/core/svg/SVGComponentTransferFunctionElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGComponentTransferFunctionElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGComponentTransferFunctionElement
 
 [
     DoNotCheckConstants
diff --git a/core/svg/SVGCursorElement.idl b/core/svg/SVGCursorElement.idl
deleted file mode 100644
index d61be40..0000000
--- a/core/svg/SVGCursorElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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/interact.html#InterfaceSVGCursorElement
-
-interface SVGCursorElement : SVGElement {
-    [MeasureAs=SVG1DOMCursorElement] readonly attribute SVGAnimatedLength x;
-    [MeasureAs=SVG1DOMCursorElement] readonly attribute SVGAnimatedLength y;
-};
-
-SVGCursorElement implements SVGURIReference;
-
-// TODO(philipj): The following was part of SVG 1.1:
-// http://www.w3.org/TR/SVG11/interact.html#InterfaceSVGCursorElement
-SVGCursorElement implements SVGTests;
diff --git a/core/svg/SVGDefsElement.idl b/core/svg/SVGDefsElement.idl
index 43fe927..ba525a6 100644
--- a/core/svg/SVGDefsElement.idl
+++ b/core/svg/SVGDefsElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGDefsElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGDefsElement
 
 interface SVGDefsElement : SVGGraphicsElement {
 };
diff --git a/core/svg/SVGDescElement.idl b/core/svg/SVGDescElement.idl
index 6ee5bed..68ed11d 100644
--- a/core/svg/SVGDescElement.idl
+++ b/core/svg/SVGDescElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGDescElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGDescElement
 
 interface SVGDescElement : SVGElement {
 };
diff --git a/core/svg/SVGDiscardElement.idl b/core/svg/SVGDiscardElement.idl
index 72b8939..a6db8fa 100644
--- a/core/svg/SVGDiscardElement.idl
+++ b/core/svg/SVGDiscardElement.idl
@@ -28,9 +28,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// TODO(philipj): The SVGDiscardElement interface does not exist in the spec
-// yet: http://www.w3.org/Graphics/SVG/WG/track/actions/3727
+// https://svgwg.org/specs/animations/#InterfaceSVGDiscardElement
 
-[RuntimeEnabled=smil]
+[RuntimeEnabled=SMIL]
 interface SVGDiscardElement : SVGElement {
 };
diff --git a/core/svg/SVGDocument.idl b/core/svg/SVGDocument.idl
index 8ba643a..dd1a4ac 100644
--- a/core/svg/SVGDocument.idl
+++ b/core/svg/SVGDocument.idl
@@ -19,7 +19,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGDocument
+// https://svgwg.org/svg2-draft/struct.html#InterfaceDocumentExtensions
 
 [
     ImplementedAs=SVGDocumentExtensions
diff --git a/core/svg/SVGElement.idl b/core/svg/SVGElement.idl
index d8faebb..2e01c8b 100644
--- a/core/svg/SVGElement.idl
+++ b/core/svg/SVGElement.idl
@@ -20,12 +20,13 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGElement
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGElement
 
 interface SVGElement : Element {
     [MeasureAs=SVGClassName] readonly attribute SVGAnimatedString className;
+    [SameObject, PerWorldBindings] readonly attribute DOMStringMap dataset;
     // CSS Object Model (CSSOM)
-    // http://dev.w3.org/csswg/cssom/#the-elementcssinlinestyle-interface
+    // https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface
     [SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
 
     readonly attribute SVGSVGElement? ownerSVGElement;
@@ -36,3 +37,4 @@
 };
 
 SVGElement implements GlobalEventHandlers;
+SVGElement implements NoncedElement;
diff --git a/core/svg/SVGEllipseElement.idl b/core/svg/SVGEllipseElement.idl
index 08750c6..546f532 100644
--- a/core/svg/SVGEllipseElement.idl
+++ b/core/svg/SVGEllipseElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGEllipseElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGEllipseElement
 
 interface SVGEllipseElement : SVGGeometryElement {
     [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength cx;
diff --git a/core/svg/SVGFEBlendElement.idl b/core/svg/SVGFEBlendElement.idl
index 4b9ffe4..9141ef7 100644
--- a/core/svg/SVGFEBlendElement.idl
+++ b/core/svg/SVGFEBlendElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEBlendElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEBlendElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFEBlendElement : SVGElement {
 
     // Blend Mode Types
diff --git a/core/svg/SVGFEColorMatrixElement.idl b/core/svg/SVGFEColorMatrixElement.idl
index d5fd90c..45efacc 100644
--- a/core/svg/SVGFEColorMatrixElement.idl
+++ b/core/svg/SVGFEColorMatrixElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEColorMatrixElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEColorMatrixElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFEColorMatrixElement : SVGElement {
     // Color Matrix Types
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN = 0;
diff --git a/core/svg/SVGFEComponentTransferElement.idl b/core/svg/SVGFEComponentTransferElement.idl
index 8eda50f..dbc0da2 100644
--- a/core/svg/SVGFEComponentTransferElement.idl
+++ b/core/svg/SVGFEComponentTransferElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEComponentTransferElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEComponentTransferElement
 
 interface SVGFEComponentTransferElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFECompositeElement.idl b/core/svg/SVGFECompositeElement.idl
index 7f1fb25..5ff09bc 100644
--- a/core/svg/SVGFECompositeElement.idl
+++ b/core/svg/SVGFECompositeElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFECompositeElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFECompositeElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFECompositeElement : SVGElement {
     // Composite Operators
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN = 0;
diff --git a/core/svg/SVGFEConvolveMatrixElement.idl b/core/svg/SVGFEConvolveMatrixElement.idl
index 0c9edfd..c0411ad 100644
--- a/core/svg/SVGFEConvolveMatrixElement.idl
+++ b/core/svg/SVGFEConvolveMatrixElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEConvolveMatrixElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEConvolveMatrixElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFEConvolveMatrixElement : SVGElement {
     // Edge Mode Values
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_EDGEMODE_UNKNOWN = 0;
@@ -46,9 +46,9 @@
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthX;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber kernelUnitLengthY;
 
-    // TODO(philipj): The following was part of SVG 1.1:
+    // TODO(foolip): The following was part of SVG 1.1. https://crbug.com/695977
     // http://www.w3.org/TR/SVG11/filters.html#InterfaceSVGFEConvolveMatrixElement
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28703
+    // https://github.com/w3c/fxtf-drafts/issues/114
     [Measure] readonly attribute SVGAnimatedBoolean preserveAlpha;
 };
 
diff --git a/core/svg/SVGFEDiffuseLightingElement.idl b/core/svg/SVGFEDiffuseLightingElement.idl
index aa6d9f4..c1ad350 100644
--- a/core/svg/SVGFEDiffuseLightingElement.idl
+++ b/core/svg/SVGFEDiffuseLightingElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDiffuseLightingElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEDiffuseLightingElement
 
 interface SVGFEDiffuseLightingElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFEDisplacementMapElement.idl b/core/svg/SVGFEDisplacementMapElement.idl
index 9b70e29..90f5145 100644
--- a/core/svg/SVGFEDisplacementMapElement.idl
+++ b/core/svg/SVGFEDisplacementMapElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDisplacementMapElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEDisplacementMapElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFEDisplacementMapElement : SVGElement {
     // Channel Selectors
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_CHANNEL_UNKNOWN = 0;
diff --git a/core/svg/SVGFEDistantLightElement.idl b/core/svg/SVGFEDistantLightElement.idl
index a5c6979..1594292 100644
--- a/core/svg/SVGFEDistantLightElement.idl
+++ b/core/svg/SVGFEDistantLightElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDistantLightElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEDistantLightElement
 
 interface SVGFEDistantLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber azimuth;
diff --git a/core/svg/SVGFEDropShadowElement.idl b/core/svg/SVGFEDropShadowElement.idl
index 47d742f..d6aa10e 100644
--- a/core/svg/SVGFEDropShadowElement.idl
+++ b/core/svg/SVGFEDropShadowElement.idl
@@ -17,7 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEDropShadowElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEDropShadowElement
 
 interface SVGFEDropShadowElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFEFloodElement.idl b/core/svg/SVGFEFloodElement.idl
index e586c72..125c8c8 100644
--- a/core/svg/SVGFEFloodElement.idl
+++ b/core/svg/SVGFEFloodElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEFloodElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEFloodElement
 
 interface SVGFEFloodElement : SVGElement {
 };
diff --git a/core/svg/SVGFEFuncAElement.idl b/core/svg/SVGFEFuncAElement.idl
index 2a886fd..8cf23db 100644
--- a/core/svg/SVGFEFuncAElement.idl
+++ b/core/svg/SVGFEFuncAElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEFuncAElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEFuncAElement
 
 interface SVGFEFuncAElement : SVGComponentTransferFunctionElement {
 };
diff --git a/core/svg/SVGFEFuncBElement.idl b/core/svg/SVGFEFuncBElement.idl
index 0ac1240..f281afe 100644
--- a/core/svg/SVGFEFuncBElement.idl
+++ b/core/svg/SVGFEFuncBElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEFuncBElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEFuncBElement
 
 interface SVGFEFuncBElement : SVGComponentTransferFunctionElement {
 };
diff --git a/core/svg/SVGFEFuncGElement.idl b/core/svg/SVGFEFuncGElement.idl
index 7d21395..91e0155 100644
--- a/core/svg/SVGFEFuncGElement.idl
+++ b/core/svg/SVGFEFuncGElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEFuncGElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEFuncGElement
 
 interface SVGFEFuncGElement : SVGComponentTransferFunctionElement {
 };
diff --git a/core/svg/SVGFEFuncRElement.idl b/core/svg/SVGFEFuncRElement.idl
index 3073190..9f26071 100644
--- a/core/svg/SVGFEFuncRElement.idl
+++ b/core/svg/SVGFEFuncRElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEFuncRElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEFuncRElement
 
 interface SVGFEFuncRElement : SVGComponentTransferFunctionElement {
 };
diff --git a/core/svg/SVGFEGaussianBlurElement.idl b/core/svg/SVGFEGaussianBlurElement.idl
index c9326d3..a474905 100644
--- a/core/svg/SVGFEGaussianBlurElement.idl
+++ b/core/svg/SVGFEGaussianBlurElement.idl
@@ -23,9 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG11/filters.html#InterfaceSVGFEGaussianBlurElement
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEGaussianBlurElement
-// Currently SVG 1.1 (SVG 2 members not implemented)
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEGaussianBlurElement
 
 interface SVGFEGaussianBlurElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFEImageElement.idl b/core/svg/SVGFEImageElement.idl
index 05ecf0c..c1c4521 100644
--- a/core/svg/SVGFEImageElement.idl
+++ b/core/svg/SVGFEImageElement.idl
@@ -23,9 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG11/filters.html#InterfaceSVGFEImageElement
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEImageElement
-// Currently SVG 1.1, SVG 2 members not implemented
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEImageElement
 
 interface SVGFEImageElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
diff --git a/core/svg/SVGFEMergeElement.idl b/core/svg/SVGFEMergeElement.idl
index d9da6e8..a34d1e1 100644
--- a/core/svg/SVGFEMergeElement.idl
+++ b/core/svg/SVGFEMergeElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEMergeElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEMergeElement
 
 interface SVGFEMergeElement : SVGElement {
 };
diff --git a/core/svg/SVGFEMergeNodeElement.idl b/core/svg/SVGFEMergeNodeElement.idl
index 1e91f7a..4409db5 100644
--- a/core/svg/SVGFEMergeNodeElement.idl
+++ b/core/svg/SVGFEMergeNodeElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEMergeNodeElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEMergeNodeElement
 
 interface SVGFEMergeNodeElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFEMorphologyElement.idl b/core/svg/SVGFEMorphologyElement.idl
index c7facb7..71f157b 100644
--- a/core/svg/SVGFEMorphologyElement.idl
+++ b/core/svg/SVGFEMorphologyElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEMorphologyElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEMorphologyElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFEMorphologyElement : SVGElement {
     // Morphology Operators
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN = 0;
diff --git a/core/svg/SVGFEOffsetElement.idl b/core/svg/SVGFEOffsetElement.idl
index 41fb654..ca28037 100644
--- a/core/svg/SVGFEOffsetElement.idl
+++ b/core/svg/SVGFEOffsetElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEOffsetElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEOffsetElement
 
 interface SVGFEOffsetElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFEPointLightElement.idl b/core/svg/SVGFEPointLightElement.idl
index c37d706..e162bb1 100644
--- a/core/svg/SVGFEPointLightElement.idl
+++ b/core/svg/SVGFEPointLightElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFEPointLightElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFEPointLightElement
 
 interface SVGFEPointLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
diff --git a/core/svg/SVGFESpecularLightingElement.idl b/core/svg/SVGFESpecularLightingElement.idl
index 49baa91..474c74d 100644
--- a/core/svg/SVGFESpecularLightingElement.idl
+++ b/core/svg/SVGFESpecularLightingElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFESpecularLightingElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFESpecularLightingElement
 
 interface SVGFESpecularLightingElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFESpotLightElement.idl b/core/svg/SVGFESpotLightElement.idl
index bb0c3e8..dc99e0b 100644
--- a/core/svg/SVGFESpotLightElement.idl
+++ b/core/svg/SVGFESpotLightElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFESpotLightElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFESpotLightElement
 
 interface SVGFESpotLightElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedNumber x;
diff --git a/core/svg/SVGFETileElement.idl b/core/svg/SVGFETileElement.idl
index 13da3c0..6411e77 100644
--- a/core/svg/SVGFETileElement.idl
+++ b/core/svg/SVGFETileElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFETileElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFETileElement
 
 interface SVGFETileElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedString in1;
diff --git a/core/svg/SVGFETurbulenceElement.idl b/core/svg/SVGFETurbulenceElement.idl
index 08b2b83..41718c3 100644
--- a/core/svg/SVGFETurbulenceElement.idl
+++ b/core/svg/SVGFETurbulenceElement.idl
@@ -23,10 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFETurbulenceElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFETurbulenceElement
 
 [
-    DoNotCheckConstants,
+    DoNotCheckConstants
 ] interface SVGFETurbulenceElement : SVGElement {
     // Turbulence Types
     [MeasureAs=SVG1DOMFilter] const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN = 0;
diff --git a/core/svg/SVGFilterElement.idl b/core/svg/SVGFilterElement.idl
index 2d939a3..49c8a67 100644
--- a/core/svg/SVGFilterElement.idl
+++ b/core/svg/SVGFilterElement.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFilterElement
+// https://drafts.fxtf.org/filters/#InterfaceSVGFilterElement
 
 interface SVGFilterElement : SVGElement {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedEnumeration filterUnits;
diff --git a/core/svg/SVGFilterPrimitiveStandardAttributes.idl b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
index 458d616..41675c9 100644
--- a/core/svg/SVGFilterPrimitiveStandardAttributes.idl
+++ b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
@@ -24,10 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/filter-effects/#InterfaceSVGFilterPrimitiveStandardAttributes
+// https://drafts.fxtf.org/filters/#InterfaceSVGFilterPrimitiveStandardAttributes
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface SVGFilterPrimitiveStandardAttributes {
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength x;
     [MeasureAs=SVG1DOMFilter] readonly attribute SVGAnimatedLength y;
diff --git a/core/svg/SVGFitToViewBox.idl b/core/svg/SVGFitToViewBox.idl
index 45d3d53..b8af7cf 100644
--- a/core/svg/SVGFitToViewBox.idl
+++ b/core/svg/SVGFitToViewBox.idl
@@ -24,10 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGFitToViewBox
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGFitToViewBox
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface SVGFitToViewBox {
     [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 9825185..03f3aff 100644
--- a/core/svg/SVGForeignObjectElement.idl
+++ b/core/svg/SVGForeignObjectElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/extend.html#InterfaceSVGForeignObjectElement
+// https://svgwg.org/svg2-draft/embedded.html#InterfaceSVGForeignObjectElement
 
 interface SVGForeignObjectElement : SVGGraphicsElement {
     [MeasureAs=SVG1DOMForeignObjectElement] readonly attribute SVGAnimatedLength x;
diff --git a/core/svg/SVGGElement.idl b/core/svg/SVGGElement.idl
index 97bb0a5..cf7d964 100644
--- a/core/svg/SVGGElement.idl
+++ b/core/svg/SVGGElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGGElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGGElement
 
 interface SVGGElement : SVGGraphicsElement {
 };
diff --git a/core/svg/SVGGeometryElement.idl b/core/svg/SVGGeometryElement.idl
index 8f1619a..445c15b 100644
--- a/core/svg/SVGGeometryElement.idl
+++ b/core/svg/SVGGeometryElement.idl
@@ -28,10 +28,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGGeometryElement
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGGeometryElement
 
 interface SVGGeometryElement : SVGGraphicsElement {
-    // TODO(philipj): SVGPoint should be DOMPoint.
+    [SameObject] readonly attribute SVGAnimatedNumber pathLength;
+
+    // TODO(foolip): SVGPoint should be DOMPoint.
     boolean isPointInFill(SVGPoint point);
     boolean isPointInStroke(SVGPoint point);
+    float getTotalLength();
+    SVGPoint getPointAtLength(float distance);
 };
diff --git a/core/svg/SVGGradientElement.idl b/core/svg/SVGGradientElement.idl
index 5d77514..d3abb19 100644
--- a/core/svg/SVGGradientElement.idl
+++ b/core/svg/SVGGradientElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGGradientElement
+// https://svgwg.org/svg2-draft/pservers.html#InterfaceSVGGradientElement
 
 [
     DoNotCheckConstants
diff --git a/core/svg/SVGGraphicsElement.idl b/core/svg/SVGGraphicsElement.idl
index 77474ef..f27e75d 100644
--- a/core/svg/SVGGraphicsElement.idl
+++ b/core/svg/SVGGraphicsElement.idl
@@ -28,17 +28,20 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGGraphicsElement
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGGraphicsElement
 
 interface SVGGraphicsElement : SVGElement {
     [Measure] readonly attribute SVGAnimatedTransformList transform;
 
+    [ImplementedAs=getBBoxFromJavascript] SVGRect getBBox();
+    SVGMatrix getCTM();
+    SVGMatrix getScreenCTM();
+
+    // TODO(foolip): The following two properties existed on SVGLocatable in SVG
+    // 1.1, but were removed in SVG2. https://crbug.com/695981
+    // https://www.w3.org/TR/SVG11/types.html#InterfaceSVGLocatable
     [MeasureAs=SVGLocatableNearestViewportElement] readonly attribute SVGElement nearestViewportElement;
     [MeasureAs=SVGLocatableFarthestViewportElement] readonly attribute SVGElement farthestViewportElement;
-
-    [ImplementedAs=getBBoxFromJavascript] SVGRect getBBox();
-    [ImplementedAs=getCTMFromJavascript] SVGMatrix getCTM();
-    [ImplementedAs=getScreenCTMFromJavascript] SVGMatrix getScreenCTM();
 };
 
 SVGGraphicsElement implements SVGTests;
diff --git a/core/svg/SVGImageElement.idl b/core/svg/SVGImageElement.idl
index 611a2cc..6006402 100644
--- a/core/svg/SVGImageElement.idl
+++ b/core/svg/SVGImageElement.idl
@@ -23,14 +23,19 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/embedded.html#InterfaceSVGImageElement
+// https://svgwg.org/svg2-draft/embedded.html#InterfaceSVGImageElement
 
-interface SVGImageElement : SVGGraphicsElement {
+[
+    ActiveScriptWrappable
+] interface SVGImageElement : SVGGraphicsElement {
     [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;
+    [RuntimeEnabled=ImageAsyncAttribute, CEReactions, Reflect] attribute DOMString async;
+
+    [RuntimeEnabled=JSImageDecode, CallWith=ScriptState, RaisesException] Promise decode();
 };
 
 SVGImageElement implements SVGURIReference;
diff --git a/core/svg/SVGLength.idl b/core/svg/SVGLength.idl
index 06b7617..cd8e588 100644
--- a/core/svg/SVGLength.idl
+++ b/core/svg/SVGLength.idl
@@ -20,12 +20,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGLength
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGLength
 
 [
-    ImplementedAs=SVGLengthTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGLengthTearOff
 ] interface SVGLength {
     // Length Unit Types
     const unsigned short SVG_LENGTHTYPE_UNKNOWN    = 0;
diff --git a/core/svg/SVGLengthList.idl b/core/svg/SVGLengthList.idl
index 5d6113c..db01d2a 100644
--- a/core/svg/SVGLengthList.idl
+++ b/core/svg/SVGLengthList.idl
@@ -24,12 +24,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGLengthList
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGLengthList
 
 [
-    ImplementedAs=SVGLengthListTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGLengthListTearOff
 ] interface SVGLengthList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGLineElement.idl b/core/svg/SVGLineElement.idl
index 73e56a1..2485608 100644
--- a/core/svg/SVGLineElement.idl
+++ b/core/svg/SVGLineElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGLineElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGLineElement
 
 interface SVGLineElement : SVGGeometryElement {
     [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x1;
diff --git a/core/svg/SVGLinearGradientElement.idl b/core/svg/SVGLinearGradientElement.idl
index 06c5c32..64c8656 100644
--- a/core/svg/SVGLinearGradientElement.idl
+++ b/core/svg/SVGLinearGradientElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGLinearGradientElement
+// https://svgwg.org/svg2-draft/pservers.html#InterfaceSVGLinearGradientElement
 
 interface SVGLinearGradientElement : SVGGradientElement {
     [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength x1;
diff --git a/core/svg/SVGMPathElement.idl b/core/svg/SVGMPathElement.idl
index a0a1a5c..c3933b2 100644
--- a/core/svg/SVGMPathElement.idl
+++ b/core/svg/SVGMPathElement.idl
@@ -23,9 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGMPathElement
+// https://svgwg.org/specs/animations/#InterfaceSVGMPathElement
 
-[RuntimeEnabled=smil]
+[RuntimeEnabled=SMIL]
 interface SVGMPathElement : SVGElement {
 };
 
diff --git a/core/svg/SVGMarkerElement.idl b/core/svg/SVGMarkerElement.idl
index 3ae585f..610dfaf 100644
--- a/core/svg/SVGMarkerElement.idl
+++ b/core/svg/SVGMarkerElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/painting.html#InterfaceSVGMarkerElement
+// https://svgwg.org/svg2-draft/painting.html#InterfaceSVGMarkerElement
 
 interface SVGMarkerElement : SVGElement {
 
diff --git a/core/svg/SVGMaskElement.idl b/core/svg/SVGMaskElement.idl
index 0045a16..7af6900 100644
--- a/core/svg/SVGMaskElement.idl
+++ b/core/svg/SVGMaskElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/css-masking/#InterfaceSVGMaskElement
+// https://drafts.fxtf.org/css-masking-1/#InterfaceSVGMaskElement
 
 interface SVGMaskElement : SVGElement {
     [MeasureAs=SVG1DOMMaskElement] readonly attribute SVGAnimatedEnumeration maskUnits;
@@ -36,5 +36,5 @@
 
 // SVGMaskElement implements SVGUnitTypes;
 
-// TODO(philipj): The following is not part of any spec:
+// TODO(foolip): The following is not part of any spec. https://crbug.com/701893
 SVGMaskElement implements SVGTests;
diff --git a/core/svg/SVGMatrix.idl b/core/svg/SVGMatrix.idl
index 0c960a1..53690ac 100644
--- a/core/svg/SVGMatrix.idl
+++ b/core/svg/SVGMatrix.idl
@@ -22,11 +22,11 @@
 
 // http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGMatrix
 
-// TODO(philipj): SVGMatrix is gone from SVG 2, replaced by DOMMatrix.
+// TODO(foolip): SVGMatrix is gone from SVG 2, replaced by DOMMatrix.
+// https://crbug.com/709001
 [
-    ImplementedAs=SVGMatrixTearOff,
-    SetWrapperReferenceTo(SVGTransform contextTransform),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGMatrixTearOff
 ] interface SVGMatrix {
     // FIXME: these attributes should all be floats but since we implement
     // AffineTransform with doubles setting these as doubles makes more sense.
diff --git a/core/svg/SVGMetadataElement.idl b/core/svg/SVGMetadataElement.idl
index 5f336ab..9c557f1 100644
--- a/core/svg/SVGMetadataElement.idl
+++ b/core/svg/SVGMetadataElement.idl
@@ -19,7 +19,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGMetadataElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGMetadataElement
 
 interface SVGMetadataElement : SVGElement {
 };
diff --git a/core/svg/SVGNumber.idl b/core/svg/SVGNumber.idl
index 0a2aa67..51ca938 100644
--- a/core/svg/SVGNumber.idl
+++ b/core/svg/SVGNumber.idl
@@ -20,12 +20,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGNumber
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGNumber
 
 [
-    ImplementedAs=SVGNumberTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGNumberTearOff
 ] interface SVGNumber {
     [RaisesException=Setter] attribute float value;
 };
diff --git a/core/svg/SVGNumberList.idl b/core/svg/SVGNumberList.idl
index 3d02ae5..c4ecd9e 100644
--- a/core/svg/SVGNumberList.idl
+++ b/core/svg/SVGNumberList.idl
@@ -24,12 +24,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGNumberList
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGNumberList
 
 [
-    ImplementedAs=SVGNumberListTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGNumberListTearOff
 ] interface SVGNumberList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGPathElement.idl b/core/svg/SVGPathElement.idl
index c5bb32f..748f418 100644
--- a/core/svg/SVGPathElement.idl
+++ b/core/svg/SVGPathElement.idl
@@ -24,13 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/paths.html#InterfaceSVGPathElement
+// https://svgwg.org/svg2-draft/paths.html#InterfaceSVGPathElement
 
 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);
 };
diff --git a/core/svg/SVGPatternElement.idl b/core/svg/SVGPatternElement.idl
index 76fd7bf..fba4f7b 100644
--- a/core/svg/SVGPatternElement.idl
+++ b/core/svg/SVGPatternElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGPatternElement
+// https://svgwg.org/svg2-draft/pservers.html#InterfaceSVGPatternElement
 
 interface SVGPatternElement : SVGElement {
     [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedEnumeration patternUnits;
@@ -39,6 +39,6 @@
 SVGPatternElement implements SVGURIReference;
 // SVGPatternElement implements SVGUnitTypes;
 
-// TODO(philipj): The following was part of SVG 1.1:
+// TODO(foolip): The following was part of SVG 1.1. https://crbug.com/701893
 // http://www.w3.org/TR/SVG11/pservers.html#InterfaceSVGPatternElement
 SVGPatternElement implements SVGTests;
diff --git a/core/svg/SVGPoint.idl b/core/svg/SVGPoint.idl
index b7c1434..110f5a5 100644
--- a/core/svg/SVGPoint.idl
+++ b/core/svg/SVGPoint.idl
@@ -22,11 +22,11 @@
 
 // http://www.w3.org/TR/SVG11/coords.html#InterfaceSVGPoint
 
-// TODO(philipj): SVGPoint is gone from SVG 2, replaced by DOMPoint.
+// TODO(foolip): SVGPoint is gone from SVG 2, replaced by DOMPoint.
+// https://crbug.com/709001
 [
-    ImplementedAs=SVGPointTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGPointTearOff
 ] interface SVGPoint {
     [RaisesException=Setter] attribute unrestricted float x;
     [RaisesException=Setter] attribute unrestricted float y;
diff --git a/core/svg/SVGPointList.idl b/core/svg/SVGPointList.idl
index 97589be..b502738 100644
--- a/core/svg/SVGPointList.idl
+++ b/core/svg/SVGPointList.idl
@@ -23,18 +23,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGPointList
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGPointList
 
 [
-    ImplementedAs=SVGPointListTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGPointListTearOff
 ] interface SVGPointList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
 
     [RaisesException] void clear();
-    // TODO(philipj): SVGPoint should be DOMPoint.
+    // TODO(foolip): SVGPoint should be DOMPoint.
     [RaisesException] SVGPoint initialize(SVGPoint newItem);
     [RaisesException] getter SVGPoint getItem(unsigned long index);
     [RaisesException] SVGPoint insertItemBefore(SVGPoint newItem, unsigned long index);
diff --git a/core/svg/SVGPolygonElement.idl b/core/svg/SVGPolygonElement.idl
index 75e87c3..02bf320 100644
--- a/core/svg/SVGPolygonElement.idl
+++ b/core/svg/SVGPolygonElement.idl
@@ -23,12 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGPolygonElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGPolygonElement
 
 interface SVGPolygonElement : SVGGeometryElement {
-    // TODO(philipj): points and animatedPoints be on the SVGAnimatedPoints
+    // TODO(foolip): points and animatedPoints be on the SVGAnimatedPoints
     // interface which SVGPolygonElement should implement:
-    // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGAnimatedPoints
+    // https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGAnimatedPoints
     [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 fae6f4e..2bb4518 100644
--- a/core/svg/SVGPolylineElement.idl
+++ b/core/svg/SVGPolylineElement.idl
@@ -23,12 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGPolylineElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGPolylineElement
 
 interface SVGPolylineElement : SVGGeometryElement {
-    // TODO(philipj): points and animatedPoints should be on the
+    // TODO(foolip): points and animatedPoints should be on the
     // SVGAnimatedPoints interface which SVGPolylineElement should implement:
-    // http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGAnimatedPoints
+    // https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGAnimatedPoints
     [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 6e1d4ad..0d32580 100644
--- a/core/svg/SVGPreserveAspectRatio.idl
+++ b/core/svg/SVGPreserveAspectRatio.idl
@@ -23,12 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGPreserveAspectRatio
+// https://svgwg.org/svg2-draft/coords.html#InterfaceSVGPreserveAspectRatio
 
 [
-    ImplementedAs=SVGPreserveAspectRatioTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGPreserveAspectRatioTearOff
 ] interface SVGPreserveAspectRatio {
     // Alignment types
     const unsigned short SVG_PRESERVEASPECTRATIO_UNKNOWN = 0;
diff --git a/core/svg/SVGRadialGradientElement.idl b/core/svg/SVGRadialGradientElement.idl
index 16a496b..a128bf5 100644
--- a/core/svg/SVGRadialGradientElement.idl
+++ b/core/svg/SVGRadialGradientElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGRadialGradientElement
+// https://svgwg.org/svg2-draft/pservers.html#InterfaceSVGRadialGradientElement
 
 interface SVGRadialGradientElement : SVGGradientElement {
     [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedLength cx;
diff --git a/core/svg/SVGRect.idl b/core/svg/SVGRect.idl
index 725ee0f..fa37947 100644
--- a/core/svg/SVGRect.idl
+++ b/core/svg/SVGRect.idl
@@ -22,11 +22,11 @@
 
 // http://www.w3.org/TR/SVG11/types.html#InterfaceSVGRect
 
-// TODO(philipj): SVGRect is gone from SVG 2, replaced by DOMRect.
+// TODO(foolip): SVGRect is gone from SVG 2, replaced by DOMRect.
+// https://crbug.com/709001
 [
-    ImplementedAs=SVGRectTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGRectTearOff
 ] interface SVGRect {
     [RaisesException=Setter] attribute unrestricted float x;
     [RaisesException=Setter] attribute unrestricted float y;
diff --git a/core/svg/SVGRectElement.idl b/core/svg/SVGRectElement.idl
index 98fb22d..bde3c4b 100644
--- a/core/svg/SVGRectElement.idl
+++ b/core/svg/SVGRectElement.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/shapes.html#InterfaceSVGRectElement
+// https://svgwg.org/svg2-draft/shapes.html#InterfaceSVGRectElement
 
 interface SVGRectElement : SVGGeometryElement {
     [MeasureAs=SVG1DOMShape] readonly attribute SVGAnimatedLength x;
diff --git a/core/svg/SVGSVGElement.idl b/core/svg/SVGSVGElement.idl
index b05a259..4cc98bb 100644
--- a/core/svg/SVGSVGElement.idl
+++ b/core/svg/SVGSVGElement.idl
@@ -20,53 +20,50 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSVGElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGSVGElement
 
 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.
-    [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;
-    [Measure] readonly attribute SVGViewSpec currentView;
-             attribute float currentScale;
-    // TODO(philipj): currentTranslate should be a DOMPointReadOnly.
+
+    attribute float currentScale;
+    // TODO(foolip): currentTranslate should be a DOMPointReadOnly.
     [ImplementedAs=currentTranslateFromJavascript] readonly attribute SVGPoint currentTranslate;
 
-    [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.
+    // TODO(foolip): 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();
+
     [Measure] SVGNumber createSVGNumber();
     [Measure] SVGLength createSVGLength();
     [Measure] SVGAngle createSVGAngle();
-    // TODO(philipj): SVGPoint/Matrix/Rect should be DOMPoint/Matrix/Rect.
+    // TODO(foolip): SVGPoint/Matrix/Rect should be DOMPoint/Matrix/Rect.
     [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] Element getElementById(DOMString elementId);
+
+    [MeasureAs=SVGSVGElementSuspendRedraw] unsigned long suspendRedraw(unsigned long maxWaitMilliseconds);
+    [MeasureAs=SVGSVGElementUnsuspendRedraw] void unsuspendRedraw(unsigned long suspendHandleId);
+    [MeasureAs=SVGSVGElementUnsuspendRedrawAll] void unsuspendRedrawAll();
+    [MeasureAs=SVGSVGElementForceRedraw] void forceRedraw();
+
+    // SVG Animations
+    // https://svgwg.org/specs/animations/#InterfaceSVGSVGElement
+    [MeasureAs=SVGSMILPausing, RuntimeEnabled=SMIL] void pauseAnimations();
+    [MeasureAs=SVGSMILPausing, RuntimeEnabled=SMIL] void unpauseAnimations();
+    [MeasureAs=SVGSMILPausing, RuntimeEnabled=SMIL] boolean animationsPaused();
+    [MeasureAs=SVGSMILCurrentTime, RuntimeEnabled=SMIL] float getCurrentTime();
+    [MeasureAs=SVGSMILCurrentTime, RuntimeEnabled=SMIL] void setCurrentTime(float seconds);
 };
 
 SVGSVGElement implements SVGFitToViewBox;
diff --git a/core/svg/SVGScriptElement.idl b/core/svg/SVGScriptElement.idl
index f3e4ace..52d84e7 100644
--- a/core/svg/SVGScriptElement.idl
+++ b/core/svg/SVGScriptElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/script.html#InterfaceSVGScriptElement
+// https://svgwg.org/svg2-draft/interact.html#InterfaceSVGScriptElement
 
 interface SVGScriptElement : SVGElement {
     [Reflect] attribute DOMString type;
diff --git a/core/svg/SVGSetElement.idl b/core/svg/SVGSetElement.idl
index f3f025f..ecb0229 100644
--- a/core/svg/SVGSetElement.idl
+++ b/core/svg/SVGSetElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/animate.html#InterfaceSVGSetElement
+// https://svgwg.org/specs/animations/#InterfaceSVGSetElement
 
 interface SVGSetElement : SVGAnimationElement {
 };
diff --git a/core/svg/SVGStopElement.idl b/core/svg/SVGStopElement.idl
index a8406d4..642e3aa 100644
--- a/core/svg/SVGStopElement.idl
+++ b/core/svg/SVGStopElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/pservers.html#InterfaceSVGStopElement
+// https://svgwg.org/svg2-draft/pservers.html#InterfaceSVGStopElement
 
 interface SVGStopElement : SVGElement {
     [MeasureAs=SVG1DOMPaintServer] readonly attribute SVGAnimatedNumber offset;
diff --git a/core/svg/SVGStringList.idl b/core/svg/SVGStringList.idl
index 7241243..171e1fb 100644
--- a/core/svg/SVGStringList.idl
+++ b/core/svg/SVGStringList.idl
@@ -23,12 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGStringList
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGStringList
 
 [
-    SetWrapperReferenceTo(SVGElement contextElement),
-    ImplementedAs=SVGStringListTearOff,
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGStringListTearOff
 ] interface SVGStringList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGStyleElement.idl b/core/svg/SVGStyleElement.idl
index afd2a33..4796534 100644
--- a/core/svg/SVGStyleElement.idl
+++ b/core/svg/SVGStyleElement.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/styling.html#InterfaceSVGStyleElement
+// https://svgwg.org/svg2-draft/styling.html#InterfaceSVGStyleElement
 
 interface SVGStyleElement : SVGElement {
     attribute DOMString type;
@@ -32,10 +32,10 @@
     [MeasureAs=SVGStyleElementTitle] attribute DOMString title;
 
     // SVGStyleElement implements LinkStyle
-    // http://dev.w3.org/csswg/cssom/#the-linkstyle-interface
+    // https://drafts.csswg.org/cssom/#the-linkstyle-interface
     readonly attribute StyleSheet? sheet;
 
-    // TODO(philipj): The disabled attribute was not in SVG 1.1 and has been
+    // TODO(foolip): The disabled attribute was not in SVG 1.1 and has been
     // removed from HTMLLinkElement and HTMLStyleElement in the HTML spec:
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=14703
     [Measure] attribute boolean disabled;
diff --git a/core/svg/SVGSwitchElement.idl b/core/svg/SVGSwitchElement.idl
index 0370c7f..3611d23 100644
--- a/core/svg/SVGSwitchElement.idl
+++ b/core/svg/SVGSwitchElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSwitchElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGSwitchElement
 
 interface SVGSwitchElement : SVGGraphicsElement {
 };
diff --git a/core/svg/SVGSymbolElement.idl b/core/svg/SVGSymbolElement.idl
index 9a5b351..f2c657b 100644
--- a/core/svg/SVGSymbolElement.idl
+++ b/core/svg/SVGSymbolElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGSymbolElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGSymbolElement
 
 interface SVGSymbolElement : SVGElement {
 };
diff --git a/core/svg/SVGTSpanElement.idl b/core/svg/SVGTSpanElement.idl
index db5be69..d72fa86 100644
--- a/core/svg/SVGTSpanElement.idl
+++ b/core/svg/SVGTSpanElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTSpanElement
+// https://svgwg.org/svg2-draft/text.html#InterfaceSVGTSpanElement
 
 interface SVGTSpanElement : SVGTextPositioningElement {
 };
diff --git a/core/svg/SVGTests.idl b/core/svg/SVGTests.idl
index 1a76c1e..665ac6f 100644
--- a/core/svg/SVGTests.idl
+++ b/core/svg/SVGTests.idl
@@ -24,12 +24,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGTests
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGTests
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface SVGTests {
-    [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 77a7baa..4617f7f 100644
--- a/core/svg/SVGTextContentElement.idl
+++ b/core/svg/SVGTextContentElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextContentElement
+// https://svgwg.org/svg2-draft/text.html#InterfaceSVGTextContentElement
 
 interface SVGTextContentElement : SVGGraphicsElement {
     // lengthAdjust Types
@@ -37,7 +37,7 @@
     long getNumberOfChars();
     float getComputedTextLength();
     [RaisesException] float getSubStringLength(unsigned long charnum, unsigned long nchars);
-    // TODO(philipj): SVGPoint/SVGRect should be DOMPoint/DOMRect.
+    // TODO(foolip): SVGPoint/SVGRect should be DOMPoint/DOMRect.
     [RaisesException] SVGPoint getStartPositionOfChar(unsigned long charnum);
     [RaisesException] SVGPoint getEndPositionOfChar(unsigned long charnum);
     [RaisesException] SVGRect getExtentOfChar(unsigned long charnum);
diff --git a/core/svg/SVGTextElement.idl b/core/svg/SVGTextElement.idl
index 0c9fa35..d3cbdf8 100644
--- a/core/svg/SVGTextElement.idl
+++ b/core/svg/SVGTextElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextElement
+// https://svgwg.org/svg2-draft/text.html#InterfaceSVGTextElement
 
 interface SVGTextElement : SVGTextPositioningElement {
 };
diff --git a/core/svg/SVGTextPathElement.idl b/core/svg/SVGTextPathElement.idl
index 6d47b57..8aee74f 100644
--- a/core/svg/SVGTextPathElement.idl
+++ b/core/svg/SVGTextPathElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextPathElement
+// https://svgwg.org/svg2-draft/text.html#InterfaceSVGTextPathElement
 
 interface SVGTextPathElement : SVGTextContentElement {
     // textPath Method Types
diff --git a/core/svg/SVGTextPositioningElement.idl b/core/svg/SVGTextPositioningElement.idl
index f389dfa..c55fe38 100644
--- a/core/svg/SVGTextPositioningElement.idl
+++ b/core/svg/SVGTextPositioningElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/text.html#InterfaceSVGTextPositioningElement
+// https://svgwg.org/svg2-draft/text.html#InterfaceSVGTextPositioningElement
 
 interface SVGTextPositioningElement : SVGTextContentElement {
     [MeasureAs=SVG1DOMText] readonly attribute SVGAnimatedLengthList x;
diff --git a/core/svg/SVGTitleElement.idl b/core/svg/SVGTitleElement.idl
index a217a61..cfb65fb 100644
--- a/core/svg/SVGTitleElement.idl
+++ b/core/svg/SVGTitleElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGTitleElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGTitleElement
 
 interface SVGTitleElement : SVGElement {
 };
diff --git a/core/svg/SVGTransform.idl b/core/svg/SVGTransform.idl
index dd594e1..b28517a 100644
--- a/core/svg/SVGTransform.idl
+++ b/core/svg/SVGTransform.idl
@@ -19,12 +19,11 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGTransform
+// https://svgwg.org/svg2-draft/coords.html#InterfaceSVGTransform
 
 [
-    ImplementedAs=SVGTransformTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGTransformTearOff
 ] interface SVGTransform {
     // Transform Types
     const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
@@ -36,10 +35,11 @@
     const unsigned short SVG_TRANSFORM_SKEWY = 6;
 
     [ImplementedAs=transformType] readonly attribute unsigned short type;
-    // TODO(philipj): SVGMatrix should be DOMMatrixReadOnly.
+    // TODO(foolip): SVGMatrix should be DOMMatrix.
     readonly attribute SVGMatrix matrix;
     readonly attribute float angle;
 
+    // TODO(foolip): SVGMatrix should be DOMMatrixReadOnly.
     [RaisesException] void setMatrix(SVGMatrix matrix);
     [RaisesException] void setTranslate(float tx, float ty);
     [RaisesException] void setScale(float sx, float sy);
diff --git a/core/svg/SVGTransformList.idl b/core/svg/SVGTransformList.idl
index 2ffb5bc..8bf512e 100644
--- a/core/svg/SVGTransformList.idl
+++ b/core/svg/SVGTransformList.idl
@@ -24,12 +24,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/coords.html#InterfaceSVGTransformList
+// https://svgwg.org/svg2-draft/coords.html#InterfaceSVGTransformList
 
 [
-    ImplementedAs=SVGTransformListTearOff,
-    SetWrapperReferenceTo(SVGElement contextElement),
-    WillBeGarbageCollected,
+    DependentLifetime,
+    ImplementedAs=SVGTransformListTearOff
 ] interface SVGTransformList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
@@ -41,7 +40,7 @@
     [RaisesException] SVGTransform replaceItem(SVGTransform newItem, unsigned long index);
     [RaisesException] SVGTransform removeItem(unsigned long index);
     [RaisesException] SVGTransform appendItem(SVGTransform newItem);
-    // TODO(philipj): SVGMatrix should be DOMMatrix.
+    // TODO(foolip): SVGMatrix should be DOMMatrix.
     SVGTransform createSVGTransformFromMatrix(SVGMatrix matrix);
     [RaisesException, MeasureAs=SVGTransformListConsolidate] SVGTransform? consolidate();
     [RaisesException] setter void (unsigned long index, SVGTransform newItem);
diff --git a/core/svg/SVGURIReference.idl b/core/svg/SVGURIReference.idl
index 18932b0..6f6cee2 100644
--- a/core/svg/SVGURIReference.idl
+++ b/core/svg/SVGURIReference.idl
@@ -24,10 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGURIReference
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGURIReference
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface SVGURIReference {
     [MeasureAs=SVG1DOMUriReference] readonly attribute SVGAnimatedString href;
 };
diff --git a/core/svg/SVGUnitTypes.idl b/core/svg/SVGUnitTypes.idl
index 2b42b50..7a1434a 100644
--- a/core/svg/SVGUnitTypes.idl
+++ b/core/svg/SVGUnitTypes.idl
@@ -23,11 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGUnitTypes
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGUnitTypes
 
 [
-    DependentLifetime,
-    WillBeGarbageCollected
+    DependentLifetime
 ] interface SVGUnitTypes {
     // Unit Types
     const unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
diff --git a/core/svg/SVGUseElement.idl b/core/svg/SVGUseElement.idl
index 316ee3b..b096a2f 100644
--- a/core/svg/SVGUseElement.idl
+++ b/core/svg/SVGUseElement.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/struct.html#InterfaceSVGUseElement
+// https://svgwg.org/svg2-draft/struct.html#InterfaceSVGUseElement
 
 interface SVGUseElement : SVGGraphicsElement {
     [MeasureAs=SVG1DOMUseElement] readonly attribute SVGAnimatedLength   x;
diff --git a/core/svg/SVGViewElement.idl b/core/svg/SVGViewElement.idl
index 147ad37..731a978 100644
--- a/core/svg/SVGViewElement.idl
+++ b/core/svg/SVGViewElement.idl
@@ -23,10 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/linking.html#InterfaceSVGViewElement
+// https://svgwg.org/svg2-draft/linking.html#InterfaceSVGViewElement
 
 interface SVGViewElement : SVGElement {
-    [Measure] readonly attribute SVGStringList viewTarget;
 };
 
 SVGViewElement implements SVGFitToViewBox;
diff --git a/core/svg/SVGViewSpec.idl b/core/svg/SVGViewSpec.idl
deleted file mode 100644
index 5c16d61..0000000
--- a/core/svg/SVGViewSpec.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * 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/types.html#InterfaceSVGViewSpec
-
-[
-    DependentLifetime,
-    WillBeGarbageCollected,
-    SetWrapperReferenceTo(SVGElement contextElement),
-] interface SVGViewSpec {
-      [ImplementedAs=transformFromJavascript] readonly attribute SVGTransformList transform;
-      readonly attribute SVGElement viewTarget;
-      readonly attribute DOMString viewBoxString;
-      readonly attribute DOMString preserveAspectRatioString;
-      readonly attribute DOMString transformString;
-      readonly attribute DOMString viewTargetString;
-};
-
-SVGViewSpec implements SVGFitToViewBox;
-SVGViewSpec implements SVGZoomAndPan;
diff --git a/core/svg/SVGZoomAndPan.idl b/core/svg/SVGZoomAndPan.idl
index 624eae4..20e6ce5 100644
--- a/core/svg/SVGZoomAndPan.idl
+++ b/core/svg/SVGZoomAndPan.idl
@@ -24,10 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/SVG2/types.html#InterfaceSVGZoomAndPan
+// https://svgwg.org/svg2-draft/types.html#InterfaceSVGZoomAndPan
 
 [
-    NoInterfaceObject, // Always used on target of 'implements'
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface SVGZoomAndPan {
 
     // Zoom and Pan Types
diff --git a/core/svg/SVGZoomEvent.idl b/core/svg/SVGZoomEvent.idl
deleted file mode 100644
index ca6ee41..0000000
--- a/core/svg/SVGZoomEvent.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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/script.html#InterfaceSVGZoomEvent
-
-[
-    DependentLifetime,
-] interface SVGZoomEvent : UIEvent {
-    // TODO(philipj): SVGRect/SVGPoint should be DOMRectReadOnly/DOMPointReadOnly.
-    readonly attribute SVGRect zoomRectScreen;
-    readonly attribute float previousScale;
-    readonly attribute SVGPoint previousTranslate;
-    readonly attribute float newScale;
-    readonly attribute SVGPoint newTranslate;
-};
diff --git a/core/testing/CallbackFunctionTest.idl b/core/testing/CallbackFunctionTest.idl
new file mode 100644
index 0000000..bbbabb4
--- /dev/null
+++ b/core/testing/CallbackFunctionTest.idl
@@ -0,0 +1,18 @@
+// 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.
+
+callback TestCallback = DOMString (DOMString message1, DOMString message2);
+callback TestInterfaceCallback = void (HTMLDivElement divElement);
+callback TestReceiverObjectCallback = void ();
+callback TestSequenceCallback = sequence<DOMString> (sequence<long> numbers);
+callback TestEnumCallback = void (InternalEnum arg);
+
+interface CallbackFunctionTest {
+    [RaisesException] DOMString testCallback(TestCallback callback, DOMString message1, DOMString message2);
+    [RaisesException] DOMString testNullableCallback(TestCallback? callback, DOMString message1, DOMString message2);
+    [RaisesException] void testInterfaceCallback(TestInterfaceCallback callback, HTMLDivElement divElement);
+    [RaisesException] void testReceiverObjectCallback(TestReceiverObjectCallback callback);
+    [RaisesException] sequence<DOMString> testSequenceCallback(TestSequenceCallback callback, sequence<long> numbers);
+    [RaisesException] void testEnumCallback(TestEnumCallback callback, InternalEnum enum_value);
+};
diff --git a/core/testing/DeathAwareScriptWrappable.idl b/core/testing/DeathAwareScriptWrappable.idl
new file mode 100644
index 0000000..fed2e45
--- /dev/null
+++ b/core/testing/DeathAwareScriptWrappable.idl
@@ -0,0 +1,6 @@
+// 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 DeathAwareScriptWrappable {
+};
diff --git a/core/testing/DictionaryTest.idl b/core/testing/DictionaryTest.idl
index 699e669..e1cddf7 100644
--- a/core/testing/DictionaryTest.idl
+++ b/core/testing/DictionaryTest.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.
 
-[
-    GarbageCollected
-] interface DictionaryTest {
+interface DictionaryTest {
     void set(optional InternalDictionary testingDictionary);
     InternalDictionary get();
     [CallWith=ScriptState] object getDictionaryMemberProperties();
@@ -12,5 +10,8 @@
     void setDerived(InternalDictionaryDerived derived);
     InternalDictionaryDerived getDerived();
 
-    [CallWith=ExecutionContext, RaisesException] DOMString stringFromIterable(Dictionary iterableDictionary);
+    void setDerivedDerived(InternalDictionaryDerivedDerived derived);
+    InternalDictionaryDerivedDerived getDerivedDerived();
+
+    [CallWith=ScriptState, RaisesException] DOMString stringFromIterable(Dictionary iterableDictionary);
 };
diff --git a/core/testing/GCObservation.idl b/core/testing/GCObservation.idl
index ba754c0..7f49066 100644
--- a/core/testing/GCObservation.idl
+++ b/core/testing/GCObservation.idl
@@ -28,9 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface GCObservation {
+interface GCObservation {
     // Technically, this is true if the object was "near death"; the
     // object may have been kept alive through a weak handle. Having
     // been collected is the common case, though.
diff --git a/core/testing/GarbageCollectedScriptWrappable.idl b/core/testing/GarbageCollectedScriptWrappable.idl
index 0fd3bde..1c9df06 100644
--- a/core/testing/GarbageCollectedScriptWrappable.idl
+++ b/core/testing/GarbageCollectedScriptWrappable.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.
 
-[
-    GarbageCollected
-] interface GarbageCollectedScriptWrappable {
+interface GarbageCollectedScriptWrappable {
     [NotEnumerable] DOMString toString();
 };
diff --git a/core/testing/InternalDictionary.idl b/core/testing/InternalDictionary.idl
index 982650b..6596f08 100644
--- a/core/testing/InternalDictionary.idl
+++ b/core/testing/InternalDictionary.idl
@@ -26,7 +26,6 @@
     InternalEnum enumMember;
     InternalEnum enumMemberWithDefault = "foo";
     InternalEnum? enumOrNullMember;
-    InternalEnum[] enumArrayMember;
     Element elementMember;
     Element? elementOrNullMember;
     object objectMember;
diff --git a/core/testing/InternalDictionaryDerivedDerived.idl b/core/testing/InternalDictionaryDerivedDerived.idl
new file mode 100644
index 0000000..9635903
--- /dev/null
+++ b/core/testing/InternalDictionaryDerivedDerived.idl
@@ -0,0 +1,7 @@
+// 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 InternalDictionaryDerivedDerived : InternalDictionaryDerived {
+    DOMString derivedDerivedStringMember;
+};
diff --git a/core/testing/InternalSettings.idl b/core/testing/InternalSettings.idl
index ed536e6..133d3c5 100644
--- a/core/testing/InternalSettings.idl
+++ b/core/testing/InternalSettings.idl
@@ -23,12 +23,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    WillBeGarbageCollected,
-] interface InternalSettings : InternalSettingsGenerated {
+interface InternalSettings : InternalSettingsGenerated {
     // All methods which access Page::settings() can raise an exception
     // when the page cannot be accessed. (Such as during page tear-down.)
     [RaisesException] void setMockScrollbarsEnabled(boolean enabled);
+    [RaisesException] void setHideScrollbars(boolean enabled);
     [RaisesException] void setMockGestureTapHighlightsEnabled(boolean enabled);
     [RaisesException] void setStandardFontFamily(DOMString family, DOMString script);
     [RaisesException] void setSerifFontFamily(DOMString family, DOMString script);
@@ -48,22 +47,21 @@
     [RaisesException] void setDefaultVideoPosterURL(DOMString poster);
     [RaisesException] void setViewportEnabled(boolean enabled);
     [RaisesException] void setViewportMetaEnabled(boolean enabled);
+    [RaisesException] void setViewportStyle(DOMString style);
     [RaisesException] void setAvailablePointerTypes(DOMString pointers);
     [RaisesException] void setPrimaryPointerType(DOMString pointer);
     [RaisesException] void setAvailableHoverTypes(DOMString types);
     [RaisesException] void setPrimaryHoverType(DOMString type);
     [RaisesException] void setImageAnimationPolicy(DOMString policy);
-    [RaisesException] void setCompositorWorkerEnabled(boolean enabled);
+    [RaisesException] void setPresentationReceiver(boolean enabled);
+    [RaisesException] void setAutoplayPolicy(DOMString policy);
 
     // 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);
-    void setImageColorProfilesEnabled(boolean enabled);
     void setScrollTopLeftInteropEnabled(boolean enabled);
-    void setLinkHeaderEnabled(boolean enabled);
 };
diff --git a/core/testing/Internals.idl b/core/testing/Internals.idl
index dc69202..3b052e9 100644
--- a/core/testing/Internals.idl
+++ b/core/testing/Internals.idl
@@ -24,21 +24,25 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    DoNotCheckConstants,
-    GarbageCollected,
-    ConstructorCallWith=ScriptState,
-] interface Internals {
-    DOMString address(Node node);
+enum EffectiveConnectionType {
+    "slow-2g",
+    "2g",
+    "3g",
+    "4g"
+};
 
+[
+    DoNotCheckConstants
+] interface Internals {
     GCObservation observeGC(any observed);
 
     [RaisesException] DOMString elementLayoutTreeAsText(Element element);
     boolean isPreloaded(DOMString url);
     boolean isPreloadedBy(DOMString url, Document document);
+    boolean isLoading(DOMString url);
     boolean isLoadingFromMemoryCache(DOMString url);
-
-    boolean isSharingStyle(Element element1, Element element2);
+    unsigned long getResourcePriority (DOMString url, Document document);
+    DOMString getResourceHeader (DOMString url, DOMString header, Document document);
 
     CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
 
@@ -49,6 +53,9 @@
     ShadowRoot oldestShadowRoot(Element host);
     [RaisesException] ShadowRoot youngerShadowRoot(Node root);
 
+    void setBrowserControlsState(float top_height, float bottom_height, boolean shrinksLayout);
+    void setBrowserControlsShownRatio(float ratio);
+
     [RaisesException] DOMString shadowRootType(Node root);
     [RaisesException] boolean hasShadowInsertionPoint(Node root);
     [RaisesException] boolean hasContentElement(Node root);
@@ -57,9 +64,6 @@
     [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();
@@ -90,26 +94,30 @@
     [RaisesException] Node previousInFlatTree(Node node);
 
     DOMString visiblePlaceholder(Element element);
-
+    boolean isValidationMessageVisible(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);
-    [RaisesException] DOMString[] formControlStateOfHistoryItem();
+    [RaisesException] sequence<DOMString> formControlStateOfHistoryItem();
     [RaisesException] void setFormControlStateOfHistoryItem(sequence<DOMString> values);
     readonly attribute Window pagePopupWindow;
 
-    [RaisesException] ClientRect absoluteCaretBounds();
+    [RaisesException] DOMRectReadOnly absoluteCaretBounds();
 
-    ClientRect boundingBox(Element element);
+    DOMRectReadOnly boundingBox(Element element);
 
+    [RaisesException] void setMarker(Document document, Range range, DOMString markerType);
     [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);
+    [RaisesException] void addTextMatchMarker(Range range, DOMString matchStatus);
+    [RaisesException] void addCompositionMarker(Range range, DOMString underlineColorValue, DOMString thicknessValue, DOMString backgroundColorValue);
+    [RaisesException] void addActiveSuggestionMarker(Range range, DOMString underlineColorValue, DOMString thicknessValue, DOMString backgroundColorValue);
+    [RaisesException] void addSuggestionMarker(Range range, sequence<DOMString> suggestions, DOMString suggestionHighlightColorValue, DOMString underlineColorValue, DOMString thicknessValue, DOMString backgroundColorValue);
+    void setTextMatchMarkersActive(Node node, unsigned long startOffset, unsigned long endOffset, boolean active);
     void setMarkedTextMatchesAreHighlighted(Document document, boolean highlight);
 
     [RaisesException] void setFrameViewPosition(Document document, long x, long y);
@@ -134,18 +142,25 @@
     [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] DOMRectReadOnly bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document document);
 
     [RaisesException] long lastSpellCheckRequestSequence(Document document);
     [RaisesException] long lastSpellCheckProcessedSequence(Document document);
+    [RaisesException] void cancelCurrentSpellCheckRequest(Document document);
+    [RaisesException] DOMString idleTimeSpellCheckerState(Document document);
+    [RaisesException] void runIdleTimeSpellChecker(Document document);
 
     sequence<DOMString> userPreferredLanguages();
     void setUserPreferredLanguages(sequence<DOMString> languages);
 
-    unsigned long activeDOMObjectCount(Document document);
+    unsigned long mediaKeysCount();
+    unsigned long mediaKeySessionCount();
+    unsigned long suspendableObjectCount(Document document);
     unsigned long wheelEventHandlerCount(Document document);
     unsigned long scrollEventHandlerCount(Document document);
-    unsigned long touchEventHandlerCount(Document document);
+    unsigned long touchStartOrMoveEventHandlerCount(Document document);
+    unsigned long touchEndOrCancelEventHandlerCount(Document document);
+    unsigned long pointerEventHandlerCount(Document document);
     [RaisesException] LayerRectList touchEventTargetLayerRects(Document document);
 
     [RaisesException] boolean executeCommand(Document document, DOMString name, DOMString value);
@@ -159,9 +174,13 @@
         unsigned long topPadding, unsigned long rightPadding, unsigned long bottomPadding, unsigned long leftPadding,
         boolean ignoreClipping, boolean allowChildFrameContent);
 
-    boolean hasSpellingMarker(Document document, long from, long length);
-    boolean hasGrammarMarker(Document document, long from, long length);
-    void setContinuousSpellCheckingEnabled(boolean enabled);
+    [RaisesException] boolean hasSpellingMarker(Document document, long from, long length);
+    [RaisesException] boolean hasGrammarMarker(Document document, long from, long length);
+    [RaisesException] void setSpellCheckingEnabled(boolean enabled);
+    [RaisesException] void replaceMisspelled(Document document, DOMString replacement);
+
+    bool canHyphenate(DOMString locale);
+    void setMockHyphenation(DOMString locale);
 
     boolean isOverwriteModeEnabled(Document document);
     void toggleOverwriteModeEnabled(Document document);
@@ -177,12 +196,13 @@
     // Flags for layerTreeAsText.
     // 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_PAINT_INVALIDATIONS = 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_PAINT_INVALIDATION_OBJECTS = 32;
-    const unsigned short LAYER_TREE_INCLUDES_COMPOSITING_REASONS = 64;
+    const unsigned short LAYER_TREE_INCLUDES_COMPOSITING_REASONS = 32;
+    const unsigned short OUTPUT_AS_LAYER_TREE = 64;
+
     [RaisesException] DOMString layerTreeAsText(Document document, optional unsigned short flags);
     [RaisesException] DOMString elementLayerTreeAsText(Element element, optional unsigned short flags);
 
@@ -190,33 +210,33 @@
 
     DOMString scrollingStateTreeAsText(Document document);
     [RaisesException] DOMString mainThreadScrollingReasons(Document document);
-    [RaisesException] ClientRectList nonFastScrollableRects(Document document);
+    [RaisesException] DOMRectList nonFastScrollableRects(Document document);
 
     void evictAllResources();
 
     unsigned long numberOfLiveNodes();
     unsigned long numberOfLiveDocuments();
-    DOMString dumpRefCountedInstanceCounts();
-    sequence<DOMString> consoleMessageArgumentCounts(Document document);
-    unsigned long[] setMemoryCacheCapacities(unsigned long minDeadBytes, unsigned long maxDeadBytes, unsigned long totalBytes);
 
     DOMString counterValue(Element element);
     [RaisesException] long pageNumber(Element element, optional float pageWidth = 800, optional float pageHeight = 600);
-    DOMString[] shortcutIconURLs(Document document);
-    DOMString[] allIconURLs(Document document);
+    sequence<DOMString> shortcutIconURLs(Document document);
+    sequence<DOMString> allIconURLs(Document document);
     [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] float pageScaleFactor();
     [RaisesException] void setPageScaleFactor(float scaleFactor);
     [RaisesException] void setPageScaleFactorLimits(float minScaleFactor, float maxScaleFactor);
 
     [RaisesException] void setIsCursorVisible(Document document, boolean isVisible);
 
-    double effectiveMediaVolume(HTMLMediaElement mediaElement);
+    // HTMLMediaElement, HTMLAudioElement and HTMLVideoElement.
+    DOMString effectivePreload(HTMLMediaElement mediaElement);
     void mediaPlayerRemoteRouteAvailabilityChanged(HTMLMediaElement mediaElement, boolean available);
     void mediaPlayerPlayingRemotelyChanged(HTMLMediaElement mediaElement, boolean remote);
-    void setAllowHiddenVolumeControls(HTMLMediaElement mediaElement, boolean allow);
+    void setMediaElementNetworkState(HTMLMediaElement element, long state);
+    void setPersistent(HTMLVideoElement video, boolean persistent);
 
     void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme);
     void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme, sequence<DOMString> policyAreas);
@@ -224,16 +244,10 @@
 
     TypeConversions typeConversions();
 
-    // This is enabled only in Debug builds.
-    // This is because we want to avoid putting the byte stream of testing private scripts
-    // into the binary of Release builds.
-    PrivateScriptTest privateScriptTest();
-
-    DOMString[] getReferencedFilePaths();
+    sequence<DOMString> getReferencedFilePaths();
 
     // 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);
 
@@ -244,33 +258,29 @@
 
     [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] ClientRectList draggableRegions(Document document);
-    [RaisesException] ClientRectList nonDraggableRegions(Document document);
+    [RaisesException] DOMRectList draggableRegions(Document document);
+    [RaisesException] DOMRectList nonDraggableRegions(Document document);
 
     // Returns a string with information about the mouse cursor used at the specified client location.
     DOMString getCurrentCursorInfo();
 
     readonly attribute boolean cursorUpdatePending;
+    readonly attribute boolean fakeMouseMovePending;
 
     DOMString markerTextForListItem(Element element);
 
     SerializedScriptValue deserializeBuffer(ArrayBuffer buffer);
     ArrayBuffer serializeObject(SerializedScriptValue obj);
 
+    [CallWith=ScriptState] any deserializeBufferContainingWasm(ArrayBuffer buffer);
+    ArrayBuffer serializeWithInlineWasm(any obj);
+
+
     void forceReload(boolean endToEnd);
 
     DOMString getImageSourceURL(Element element);
+    [RaisesException] void forceImageReload(Element element);
 
     DOMString selectMenuListText(HTMLSelectElement select);
     boolean isSelectPopupVisible(Node node);
@@ -278,7 +288,12 @@
     long selectPopupItemStyleFontHeight(Node select, long itemIndex);
     void resetTypeAheadSession(HTMLSelectElement select);
 
-    [RaisesException] ClientRect selectionBounds();
+    readonly attribute Node? visibleSelectionAnchorNode;
+    readonly attribute unsigned long visibleSelectionAnchorOffset;
+    readonly attribute Node? visibleSelectionFocusNode;
+    readonly attribute unsigned long visibleSelectionFocusOffset;
+    [RaisesException] DOMRect selectionBounds();
+    readonly attribute DOMString textAffinity;
 
     boolean loseSharedGraphicsContext3D();
 
@@ -291,14 +306,14 @@
     [CallWith=ScriptState] Promise createResolvedPromise(any value);
     [CallWith=ScriptState] Promise createRejectedPromise(any reason);
     [CallWith=ScriptState] Promise addOneToPromise(Promise promise);
-    [CallWith=ScriptState, RaisesException] Promise promiseCheck(long arg1, boolean arg2, Dictionary arg3, DOMString arg4, DOMString[] arg5);
+    [CallWith=ScriptState, RaisesException] Promise promiseCheck(long arg1, boolean arg2, Dictionary arg3, DOMString arg4, sequence<DOMString> arg5);
     [CallWith=ScriptState] Promise promiseCheckWithoutExceptionState(Dictionary arg1, DOMString arg2, DOMString... variadic);
     [CallWith=ScriptState] Promise promiseCheckRange([EnforceRange] octet arg1);
     [CallWith=ScriptState] Promise promiseCheckOverload(Location arg1);
     [CallWith=ScriptState] Promise promiseCheckOverload(Document arg1);
     [CallWith=ScriptState] Promise promiseCheckOverload(Location arg1, long arg2, long arg3);
 
-    void setValueForUser(Element element, DOMString value);
+    void setValueForUser(HTMLInputElement element, DOMString value);
 
     DOMString textSurroundingNode(Node node, long x, long y, unsigned long maxLength);
 
@@ -307,10 +322,10 @@
 
     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, double downlinkMaxMbps);
+    // These functions are for testing NetInfo. You must call clearNetworkConnectionInfoOverride() at the end.
+    [RaisesException] void setNetworkConnectionInfoOverride(boolean onLine, DOMString type, double downlinkMaxMbps);
+    [RaisesException] void setNetworkQualityInfoOverride(EffectiveConnectionType effective_type, unsigned long transport_rtt_msec, double downlink_throughput_mbps);
+    void clearNetworkConnectionInfoOverride();
 
     // This function is for testing HitRegions on Canvas2D.
     unsigned long countHitRegions(CanvasRenderingContext2D context);
@@ -319,8 +334,11 @@
     unsigned long canvasFontCacheMaxFonts();
 
     DictionaryTest dictionaryTest();
+    RecordTest recordTest();
+    SequenceTest sequenceTest();
     UnionTypesTest unionTypesTest();
-    [RaisesException] void setScrollChain(ScrollState scrollState, Element[] elements);
+    CallbackFunctionTest callbackFunctionTest();
+    [RaisesException] void setScrollChain(ScrollState scrollState, sequence<Element> elements);
     void forceBlinkGCWithoutV8GC();
 
     DOMString selectedHTMLForClipboard();
@@ -334,29 +352,58 @@
 
     bool magnifyScaleAroundAnchor(float offset, float x, float y);
 
-    boolean isUseCounted(Document document, long useCounterId);
+    boolean isUseCounted(Document document, unsigned long feature);
     boolean isCSSPropertyUseCounted(Document document, DOMString propertyName);
+    boolean isAnimatedCSSPropertyUseCounted(Document document, DOMString propertyName);
 
+    sequence<DOMString> getCSSPropertyLonghands();
+    sequence<DOMString> getCSSPropertyShorthands();
+    sequence<DOMString> getCSSPropertyAliases();
+
+    // Returns a promise that is resolved when |feature| is counted on
+    // |document|'s UseCounter. When |feature| was already counted, it's
+    // immediately resolved.
+    [CallWith=ScriptState] Promise<bool> observeUseCounter(Document document, unsigned long feature);
+
+    readonly attribute unsigned long length;
+    getter long (unsigned long index);
     iterable<long>;
 
-    [Unscopeable] readonly attribute DOMString unscopeableAttribute;
-    [Unscopeable] DOMString unscopeableMethod();
+    [Unscopable] readonly attribute DOMString unscopableAttribute;
+    [Unscopable] DOMString unscopableMethod();
 
-    ClientRectList focusRingRects(Element element);
-    ClientRectList outlineRects(Element element);
+    DOMRectList focusRingRects(Element element);
+    DOMRectList 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);
+    DOMString getScrollAnimationState(Node node);
 
-    // TODO(liberato): remove once autoplay gesture override experiment concludes.
-    void triggerAutoplayViewportCheck(HTMLMediaElement mediaElement);
+    DOMString getProgrammaticScrollAnimationState(Node node);
 
-    int getScrollAnimationState(Node node);
+    DOMRect visualRect(Node node);
+
+    OriginTrialsTest originTrialsTest();
+
+    void crash();
+
+    void setIsLowEndDevice(boolean isLowEndDevice);
+    boolean isLowEndDevice();
+
+    sequence<DOMString> supportedTextEncodingLabels();
+
+    // When RuntimeEnabledFeatures::PaintUnderInvalidationCheckingEnabled() and
+    // simulateRasterUnderInvalidation(true) is called, all changed pixels will
+    // be reported as raster under-invalidations.
+    void simulateRasterUnderInvalidations(boolean enable);
+
+    // Bypass the threshold of 'script-compile' of long-task attribution in
+    // PerformanceMonitor for testing. "PerformanceObserver should be observing
+    // 'longtask' while calling BypassLongCompileThresholdOnce.
+    [RaisesException] void BypassLongCompileThresholdOnce();
 };
diff --git a/core/testing/LayerRect.idl b/core/testing/LayerRect.idl
index 1bf1154..8556f41 100644
--- a/core/testing/LayerRect.idl
+++ b/core/testing/LayerRect.idl
@@ -28,9 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface LayerRect {
+interface LayerRect {
     /* The node that most closely represents the layer in which the rect
        occurs.  When a layer doesn't correspond directly to a node (eg.
        for layer squashing) this will the node representing an ancestor
@@ -41,5 +39,5 @@
     readonly attribute long associatedNodeOffsetX;
     readonly attribute long associatedNodeOffsetY;
     /* Rectange in the GraphicsLayer co-ordinate space */
-    readonly attribute ClientRect layerRelativeRect;
+    readonly attribute DOMRectReadOnly layerRelativeRect;
 };
diff --git a/core/testing/LayerRectList.idl b/core/testing/LayerRectList.idl
index 566be6e..469a760 100644
--- a/core/testing/LayerRectList.idl
+++ b/core/testing/LayerRectList.idl
@@ -28,9 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface LayerRectList {
+interface LayerRectList {
     readonly attribute unsigned long length;
     getter LayerRect item(unsigned long index);
 };
diff --git a/core/testing/OriginTrialsTest.idl b/core/testing/OriginTrialsTest.idl
new file mode 100644
index 0000000..bebe0c7
--- /dev/null
+++ b/core/testing/OriginTrialsTest.idl
@@ -0,0 +1,38 @@
+// 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 OriginTrialsTest {
+    [OriginTrialEnabled=OriginTrialsSampleAPI] readonly attribute boolean normalAttribute;
+    [OriginTrialEnabled=OriginTrialsSampleAPI] static readonly attribute boolean staticAttribute;
+    [OriginTrialEnabled=OriginTrialsSampleAPI] boolean normalMethod();
+    [OriginTrialEnabled=OriginTrialsSampleAPI] static boolean staticMethod();
+    [OriginTrialEnabled=OriginTrialsSampleAPI] const unsigned short CONSTANT = 1;
+
+    // This attribute uses native code to test whether the trial is enabled,
+    // and throws an exception in JavaScript if it is not.
+    [CallWith=ScriptState, RaisesException] readonly attribute boolean throwingAttribute;
+
+    // These are available whether or not the trial is enabled.
+    readonly attribute boolean unconditionalAttribute;
+    static readonly attribute boolean staticUnconditionalAttribute;
+    boolean unconditionalMethod();
+    static boolean staticUnconditionalMethod();
+    const unsigned short UNCONDITIONAL_CONSTANT = 99;
+
+    // These are available whether or not the trial is enabled, but only in a
+    // secure context
+    [SecureContext] readonly attribute boolean secureUnconditionalAttribute;
+    // TODO(chasej): Add [SecureContext] when that attribute is fixed to work on
+    //   static attributes. That problem is not related to [OriginTrialEnabled].
+    static readonly attribute boolean secureStaticUnconditionalAttribute;
+    [SecureContext] boolean secureUnconditionalMethod();
+    [SecureContext] static boolean secureStaticUnconditionalMethod();
+
+    // These are only available if the trial is enabled, as well as in secure
+    // context.
+    [SecureContext, OriginTrialEnabled=OriginTrialsSampleAPI] readonly attribute boolean secureAttribute;
+    [SecureContext, OriginTrialEnabled=OriginTrialsSampleAPI] static readonly attribute boolean secureStaticAttribute;
+    [SecureContext, OriginTrialEnabled=OriginTrialsSampleAPI] boolean secureMethod();
+    [SecureContext, OriginTrialEnabled=OriginTrialsSampleAPI] static boolean secureStaticMethod();
+};
diff --git a/core/testing/OriginTrialsTestPartial.idl b/core/testing/OriginTrialsTestPartial.idl
new file mode 100644
index 0000000..9cf0e48
--- /dev/null
+++ b/core/testing/OriginTrialsTestPartial.idl
@@ -0,0 +1,20 @@
+// 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=OriginTrialsTestPartial,
+    OriginTrialEnabled=OriginTrialsSampleAPI
+] partial interface OriginTrialsTest {
+    const unsigned short CONSTANT_PARTIAL = 2;
+    readonly attribute boolean normalAttributePartial;
+    static readonly attribute boolean staticAttributePartial;
+    boolean normalMethodPartial();
+    static boolean staticMethodPartial();
+
+    // These are only available in a secure context.
+    [SecureContext] readonly attribute boolean secureAttributePartial;
+    [SecureContext] static readonly attribute boolean secureStaticAttributePartial;
+    [SecureContext] boolean secureMethodPartial();
+    [SecureContext] static boolean secureStaticMethodPartial();
+};
diff --git a/core/testing/PartialPrivateScriptTest.idl b/core/testing/PartialPrivateScriptTest.idl
deleted file mode 100644
index 5175774..0000000
--- a/core/testing/PartialPrivateScriptTest.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.
-
-[
-    NoImplHeader
-] partial interface PrivateScriptTest {
-    [ImplementedInPrivateScript] short addIntegerInPartial(short value1, short value2);
-    [ImplementedInPrivateScript] short addInteger2InPartial(short value1, short value2);
-    [ImplementedInPrivateScript] attribute DOMString stringAttributeInPartial;
-};
diff --git a/core/testing/PrivateScriptTest.idl b/core/testing/PrivateScriptTest.idl
deleted file mode 100644
index 8e6d976..0000000
--- a/core/testing/PrivateScriptTest.idl
+++ /dev/null
@@ -1,46 +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,
-] interface PrivateScriptTest {
-    [ImplementedInPrivateScript] void doNothing();
-    [ImplementedInPrivateScript] short return123();
-    [ImplementedInPrivateScript] short echoInteger(short value);
-    [ImplementedInPrivateScript] DOMString echoString(DOMString value);
-    [ImplementedInPrivateScript] Node echoNode(Node value);
-    [ImplementedInPrivateScript] short addInteger(short value1, short value2);
-    [ImplementedInPrivateScript] DOMString addString(DOMString value1, DOMString value2);
-    [ImplementedInPrivateScript] void setIntegerToPrototype(short value);
-    [ImplementedInPrivateScript] short getIntegerFromPrototype();
-    [ImplementedInPrivateScript] void setIntegerToDocument(Document document, short value);
-    [ImplementedInPrivateScript] short getIntegerFromDocument(Document document);
-    [ImplementedInPrivateScript] Node createElement(Document document);
-    [ImplementedInPrivateScript] void appendChild(Node node1, Node node2);
-    [ImplementedInPrivateScript] Node firstChild(Node node);
-    [ImplementedInPrivateScript] Node nextSibling(Node node);
-    [ImplementedInPrivateScript] DOMString innerHTML(Node node);
-    [ImplementedInPrivateScript] void setInnerHTML(Node node, DOMString string);
-    [ImplementedInPrivateScript] void addClickListener(Node node);
-    [ImplementedInPrivateScript] void clickNode(Document document, Node node);
-    [ImplementedInPrivateScript] readonly attribute short readonlyShortAttribute;
-    [ImplementedInPrivateScript] attribute short shortAttribute;
-    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
-    [ImplementedInPrivateScript] attribute Node nodeAttribute;
-    [ImplementedInPrivateScript] attribute Node? nodeAttributeThrowsIndexSizeError;
-    [ImplementedInPrivateScript] void voidMethodThrowsDOMSyntaxError();
-    [ImplementedInPrivateScript] void voidMethodThrowsError();
-    [ImplementedInPrivateScript] void voidMethodThrowsTypeError();
-    [ImplementedInPrivateScript] void voidMethodThrowsRangeError();
-    [ImplementedInPrivateScript] void voidMethodThrowsSyntaxError();
-    [ImplementedInPrivateScript] void voidMethodThrowsReferenceError();
-    [ImplementedInPrivateScript] void voidMethodThrowsStackOverflowError();
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] short addIntegerForPrivateScriptOnly(short value1, short value2);
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString stringAttributeForPrivateScriptOnly;
-    [ImplementedInPrivateScript] short addIntegerImplementedInCPP(short value1, short value2);
-    [OnlyExposedToPrivateScript] short addIntegerImplementedInCPPForPrivateScriptOnly(short value1, short value2);
-    [ImplementedInPrivateScript] attribute DOMString stringAttributeImplementedInCPP;
-    [OnlyExposedToPrivateScript] attribute DOMString stringAttributeImplementedInCPPForPrivateScriptOnly;
-    [ImplementedInPrivateScript] void dispatchDocumentOnload(Document document);
-};
diff --git a/core/testing/RecordTest.idl b/core/testing/RecordTest.idl
new file mode 100644
index 0000000..4d2b153
--- /dev/null
+++ b/core/testing/RecordTest.idl
@@ -0,0 +1,29 @@
+// Copyright 2017 The Chromium 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 record<DOMString, long> RecordTypedef;
+
+interface RecordTest {
+    void setStringLongRecord(RecordTypedef arg);
+    RecordTypedef getStringLongRecord();
+
+    void setNullableStringLongRecord(RecordTypedef? arg);
+    RecordTypedef? getNullableStringLongRecord();
+
+    void setByteStringByteStringRecord(record<ByteString, ByteString> arg);
+
+    void setStringElementRecord(record<DOMString, Element> arg);
+    record<DOMString, Element> getStringElementRecord();
+
+    void setUSVStringUSVStringBooleanRecordRecord(record<USVString, record<USVString, boolean>> arg);
+    record<USVString, record<USVString, boolean>> getUSVStringUSVStringBooleanRecordRecord();
+
+    record<DOMString, sequence<ByteString>> returnStringByteStringSequenceRecord();
+
+    boolean unionReceivedARecord((boolean or record<ByteString, ByteString>) arg);
+
+    // Test the bindings generator code: unions and dictionaries must trace a
+    // record when it's represented as a HeapVector.
+    void setFloatOrStringElementRecord((float or record<DOMString, Element>) arg);
+};
diff --git a/core/testing/RefCountedScriptWrappable.idl b/core/testing/RefCountedScriptWrappable.idl
deleted file mode 100644
index 1fc7fe0..0000000
--- a/core/testing/RefCountedScriptWrappable.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.
-
-[
-] interface RefCountedScriptWrappable {
-    [NotEnumerable] DOMString toString();
-};
diff --git a/core/testing/SequenceTest.idl b/core/testing/SequenceTest.idl
new file mode 100644
index 0000000..c0d5e5d
--- /dev/null
+++ b/core/testing/SequenceTest.idl
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium 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 FoodEnum {
+    "Bread",
+    "Spaghetti",
+    "Sushi"
+};
+
+interface SequenceTest {
+    // The identity functions just return what they have received in |arg|, to
+    // test converting both to and from V8.
+    sequence<sequence<ByteString>> identityByteStringSequenceSequence(sequence<sequence<ByteString>> arg);
+    sequence<double> identityDoubleSequence(sequence<double> arg);
+    sequence<FoodEnum> identityFoodEnumSequence(sequence<FoodEnum> arg);
+    sequence<long> identityLongSequence(sequence<long> arg);
+    sequence<octet>? identityOctetSequenceOrNull(sequence<octet>? arg);
+
+    sequence<Element> getElementSequence();
+    void setElementSequence(sequence<Element> arg);
+
+    bool unionReceivedSequence((double or sequence<double>) arg);
+};
diff --git a/core/testing/TypeConversions.idl b/core/testing/TypeConversions.idl
index a937e5e..69827eb 100644
--- a/core/testing/TypeConversions.idl
+++ b/core/testing/TypeConversions.idl
@@ -23,9 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface TypeConversions {
+interface TypeConversions {
     attribute long testLong;
     [EnforceRange, ImplementedAs=testLong] attribute long testEnforceRangeLong;
     attribute unsigned long testUnsignedLong;
diff --git a/core/testing/UnionTypesTest.idl b/core/testing/UnionTypesTest.idl
index d6cef15..c615b8a 100644
--- a/core/testing/UnionTypesTest.idl
+++ b/core/testing/UnionTypesTest.idl
@@ -2,10 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    GarbageCollected
-] interface UnionTypesTest {
-    attribute (double or DOMString or DOMString[]) doubleOrStringOrStringArrayAttribute;
+interface UnionTypesTest {
+    attribute (double or DOMString or sequence<DOMString>) doubleOrStringOrStringSequenceAttribute;
 
     DOMString doubleOrStringArg((double or DOMString) arg);
     DOMString doubleOrInternalEnumArg((double or InternalEnum) arg);
@@ -14,14 +12,11 @@
     [ImplementedAs=doubleOrStringArg] DOMString doubleOrStringDefaultStringArg(optional (double or DOMString) arg = "foo");
     [ImplementedAs=doubleOrStringArg] DOMString doubleOrStringDefaultNullArg(optional (double or DOMString)? arg = null);
 
-    DOMString doubleOrStringArrayArg((double or DOMString)[] arg);
     DOMString doubleOrStringSequenceArg(sequence<(double or DOMString)> arg);
 
     DOMString nodeListOrElementArg((NodeList or Element) arg);
     DOMString nodeListOrElementOrNullArg((NodeList or Element)? arg);
 
-    DOMString doubleOrStringOrStringArrayArg((double or DOMString or DOMString[]) arg);
     DOMString doubleOrStringOrStringSequenceArg((double or DOMString or sequence<DOMString>) arg);
-    [ImplementedAs=doubleOrStringOrStringArrayArg] DOMString doubleOrStringOrStringArrayNullableArg((double or DOMString or DOMString[])? arg);
     [ImplementedAs=doubleOrStringOrStringSequenceArg] DOMString doubleOrStringOrStringSequenceNullableArg((double or DOMString or sequence<DOMString>)? arg);
 };
diff --git a/core/testing/WorkerInternals.idl b/core/testing/WorkerInternals.idl
new file mode 100644
index 0000000..4f372e9
--- /dev/null
+++ b/core/testing/WorkerInternals.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.
+
+interface WorkerInternals {
+    OriginTrialsTest originTrialsTest();
+
+    // Records |feature| in worker's use counter. |feature| must be one of the
+    // values from the UseCounter::Feature enum.
+    [CallWith=ScriptState, RaisesException] void countFeature(unsigned long feature);
+    [CallWith=ScriptState, RaisesException] void countDeprecation(unsigned long feature);
+
+    [CallWith=ScriptState] void collectGarbage();
+};
diff --git a/core/timing/ConsoleMemory.idl b/core/timing/ConsoleMemory.idl
deleted file mode 100644
index 4a19192..0000000
--- a/core/timing/ConsoleMemory.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.
-
-// TODO(philipj): There is no spec for the Memory Info API, see blink-dev:
-// https://groups.google.com/a/chromium.org/d/msg/blink-dev/g5YRCGpC9vs/b4OJz71NmPwJ
-
-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, LegacyInterfaceTypeChecking] attribute MemoryInfo memory;
-};
diff --git a/core/timing/MemoryInfo.idl b/core/timing/MemoryInfo.idl
index 325406d..2af4ab2 100644
--- a/core/timing/MemoryInfo.idl
+++ b/core/timing/MemoryInfo.idl
@@ -28,11 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// TODO(philipj): There is no spec for the Memory Info API, see blink-dev:
+// TODO(foolip): There is no spec for the Memory Info API, see blink-dev:
 // https://groups.google.com/a/chromium.org/d/msg/blink-dev/g5YRCGpC9vs/b4OJz71NmPwJ
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface MemoryInfo {
     [Measure] readonly attribute unsigned long totalJSHeapSize;
diff --git a/core/timing/Performance.idl b/core/timing/Performance.idl
index 44eccbc..ba90e0e 100644
--- a/core/timing/Performance.idl
+++ b/core/timing/Performance.idl
@@ -31,18 +31,17 @@
 
 // https://w3c.github.io/hr-time/#the-performance-interface
 
-// TODO(philipj): This interface should be [Exposed=(Window,Worker)]. Doing that
+// TODO(foolip): This interface should be [Exposed=(Window,Worker)]. Doing that
 // would allow the WorkerPerformance interface to be merged into this.
-// TODO(philipj): None of the optional DOMString arguments in this interface
+// TODO(foolip): None of the optional DOMString arguments in this interface
 // should have a default value.
-[
-  GarbageCollected
-] interface Performance : EventTarget {
+interface Performance : EventTarget {
     DOMHighResTimeStamp now();
+    readonly attribute DOMHighResTimeStamp timeOrigin;
 
     // Performance Timeline
     // https://w3c.github.io/performance-timeline/#the-performance-interface
-    // TODO(philipj): getEntries() should take an optional FilterOptions argument.
+    // TODO(foolip): getEntries() should take an optional FilterOptions argument.
     [MeasureAs=UnprefixedPerformanceTimeline] PerformanceEntryList getEntries();
     [MeasureAs=UnprefixedPerformanceTimeline] PerformanceEntryList getEntriesByType(DOMString entryType);
     [MeasureAs=UnprefixedPerformanceTimeline] PerformanceEntryList getEntriesByName(DOMString name, optional DOMString entryType = null);
@@ -53,11 +52,6 @@
     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
     // https://w3c.github.io/navigation-timing/#extensions-to-the-performance-interface
     [SameObject, Measure] readonly attribute PerformanceTiming timing;
@@ -71,13 +65,9 @@
     [MeasureAs=UnprefixedUserTiming, RaisesException] void measure(DOMString measureName, optional DOMString startMark = null, optional DOMString endMark = null);
     [MeasureAs=UnprefixedUserTiming] void clearMeasures(optional DOMString measureName = null);
 
-    // Frame Timing
-    // https://w3c.github.io/frame-timing/#extensions-performance-interface
-    [RuntimeEnabled=FrameTimingSupport, MeasureAs=PerformanceFrameTiming] void clearFrameTimings();
-    [RuntimeEnabled=FrameTimingSupport, MeasureAs=PerformanceFrameTiming] void setFrameTimingBufferSize(unsigned long maxSize);
-    [RuntimeEnabled=FrameTimingSupport] attribute EventHandler onframetimingbufferfull;
-
-    // TODO(philipj): There is no spec for the Memory Info API, see blink-dev:
+    // TODO(foolip): There is no spec for the Memory Info API, see blink-dev:
     // https://groups.google.com/a/chromium.org/d/msg/blink-dev/g5YRCGpC9vs/b4OJz71NmPwJ
     [Measure] readonly attribute MemoryInfo memory;
+
+    serializer = {attribute};
 };
diff --git a/core/timing/PerformanceCompositeTiming.idl b/core/timing/PerformanceCompositeTiming.idl
deleted file mode 100644
index 60eb075..0000000
--- a/core/timing/PerformanceCompositeTiming.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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
- * 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://w3c.github.io/frame-timing/#performancecompositetiming
-
-[
-    RuntimeEnabled=FrameTimingSupport  // Experimental flag
-] interface PerformanceCompositeTiming : PerformanceEntry {
-    // TODO(philipj): This is named |sourceFrameNumber| in the spec.
-    readonly attribute unsigned long sourceFrame;
-    // TODO(philipj): serializer = {inherit, attribute};
-};
diff --git a/core/timing/PerformanceEntry.idl b/core/timing/PerformanceEntry.idl
index b18ac79..9432257 100644
--- a/core/timing/PerformanceEntry.idl
+++ b/core/timing/PerformanceEntry.idl
@@ -30,10 +30,8 @@
 
 // https://w3c.github.io/performance-timeline/#the-performanceentry-interface
 
-[
-    // TODO(philipj): Exposed=(Window,Worker)
-    GarbageCollected,
-] interface PerformanceEntry {
+[Exposed=(Window,Worker)]
+interface PerformanceEntry {
     readonly attribute DOMString name;
     readonly attribute DOMString entryType;
     readonly attribute DOMHighResTimeStamp startTime;
diff --git a/core/timing/PerformanceLongTaskTiming.idl b/core/timing/PerformanceLongTaskTiming.idl
new file mode 100644
index 0000000..9f7c9dc
--- /dev/null
+++ b/core/timing/PerformanceLongTaskTiming.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.
+
+// https://wicg.github.io/longtasks/#sec-PerformanceLongTaskTiming
+interface PerformanceLongTaskTiming : PerformanceEntry {
+    [SameObject, SaveSameObject] readonly attribute FrozenArray<TaskAttributionTiming> attribution;
+};
diff --git a/core/timing/PerformanceNavigation.idl b/core/timing/PerformanceNavigation.idl
index 30ee7b2..a516f3b 100644
--- a/core/timing/PerformanceNavigation.idl
+++ b/core/timing/PerformanceNavigation.idl
@@ -30,9 +30,10 @@
 
 // https://w3c.github.io/navigation-timing/#the-performancenavigation-interface
 
+// Legacy support for NT1(https://www.w3.org/TR/navigation-timing/).
+
 [
-    Exposed=Window,
-    GarbageCollected
+    Exposed=Window
 ] interface PerformanceNavigation {
     const unsigned short TYPE_NAVIGATE = 0;
     const unsigned short TYPE_RELOAD = 1;
@@ -40,5 +41,5 @@
     const unsigned short TYPE_RESERVED = 255;
     readonly attribute unsigned short type;
     readonly attribute unsigned short redirectCount;
-    // TODO(philipj): serializer = {attribute};
+    serializer = {attribute};
 };
diff --git a/core/timing/PerformanceNavigationTiming.idl b/core/timing/PerformanceNavigationTiming.idl
new file mode 100644
index 0000000..973206a
--- /dev/null
+++ b/core/timing/PerformanceNavigationTiming.idl
@@ -0,0 +1,27 @@
+// 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/navigation-timing/#sec-PerformanceNavigationTiming
+
+enum NavigationType {
+    "navigate",
+    "reload",
+    "back_forward",
+    "prerender"
+};
+[
+    RuntimeEnabled=PerformanceNavigationTiming2
+]  interface PerformanceNavigationTiming : PerformanceResourceTiming {
+    readonly attribute DOMHighResTimeStamp unloadEventStart;
+    readonly attribute DOMHighResTimeStamp unloadEventEnd;
+    readonly attribute DOMHighResTimeStamp domInteractive;
+    readonly attribute DOMHighResTimeStamp domContentLoadedEventStart;
+    readonly attribute DOMHighResTimeStamp domContentLoadedEventEnd;
+    readonly attribute DOMHighResTimeStamp domComplete;
+    readonly attribute DOMHighResTimeStamp loadEventStart;
+    readonly attribute DOMHighResTimeStamp loadEventEnd;
+    readonly attribute NavigationType      type;
+    readonly attribute unsigned short      redirectCount;
+    serializer = {inherit, attribute};
+};
diff --git a/core/timing/PerformanceObserver.idl b/core/timing/PerformanceObserver.idl
index de04cb9..026eeab 100644
--- a/core/timing/PerformanceObserver.idl
+++ b/core/timing/PerformanceObserver.idl
@@ -2,14 +2,16 @@
 // 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
+// https://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
+// https://w3c.github.io/performance-timeline/#the-performance-observer-interface
 [
-    CustomConstructor(PerformanceObserverCallback callback),
-    RuntimeEnabled=PerformanceObserver,
-    GarbageCollected,
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Constructor(PerformanceObserverCallback callback),
+    ConstructorCallWith=ScriptState,
+    Exposed=(Window,Worker)
 ] interface PerformanceObserver {
     [RaisesException] void observe(PerformanceObserverInit options);
     void disconnect();
diff --git a/core/timing/PerformanceObserverEntryList.idl b/core/timing/PerformanceObserverEntryList.idl
index 0d34346..763a536 100644
--- a/core/timing/PerformanceObserverEntryList.idl
+++ b/core/timing/PerformanceObserverEntryList.idl
@@ -2,14 +2,12 @@
 // 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
+// https://w3c.github.io/performance-timeline/#the-performance-observer-interface
 
 [
-    RuntimeEnabled=PerformanceObserver,
-    Exposed=(Window,Worker),
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface PerformanceObserverEntryList {
-    // TODO(philipj): getEntries() should take an optional FilterOptions argument.
+    // TODO(foolip): 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
index 635a31c..bb4bfd7 100644
--- a/core/timing/PerformanceObserverInit.idl
+++ b/core/timing/PerformanceObserverInit.idl
@@ -2,9 +2,8 @@
 // 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 {
+// https://w3c.github.io/performance-timeline/#the-performance-observer-interface
+
+dictionary PerformanceObserverInit {
     required sequence<DOMString> entryTypes;
 };
diff --git a/core/timing/PerformancePaintTiming.idl b/core/timing/PerformancePaintTiming.idl
new file mode 100644
index 0000000..5289d47
--- /dev/null
+++ b/core/timing/PerformancePaintTiming.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://github.com/WICG/paint-timing
+
+[
+    RuntimeEnabled=PerformancePaintTiming
+] interface PerformancePaintTiming : PerformanceEntry {
+};
diff --git a/core/timing/PerformanceRenderTiming.idl b/core/timing/PerformanceRenderTiming.idl
deleted file mode 100644
index eafd490..0000000
--- a/core/timing/PerformanceRenderTiming.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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
- * 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://w3c.github.io/frame-timing/#performancerendertiming
-
-[
-    RuntimeEnabled=FrameTimingSupport  // Experimental flag
-] interface PerformanceRenderTiming : PerformanceEntry {
-    // TODO(philipj): This is named |sourceFrameNumber| in the spec.
-    readonly attribute unsigned long sourceFrame;
-    // TODO(philipj): serializer = {inherit, attribute};
-};
diff --git a/core/timing/PerformanceResourceTiming.idl b/core/timing/PerformanceResourceTiming.idl
index d9a7cce..3005a6e 100644
--- a/core/timing/PerformanceResourceTiming.idl
+++ b/core/timing/PerformanceResourceTiming.idl
@@ -30,11 +30,11 @@
 
 // https://w3c.github.io/resource-timing/#performanceresourcetiming
 
-// TODO(philipj): This interface should be [Exposed=(Window,Worker)].
+[Exposed=(Window,Worker)]
 interface PerformanceResourceTiming : PerformanceEntry {
     readonly attribute DOMString initiatorType;
-    // TODO(philipj): readonly attribute DOMString nextHopProtocol;
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] readonly attribute DOMHighResTimeStamp workerStart;
+    readonly attribute DOMString nextHopProtocol;
+    readonly attribute DOMHighResTimeStamp workerStart;
     readonly attribute DOMHighResTimeStamp redirectStart;
     readonly attribute DOMHighResTimeStamp redirectEnd;
     readonly attribute DOMHighResTimeStamp fetchStart;
@@ -46,10 +46,10 @@
     readonly attribute DOMHighResTimeStamp requestStart;
     readonly attribute DOMHighResTimeStamp responseStart;
     readonly attribute DOMHighResTimeStamp responseEnd;
-    // TODO(philipj): The spec has tranferSize/encodedBodySize/decodedBodySize
-    // and a serializer:
-    // readonly attribute unsigned short transferSize;
-    // readonly attribute unsigned short encodedBodySize;
-    // readonly attribute unsigned short decodedBodySize;
+    [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long transferSize;
+    [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long encodedBodySize;
+    [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long decodedBodySize;
+    [RuntimeEnabled=ServerTiming] readonly attribute FrozenArray<PerformanceServerTiming> serverTiming;
+    // TODO(foolip): The spec has a serializer:
     // serializer = {inherit, attribute};
 };
diff --git a/core/timing/PerformanceServerTiming.idl b/core/timing/PerformanceServerTiming.idl
new file mode 100644
index 0000000..3bc1dbd
--- /dev/null
+++ b/core/timing/PerformanceServerTiming.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/server-timing/
+
+[
+    RuntimeEnabled=ServerTiming,
+    Exposed=(Window,Worker)
+] interface PerformanceServerTiming {
+    readonly attribute DOMString name;
+    readonly attribute DOMHighResTimeStamp duration;
+    readonly attribute DOMString description;
+    serializer = {attribute};
+};
diff --git a/core/timing/PerformanceTiming.idl b/core/timing/PerformanceTiming.idl
index 2a7bcc7..cefa9ed 100644
--- a/core/timing/PerformanceTiming.idl
+++ b/core/timing/PerformanceTiming.idl
@@ -30,9 +30,10 @@
 
 // https://w3c.github.io/navigation-timing/#the-performancetiming-interface
 
+// Legacy support for NT1(https://www.w3.org/TR/navigation-timing/).
+
 [
-    Exposed=Window,
-    GarbageCollected
+    Exposed=Window
 ] interface PerformanceTiming {
     readonly attribute unsigned long long navigationStart;
     readonly attribute unsigned long long unloadEventStart;
diff --git a/core/timing/SharedWorkerPerformance.idl b/core/timing/SharedWorkerPerformance.idl
deleted file mode 100644
index 8010681..0000000
--- a/core/timing/SharedWorkerPerformance.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014, Opera Software ASA. 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.
- * 3. Neither the name of Opera Software ASA 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 HOLDER 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): SharedWorker.workerStart was in the High Resolution Time spec,
-// but was removed in favor of Performance.translateTime():
-// https://github.com/w3c/hr-time/commit/39aaf81e1ea206fdf0fde4f49604ddd64d4f5b13
-
-partial interface SharedWorker {
-    [CallWith=ExecutionContext, Measure] readonly attribute DOMHighResTimeStamp workerStart;
-};
diff --git a/core/timing/TaskAttributionTiming.idl b/core/timing/TaskAttributionTiming.idl
new file mode 100644
index 0000000..e1ee405
--- /dev/null
+++ b/core/timing/TaskAttributionTiming.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/wicg/longtasks
+interface TaskAttributionTiming : PerformanceEntry {
+    [RuntimeEnabled=LongTaskV2] readonly attribute DOMString scriptURL;
+    readonly attribute DOMString containerType;
+    readonly attribute DOMString containerSrc;
+    readonly attribute DOMString containerId;
+    readonly attribute DOMString containerName;
+};
diff --git a/core/timing/WindowPerformance.idl b/core/timing/WindowPerformance.idl
index 209a4cd..e660507 100644
--- a/core/timing/WindowPerformance.idl
+++ b/core/timing/WindowPerformance.idl
@@ -4,10 +4,10 @@
 
 // https://w3c.github.io/hr-time/#the-performance-interface
 
-// TODO(philipj): This should be a GlobalPerformance interface implemented by
+// TODO(foolip): This should be a GlobalPerformance interface implemented by
 // Window and WorkerGlobalScope.
 [
-    ImplementedAs=DOMWindowPerformance,
+    ImplementedAs=DOMWindowPerformance
 ] partial interface Window {
     [Replaceable] readonly attribute Performance performance;
 };
diff --git a/core/timing/WorkerGlobalScopePerformance.idl b/core/timing/WorkerGlobalScopePerformance.idl
index d283fd8..2961d5f 100644
--- a/core/timing/WorkerGlobalScopePerformance.idl
+++ b/core/timing/WorkerGlobalScopePerformance.idl
@@ -30,8 +30,10 @@
 
 // https://w3c.github.io/hr-time/#the-performance-interface
 
-// TODO(philipj): This should be a GlobalPerformance interface implemented by
+// TODO(foolip): This should be a GlobalPerformance interface implemented by
 // Window and WorkerGlobalScope.
-partial interface WorkerGlobalScope {
+[
+    ImplementedAs=WorkerGlobalScopePerformance
+] partial interface WorkerGlobalScope {
     readonly attribute WorkerPerformance performance;
 };
diff --git a/core/timing/WorkerPerformance.idl b/core/timing/WorkerPerformance.idl
index b3ac8ac..eed8db1 100644
--- a/core/timing/WorkerPerformance.idl
+++ b/core/timing/WorkerPerformance.idl
@@ -30,37 +30,37 @@
 
 // https://w3c.github.io/hr-time/#the-performance-interface
 
-// TODO(philipj): This interface should be merged into Performance.
-// TODO(philipj): None of the optional DOMString arguments in this interface
+// TODO(foolip): This interface should be merged into Performance.
+// TODO(foolip): None of the optional DOMString arguments in this interface
 // should have a default value.
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface WorkerPerformance : EventTarget {
     DOMHighResTimeStamp now();
+    readonly attribute DOMHighResTimeStamp timeOrigin;
 
     // Performance Timeline
     // https://w3c.github.io/performance-timeline/#the-performance-interface
-    // TODO(philipj): getEntries() should take an optional FilterOptions argument.
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] PerformanceEntryList getEntries();
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] PerformanceEntryList getEntriesByType(DOMString entryType);
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] PerformanceEntryList getEntriesByName(DOMString name, optional DOMString entryType = null);
+    // TODO(foolip): getEntries() should take an optional FilterOptions argument.
+    PerformanceEntryList getEntries();
+    PerformanceEntryList getEntriesByType(DOMString entryType);
+    PerformanceEntryList getEntriesByName(DOMString name, optional DOMString entryType = null);
 
     // Resource Timing
     // https://w3c.github.io/resource-timing/#extensions-performance-interface
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void clearResourceTimings();
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void setResourceTimingBufferSize(unsigned long maxSize);
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] attribute EventHandler onresourcetimingbufferfull;
+    void clearResourceTimings();
+    void setResourceTimingBufferSize(unsigned long maxSize);
+    attribute EventHandler onresourcetimingbufferfull;
 
     // User Timing
     // https://w3c.github.io/user-timing/#extensions-performance-interface
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline, RaisesException] void mark(DOMString markName);
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void clearMarks(optional DOMString markName = null);
+    [RaisesException] void mark(DOMString markName);
+    void clearMarks(optional DOMString markName = null);
 
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline, RaisesException] void measure(DOMString measureName, optional DOMString startMark = null, optional DOMString endMark = null);
-    [RuntimeEnabled=ServiceWorkerPerformanceTimeline] void clearMeasures(optional DOMString measureName = null);
+    [RaisesException] void measure(DOMString measureName, optional DOMString startMark = null, optional DOMString endMark = null);
+    void clearMeasures(optional DOMString measureName = null);
 
-    // TODO(philipj): There is no spec for the Memory Info API, see blink-dev:
+    // TODO(foolip): There is no spec for the Memory Info API, see blink-dev:
     // https://groups.google.com/a/chromium.org/d/msg/blink-dev/g5YRCGpC9vs/b4OJz71NmPwJ
     [RuntimeEnabled=MemoryInfoInWorkers] readonly attribute MemoryInfo memory;
 };
diff --git a/core/typed_arrays/ArrayBuffer.idl b/core/typed_arrays/ArrayBuffer.idl
new file mode 100644
index 0000000..bddb19f
--- /dev/null
+++ b/core/typed_arrays/ArrayBuffer.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://www.ecma-international.org/ecma-262/6.0/#sec-arraybuffer-constructor
+
+[
+    ImplementedAs=DOMArrayBuffer,
+    NoInterfaceObject
+] interface ArrayBuffer {
+    readonly attribute unsigned long byteLength;
+};
diff --git a/core/typed_arrays/ArrayBufferView.idl b/core/typed_arrays/ArrayBufferView.idl
new file mode 100644
index 0000000..73b264a
--- /dev/null
+++ b/core/typed_arrays/ArrayBufferView.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#ARRAYBUFFERVIEW
+
+[
+    ImplementedAs=DOMArrayBufferView,
+    NoInterfaceObject
+] interface ArrayBufferView {
+    readonly attribute ArrayBuffer buffer;
+    readonly attribute unsigned long byteOffset;
+    readonly attribute unsigned long byteLength;
+};
diff --git a/core/typed_arrays/DataView.idl b/core/typed_arrays/DataView.idl
new file mode 100644
index 0000000..8723dc1
--- /dev/null
+++ b/core/typed_arrays/DataView.idl
@@ -0,0 +1,31 @@
+/*
+ * 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 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 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://www.khronos.org/registry/typedarray/specs/latest/#DATAVIEW
+
+[
+    ImplementedAs=DOMDataView
+] interface DataView : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Float32Array.idl b/core/typed_arrays/Float32Array.idl
new file mode 100644
index 0000000..bcc4d0e
--- /dev/null
+++ b/core/typed_arrays/Float32Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMFloat32Array,
+    NoInterfaceObject
+] interface Float32Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Float64Array.idl b/core/typed_arrays/Float64Array.idl
new file mode 100644
index 0000000..5652637
--- /dev/null
+++ b/core/typed_arrays/Float64Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMFloat64Array,
+    NoInterfaceObject
+] interface Float64Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Int16Array.idl b/core/typed_arrays/Int16Array.idl
new file mode 100644
index 0000000..d71aa23
--- /dev/null
+++ b/core/typed_arrays/Int16Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMInt16Array,
+    NoInterfaceObject
+] interface Int16Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Int32Array.idl b/core/typed_arrays/Int32Array.idl
new file mode 100644
index 0000000..67da272
--- /dev/null
+++ b/core/typed_arrays/Int32Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMInt32Array,
+    NoInterfaceObject
+] interface Int32Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Int8Array.idl b/core/typed_arrays/Int8Array.idl
new file mode 100644
index 0000000..694a0e4
--- /dev/null
+++ b/core/typed_arrays/Int8Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMInt8Array,
+    NoInterfaceObject
+] interface Int8Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/SharedArrayBuffer.idl b/core/typed_arrays/SharedArrayBuffer.idl
new file mode 100644
index 0000000..08a5a86
--- /dev/null
+++ b/core/typed_arrays/SharedArrayBuffer.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.
+
+// Draft spec: https://github.com/lars-t-hansen/ecmascript_sharedmem
+[
+    ImplementedAs=DOMSharedArrayBuffer,
+    NoInterfaceObject,
+    RuntimeEnabled=SharedArrayBuffer
+] interface SharedArrayBuffer {
+    readonly attribute unsigned long byteLength;
+};
diff --git a/core/typed_arrays/Uint16Array.idl b/core/typed_arrays/Uint16Array.idl
new file mode 100644
index 0000000..d9b19a2
--- /dev/null
+++ b/core/typed_arrays/Uint16Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMUint16Array,
+    NoInterfaceObject
+] interface Uint16Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Uint32Array.idl b/core/typed_arrays/Uint32Array.idl
new file mode 100644
index 0000000..d9b34d9
--- /dev/null
+++ b/core/typed_arrays/Uint32Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMUint32Array,
+    NoInterfaceObject
+] interface Uint32Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Uint8Array.idl b/core/typed_arrays/Uint8Array.idl
new file mode 100644
index 0000000..e677e0b
--- /dev/null
+++ b/core/typed_arrays/Uint8Array.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMUint8Array,
+    NoInterfaceObject
+] interface Uint8Array : ArrayBufferView {
+};
diff --git a/core/typed_arrays/Uint8ClampedArray.idl b/core/typed_arrays/Uint8ClampedArray.idl
new file mode 100644
index 0000000..ed6c346
--- /dev/null
+++ b/core/typed_arrays/Uint8ClampedArray.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://www.khronos.org/registry/typedarray/specs/latest/#TYPEDARRAYS
+
+[
+    ImplementedAs=DOMUint8ClampedArray,
+    NoInterfaceObject
+] interface Uint8ClampedArray : ArrayBufferView {
+};
diff --git a/core/url/URL.idl b/core/url/URL.idl
new file mode 100644
index 0000000..1537b4c
--- /dev/null
+++ b/core/url/URL.idl
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Motorola Mobility Inc.
+ *
+ * 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 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 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://url.spec.whatwg.org/#url
+
+[
+    Constructor(USVString url, optional USVString base),
+    Exposed=(Window,Worker),
+    ImplementedAs=DOMURL,
+    RaisesException=Constructor
+] interface URL {
+    // TODO(foolip): Implement domainToASCII() and domainToUnicode().
+    // crbug.com/493908
+    // static USVString domainToASCII(USVString domain);
+    // static USVString domainToUnicode(USVString domain);
+
+    stringifier attribute USVString href;
+    readonly attribute USVString origin;
+
+    attribute USVString protocol;
+    attribute USVString username;
+    attribute USVString password;
+    attribute USVString host;
+    attribute USVString hostname;
+    attribute USVString port;
+    attribute USVString pathname;
+    attribute USVString search;
+    readonly attribute URLSearchParams searchParams;
+    attribute USVString hash;
+};
diff --git a/core/url/URLSearchParams.idl b/core/url/URLSearchParams.idl
new file mode 100644
index 0000000..c9148aa
--- /dev/null
+++ b/core/url/URLSearchParams.idl
@@ -0,0 +1,23 @@
+// 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 (sequence<sequence<USVString>> or record<USVString, USVString> or USVString) init = ""),
+    Exposed=(Window,Worker),
+    RaisesException=Constructor
+] 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);
+
+    void sort();
+
+    iterable<USVString, USVString>;
+    stringifier;
+};
diff --git a/core/url/URLUtilsReadOnly.idl b/core/url/URLUtilsReadOnly.idl
new file mode 100644
index 0000000..4b15bf8
--- /dev/null
+++ b/core/url/URLUtilsReadOnly.idl
@@ -0,0 +1,45 @@
+/*
+ * 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:
+ * 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.
+ */
+
+// This interface was defined independently in the WHATWG URL spec, but has
+// been removed from it in
+// https://github.com/whatwg/url/commit/c2877946857bc904ecb8a5805abc423c82d9da98.
+// It's now inlined in the users. See crbug.com/699873.
+
+[
+    NoInterfaceObject, // Always used on target of 'implements'
+    Exposed=(Window,Worker)
+] interface URLUtilsReadOnly {
+    stringifier readonly attribute USVString href;
+    readonly attribute USVString origin;
+
+    readonly attribute USVString protocol;
+    readonly attribute USVString host;
+    readonly attribute USVString hostname;
+    readonly attribute USVString port;
+    readonly attribute USVString pathname;
+    readonly attribute USVString search;
+    readonly attribute USVString hash;
+};
diff --git a/core/workers/AbstractWorker.idl b/core/workers/AbstractWorker.idl
index c88428d..0b9f596 100644
--- a/core/workers/AbstractWorker.idl
+++ b/core/workers/AbstractWorker.idl
@@ -34,8 +34,7 @@
 [
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
-    Exposed=(Window,Worker),
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface AbstractWorker {
     attribute EventHandler onerror;
 };
diff --git a/core/workers/DedicatedWorkerGlobalScope.idl b/core/workers/DedicatedWorkerGlobalScope.idl
index 1fe2730..3e9922e 100644
--- a/core/workers/DedicatedWorkerGlobalScope.idl
+++ b/core/workers/DedicatedWorkerGlobalScope.idl
@@ -32,8 +32,12 @@
 
 [
     Global=(Worker,DedicatedWorker),
-    Exposed=DedicatedWorker,
+    Exposed=DedicatedWorker
 ] interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
-    [PostMessage, RaisesException] void postMessage(any message, optional sequence<Transferable> transfer);
+    [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer = []);
+
+    void close();
+
     attribute EventHandler onmessage;
+    attribute EventHandler onmessageerror;
 };
diff --git a/core/workers/SharedWorker.idl b/core/workers/SharedWorker.idl
index 3cb45e7..9e56013 100644
--- a/core/workers/SharedWorker.idl
+++ b/core/workers/SharedWorker.idl
@@ -32,14 +32,14 @@
 // https://html.spec.whatwg.org/#shared-workers-and-the-sharedworker-interface
 
 [
-    DependentLifetime,
-    // TODO(philipj): The name argument should not have a default null value.
+    ActiveScriptWrappable,
+    // TODO(foolip): 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),
+    DependentLifetime,
+    // TODO(foolip): Exposed=(Window,Worker),
     RaisesException=Constructor,
-    RuntimeEnabled=SharedWorker,
+    RuntimeEnabled=SharedWorker
 ] interface SharedWorker : EventTarget {
     readonly attribute MessagePort port;
 };
diff --git a/core/workers/SharedWorkerGlobalScope.idl b/core/workers/SharedWorkerGlobalScope.idl
index abc4aaf..9b3d13b 100644
--- a/core/workers/SharedWorkerGlobalScope.idl
+++ b/core/workers/SharedWorkerGlobalScope.idl
@@ -32,9 +32,12 @@
 
 [
     Global=(Worker,SharedWorker),
-    Exposed=SharedWorker,
+    Exposed=SharedWorker
 ] interface SharedWorkerGlobalScope : WorkerGlobalScope {
     readonly attribute DOMString name;
-    // TODO(philipj): readonly attribute ApplicationCache applicationCache;
+    // TODO(foolip): readonly attribute ApplicationCache applicationCache;
+
+    void close();
+
     attribute EventHandler onconnect;
 };
diff --git a/core/workers/Worker.idl b/core/workers/Worker.idl
index 70e5235..90d429d 100644
--- a/core/workers/Worker.idl
+++ b/core/workers/Worker.idl
@@ -28,17 +28,17 @@
 // https://html.spec.whatwg.org/#dedicated-workers-and-the-worker-interface
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
     Constructor(DOMString scriptUrl),
     ConstructorCallWith=ExecutionContext,
-    GarbageCollected,
-    // TODO(philipj): Exposed=(Window,Worker),
+    // TODO(foolip): Exposed=(Window,Worker),
     RaisesException=Constructor,
+    ImplementedAs=DedicatedWorker
 ] interface Worker : EventTarget {
     void terminate();
 
-    // TODO(philipj): The SerializedScriptValue type should be any.
-    [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+    [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer);
     attribute EventHandler onmessage;
 };
 
diff --git a/core/workers/WorkerConsole.idl b/core/workers/WorkerConsole.idl
deleted file mode 100644
index 79d4f8b..0000000
--- a/core/workers/WorkerConsole.idl
+++ /dev/null
@@ -1,38 +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:
- *
- * 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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-// Console API (non-standard but widely implemented in some form)
-// https://developer.chrome.com/devtools/docs/console-api
-
-// TODO(philipj): Both Firefox and IE use the Console interface in workers and
-// on the main thread alike, with no WorkerConsole or similar interface.
-
-[
-    NoInterfaceObject
-] interface WorkerConsole : ConsoleBase {
-};
diff --git a/core/workers/WorkerGlobalScope.idl b/core/workers/WorkerGlobalScope.idl
index 1d3f4d5..1d50998 100644
--- a/core/workers/WorkerGlobalScope.idl
+++ b/core/workers/WorkerGlobalScope.idl
@@ -27,13 +27,15 @@
 // https://html.spec.whatwg.org/#the-workerglobalscope-common-interface
 
 [
+    ActiveScriptWrappable,
+    DependentLifetime,
     Exposed=Worker,
+    ImmutablePrototype
 ] interface WorkerGlobalScope : EventTarget {
     readonly attribute WorkerGlobalScope self;
     readonly attribute WorkerLocation location;
 
-    void close();
-    // TODO(philipj): onerror should be an OnErrorEventHandler.
+    // TODO(foolip): onerror should be an OnErrorEventHandler.
     attribute EventHandler onerror;
     // attribute EventHandler onlanguagechange;
     // attribute EventHandler onoffline;
@@ -43,14 +45,27 @@
     [RaisesException] void importScripts(DOMString... urls);
     readonly attribute WorkerNavigator navigator;
 
-    // Console API (non-standard but widely implemented in some form)
-    // https://developer.chrome.com/devtools/docs/console-api
-    [Replaceable] readonly attribute WorkerConsole console;
+
+    // Console API
+    // https://console.spec.whatwg.org/#console-interface
+    // [Replaceable] readonly attribute Console console;
+    // Console is installed by v8 inspector when context is created
+    // and is left commented here just for documentation.
+
+    // CORS and RFC1918
+    // https://wicg.github.io/cors-rfc1918/#feature-detect
+    [RuntimeEnabled=CorsRFC1918, ImplementedAs=addressSpaceForBindings] readonly attribute AddressSpace addressSpace;
 
     // Unhandled Promise Rejection Events
-    // https://github.com/domenic/unhandled-rejections-browser-spec
-    [RuntimeEnabled=PromiseRejectionEvent] attribute EventHandler onrejectionhandled;
-    [RuntimeEnabled=PromiseRejectionEvent] attribute EventHandler onunhandledrejection;
+    attribute EventHandler onrejectionhandled;
+    attribute EventHandler onunhandledrejection;
+
+    // Secure Contexts
+    // https://w3c.github.io/webappsec-secure-contexts/#dom-windoworworkerglobalscope-issecurecontext
+    [ImplementedAs=isSecureContextForBindings] readonly attribute boolean isSecureContext;
+
+    // https://html.spec.whatwg.org/#windoworworkerglobalscope-mixin
+    [Replaceable] readonly attribute DOMString origin;
 };
 
 WorkerGlobalScope implements WindowBase64;
diff --git a/core/workers/WorkerLocation.idl b/core/workers/WorkerLocation.idl
index dd60b70..e271597 100644
--- a/core/workers/WorkerLocation.idl
+++ b/core/workers/WorkerLocation.idl
@@ -29,8 +29,7 @@
 // https://html.spec.whatwg.org/#worker-locations
 
 [
-    Exposed=Worker,
-    GarbageCollected,
+    Exposed=Worker
 ] interface WorkerLocation {
 };
 
diff --git a/core/workers/WorkerNavigator.idl b/core/workers/WorkerNavigator.idl
index a910af5..1d9c714 100644
--- a/core/workers/WorkerNavigator.idl
+++ b/core/workers/WorkerNavigator.idl
@@ -29,12 +29,11 @@
 // https://html.spec.whatwg.org/#the-workernavigator-object
 
 [
-    Exposed=Worker,
-    GarbageCollected,
+    Exposed=Worker
 ] interface WorkerNavigator {
 };
 
-WorkerNavigator implements NavigatorCPU;
+WorkerNavigator implements NavigatorConcurrentHardware;
 WorkerNavigator implements NavigatorID;
-// TODO(philipj): WorkerNavigator implements NavigatorLanguage;
+// TODO(foolip): WorkerNavigator implements NavigatorLanguage;
 WorkerNavigator implements NavigatorOnLine;
diff --git a/core/workers/Worklet.idl b/core/workers/Worklet.idl
new file mode 100644
index 0000000..73ded81
--- /dev/null
+++ b/core/workers/Worklet.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://drafts.css-houdini.org/worklets/#worklet
+
+[
+    DependentLifetime,
+    RuntimeEnabled=Worklet
+] interface Worklet {
+    [CallWith=ScriptState] Promise<void> addModule(USVString moduleURL, optional WorkletOptions options);
+};
diff --git a/core/workers/WorkletGlobalScope.idl b/core/workers/WorkletGlobalScope.idl
new file mode 100644
index 0000000..6f5a127
--- /dev/null
+++ b/core/workers/WorkletGlobalScope.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.
+
+// https://drafts.css-houdini.org/worklets/#workletglobalscope
+
+[
+    DependentLifetime,
+    ActiveScriptWrappable,
+    Exposed=Worklet,
+    RuntimeEnabled=Worklet,
+    ImmutablePrototype
+] interface WorkletGlobalScope {
+};
diff --git a/core/workers/WorkletOptions.idl b/core/workers/WorkletOptions.idl
new file mode 100644
index 0000000..5fcff7e
--- /dev/null
+++ b/core/workers/WorkletOptions.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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://fetch.spec.whatwg.org/#requestcredentials
+// Copied from modules/fetch/Request.idl because it's not accessible from core/
+// directory.
+// TODO(nhiroki): Consider how to reuse the existing enum.
+enum RequestCredentials { "omit", "same-origin", "include" };
+
+// https://drafts.css-houdini.org/worklets/#dictdef-workletoptions
+dictionary WorkletOptions {
+    RequestCredentials credentials = "omit";
+};
diff --git a/core/xml/DOMParser.idl b/core/xml/DOMParser.idl
index f817255..5c7cc3f 100644
--- a/core/xml/DOMParser.idl
+++ b/core/xml/DOMParser.idl
@@ -17,7 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-domparser-interface
+// https://w3c.github.io/DOM-Parsing/#the-domparser-interface
 
 enum SupportedType {
     "text/html",
@@ -29,8 +29,7 @@
 
 [
     Constructor,
-    ConstructorCallWith=Document,
-    GarbageCollected,
+    ConstructorCallWith=Document
 ] interface DOMParser {
     [NewObject] Document parseFromString(DOMString str, SupportedType type);
 };
diff --git a/core/xml/DocumentXMLTreeViewer.idl b/core/xml/DocumentXMLTreeViewer.idl
deleted file mode 100644
index 150d440..0000000
--- a/core/xml/DocumentXMLTreeViewer.idl
+++ /dev/null
@@ -1,9 +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.
-
-[
-    NoImplHeader
-] partial interface Document {
-    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] void transformDocumentToTreeView(DOMString noStyleMessage);
-};
diff --git a/core/xml/DocumentXPathEvaluator.idl b/core/xml/DocumentXPathEvaluator.idl
index 5f47dc4..3a97f65 100644
--- a/core/xml/DocumentXPathEvaluator.idl
+++ b/core/xml/DocumentXPathEvaluator.idl
@@ -19,7 +19,9 @@
 
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 
-partial interface Document {
+[
+    ImplementedAs=DocumentXPathEvaluator
+] 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 9995b0e..531f4ba 100644
--- a/core/xml/XMLSerializer.idl
+++ b/core/xml/XMLSerializer.idl
@@ -18,11 +18,10 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// https://dvcs.w3.org/hg/innerhtml/raw-file/tip/index.html#the-xmlserializer-interface
+// https://w3c.github.io/DOM-Parsing/#the-xmlserializer-interface
 
 [
-    Constructor,
-    GarbageCollected,
+    Constructor
 ] interface XMLSerializer {
     DOMString serializeToString(Node root);
 };
diff --git a/core/xml/XPathEvaluator.idl b/core/xml/XPathEvaluator.idl
index 0210849..f9f735e 100644
--- a/core/xml/XPathEvaluator.idl
+++ b/core/xml/XPathEvaluator.idl
@@ -27,8 +27,7 @@
 
 [
     Constructor,
-    GarbageCollected,
-    Measure,
+    Measure
 ] 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 3effc99..80d810f 100644
--- a/core/xml/XPathExpression.idl
+++ b/core/xml/XPathExpression.idl
@@ -20,8 +20,6 @@
 
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
 
-[
-    GarbageCollected,
-] interface XPathExpression {
+interface XPathExpression {
      [RaisesException] XPathResult evaluate(Node contextNode, optional unsigned short type = 0, optional object? inResult = null);
 };
diff --git a/core/xml/XPathNSResolver.idl b/core/xml/XPathNSResolver.idl
index e5888ee..cb45d03 100644
--- a/core/xml/XPathNSResolver.idl
+++ b/core/xml/XPathNSResolver.idl
@@ -20,13 +20,12 @@
 
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver
 
-// TODO(philipj): XPathNSResolver should be a callback interface. The spec
+// TODO(foolip): XPathNSResolver should be a callback interface. The spec
 // doesn't say so, but doing so would allow the custom bindings to be removed.
 // createNSResolver(Node nodeResolver) could simply return its argument, which
 // is what Gecko does. crbug.com/345529
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface XPathNSResolver {
     DOMString? lookupNamespaceURI([Default=Undefined] optional DOMString prefix);
diff --git a/core/xml/XPathResult.idl b/core/xml/XPathResult.idl
index 319b719..0a87159 100644
--- a/core/xml/XPathResult.idl
+++ b/core/xml/XPathResult.idl
@@ -19,9 +19,7 @@
 
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult
 
-[
-    GarbageCollected
-] interface XPathResult {
+interface XPathResult {
     // XPathResultType
     const unsigned short ANY_TYPE                       = 0;
     const unsigned short NUMBER_TYPE                    = 1;
diff --git a/core/xml/XSLTProcessor.idl b/core/xml/XSLTProcessor.idl
index b7b5158..ba796f2 100644
--- a/core/xml/XSLTProcessor.idl
+++ b/core/xml/XSLTProcessor.idl
@@ -31,20 +31,19 @@
 // https://hg.mozilla.org/mozilla-central/file/012853bd80b7/dom/webidl/XSLTProcessor.webidl
 
 [
-    GarbageCollected,
     Constructor,
     ConstructorCallWith=Document,
     RuntimeEnabled=XSLT,
-    MeasureAs=XSLTProcessor,
+    MeasureAs=XSLTProcessor
 ] interface XSLTProcessor {
 
     void importStylesheet(Node style);
-    // TODO(philipj): In Gecko, the transformTo*() methods throw an exception in
+    // TODO(foolip): In Gecko, the transformTo*() methods throw an exception in
     // case of error instead of returning null.
     [CustomElementCallbacks] DocumentFragment? transformToFragment(Node source, Document output);
     [CustomElementCallbacks] Document? transformToDocument(Node source);
 
-    // TODO(philipj): In Gecko, it's possible to set and get back any parameter
+    // TODO(foolip): In Gecko, it's possible to set and get back any parameter
     // value, not just DOMString.
     void setParameter(DOMString? namespaceURI, DOMString localName, DOMString value);
     DOMString? getParameter(DOMString? namespaceURI, DOMString localName);
diff --git a/core/xmlhttprequest/XMLHttpRequest.idl b/core/xmlhttprequest/XMLHttpRequest.idl
index 28d9452..1b9d315 100644
--- a/core/xmlhttprequest/XMLHttpRequest.idl
+++ b/core/xmlhttprequest/XMLHttpRequest.idl
@@ -35,15 +35,15 @@
     "document",
     "json",
     "text",
-    "legacystream",
 };
 
-// TODO(philipj): Most DOMString types in the XMLHttpRequest interface should be
+// TODO(foolip): Most DOMString types in the XMLHttpRequest interface should be
 // either ByteString or USVString.
 [
-    DependentLifetime,
+    ActiveScriptWrappable,
     Constructor,
     ConstructorCallWith=ScriptState,
+    DependentLifetime,
     Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface XMLHttpRequest : XMLHttpRequestEventTarget {
     // event handler
@@ -64,9 +64,9 @@
     [RaisesException=Setter] attribute unsigned long timeout;
     [RaisesException=Setter] attribute boolean withCredentials;
     readonly attribute XMLHttpRequestUpload upload;
-    // TODO(philipj): The data argument should be of type
+    // TODO(foolip): The data argument should be of type
     // (Document or BodyInit)?
-    [RaisesException] void send(optional (ArrayBuffer or ArrayBufferView or Blob or Document or DOMString or FormData)? body = null);
+    [RaisesException] void send(optional (ArrayBuffer or ArrayBufferView or Blob or Document or DOMString or FormData or URLSearchParams)? body = null);
     void abort();
 
     // response
@@ -79,6 +79,6 @@
     [RaisesException=Setter] attribute XMLHttpRequestResponseType responseType;
     [Custom=Getter, RaisesException=Getter] readonly attribute any response;
     [Custom=Getter, RaisesException=Getter] readonly attribute DOMString responseText;
-    // TODO(philipj): responseXML should be [Exposed=Window].
+    // TODO(foolip): responseXML should be [Exposed=Window].
     [RaisesException=Getter] readonly attribute Document? responseXML;
 };
diff --git a/core/xmlhttprequest/XMLHttpRequestEventTarget.idl b/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
index 154a1a5..3a16c77 100644
--- a/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
+++ b/core/xmlhttprequest/XMLHttpRequestEventTarget.idl
@@ -27,7 +27,6 @@
 // https://xhr.spec.whatwg.org/#xmlhttprequesteventtarget
 
 [
-    GarbageCollected,
     Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface XMLHttpRequestEventTarget : EventTarget {
     // event handlers
diff --git a/modules/accessibility/testing/InternalsAccessibility.idl b/modules/accessibility/testing/InternalsAccessibility.idl
index 90c1c8a..b056677 100644
--- a/modules/accessibility/testing/InternalsAccessibility.idl
+++ b/modules/accessibility/testing/InternalsAccessibility.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.
 
-partial interface Internals {
+[
+    ImplementedAs=InternalsAccessibility
+] partial interface Internals {
     unsigned long numberOfLiveAXObjects();
 };
diff --git a/modules/app_banner/AppBannerPromptResult.idl b/modules/app_banner/AppBannerPromptResult.idl
index 6ac8395..51804cb 100644
--- a/modules/app_banner/AppBannerPromptResult.idl
+++ b/modules/app_banner/AppBannerPromptResult.idl
@@ -4,10 +4,7 @@
 
 enum AppBannerPromptOutcome { "accepted", "dismissed" };
 
-[
-    GarbageCollected,
-    RuntimeEnabled=AppBanner,
-] interface AppBannerPromptResult {
-    readonly attribute DOMString platform;
-    readonly attribute AppBannerPromptOutcome outcome;
+dictionary AppBannerPromptResult {
+    required DOMString platform;
+    required AppBannerPromptOutcome outcome;
 };
diff --git a/modules/app_banner/BeforeInstallPromptEvent.idl b/modules/app_banner/BeforeInstallPromptEvent.idl
index 691aa0c..83cd1b8 100644
--- a/modules/app_banner/BeforeInstallPromptEvent.idl
+++ b/modules/app_banner/BeforeInstallPromptEvent.idl
@@ -3,10 +3,12 @@
 // found in the LICENSE file.
 
 [
+    ActiveScriptWrappable,
+    DependentLifetime,
     Constructor(DOMString type, optional BeforeInstallPromptEventInit eventInitDict),
-    RuntimeEnabled=AppBanner,
+    ConstructorCallWith=ExecutionContext
 ] interface BeforeInstallPromptEvent : Event {
-    readonly attribute sequence<DOMString> platforms;
-    [CallWith=ScriptState] readonly attribute Promise<DOMString> userChoice;
+    readonly attribute FrozenArray<DOMString> platforms;
+    [CallWith=ScriptState] readonly attribute Promise<AppBannerPromptResult> userChoice;
     [CallWith=ScriptState] Promise<void> prompt();
 };
diff --git a/modules/app_banner/WindowInstallation.idl b/modules/app_banner/WindowInstallation.idl
new file mode 100644
index 0000000..db86387
--- /dev/null
+++ b/modules/app_banner/WindowInstallation.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/appmanifest/#extensions-to-the-window-object
+
+[
+    ImplementedAs=DOMWindowInstallation
+] partial interface Window {
+    attribute EventHandler onappinstalled;
+    attribute EventHandler onbeforeinstallprompt;
+};
diff --git a/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl b/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
index b8a3195..a6f5a2f 100644
--- a/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
+++ b/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.idl
@@ -4,7 +4,9 @@
 
 // https://w3c.github.io/mediacapture-output/#htmlmediaelement-extensions
 
-partial interface HTMLMediaElement {
+[
+    ImplementedAs=HTMLMediaElementAudioOutputDevice
+] partial interface HTMLMediaElement {
     [RuntimeEnabled=AudioOutputDevices] readonly attribute DOMString sinkId;
     [RuntimeEnabled=AudioOutputDevices, CallWith=ScriptState] Promise<void> setSinkId(DOMString sinkId);
 };
diff --git a/modules/background_fetch/BackgroundFetchClickEvent.idl b/modules/background_fetch/BackgroundFetchClickEvent.idl
new file mode 100644
index 0000000..0859160
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchClickEvent.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-click-event
+
+enum BackgroundFetchState { "pending", "succeeded", "failed" };
+
+[
+    Constructor(DOMString type, BackgroundFetchClickEventInit init),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchClickEvent : BackgroundFetchEvent {
+    readonly attribute BackgroundFetchState state;
+};
diff --git a/modules/background_fetch/BackgroundFetchClickEventInit.idl b/modules/background_fetch/BackgroundFetchClickEventInit.idl
new file mode 100644
index 0000000..cf1cb86
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchClickEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-click-event
+
+dictionary BackgroundFetchClickEventInit : BackgroundFetchEventInit {
+    required BackgroundFetchState state;
+};
diff --git a/modules/background_fetch/BackgroundFetchEvent.idl b/modules/background_fetch/BackgroundFetchEvent.idl
new file mode 100644
index 0000000..632db60
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchEvent.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-event
+
+[
+    Constructor(DOMString type, BackgroundFetchEventInit init),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchEvent : ExtendableEvent {
+    readonly attribute DOMString id;
+};
diff --git a/modules/background_fetch/BackgroundFetchEventInit.idl b/modules/background_fetch/BackgroundFetchEventInit.idl
new file mode 100644
index 0000000..24194f4
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-event
+
+dictionary BackgroundFetchEventInit : ExtendableEventInit {
+    required DOMString id;
+};
diff --git a/modules/background_fetch/BackgroundFetchFailEvent.idl b/modules/background_fetch/BackgroundFetchFailEvent.idl
new file mode 100644
index 0000000..1f86f8e
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchFailEvent.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-fail-event
+
+[
+    Constructor(DOMString type, BackgroundFetchFailEventInit init),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchFailEvent : BackgroundFetchEvent {
+    readonly attribute FrozenArray<BackgroundFetchSettledFetch> fetches;
+};
diff --git a/modules/background_fetch/BackgroundFetchFailEventInit.idl b/modules/background_fetch/BackgroundFetchFailEventInit.idl
new file mode 100644
index 0000000..69b314c
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchFailEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-fail-event
+
+dictionary BackgroundFetchFailEventInit : BackgroundFetchEventInit {
+    required sequence<BackgroundFetchSettledFetch> fetches;
+};
diff --git a/modules/background_fetch/BackgroundFetchFetch.idl b/modules/background_fetch/BackgroundFetchFetch.idl
new file mode 100644
index 0000000..c87e156
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchFetch.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/background-fetch/#backgroundfetchfetch
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchFetch {
+    readonly attribute Request request;
+};
diff --git a/modules/background_fetch/BackgroundFetchManager.idl b/modules/background_fetch/BackgroundFetchManager.idl
new file mode 100644
index 0000000..12e59cc
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchManager.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-manager
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchManager {
+    [CallWith=ScriptState, RaisesException] Promise<BackgroundFetchRegistration> fetch(DOMString id, (RequestInfo or sequence<RequestInfo>) requests, optional BackgroundFetchOptions options);
+    [CallWith=ScriptState] Promise<BackgroundFetchRegistration?> get(DOMString id);
+    [CallWith=ScriptState] Promise<FrozenArray<DOMString>> getIds();
+};
diff --git a/modules/background_fetch/BackgroundFetchOptions.idl b/modules/background_fetch/BackgroundFetchOptions.idl
new file mode 100644
index 0000000..408371e
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchOptions.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-manager
+
+dictionary BackgroundFetchOptions {
+    sequence<IconDefinition> icons = [];
+    DOMString title = "";
+    [ImplementedAs=downloadTotal] unsigned long long totalDownloadSize = 0;
+    unsigned long long downloadTotal = 0;
+};
diff --git a/modules/background_fetch/BackgroundFetchRegistration.idl b/modules/background_fetch/BackgroundFetchRegistration.idl
new file mode 100644
index 0000000..07356fe
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchRegistration.idl
@@ -0,0 +1,26 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-registration
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchRegistration : EventTarget {
+    readonly attribute DOMString id;
+    readonly attribute unsigned long long uploadTotal;
+    readonly attribute unsigned long long uploaded;
+    readonly attribute unsigned long long downloadTotal;
+    readonly attribute unsigned long long downloaded;
+    // TODO(crbug.com/699957): Implement the `activeFetches` attribute.
+
+    attribute EventHandler onprogress;
+
+    [CallWith=ScriptState] Promise<bool> abort();
+
+    // TODO(crbug.com/769770): Remove the following deprecated attributes.
+    readonly attribute FrozenArray<IconDefinition> icons;
+    [ImplementedAs=downloadTotal] readonly attribute long totalDownloadSize;
+    readonly attribute DOMString title;
+};
diff --git a/modules/background_fetch/BackgroundFetchSettledFetch.idl b/modules/background_fetch/BackgroundFetchSettledFetch.idl
new file mode 100644
index 0000000..74090be
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchSettledFetch.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/background-fetch/#backgroundfetchsettledfetch
+
+[
+    Constructor(Request request, Response response),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchSettledFetch : BackgroundFetchFetch {
+    readonly attribute Response? response;
+};
diff --git a/modules/background_fetch/BackgroundFetchedEvent.idl b/modules/background_fetch/BackgroundFetchedEvent.idl
new file mode 100644
index 0000000..2226821
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchedEvent.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-end-event
+
+[
+    Constructor(DOMString type, BackgroundFetchedEventInit init),
+    Exposed=ServiceWorker,
+    RuntimeEnabled=BackgroundFetch
+] interface BackgroundFetchedEvent : BackgroundFetchEvent {
+    readonly attribute FrozenArray<BackgroundFetchSettledFetch> fetches;
+
+    [CallWith=ScriptState] Promise<void> updateUI(DOMString title);
+};
diff --git a/modules/background_fetch/BackgroundFetchedEventInit.idl b/modules/background_fetch/BackgroundFetchedEventInit.idl
new file mode 100644
index 0000000..68d6f68
--- /dev/null
+++ b/modules/background_fetch/BackgroundFetchedEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-end-event
+
+dictionary BackgroundFetchedEventInit : BackgroundFetchEventInit {
+    required sequence<BackgroundFetchSettledFetch> fetches;
+};
diff --git a/modules/background_fetch/IconDefinition.idl b/modules/background_fetch/IconDefinition.idl
new file mode 100644
index 0000000..8fc31b5
--- /dev/null
+++ b/modules/background_fetch/IconDefinition.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/background-fetch/#background-fetch-manager
+
+dictionary IconDefinition {
+  DOMString src;
+  DOMString sizes;
+  DOMString type;
+};
diff --git a/modules/background_fetch/ServiceWorkerGlobalScopeBackgroundFetch.idl b/modules/background_fetch/ServiceWorkerGlobalScopeBackgroundFetch.idl
new file mode 100644
index 0000000..1932259
--- /dev/null
+++ b/modules/background_fetch/ServiceWorkerGlobalScopeBackgroundFetch.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/background-fetch/#events
+
+[
+    ImplementedAs=ServiceWorkerGlobalScopeBackgroundFetch,
+    RuntimeEnabled=BackgroundFetch
+] partial interface ServiceWorkerGlobalScope {
+    attribute EventHandler onbackgroundfetched;
+    attribute EventHandler onbackgroundfetchfail;
+    attribute EventHandler onbackgroundfetchabort;
+    attribute EventHandler onbackgroundfetchclick;
+};
diff --git a/modules/background_fetch/ServiceWorkerRegistrationBackgroundFetch.idl b/modules/background_fetch/ServiceWorkerRegistrationBackgroundFetch.idl
new file mode 100644
index 0000000..a1d9dee
--- /dev/null
+++ b/modules/background_fetch/ServiceWorkerRegistrationBackgroundFetch.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/background-fetch/#extensions-to-service-worker-registration
+
+[
+    Exposed=(Window,Worker),
+    ImplementedAs=ServiceWorkerRegistrationBackgroundFetch,
+    RuntimeEnabled=BackgroundFetch
+] partial interface ServiceWorkerRegistration {
+    readonly attribute BackgroundFetchManager backgroundFetch;
+};
diff --git a/modules/background_sync/ServiceWorkerGlobalScopeSync.idl b/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
index 0860b81..517376a 100644
--- a/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
+++ b/modules/background_sync/ServiceWorkerGlobalScopeSync.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=BackgroundSync,
+    ImplementedAs=ServiceWorkerGlobalScopeSync
 ] partial interface ServiceWorkerGlobalScope {
     attribute EventHandler onsync;
 };
diff --git a/modules/background_sync/ServiceWorkerRegistrationSync.idl b/modules/background_sync/ServiceWorkerRegistrationSync.idl
index 0620451..030feaa 100644
--- a/modules/background_sync/ServiceWorkerRegistrationSync.idl
+++ b/modules/background_sync/ServiceWorkerRegistrationSync.idl
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 [
-    Exposed=(Window, ServiceWorker),
-    RuntimeEnabled=BackgroundSync,
+    Exposed=(Window,Worker),
+    ImplementedAs=ServiceWorkerRegistrationSync
 ] partial interface ServiceWorkerRegistration {
     [MeasureAs=BackgroundSync] readonly attribute SyncManager sync;
 };
diff --git a/modules/background_sync/SyncEvent.idl b/modules/background_sync/SyncEvent.idl
index f663de0..7a80e3f 100644
--- a/modules/background_sync/SyncEvent.idl
+++ b/modules/background_sync/SyncEvent.idl
@@ -2,10 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://wicg.github.io/BackgroundSync/spec/#sync-event
+
 [
     Constructor(DOMString type, SyncEventInit init),
-    Exposed=ServiceWorker,
-    RuntimeEnabled=BackgroundSync,
+    Exposed=ServiceWorker
 ] interface SyncEvent : ExtendableEvent {
     readonly attribute DOMString tag;
     readonly attribute boolean lastChance;
diff --git a/modules/background_sync/SyncEventInit.idl b/modules/background_sync/SyncEventInit.idl
index 1a2a804..cd2b118 100644
--- a/modules/background_sync/SyncEventInit.idl
+++ b/modules/background_sync/SyncEventInit.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.
 
+// https://wicg.github.io/BackgroundSync/spec/#sync-event
+
 dictionary SyncEventInit : ExtendableEventInit {
     required DOMString tag;
     boolean lastChance = false;
diff --git a/modules/background_sync/SyncManager.idl b/modules/background_sync/SyncManager.idl
index 16899c1..d3d1ad0 100644
--- a/modules/background_sync/SyncManager.idl
+++ b/modules/background_sync/SyncManager.idl
@@ -2,17 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-enum SyncPermissionState {
-  "default",
-  "denied",
-  "granted"
-};
+// https://wicg.github.io/BackgroundSync/spec/#sync-manager-interface
 
 [
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=BackgroundSync,
+    Exposed=(Window,Worker)
 ] interface SyncManager {
-    [MeasureAs=BackgroundSyncRegister,CallWith=(ScriptState,ExecutionContext),ImplementedAs=registerFunction] Promise<void> register(DOMString tag);
+    [MeasureAs=BackgroundSyncRegister,CallWith=ScriptState,ImplementedAs=registerFunction] Promise<void> register(DOMString tag);
     [CallWith=ScriptState] Promise<sequence<DOMString>> getTags();
 };
diff --git a/modules/battery/BatteryManager.idl b/modules/battery/BatteryManager.idl
index 26eebff..48a8f7d 100644
--- a/modules/battery/BatteryManager.idl
+++ b/modules/battery/BatteryManager.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html#batterymanager-interface
+// https://w3c.github.io/battery/#the-batterymanager-interface
 [
+    ActiveScriptWrappable,
     DependentLifetime
 ] interface BatteryManager : EventTarget {
     readonly attribute boolean charging;
diff --git a/modules/battery/NavigatorBattery.idl b/modules/battery/NavigatorBattery.idl
index e3950a6..35a0548 100644
--- a/modules/battery/NavigatorBattery.idl
+++ b/modules/battery/NavigatorBattery.idl
@@ -2,7 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorBattery
+] partial interface Navigator {
     [CallWith=ScriptState] Promise getBattery();
 };
-
diff --git a/modules/battery/testing/InternalsBattery.idl b/modules/battery/testing/InternalsBattery.idl
deleted file mode 100644
index 69256c9..0000000
--- a/modules/battery/testing/InternalsBattery.idl
+++ /dev/null
@@ -1,9 +0,0 @@
-// 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/beacon/NavigatorBeacon.idl b/modules/beacon/NavigatorBeacon.idl
index 34f7323..469711f 100644
--- a/modules/beacon/NavigatorBeacon.idl
+++ b/modules/beacon/NavigatorBeacon.idl
@@ -2,8 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/Beacon/Overview.html#Navigator
+// https://w3c.github.io/beacon/#sec-sendBeacon-method
 
-partial interface Navigator {
-    [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, optional (ArrayBufferView or Blob or DOMString or FormData)? data = null);
+[
+    ImplementedAs=NavigatorBeacon
+] partial interface Navigator {
+    [CallWith=ScriptState, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, optional (ArrayBufferView or Blob or DOMString or FormData)? data = null);
 };
diff --git a/modules/bluetooth/Bluetooth.idl b/modules/bluetooth/Bluetooth.idl
index 4055338..302b496 100644
--- a/modules/bluetooth/Bluetooth.idl
+++ b/modules/bluetooth/Bluetooth.idl
@@ -2,16 +2,10 @@
 // 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-bluetooth
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetooth
 
 [
-    GarbageCollected,
-    NoInterfaceObject,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=WebBluetooth
 ] interface Bluetooth {
-    [CallWith=ScriptState, RaisesException] Promise<BluetoothDevice> requestDevice (
-        RequestDeviceOptions options
-        );
+    [CallWith=ScriptState, RaisesException, MeasureAs=WebBluetoothRequestDevice] Promise<BluetoothDevice> requestDevice (optional RequestDeviceOptions options);
 };
diff --git a/modules/bluetooth/BluetoothAdvertisingData.idl b/modules/bluetooth/BluetoothAdvertisingData.idl
deleted file mode 100644
index 818e5b4..0000000
--- a/modules/bluetooth/BluetoothAdvertisingData.idl
+++ /dev/null
@@ -1,20 +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://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
index ca87d7d..d4d46cf 100644
--- a/modules/bluetooth/BluetoothCharacteristicProperties.idl
+++ b/modules/bluetooth/BluetoothCharacteristicProperties.idl
@@ -2,15 +2,12 @@
 // 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
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothcharacteristicproperties
 
 // Implement BluetoothCharacteristicProperties interface: http://crbug.com/483345
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=WebBluetooth
 ] interface BluetoothCharacteristicProperties {
     readonly attribute boolean broadcast;
     readonly attribute boolean read;
diff --git a/modules/bluetooth/BluetoothDevice.idl b/modules/bluetooth/BluetoothDevice.idl
index 13ac479..e8ce370 100644
--- a/modules/bluetooth/BluetoothDevice.idl
+++ b/modules/bluetooth/BluetoothDevice.idl
@@ -2,38 +2,21 @@
 // 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-bluetoothdevice
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothdevice
 
 // Implement BluetoothDevice interface: http://crbug.com/421668
 
-enum VendorIDSource {
-    "bluetooth",
-    "usb"
-};
-
 [
-    GarbageCollected,
     DependentLifetime,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=WebBluetooth
 ] interface BluetoothDevice : EventTarget
 // Implement ServiceEventHandlers interface: http://crbug.com/421670
 // : ServiceEventHandlers
 {
 // Implement BluetoothDevice interface: http://crbug.com/421668
-    [DeprecateAs=BluetoothDeviceInstanceId, ImplementedAs=id] readonly attribute DOMString instanceID;
     readonly    attribute DOMString id;
     readonly    attribute DOMString?                 name;
-    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 BluetoothRemoteGATTServer  gatt;
-    readonly    attribute UUID[]                     uuids;
-    [CallWith=ScriptState, DeprecateAs=BluetoothDeviceConnectGATT] Promise<BluetoothRemoteGATTServer> connectGATT ();
 
     attribute EventHandler ongattserverdisconnected;
 };
diff --git a/modules/bluetooth/BluetoothLEScanFilterInit.idl b/modules/bluetooth/BluetoothLEScanFilterInit.idl
new file mode 100644
index 0000000..ea372ec
--- /dev/null
+++ b/modules/bluetooth/BluetoothLEScanFilterInit.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://webbluetoothcg.github.io/web-bluetooth/#dictdef-bluetoothlescanfilterinit
+
+dictionary BluetoothLEScanFilterInit {
+    sequence<BluetoothServiceUUID> services;
+    DOMString name;
+    DOMString namePrefix;
+    // TODO(crbug.com/707635): Support manufacturerData and serviceData filters.
+};
diff --git a/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl b/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
index 16c2dd2..b455703 100644
--- a/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
+++ b/modules/bluetooth/BluetoothRemoteGATTCharacteristic.idl
@@ -2,29 +2,24 @@
 // 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
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattcharacteristic
 
 // Implement BluetoothRemoteGATTCharacteristic interface: https://crbug.com/483344
 
 [
-    GarbageCollected,
     DependentLifetime,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=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();
+    [SameObject] readonly attribute BluetoothRemoteGATTService service;
+    readonly attribute UUID uuid;
+    readonly attribute BluetoothCharacteristicProperties properties;
+    readonly attribute DataView? value;
+    [RaisesException, CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicGetDescriptor] Promise<BluetoothRemoteGATTDescriptor> getDescriptor(BluetoothDescriptorUUID descriptor);
+    [RaisesException, CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicGetDescriptors] Promise<sequence<BluetoothRemoteGATTDescriptor>> getDescriptors(optional BluetoothDescriptorUUID descriptor);
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicReadValue] Promise<DataView> readValue();
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicWriteValue] Promise<void> writeValue(BufferSource value);
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicStartNotifications] Promise<BluetoothRemoteGATTCharacteristic> startNotifications();
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteCharacteristicStopNotifications] Promise<BluetoothRemoteGATTCharacteristic> stopNotifications();
 
     // TODO(ortuno): Move this to CharacteristicEventHandlers.
     // http://crbug.com/537459
diff --git a/modules/bluetooth/BluetoothRemoteGATTDescriptor.idl b/modules/bluetooth/BluetoothRemoteGATTDescriptor.idl
new file mode 100644
index 0000000..83b2593
--- /dev/null
+++ b/modules/bluetooth/BluetoothRemoteGATTDescriptor.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.
+
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattdescriptor
+
+// Implement BluetoothRemoteGATTDescriptor interface: https://crbug.com/660699
+
+[
+    RuntimeEnabled=WebBluetooth
+] interface BluetoothRemoteGATTDescriptor  {
+    [SameObject] readonly attribute BluetoothRemoteGATTCharacteristic characteristic;
+    readonly attribute UUID uuid;
+    readonly attribute DataView? value;
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteDescriptorReadValue] Promise<DataView> readValue();
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteDescriptorWriteValue] Promise<void> writeValue(BufferSource value);
+};
diff --git a/modules/bluetooth/BluetoothRemoteGATTServer.idl b/modules/bluetooth/BluetoothRemoteGATTServer.idl
index 5e26954..b1bd31a 100644
--- a/modules/bluetooth/BluetoothRemoteGATTServer.idl
+++ b/modules/bluetooth/BluetoothRemoteGATTServer.idl
@@ -2,21 +2,18 @@
 // 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
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattserver
 
 // Implement BluetoothGATTRemoteServer interface: https://crbug.com/476735
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=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);
+    [SameObject] readonly attribute BluetoothDevice device;
+    readonly attribute boolean connected;
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteServerConnect] Promise<BluetoothRemoteGATTServer> connect();
+    [CallWith=ScriptState, MeasureAs=WebBluetoothRemoteServerDisconnect] void disconnect();
+    [CallWith=ScriptState, RaisesException, MeasureAs=WebBluetoothRemoteServerGetPrimaryService] Promise<BluetoothRemoteGATTService> getPrimaryService (BluetoothServiceUUID service);
+    [CallWith=ScriptState, RaisesException, MeasureAs=WebBluetoothRemoteServerGetPrimaryServices] Promise<sequence<BluetoothRemoteGATTService>> getPrimaryServices (optional BluetoothServiceUUID service);
 };
diff --git a/modules/bluetooth/BluetoothRemoteGATTService.idl b/modules/bluetooth/BluetoothRemoteGATTService.idl
index 85ce907..edab043 100644
--- a/modules/bluetooth/BluetoothRemoteGATTService.idl
+++ b/modules/bluetooth/BluetoothRemoteGATTService.idl
@@ -2,23 +2,18 @@
 // 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
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice
 
 // Implement BluetoothRemoteGATTService interface: https://crbug.com/483342
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=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);
+    [SameObject] readonly attribute BluetoothDevice device;
+    readonly attribute UUID uuid;
+    readonly attribute boolean isPrimary;
+    [RaisesException, CallWith=ScriptState, MeasureAs=WebBluetoothRemoteServiceGetCharacteristic] Promise<BluetoothRemoteGATTCharacteristic> getCharacteristic(BluetoothCharacteristicUUID characteristic);
+    [RaisesException, CallWith=ScriptState, MeasureAs=WebBluetoothRemoteServiceGetCharacteristics] 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
deleted file mode 100644
index b8e7447..0000000
--- a/modules/bluetooth/BluetoothScanFilter.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.
-
-// https://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothscanfilter
-
-dictionary BluetoothScanFilter {
-    sequence<BluetoothServiceUUID> services;
-    DOMString name;
-    DOMString namePrefix;
-};
diff --git a/modules/bluetooth/BluetoothUUID.idl b/modules/bluetooth/BluetoothUUID.idl
index a064b3d..09a09d4 100644
--- a/modules/bluetooth/BluetoothUUID.idl
+++ b/modules/bluetooth/BluetoothUUID.idl
@@ -2,16 +2,10 @@
 // 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-bluetoothuuid
-
-// Implement BluetoothUUID: http://crbug.com/491441
-// Significant TODOs remain in BluetoothUUID.cpp.
+// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothuuid
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebBluetooth,
-    // TODO(https://crbug.com/584113) Enable Web Bluetooth Experiment.
-    // OriginTrialEnabled=WebBluetooth,
+    RuntimeEnabled=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 e7c777c..e73d80e 100644
--- a/modules/bluetooth/NavigatorBluetooth.idl
+++ b/modules/bluetooth/NavigatorBluetooth.idl
@@ -2,16 +2,11 @@
 // 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-navigatorbluetooth
+// https://webbluetoothcg.github.io/web-bluetooth/#navigator-extensions
 
 [
-    RuntimeEnabled=WebBluetooth,
+    ImplementedAs=NavigatorBluetooth,
+    RuntimeEnabled=WebBluetooth
 ] partial interface Navigator {
-    // 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;
+    [SameObject] readonly attribute Bluetooth bluetooth;
 };
diff --git a/modules/bluetooth/RequestDeviceOptions.idl b/modules/bluetooth/RequestDeviceOptions.idl
index 89d5ea9..6987c61 100644
--- a/modules/bluetooth/RequestDeviceOptions.idl
+++ b/modules/bluetooth/RequestDeviceOptions.idl
@@ -2,9 +2,10 @@
 // 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-requestdeviceoptions
+// https://webbluetoothcg.github.io/web-bluetooth/#dictdef-requestdeviceoptions
 
 dictionary RequestDeviceOptions {
-    required sequence<BluetoothScanFilter>  filters;
+    sequence<BluetoothLEScanFilterInit>  filters;
     sequence<BluetoothServiceUUID> optionalServices = [];
+    boolean acceptAllDevices = false;
 };
diff --git a/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py b/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py
new file mode 100644
index 0000000..39bd805
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/PRESUBMIT.py
@@ -0,0 +1,27 @@
+# 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.
+
+"""Script that runs tests before uploading a patch."""
+
+
+def _RunTests(input_api, output_api):
+    """Runs all test files in the directory."""
+    cmd_name = 'all_python_tests'
+    cmd = ['python', '-m', 'unittest', 'discover', '-p', '*test.py']
+    test_cmd = input_api.Command(
+        name=cmd_name,
+        cmd=cmd,
+        kwargs={},
+        message=output_api.PresubmitError)
+    if input_api.verbose:
+        print 'Running ' + cmd_name
+    return input_api.RunTests([test_cmd])
+
+
+def CheckChangeOnUpload(input_api, output_api):
+    return _RunTests(input_api, output_api)
+
+
+def CheckChangeOnCommit(input_api, output_api):
+    return _RunTests(input_api, output_api)
diff --git a/modules/bluetooth/testing/clusterfuzz/constraints.py b/modules/bluetooth/testing/clusterfuzz/constraints.py
new file mode 100644
index 0000000..11c3176
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/constraints.py
@@ -0,0 +1,427 @@
+# 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.
+
+"""Module to get random numbers, strings, etc.
+
+   The values returned by the various functions can be replaced in
+   templates to generate test cases.
+"""
+
+import math
+import random
+import sys
+import uuid
+
+# This script needs the utils.py and fuzzy_types.py modules in order
+# to work. This files are copied by the setup.py script and not checked-in
+# next to this code, so we need to disable the style warning.
+# pylint: disable=F0401
+from resources import utils
+from resources import fuzzy_types
+
+import gatt_aliases
+import wbt_fakes
+
+
+# Strings that are used to generate the beginning of a test. The replacement
+# fields are replaced by Get*Base() functions below to generate valid test
+# cases.
+BASIC_BASE = \
+    '  return setBluetoothFakeAdapter({fake_adapter_name})\n'\
+    '    .then(() => {{\n'
+
+DEVICE_DISCOVERY_BASE = BASIC_BASE + \
+    '      return requestDeviceWithKeyDown({{\n'\
+    '        filters: [{{services: [{service_uuid}]}}]}});\n'\
+    '    }})\n'\
+    '    .then(device => {{\n'
+
+CONNECTABLE_BASE = DEVICE_DISCOVERY_BASE + \
+    '      return device.gatt.connect();\n'\
+    '    }})\n'\
+    '    .then(gatt => {{\n'
+
+SERVICE_RETRIEVED_BASE = CONNECTABLE_BASE + \
+    '      return gatt.getPrimaryService({service_uuid});\n'\
+    '    }})\n'\
+    '    .then(services => {{\n'
+
+SERVICES_RETRIEVED_BASE = CONNECTABLE_BASE + \
+    '      return gatt.getPrimaryServices({optional_service_uuid});\n'\
+    '    }})\n'\
+    '    .then(services => {{\n'
+
+CHARACTERISTIC_RETRIEVED_BASE = \
+    '      TRANSFORM_PICK_A_SERVICE;\n'\
+    '      return service.getCharacteristic({characteristic_uuid});\n'\
+    '    }})\n'\
+    '    .then(characteristics => {{\n'
+
+CHARACTERISTICS_RETRIEVED_BASE = \
+    '      TRANSFORM_PICK_A_SERVICE;\n'\
+    '      return service.getCharacteristics({optional_characteristic_uuid});\n'\
+    '    }})\n'\
+    '    .then(characteristics => {{\n'
+
+
+def _ToJsStr(s):
+    return u'\'{}\''.format(s)
+
+
+def _get_random_number():
+    return utils.UniformExpoInteger(0, sys.maxsize.bit_length() + 1)
+
+
+def _GetFuzzedJsString(s):
+    """Returns a fuzzed string based on |s|.
+
+    Args:
+      s: The base string to fuzz.
+    Returns:
+      A single line string surrounded by quotes.
+    """
+    while True:
+        fuzzed_string = fuzzy_types.FuzzyString(s)
+        try:
+            fuzzed_string = fuzzed_string.decode('utf8')
+        except UnicodeDecodeError:
+            print 'Can\'t decode fuzzed string. Trying again.'
+        else:
+            # Escape 'escape' characters.
+            fuzzed_string = fuzzed_string.replace('\\', r'\\')
+            # Escape quote characters.
+            fuzzed_string = fuzzed_string.replace('\'', r'\'')
+            # Put everything in a single line.
+            fuzzed_string = '\\n'.join(fuzzed_string.split())
+            return _ToJsStr(fuzzed_string)
+
+
+def _get_array_of_random_ints(max_length, max_value):
+    """Returns an string with an array of random integer."""
+    length = utils.UniformExpoInteger(0, math.log(max_length, 2))
+    exp_max_value = math.log(max_value, 2)
+    return '[{}]'.format(', '.join(
+        str(utils.UniformExpoInteger(0, exp_max_value)) for _ in xrange(length))
+    )
+
+
+def _get_typed_array():
+    """Generates a TypedArray constructor.
+
+    There are nine types of TypedArrays and TypedArray has four constructors.
+
+    Types:
+      * Int8Array
+      * Int16Array
+      * Int32Array
+      * Uint8Array
+      * Uint16Array
+      * Uint32Array
+      * Uint8ClampedArray
+      * Float32Array
+      * Float64Array
+
+    Constructors:
+
+     * new TypedArray(length)
+     * new TypedArray(typedArray)
+     * new TypedArray(object)
+     * new TypedArray(buffer)
+
+    Returns:
+      A string made up of a randomly chosen type and argument type from the
+      lists above.
+    """
+    array_type = random.choice(['Int8Array', 'Int16Array', 'Int32Array',
+                                'Uint8Array', 'Uint16Array', 'Uint32Array',
+                                'Uint8ClampedArray', 'Float32Array',
+                                'Float64Array'])
+
+    # Choose an argument type at random.
+    arguments = random.choice([
+        # length e.g. 293
+        # We choose 2**10 as the upper boundry because the max length allowed
+        # by WebBluetooth is 2**10.
+        lambda: utils.UniformExpoInteger(0, 10),
+        # typedArray e.g. new Uint8Array([1,2,3])
+        _get_typed_array,
+        # object e.g. [1,2,3]
+        lambda: _get_array_of_random_ints(max_length=1000, max_value=2 ** 64),
+        # buffer e.g. new Uint8Array(10).buffer
+        lambda: _get_typed_array() + '.buffer',
+    ])
+
+    return 'new {array_type}({arguments})'.format(array_type=array_type,
+                                                  arguments=arguments())
+
+
+def GetAdvertisedServiceUUIDFromFakes():
+    """Returns a random service string from the list of fake services."""
+    return _ToJsStr(random.choice(wbt_fakes.ADVERTISED_SERVICES))
+
+
+def get_service_uuid_from_fakes():
+    """Returns a random service string from a list of fake services."""
+    return _ToJsStr(random.choice(wbt_fakes.SERVICES))
+
+
+def get_characteristic_uuid_from_fakes():
+    """Returns a random characteristic string from a fake characteristics list."""
+    return _ToJsStr(random.choice(wbt_fakes.CHARACTERISTICS))
+
+
+def GetValidServiceAlias():
+    """Returns a valid service alias from the list of services aliases."""
+    return _ToJsStr(random.choice(gatt_aliases.SERVICES))
+
+
+def get_valid_characteristic_alias():
+    """Returns a valid service alias from the list of services aliases."""
+    return _ToJsStr(random.choice(gatt_aliases.CHARACTERISTICS))
+
+
+def GetRandomUUID():
+    """Returns a random UUID, a random number or a fuzzed uuid or alias."""
+    choice = random.choice(['uuid', 'number', 'fuzzed string'])
+    if choice == 'uuid':
+        return _ToJsStr(uuid.uuid4())
+    elif choice == 'number':
+        return _get_random_number()
+    elif choice == 'fuzzed string':
+        choice2 = random.choice(['uuid', 'alias'])
+        if choice2 == 'uuid':
+            random_uuid = str(uuid.uuid4())
+            return _GetFuzzedJsString(random_uuid)
+        elif choice2 == 'alias':
+            alias = random.choice(gatt_aliases.SERVICES)
+            return _GetFuzzedJsString(alias)
+
+
+def GetAdvertisedServiceUUID():
+    """Generates a random Service UUID from a set of functions.
+
+    See get_service_uuid_from_fakes(), GetValidServiceAlias() and GetRandomUUID()
+    for the different values this function can return.
+
+    This function weights get_service_uuid_from_fakes() more heavily to increase the
+    probability of generating test pages that can interact with the fake
+    adapters.
+
+    Returns:
+      A string or a number that can be used as a Service UUID by the Web
+      Bluetooth API.
+    """
+    roll = random.random()
+    if roll < 0.8:
+        return GetAdvertisedServiceUUIDFromFakes()
+    elif roll < 0.9:
+        return GetValidServiceAlias()
+    else:
+        return GetRandomUUID()
+
+
+def get_service_uuid():
+    """Generates a random Service UUID from a set of functions.
+
+    Similar to GetAdvertisedServiceUUID() but weights get_service_uuid_from_fakes()
+    more heavily to increase the  probability of generating test pages that can
+    interact with the fake adapters.
+
+    See get_service_uuid_from_fakes(), GetValidServiceAlias() and
+    GetRandomUUID() for the different values this function can return.
+
+    Returns:
+      A string or a number that can be used as a Service UUID by the Web
+      Bluetooth API.
+    """
+    roll = random.random()
+    if roll < 0.8:
+        return get_service_uuid_from_fakes()
+    elif roll < 0.9:
+        return GetValidServiceAlias()
+    else:
+        return GetRandomUUID()
+
+
+def get_characteristic_uuid():
+    """Generates a random Characteristic UUID from a set of functions.
+
+    Similar to get_service_uuid() but weights get_characteristic_uuid_from_fakes()
+    more heavily to increase the  probability of generating test pages that can
+    interact with the fake adapters.
+
+    See get_characteristic_uuid_from_fakes(), get_valid_characteristic_alias() and
+    GetRandomUUID() for the different values this function can return.
+
+    Returns:
+      A string or a number that can be used as a Service UUID by the Web
+      Bluetooth API.
+    """
+    roll = random.random()
+    if roll < 0.8:
+        return get_characteristic_uuid_from_fakes()
+    elif roll < 0.9:
+        return get_valid_characteristic_alias()
+    else:
+        return GetRandomUUID()
+
+
+def GetRequestDeviceOptions():
+    """Returns an object used by navigator.bluetooth.requestDevice."""
+    # TODO(ortuno): Randomize the members, number of filters, services, etc.
+
+    return '{filters: [{services: [ %s ]}]}' % GetAdvertisedServiceUUID()
+
+
+def GetBasicBase():
+    """Returns a string that sets a random fake adapter."""
+    adapter = _ToJsStr(random.choice(wbt_fakes.ALL_ADAPTERS))
+    return BASIC_BASE.format(fake_adapter_name=adapter)
+
+
+def GetDeviceDiscoveryBase():
+    """Generates a string that contains all steps to find a device."""
+    adapter, services = random.choice(wbt_fakes.ADAPTERS_WITH_DEVICES)
+    return DEVICE_DISCOVERY_BASE.format(
+        fake_adapter_name=_ToJsStr(adapter),
+        service_uuid=_ToJsStr(random.choice(services)))
+
+
+def GetConnectableBase():
+    """Generates a string that contains all steps to connect to a device.
+
+    Returns: A string that:
+      1. Sets an adapter to a fake adapter with a connectable device.
+      2. Looks for the connectable device.
+      3. Connects to it.
+    """
+    adapter, services = random.choice(wbt_fakes.ADAPTERS_WITH_DEVICES)
+    return DEVICE_DISCOVERY_BASE.format(
+        fake_adapter_name=_ToJsStr(adapter),
+        service_uuid=_ToJsStr(random.choice(services)))
+
+
+def get_services_retrieved_base():
+    """Returns a string that contains all steps to retrieve a service.
+
+    Returns: A string that:
+      1. Sets an adapter to a fake adapter with a connectable device with
+         services.
+      2. Use one of the device's services to look for that device.
+      3. Connects to it.
+      4. Retrieve the device's service used in 2.
+    """
+    adapter, services = random.choice(wbt_fakes.ADAPTERS_WITH_SERVICES)
+    service_uuid = _ToJsStr(random.choice(services))
+
+    base = random.choice([SERVICE_RETRIEVED_BASE, SERVICES_RETRIEVED_BASE])
+    return base.format(
+        fake_adapter_name=_ToJsStr(adapter),
+        service_uuid=service_uuid,
+        optional_service_uuid=random.choice(['', service_uuid]))
+
+
+def get_characteristics_retrieved_base():
+    """Returns a string that contains all steps to retrieve a characteristic.
+
+      Returns: A string that:
+        1. Sets an adapter to a fake adapter with a connectable device with
+           services.
+        2. Use one of the device's services to look for that device.
+        3. Connects to it.
+        4. Retrieve the device's service used in 2.
+        5. Retrieve a characteristic from that service.
+    """
+    adapter, services = random.choice(wbt_fakes.ADAPTERS_WITH_CHARACTERISTICS)
+
+    service_uuid, characteristics = random.choice(services)
+    service_uuid = _ToJsStr(service_uuid)
+
+    characteristic_uuid = _ToJsStr(random.choice(characteristics))
+
+    optional_service_uuid = random.choice(['', service_uuid])
+    optional_characteristic_uuid = random.choice(['', characteristic_uuid])
+
+    services_base = random.choice([SERVICE_RETRIEVED_BASE,
+                                   SERVICES_RETRIEVED_BASE])
+
+    characteristics_base = services_base + random.choice([
+        CHARACTERISTIC_RETRIEVED_BASE,
+        CHARACTERISTICS_RETRIEVED_BASE,
+    ])
+
+    return characteristics_base.format(
+        fake_adapter_name=_ToJsStr(adapter),
+        service_uuid=service_uuid,
+        optional_service_uuid=optional_service_uuid,
+        characteristic_uuid=characteristic_uuid,
+        optional_characteristic_uuid=optional_characteristic_uuid)
+
+
+def get_get_primary_services_call():
+    call = random.choice([u'getPrimaryService({service_uuid})',
+                          u'getPrimaryServices({optional_service_uuid})'])
+
+    return call.format(
+        service_uuid=get_service_uuid(),
+        optional_service_uuid=random.choice(['', get_service_uuid()]))
+
+
+def get_characteristics_call():
+    call = random.choice([
+        u'getCharacteristic({characteristic_uuid})',
+        u'getCharacteristics({optional_characteristic_uuid})'
+    ])
+
+    return call.format(
+        characteristic_uuid=get_characteristic_uuid(),
+        optional_characteristic_uuid=random.choice(
+            ['', get_characteristic_uuid()]))
+
+
+def get_pick_a_service():
+    """Returns a string that picks a service from 'services'."""
+    # 'services' may be defined by the GetPrimaryService(s) tokens.
+    string = \
+        'var service; '\
+        'if (typeof services !== \'undefined\') '\
+        ' service = Array.isArray(services)'\
+        ' ? services[{} % services.length]'\
+        ' : services'
+    return string.format(random.randint(0, sys.maxint))
+
+
+def get_pick_a_characteristic():
+    """Returns a string that picks a characteristic from 'characteristics'."""
+    # 'characteristics' maybe be defined by the GetCharacteristic(s) tokens.
+    string = \
+        'var characteristic; '\
+        'if (typeof characteristics !== \'undefined\') '\
+        ' characteristic = Array.isArray(characteristics)'\
+        ' ? characteristics[{} % characteristics.length]'\
+        ' : characteristics'
+    return string.format(random.randint(0, sys.maxint))
+
+
+def get_reload_id():
+    return _ToJsStr(_get_random_number())
+
+
+def get_buffer_source():
+    """Returns a new BufferSource.
+    https://heycam.github.io/webidl/#BufferSource
+    """
+
+    choice = random.choice(['ArrayBuffer', 'DataView', 'TypedArray'])
+
+    if choice == 'ArrayBuffer':
+        # We choose 2**10 as the upper boundry because the max length allowed
+        # by WebBluetooth is 2**10.
+        return 'new ArrayBuffer({length})'.format(
+            length=utils.UniformExpoInteger(0, 10))
+    if choice == 'DataView':
+        return 'new DataView({typed_array}.buffer)'.format(
+            typed_array=_get_typed_array())
+    if choice == 'TypedArray':
+        return _get_typed_array()
diff --git a/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py b/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py
new file mode 100644
index 0000000..4080b8a
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/fuzz_integration_test.py
@@ -0,0 +1,44 @@
+# 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.
+
+"""Test that the fuzzer works the way ClusterFuzz invokes it."""
+
+import glob
+import os
+import shutil
+import sys
+import tempfile
+import unittest
+
+import setup
+
+
+class WebBluetoothFuzzerTest(unittest.TestCase):
+
+    def setUp(self):
+        self._output_dir = tempfile.mkdtemp()
+        self._resources_path = setup.RetrieveResources()
+
+    def tearDown(self):
+        shutil.rmtree(self._output_dir)
+        shutil.rmtree(self._resources_path)
+
+    def testCanGenerate100Files(self):
+        sys.argv = ['fuzz_main_run.py', '--no_of_files=100',
+                    '--input_dir={}'.format(self._output_dir),
+                    '--output_dir={}'.format(self._output_dir)]
+
+        import fuzz_main_run
+        fuzz_main_run.main()
+
+        written_files = glob.glob(os.path.join(self._output_dir, '*.html'))
+
+        self.assertEquals(100, len(written_files), 'Should have written 100 '
+                          'test files.')
+
+        for test_case in written_files:
+            self.assertFalse('TRANSFORM' in open(test_case).read())
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py b/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py
new file mode 100644
index 0000000..725c344
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/fuzz_main_run.py
@@ -0,0 +1,166 @@
+# 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.
+
+"""Script to generate Web Bluetooth Layout Tests that can be run in ClusterFuzz.
+
+This script uses templates in the templates/ directory to generate html files
+that can be run as Layout Tests. The script reads a template, includes files
+necessary to run as a layout test, fuzzes its parameters and saves the result in
+a new file in the directory specified when running the script.
+"""
+
+import argparse
+import glob
+import os
+import sys
+import tempfile
+import time
+
+from fuzzer_helpers import FillInParameter
+import parameter_fuzzer
+import test_case_fuzzer
+
+JS_FILES_AND_PARAMETERS = (
+    ('testharness.js', 'INCLUDE_TESTHARNESS'),
+    ('testharnessreport.js', 'INCLUDE_REPORT'),
+    ('bluetooth-helpers.js', 'INCLUDE_BLUETOOTH_HELPERS'))
+
+SCRIPT_PREFIX = '<script type="text/javascript">\n'
+SCRIPT_SUFFIX = '\n</script>\n'
+
+
+def _GetArguments():
+    """Parses the arguments passed when running this script.
+
+    Returns:
+      An argparse.Namespace object containing the arguments in sys.argv.
+    """
+    parser = argparse.ArgumentParser()
+
+    # Arguments used by ClusterFuzz:
+    parser.add_argument('-n', '--no_of_files', type=int, required=True,
+                        help='The number of test cases that the fuzzer is '
+                             'expected to generate')
+    parser.add_argument('-i', '--input_dir',
+                        help='The directory containing the fuzzer\'s data '
+                             'bundle.')
+    parser.add_argument('-o', '--output_dir', required=True,
+                        help='The directory where test case files should be '
+                             'written to.')
+
+    parser.add_argument('--content_shell_dir',
+                        help='The directory of content shell. If present the '
+                             'program will print a command to run the '
+                             'generated test file.')
+
+    return parser.parse_args()
+
+
+def FuzzTemplate(template_path, resources_path):
+    """Uses a template to return a test case that can be run as a layout test.
+
+    This functions reads the template in |template_path|, injects the necessary
+    js files to run as a layout test and fuzzes the template's parameters to
+    generate a test case.
+
+    Args:
+      template_path: The path to the template that will be used to generate
+          a new test case.
+      resources_path: Path to the js files that need to be included.
+
+    Returns:
+      A string containing the test case.
+    """
+    print 'Generating test file based on {}'.format(template_path)
+
+    # Read the template.
+    template_file_handle = open(template_path)
+    template_file_data = template_file_handle.read().decode('utf-8')
+    template_file_handle.close()
+
+    # Generate a test file based on the template.
+    generated_test = test_case_fuzzer.GenerateTestFile(template_file_data)
+    # Fuzz parameters.
+    fuzzed_file_data = parameter_fuzzer.FuzzParameters(generated_test)
+
+    # Add includes
+    for (js_file_name, include_parameter) in JS_FILES_AND_PARAMETERS:
+        # Read js file.
+        js_file_handle = open(os.path.join(resources_path, js_file_name))
+        js_file_data = js_file_handle.read()
+        js_file_handle.close()
+
+        js_file_data = (SCRIPT_PREFIX + js_file_data + SCRIPT_SUFFIX)
+
+        fuzzed_file_data = FillInParameter(include_parameter,
+                                           lambda data=js_file_data: data,
+                                           fuzzed_file_data)
+
+    return fuzzed_file_data.encode('utf-8')
+
+
+def WriteTestFile(test_file_data, test_file_prefix, output_dir):
+    """Creates a new file with a unique name and writes the test case to it.
+
+    Args:
+      test_file_data: The data to be included in the new file.
+      test_file_prefix: Used as a prefix when generating a new file.
+      output_dir: The directory where the new file should be created.
+
+    Returns:
+      A string representing the file path to access the new file.
+    """
+
+    file_descriptor, file_path = tempfile.mkstemp(
+        prefix=test_file_prefix,
+        suffix='.html',
+        dir=output_dir)
+
+    with os.fdopen(file_descriptor, 'wb') as output:
+        print 'Writing {} bytes to \'{}\''.format(len(test_file_data),
+                                                  file_path)
+        output.write(test_file_data)
+
+    return file_path
+
+
+def main():
+    args = _GetArguments()
+
+    print 'Generating {} test file(s).'.format(args.no_of_files)
+    print 'Writing test files to: \'{}\''.format(args.output_dir)
+    if args.input_dir:
+        print 'Reading data bundle from: \'{}\''.format(args.input_dir)
+
+    # Get Templates
+    current_path = os.path.dirname(os.path.realpath(__file__))
+    available_templates = glob.glob(os.path.join(current_path,
+                                                 'templates',
+                                                 '*.html'))
+
+    # Generate Test Files
+    resources_path = os.path.join(current_path, 'resources')
+    start_time = time.time()
+    for file_no in range(args.no_of_files):
+        template_path = available_templates[file_no % len(available_templates)]
+
+        test_file_data = FuzzTemplate(template_path, resources_path)
+
+        # Get Test File
+        template_name = os.path.splitext(os.path.basename(template_path))[0]
+        test_file_name = 'fuzz-{}-{}-{}'.format(template_name,
+                                                int(start_time),
+                                                int(file_no))
+
+        test_file_path = WriteTestFile(test_file_data,
+                                       test_file_name,
+                                       args.output_dir)
+
+        if args.content_shell_dir:
+            print '{} --run-layout-test {}'.format(args.content_shell_dir,
+                                                   test_file_path)
+
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py b/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py
new file mode 100644
index 0000000..798fe86
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/fuzzer_helpers.py
@@ -0,0 +1,26 @@
+# 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.
+
+"""Module that includes classes and functions used by fuzzers."""
+
+
+def FillInParameter(parameter, func, template):
+    """Replaces occurrences of a parameter by calling a provided generator.
+
+    Args:
+      parameter: A string representing the parameter that should be replaced.
+      func: A function that returns a string representing the value used to
+          replace an instance of the parameter.
+      template: A string that contains the parameter to be replaced.
+
+    Returns:
+      A string containing the value of |template| in which instances of
+      |pameter| have been replaced by results of calling |func|.
+
+    """
+    result = template
+    while parameter in result:
+        result = result.replace(parameter, func(), 1)
+
+    return result
diff --git a/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py b/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py
new file mode 100644
index 0000000..e28d502
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/gatt_aliases.py
@@ -0,0 +1,251 @@
+# 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.
+
+"""Contains Services, Characteristics and Descriptor aliases.
+
+These values are copied from:
+
+https://www.bluetooth.com/specifications/gatt/services
+
+https://www.bluetooth.com/specifications/gatt/characteristics
+"""
+
+
+SERVICES = [
+    'alert_notification',
+    'automation_io',
+    'battery_service',
+    'blood_pressure',
+    'body_composition',
+    'bond_management',
+    'continuous_glucose_monitoring',
+    'current_time',
+    'cycling_power',
+    'cycling_speed_and_cadence',
+    'device_information',
+    'environmental_sensing',
+    'fitness_machine',
+    'generic_access',
+    'generic_attribute',
+    'glucose',
+    'health_thermometer',
+    'heart_rate',
+    'http_proxy',
+    'human_interface_device',
+    'immediate_alert',
+    'indoor_positioning',
+    'internet_protocol_support',
+    'link_loss',
+    'location_and_navigation',
+    'next_dst_change',
+    'object_transfer',
+    'phone_alert_status',
+    'pulse_oximeter',
+    'reference_time_update',
+    'running_speed_and_cadence',
+    'scan_parameters',
+    'transport_discovery',
+    'tx_power',
+    'user_data',
+    'weight_scale',
+]
+
+
+CHARACTERISTICS = [
+    'aerobic_heart_rate_lower_limit',
+    'aerobic_heart_rate_upper_limit',
+    'aerobic_threshold',
+    'age',
+    'aggregate',
+    'alert_category_id',
+    'alert_category_id_bit_mask',
+    'alert_level',
+    'alert_notification_control_point',
+    'alert_status',
+    'altitude',
+    'anaerobic_heart_rate_lower_limit',
+    'anaerobic_heart_rate_upper_limit',
+    'anaerobic_threshold',
+    'analog',
+    'apparent_wind_direction',
+    'apparent_wind_speed',
+    'gap.appearance',
+    'barometric_pressure_trend',
+    'battery_level',
+    'blood_pressure_feature',
+    'blood_pressure_measurement',
+    'body_composition_feature',
+    'body_composition_measurement',
+    'body_sensor_location',
+    'bond_management_control_point',
+    'bond_management_feature',
+    'boot_keyboard_input_report',
+    'boot_keyboard_output_report',
+    'boot_mouse_input_report',
+    'gap.central_address_resolution_support',
+    'cgm_feature',
+    'cgm_measurement',
+    'cgm_session_run_time',
+    'cgm_session_start_time',
+    'cgm_specific_ops_control_point',
+    'cgm_status',
+    'cross_trainer_data',
+    'csc_feature',
+    'csc_measurement',
+    'current_time',
+    'cycling_power_control_point',
+    'cycling_power_feature',
+    'cycling_power_measurement',
+    'cycling_power_vector',
+    'database_change_increment',
+    'date_of_birth',
+    'date_of_threshold_assessment',
+    'date_time',
+    'day_date_time',
+    'day_of_week',
+    'descriptor_value_changed',
+    'gap.device_name',
+    'dew_point',
+    'digital',
+    'dst_offset',
+    'elevation',
+    'email_address',
+    'exact_time_256',
+    'fat_burn_heart_rate_lower_limit',
+    'fat_burn_heart_rate_upper_limit',
+    'firmware_revision_string',
+    'first_name',
+    'fitness_machine_control_point',
+    'fitness_machine_feature',
+    'fitness_machine_status',
+    'five_zone_heart_rate_limits',
+    'floor_number',
+    'gender',
+    'glucose_feature',
+    'glucose_measurement',
+    'glucose_measurement_context',
+    'gust_factor',
+    'hardware_revision_string',
+    'heart_rate_control_point',
+    'heart_rate_max',
+    'heart_rate_measurement',
+    'heat_index',
+    'height',
+    'hid_control_point',
+    'hid_information',
+    'hip_circumference',
+    'http_control_point',
+    'http_entity_body',
+    'http_headers',
+    'http_status_code',
+    'https_security',
+    'humidity',
+    'ieee_11073-20601_regulatory_certification_data_list',
+    'indoor_bike_data',
+    'indoor_positioning_configuration',
+    'intermediate_cuff_pressure',
+    'intermediate_temperature',
+    'irradiance',
+    'language',
+    'last_name',
+    'latitude',
+    'ln_control_point',
+    'ln_feature',
+    'local_east_coordinate',
+    'local_north_coordinate',
+    'local_time_information',
+    'location_and_speed',
+    'location_name',
+    'longitude',
+    'magnetic_declination',
+    'magnetic_flux_density_2D',
+    'magnetic_flux_density_3D',
+    'manufacturer_name_string',
+    'maximum_recommended_heart_rate',
+    'measurement_interval',
+    'model_number_string',
+    'navigation',
+    'new_alert',
+    'object_action_control_point',
+    'object_changed',
+    'object_first_created',
+    'object_id',
+    'object_last_modified',
+    'object_list_control_point',
+    'object_list_filter',
+    'object_name',
+    'object_properties',
+    'object_size',
+    'object_type',
+    'ots_feature',
+    'gap.peripheral_preferred_connection_parameters',
+    'gap.peripheral_privacy_flag',
+    'plx_continuous_measurement',
+    'plx_features',
+    'plx_spot_check_measurement',
+    'pnp_id',
+    'pollen_concentration',
+    'position_quality',
+    'pressure',
+    'protocol_mode',
+    'rainfall',
+    'gap.reconnection_address',
+    'record_access_control_point',
+    'reference_time_information',
+    'report',
+    'report_map',
+    'resolvable_private_address_only',
+    'resting_heart_rate',
+    'ringer_control_point',
+    'ringer_setting',
+    'rower_data',
+    'rsc_feature',
+    'rsc_measurement',
+    'sc_control_point',
+    'scan_interval_window',
+    'scan_refresh',
+    'serial_number_string',
+    'gatt.service_changed',
+    'software_revision_string',
+    'sport_type_for_aerobic_and_anaerobic_thresholds',
+    'stair_climber_data',
+    'step_climber_data',
+    'supported_heart_rate_range',
+    'supported_inclination_range',
+    'supported_new_alert_category',
+    'supported_power_range',
+    'supported_resistance_level_range',
+    'supported_speed_range',
+    'supported_unread_alert_category',
+    'system_id',
+    'tds_control_point',
+    'temperature',
+    'temperature_measurement',
+    'temperature_type',
+    'three_zone_heart_rate_limits',
+    'time_accuracy',
+    'time_source',
+    'time_update_control_point',
+    'time_update_state',
+    'time_with_dst',
+    'time_zone',
+    'training_status',
+    'treadmill_data',
+    'true_wind_direction',
+    'true_wind_speed',
+    'two_zone_heart_rate_limit',
+    'tx_power_level',
+    'uncertainty',
+    'unread_alert_status',
+    'uri',
+    'user_control_point',
+    'user_index',
+    'uv_index',
+    'vo2_max',
+    'waist_circumference',
+    'weight',
+    'weight_measurement',
+    'weight_scale_feature',
+    'wind_chill',
+]
diff --git a/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py b/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py
new file mode 100644
index 0000000..0c9bdb5
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/parameter_fuzzer.py
@@ -0,0 +1,73 @@
+# 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.
+
+"""Module to fuzz parameters of a template."""
+
+import constraints
+from fuzzer_helpers import FillInParameter
+
+
+def FuzzParameters(test_file_data):
+    """Fuzzes the data in the string provided.
+
+    For now this function only replaces the TRANSFORM_SERVICE_UUID parameter
+    with a valid UUID string.
+
+    Args:
+      test_file_data: String that contains parameters to be replaced.
+
+    Returns:
+      A string containing the value of test_file_data but with all its
+      parameters replaced.
+    """
+
+    test_file_data = FillInParameter('TRANSFORM_BASIC_BASE',
+                                     constraints.GetBasicBase,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_DEVICE_DISCOVERY_BASE',
+                                     constraints.GetDeviceDiscoveryBase,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_CONNECTABLE_BASE',
+                                     constraints.GetConnectableBase,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_SERVICES_RETRIEVED_BASE',
+                                     constraints.get_services_retrieved_base,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_CHARACTERISTICS_RETRIEVED_BASE',
+                                     constraints.get_characteristics_retrieved_base,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_REQUEST_DEVICE_OPTIONS',
+                                     constraints.GetRequestDeviceOptions,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_GET_PRIMARY_SERVICES',
+                                     constraints.get_get_primary_services_call,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_GET_CHARACTERISTICS',
+                                     constraints.get_characteristics_call,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_PICK_A_SERVICE',
+                                     constraints.get_pick_a_service,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_PICK_A_CHARACTERISTIC',
+                                     constraints.get_pick_a_characteristic,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_VALUE',
+                                     constraints.get_buffer_source,
+                                     test_file_data)
+
+    test_file_data = FillInParameter('TRANSFORM_RELOAD_ID',
+                                     constraints.get_reload_id,
+                                     test_file_data)
+
+    return test_file_data
diff --git a/modules/bluetooth/testing/clusterfuzz/setup.py b/modules/bluetooth/testing/clusterfuzz/setup.py
new file mode 100644
index 0000000..f281ad0
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/setup.py
@@ -0,0 +1,109 @@
+# 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.
+
+"""Script that helps run the fuzzer locally and in ClusterFuzz.
+
+   To prepare to run the fuzzer locally, this script copies the necessary
+   resources.
+
+   To prepare to run the fuzzer in ClusterFuzz this script generates two zip
+   files: web_bluetooth_fuzzer.tar.bz2. This zip file can then be directly
+   uploaded to ClusterFuzz.
+"""
+
+import argparse
+import glob
+import os
+import shutil
+import sys
+
+# src path from this file's path.
+SRC_PATH = os.path.join(
+    os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir, os.pardir)
+LAYOUT_TESTS_RESOURCES_PATH = os.path.join(
+    SRC_PATH, 'third_party', 'WebKit', 'LayoutTests', 'resources')
+COMMON_FUZZER_RESOURCES_PATH = os.path.join(
+    SRC_PATH, 'testing', 'clusterfuzz', 'common')
+RESOURCES = [
+    os.path.join(LAYOUT_TESTS_RESOURCES_PATH, 'testharness.js'),
+    os.path.join(LAYOUT_TESTS_RESOURCES_PATH, 'testharnessreport.js'),
+    os.path.join(LAYOUT_TESTS_RESOURCES_PATH, 'bluetooth',
+                 'bluetooth-helpers.js'),
+    os.path.join(COMMON_FUZZER_RESOURCES_PATH, 'fuzzy_types.py'),
+    os.path.join(COMMON_FUZZER_RESOURCES_PATH, 'utils.py'),
+    os.path.join(COMMON_FUZZER_RESOURCES_PATH, '__init__.py'),
+]
+
+
+def _GetCurrentPath():
+    """Returns this file's directory path"""
+    return os.path.dirname(os.path.realpath(__file__))
+
+
+def RetrieveResources():
+    # Create resources directory if it doesn't exist. Clear it otherwise.
+    current_path = _GetCurrentPath()
+    resources_path = os.path.join(current_path, 'resources')
+    if not os.path.exists(resources_path):
+        print '\'resources\' folder doesn\'t exist. Creating one...'
+        os.makedirs(resources_path)
+    else:
+        print '\'resources\' folder already exists. Clearing it...'
+        filelist = glob.glob(os.path.join(resources_path, '*'))
+        for f in filelist:
+            os.remove(f)
+
+    # Copy necessary files.
+    for r in RESOURCES:
+        print 'Copying: ' + os.path.abspath(os.path.join(current_path, r))
+        shutil.copy(os.path.join(current_path, r), resources_path)
+
+    return resources_path
+
+
+def main():
+
+    # Get arguments.
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-c', '--cluster_fuzz', action='store_true',
+                        help='If present, this script generates tar.bz2 file '
+                        'containing the fuzzer. This file can be uploaded '
+                        'and run on ClusterFuzz.')
+    parser.add_argument('-l', '--local', action='store_true',
+                        help='If present, this script retrieves the files '
+                             'necessary to run the fuzzer locally.')
+
+    args = parser.parse_args()
+
+    if not (args.cluster_fuzz or args.local):
+        print 'No action requested.'
+        return
+
+    RetrieveResources()
+
+    # To run locally we only need to copy the files.
+    if args.local:
+        print 'Ready to run locally!'
+
+    # To run on ClusterFuzz we create a tar.bz2 file.
+    if args.cluster_fuzz:
+        # Clean directory
+        current_path = _GetCurrentPath()
+        filelist = glob.glob(os.path.join(current_path, '*.pyc'))
+        for f in filelist:
+            os.remove(f)
+
+        # Compress folder to upload
+        compressed_file_path = os.path.join(current_path,
+                                            'web_bluetooth_fuzzer')
+        shutil.make_archive(
+            compressed_file_path,
+            format='bztar',
+            root_dir=os.path.join(current_path, os.pardir),
+            base_dir='clusterfuzz')
+        print 'File wrote to: ' + compressed_file_path + '.tar.bz2'
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py b/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py
new file mode 100644
index 0000000..c493270
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/test_case_fuzzer.py
@@ -0,0 +1,198 @@
+# 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.
+
+"""Module to generate a test file with random calls to the Web Bluetooth API."""
+
+import random
+from fuzzer_helpers import FillInParameter
+
+# Contains the different types of base tokens used when generating a test case.
+BASE_TOKENS = [
+    'TRANSFORM_BASIC_BASE',
+    'TRANSFORM_DEVICE_DISCOVERY_BASE',
+    'TRANSFORM_CONNECTABLE_BASE',
+    'TRANSFORM_SERVICES_RETRIEVED_BASE',
+    'TRANSFORM_CHARACTERISTICS_RETRIEVED_BASE',
+]
+
+# Contains strings that represent calls to the Web Bluetooth API. These
+# strings can be sequentially placed together to generate sequences of
+# calls to the API. These strings are separated by line and placed so
+# that indentation can be performed more easily.
+TOKENS = [
+    [
+        '})',
+        '.catch(e => console.log(e.name + \': \' + e.message))',
+        '.then(() => {',
+    ],
+    # Request Device Tokens
+    [
+        '  requestDeviceWithKeyDown(TRANSFORM_REQUEST_DEVICE_OPTIONS);'
+    ],
+    [
+        '  return requestDeviceWithKeyDown(TRANSFORM_REQUEST_DEVICE_OPTIONS);',
+        '})',
+        '.then(device => {',
+    ],
+    # Connect Tokens
+    [
+        '  device.gatt.connect();',
+    ],
+    [
+        '  return device.gatt.connect();',
+        '})'
+        '.then(gatt => {',
+    ],
+    [
+        '  gatt.connect();',
+    ],
+    [
+        '  return gatt.connect();',
+        '})'
+        '.then(gatt => {',
+    ],
+    # GetPrimaryService(s) Tokens
+    [
+        '  device.gatt.TRANSFORM_GET_PRIMARY_SERVICES;',
+    ],
+    [
+        '  gatt.TRANSFORM_GET_PRIMARY_SERVICES;',
+    ],
+    [
+        '  return device.gatt.TRANSFORM_GET_PRIMARY_SERVICES;',
+        '})'
+        '.then(services => {',
+    ],
+    [
+        '  return gatt.TRANSFORM_GET_PRIMARY_SERVICES;',
+        '})'
+        '.then(services => {',
+    ],
+    # GetCharacteristic(s) Tokens
+    [
+        '  TRANSFORM_PICK_A_SERVICE;',
+        '  service.TRANSFORM_GET_CHARACTERISTICS;',
+    ],
+    [
+        '  TRANSFORM_PICK_A_SERVICE;',
+        '  return service.TRANSFORM_GET_CHARACTERISTICS;',
+    ],
+    # ReadValue Tokens
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  characteristic.readValue();',
+    ],
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  return characteristic.readValue().then(_ => characteristics);',
+        '})',
+        '.then(characteristics => {',
+    ],
+    # WriteValue Tokens
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  characteristic.writeValue(TRANSFORM_VALUE);',
+    ],
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  return characteristic.writeValue(TRANSFORM_VALUE).then(_ => characteristics);',
+        '})',
+        '.then(characteristics => {',
+    ],
+    # Start Notifications Tokens
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  characteristic.startNotifications();',
+    ],
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  return characteristic.startNotitications().then(_ => characteristics);',
+        '})',
+        '.then(characteristics => {',
+    ],
+    # Stop Notifications Tokens
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  characteristic.stopNotifications();',
+    ],
+    [
+        '  TRANSFORM_PICK_A_CHARACTERISTIC;',
+        '  return characteristic.stopNotitications().then(() => characteristics);',
+        '})',
+        '.then(characteristics => {',
+    ],
+    # Garbage Collection
+    [
+        '  runGarbageCollection();',
+    ],
+    [
+        '})',
+        '.then(runGarbageCollection)',
+        '.then(() => {',
+    ],
+    # Reload Tokens
+    # We generate a unique id for each reload and save it in sessionStorage.
+    # This ensures that the reload is only executed once and that if test cases
+    # share the same sessionStorage all their reloads are executed.
+    [
+        '  (() => {',
+        '    let reload_id = TRANSFORM_RELOAD_ID;',
+        '    if (!sessionStorage.getItem(reload_id)) {',
+        '      sessionStorage.setItem(reload_id, true);',
+        '      location.reload();',
+        '    }',
+        '  })();',
+    ],
+]
+
+INDENT = '    '
+BREAK = '\n'
+END_TOKEN = '});'
+
+# Maximum number of tokens that will be inserted in the generated
+# test case.
+MAX_NUM_OF_TOKENS = 100
+
+
+def _GenerateSequenceOfRandomTokens():
+    """Generates a sequence of calls to the Web Bluetooth API.
+
+    Uses the arrays of strings in TOKENS and randomly picks a number between
+    [1, 100] to generate a random sequence of calls to the Web Bluetooth API,
+    calls to reload the page, and calls to perform  garbage collection.
+
+    Returns:
+      A string containing a sequence of calls to the Web Bluetooth API.
+    """
+    result = random.choice(BASE_TOKENS)
+
+    for _ in xrange(random.randint(1, MAX_NUM_OF_TOKENS)):
+        # Get random token.
+        token = random.choice(TOKENS)
+
+        # Indent and break line.
+        for line in token:
+            result += INDENT + line + BREAK
+
+    result += INDENT + END_TOKEN
+
+    return result
+
+
+def GenerateTestFile(template_file_data):
+    """Inserts a sequence of calls to the Web Bluetooth API into a template.
+
+    Args:
+      template_file_data: A template containing the 'TRANSFORM_RANDOM_TOKENS'
+          string.
+    Returns:
+      A string consisting of template_file_data with the string
+        'TRANSFORM_RANDOM_TOKENS' replaced with a sequence of calls to the Web
+        Bluetooth API and calls to reload the page and perform garbage
+        collection.
+    """
+
+    return FillInParameter('TRANSFORM_RANDOM_TOKENS',
+                           _GenerateSequenceOfRandomTokens,
+                           template_file_data)
diff --git a/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py b/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py
new file mode 100644
index 0000000..dddb407
--- /dev/null
+++ b/modules/bluetooth/testing/clusterfuzz/wbt_fakes.py
@@ -0,0 +1,215 @@
+# 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.
+
+"""Module that contains information about Web Bluetooth's Fake Adapters."""
+
+BLOCKLISTED_UUID = '611c954a-263b-4f4a-aab6-01ddb953f985'
+DISCONNECTION_UUID = '01d7d889-7451-419f-aeb8-d65e7b9277af'
+GATT_ERROR_UUID = '000000a0-97e5-4cd7-b9f1-f5a427670c59'
+
+CONNECTION_ERROR_UUIDS = [
+    '00000000-97e5-4cd7-b9f1-f5a427670c59',
+    '00000001-97e5-4cd7-b9f1-f5a427670c59',
+    '00000002-97e5-4cd7-b9f1-f5a427670c59',
+    '00000003-97e5-4cd7-b9f1-f5a427670c59',
+    '00000004-97e5-4cd7-b9f1-f5a427670c59',
+    '00000005-97e5-4cd7-b9f1-f5a427670c59',
+    '00000006-97e5-4cd7-b9f1-f5a427670c59',
+    '00000007-97e5-4cd7-b9f1-f5a427670c59',
+    '00000008-97e5-4cd7-b9f1-f5a427670c59',
+    '00000009-97e5-4cd7-b9f1-f5a427670c59',
+    '0000000a-97e5-4cd7-b9f1-f5a427670c59',
+    '0000000b-97e5-4cd7-b9f1-f5a427670c59',
+    '0000000c-97e5-4cd7-b9f1-f5a427670c59',
+    '0000000d-97e5-4cd7-b9f1-f5a427670c59',
+    '0000000e-97e5-4cd7-b9f1-f5a427670c59',
+]
+
+# List of services that are included in our fake adapters.
+ADVERTISED_SERVICES = [
+    'generic_access',
+    'glucose',
+    'tx_power',
+    'heart_rate',
+    'human_interface_device',
+    'device_information',
+    'a_device_name_that_is_longer_than_29_bytes_but_shorter_than_248_bytes',
+    BLOCKLISTED_UUID,
+    CONNECTION_ERROR_UUIDS[0],
+    DISCONNECTION_UUID,
+    GATT_ERROR_UUID,
+]
+
+# List of services inside devices.
+SERVICES = [
+    'generic_access',
+    'heart_rate',
+    'device_information',
+    'generic_access',
+    'heart_rate',
+    'human_interface_device',
+    'a_device_name_that_is_longer_than_29_bytes_but_shorter_than_248_bytes',
+    BLOCKLISTED_UUID,
+    DISCONNECTION_UUID,
+    GATT_ERROR_UUID,
+]
+
+# List of characteristics inside devices.
+CHARACTERISTICS = [
+    'bad1c9a2-9a5b-4015-8b60-1579bbbf2135',
+    '01d7d88a-7451-419f-aeb8-d65e7b9277af',
+    'body_sensor_location',
+    'gap.device_name',
+    'heart_rate_measurement',
+    'serial_number_string',
+    'gap.peripheral_privacy_flag',
+]
+
+# Tuples of common service uuid and their characteristics uuids.
+GENERIC_ACCESS_SERVICE = (
+    'generic_access', ['gap.device_name', 'gap.peripheral_privacy_flag']
+)
+
+HEART_RATE_SERVICE = (
+    'heart_rate', ['heart_rate_measurement', 'body_sensor_location']
+)
+
+# List of available fake adapters.
+ALL_ADAPTERS = [
+    'NotPresentAdapter',
+    'NotPoweredAdapter',
+    'EmptyAdapter',
+    'FailStartDiscoveryAdapter',
+    'GlucoseHeartRateAdapter',
+    'UnicodeDeviceAdapter',
+    'MissingServiceHeartRateAdapter',
+    'MissingCharacteristicHeartRateAdapter',
+    'HeartRateAdapter',
+    'TwoHeartRateServicesAdapter',
+    'DisconnectingHeartRateAdapter',
+    'BlocklistTestAdapter',
+    'FailingConnectionsAdapter',
+    'FailingGATTOperationsAdapter',
+    'DelayedServicesDiscoveryAdapter',
+    'DeviceNameLongerThan29BytesAdapter',
+]
+
+# List of fake adapters that include devices.
+ADAPTERS_WITH_DEVICES = [
+    (
+        'GlucoseHeartRateAdapter',
+        ['generic_access', 'heart_rate', 'glucose', 'tx_power'],
+    ),
+    (
+        'MissingServiceHeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'MissingCharacteristicHeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'HeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'TwoHeartRateServicesAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'DisconnectingHeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'BlocklistTestAdapter',
+        [BLOCKLISTED_UUID, 'device_information', 'generic_access',
+         'heart_rate', 'human_interface_device'],
+    ),
+    (
+        'FailingConnectionsAdapter',
+        CONNECTION_ERROR_UUIDS,
+    ),
+    (
+        'FailingGATTOperationsAdapter',
+        [GATT_ERROR_UUID],
+    ),
+    (
+        'DelayedServicesDiscoveryAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'DeviceNameLongerThan29BytesAdapter',
+        ['a_device_name_that_is_longer_than_29_bytes_but_shorter_than_248_bytes'],
+    ),
+]
+
+# List of fake adapters with services.
+ADAPTERS_WITH_SERVICES = [
+    (
+        'MissingCharacteristicHeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'HeartRateAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'TwoHeartRateServicesAdapter',
+        ['generic_access', 'heart_rate'],
+    ),
+    (
+        'DisconnectingHeartRateAdapter',
+        ['generic_access', 'heart_rate', DISCONNECTION_UUID],
+    ),
+    (
+        'BlocklistTestAdapter',
+        [BLOCKLISTED_UUID, 'device_information', 'generic_access',
+         'heart_rate', 'human_interface_device'],
+    ),
+    (
+        'FailingGATTOperationsAdapter',
+        [GATT_ERROR_UUID],
+    ),
+    (
+        'DelayedServicesDiscoveryAdapter',
+        ['heart_rate']
+    ),
+]
+
+ADAPTERS_WITH_CHARACTERISTICS = [
+    (
+        'HeartRateAdapter',
+        [GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE],
+    ),
+    (
+        'TwoHeartRateServicesAdapter',
+        [HEART_RATE_SERVICE],
+    ),
+    (
+        'DisconnectingHeartRateAdapter',
+        [GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE,
+         (DISCONNECTION_UUID, ['01d7d88a-7451-419f-aeb8-d65e7b9277af'])]
+    ),
+    (
+        'BlocklistTestAdapter',
+        [GENERIC_ACCESS_SERVICE, HEART_RATE_SERVICE, (
+            BLOCKLISTED_UUID, ['bad1c9a2-9a5b-4015-8b60-1579bbbf2135'],
+        ), (
+            'device_information', ['serial_number_string'],
+        )]
+    ),
+    (
+        'FailingGATTOperationsAdapter',
+        [(GATT_ERROR_UUID, [
+            '000000a1-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a2-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a3-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a4-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a5-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a6-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a7-97e5-4cd7-b9f1-f5a427670c59',
+            '000000a8-97e5-4cd7-b9f1-f5a427670c59',
+        ])],
+    ),
+]
diff --git a/modules/broadcastchannel/BroadcastChannel.idl b/modules/broadcastchannel/BroadcastChannel.idl
new file mode 100644
index 0000000..f971cab
--- /dev/null
+++ b/modules/broadcastchannel/BroadcastChannel.idl
@@ -0,0 +1,24 @@
+// 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://html.spec.whatwg.org/multipage/comms.html#broadcastchannel
+
+[
+    Constructor(DOMString name),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    Exposed=(Window,Worker),
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Measure
+] interface BroadcastChannel : EventTarget {
+    readonly attribute DOMString name;
+
+    [RaisesException, Measure] void postMessage(any message);
+    [Measure] void close();
+
+    // event handlers
+    attribute EventHandler onmessage;
+    attribute EventHandler onmessageerror;
+};
diff --git a/modules/budget/BudgetService.idl b/modules/budget/BudgetService.idl
new file mode 100644
index 0000000..e0235e2
--- /dev/null
+++ b/modules/budget/BudgetService.idl
@@ -0,0 +1,18 @@
+// 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/budget-api/#budget-service-interface
+
+enum OperationType {
+    "silent-push"
+};
+
+[
+    RuntimeEnabled=Budget,
+    Exposed=(Window,Worker)
+] interface BudgetService {
+    [OriginTrialEnabled=BudgetQuery, CallWith=ScriptState, MeasureAs=BudgetAPIGetCost] Promise<double> getCost(OperationType operation);
+    [OriginTrialEnabled=BudgetQuery, CallWith=ScriptState, MeasureAs=BudgetAPIGetBudget] Promise<sequence<BudgetState>> getBudget();
+    [CallWith=ScriptState] Promise<boolean> reserve(OperationType operation);
+};
diff --git a/modules/budget/BudgetState.idl b/modules/budget/BudgetState.idl
new file mode 100644
index 0000000..41e6f4d
--- /dev/null
+++ b/modules/budget/BudgetState.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/budget-api/#budget-state-interface
+
+[
+    OriginTrialEnabled=BudgetQuery,
+    Exposed=(Window,Worker)
+] interface BudgetState {
+    readonly attribute double budgetAt;
+    readonly attribute DOMTimeStamp time;
+};
diff --git a/modules/budget/NavigatorBudget.idl b/modules/budget/NavigatorBudget.idl
new file mode 100644
index 0000000..92105ca
--- /dev/null
+++ b/modules/budget/NavigatorBudget.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/budget-api/#navigator-workernavigator-extensions
+
+[
+    ImplementedAs=NavigatorBudget,
+    RuntimeEnabled=Budget
+] partial interface Navigator {
+    [SameObject] readonly attribute BudgetService budget;
+};
diff --git a/modules/budget/WorkerNavigatorBudget.idl b/modules/budget/WorkerNavigatorBudget.idl
new file mode 100644
index 0000000..8f4f2b5
--- /dev/null
+++ b/modules/budget/WorkerNavigatorBudget.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/budget-api/#navigator-workernavigator-extensions
+
+[
+    ImplementedAs=WorkerNavigatorBudget,
+    RuntimeEnabled=Budget
+] partial interface WorkerNavigator {
+    [SameObject, CallWith=ExecutionContext] readonly attribute BudgetService budget;
+};
diff --git a/modules/cachestorage/Cache.idl b/modules/cachestorage/Cache.idl
index 6bd3c42..7c0fb2a 100644
--- a/modules/cachestorage/Cache.idl
+++ b/modules/cachestorage/Cache.idl
@@ -2,17 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache
+// https://w3c.github.io/ServiceWorker/#cache-interface
 
 [
-    GarbageCollected,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface Cache {
-    [CallWith=ScriptState, RaisesException] Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
+    [CallWith=ScriptState, RaisesException] Promise<any> match(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);
     [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);
+    [CallWith=ScriptState, RaisesException] Promise<sequence<Request>> keys(optional RequestInfo request, optional CacheQueryOptions options);
 };
diff --git a/modules/cachestorage/CacheQueryOptions.idl b/modules/cachestorage/CacheQueryOptions.idl
index c867090..032ff17 100644
--- a/modules/cachestorage/CacheQueryOptions.idl
+++ b/modules/cachestorage/CacheQueryOptions.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache
+// https://w3c.github.io/ServiceWorker/#cache-interface
 dictionary CacheQueryOptions {
     boolean ignoreSearch = false;
     boolean ignoreMethod = false;
diff --git a/modules/cachestorage/CacheStorage.idl b/modules/cachestorage/CacheStorage.idl
index 5749c17..65af41b 100644
--- a/modules/cachestorage/CacheStorage.idl
+++ b/modules/cachestorage/CacheStorage.idl
@@ -2,14 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-storage
+// See https://w3c.github.io/ServiceWorker/#cachestorage-interface
 [
-    GarbageCollected,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface CacheStorage {
+  [CallWith=ScriptState, RaisesException] Promise<any> match(RequestInfo request, optional CacheQueryOptions options);
   [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/WindowCacheStorage.idl b/modules/cachestorage/WindowCacheStorage.idl
index 7aadd81..5f1e045 100644
--- a/modules/cachestorage/WindowCacheStorage.idl
+++ b/modules/cachestorage/WindowCacheStorage.idl
@@ -2,10 +2,9 @@
 // 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/#self-caches
+// https://w3c.github.io/ServiceWorker/#self-caches
 [
-    RuntimeEnabled=GlobalCacheStorage,
-    ImplementedAs=GlobalCacheStorage,
+    ImplementedAs=GlobalCacheStorage
 ] partial interface Window {
-    [Unforgeable, MeasureAs=GlobalCacheStorage, RuntimeEnabled=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
+    [MeasureAs=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
 };
diff --git a/modules/cachestorage/WorkerCacheStorage.idl b/modules/cachestorage/WorkerCacheStorage.idl
index 5916e88..62ebc32 100644
--- a/modules/cachestorage/WorkerCacheStorage.idl
+++ b/modules/cachestorage/WorkerCacheStorage.idl
@@ -2,10 +2,9 @@
 // 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/#self-caches
+// https://w3c.github.io/ServiceWorker/#self-caches
 [
-    RuntimeEnabled=GlobalCacheStorage,
-    ImplementedAs=GlobalCacheStorage,
+    ImplementedAs=GlobalCacheStorage
 ] partial interface WorkerGlobalScope {
-    [Unforgeable, MeasureAs=GlobalCacheStorage, RuntimeEnabled=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
+    [MeasureAs=GlobalCacheStorage, RaisesException] readonly attribute CacheStorage caches;
 };
diff --git a/modules/canvas/HTMLCanvasElementModule.idl b/modules/canvas/HTMLCanvasElementModule.idl
new file mode 100644
index 0000000..6bdc7c6
--- /dev/null
+++ b/modules/canvas/HTMLCanvasElementModule.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.
+
+// https://html.spec.whatwg.org/#the-canvas-element
+
+typedef (CanvasRenderingContext2D or
+         WebGLRenderingContext or
+         WebGL2RenderingContext or
+         ImageBitmapRenderingContext) RenderingContext;
+
+[
+    ImplementedAs=HTMLCanvasElementModule
+] partial interface HTMLCanvasElement
+{
+    // The PermissiveDictionaryConversion extended attribute is needed to allow the
+    // autogenerated code to match the behavior of the custom binding. Web IDL
+    // requires throwing TypeError if the incoming argument is not an object type
+    // (and is not undefined or null). The binding must ignore this.
+    // Related spec issue: https://github.com/whatwg/html/issues/595
+    [RaisesException] RenderingContext? getContext(DOMString contextId, [PermissiveDictionaryConversion] optional CanvasContextCreationAttributes attributes);
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException, MeasureAs=OffscreenCanvas] OffscreenCanvas transferControlToOffscreen();
+};
diff --git a/modules/canvas2d/Canvas2DContextAttributes.idl b/modules/canvas2d/Canvas2DContextAttributes.idl
deleted file mode 100644
index 41f8b80..0000000
--- a/modules/canvas2d/Canvas2DContextAttributes.idl
+++ /dev/null
@@ -1,29 +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.
- *
- * 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.
- */
-
-dictionary Canvas2DContextAttributes {
-    boolean alpha = true;
-};
diff --git a/modules/canvas2d/CanvasGradient.idl b/modules/canvas2d/CanvasGradient.idl
index 8b7d542..8f06b50 100644
--- a/modules/canvas2d/CanvasGradient.idl
+++ b/modules/canvas2d/CanvasGradient.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    GarbageCollected,
+    Exposed(Worker ExperimentalCanvasFeatures, Window StableBlinkFeatures)
 ] interface CanvasGradient {
 
     [RaisesException] void addColorStop(float offset, DOMString color);
diff --git a/modules/canvas2d/CanvasPath.idl b/modules/canvas2d/CanvasPath.idl
new file mode 100644
index 0000000..0fcd2ab
--- /dev/null
+++ b/modules/canvas2d/CanvasPath.idl
@@ -0,0 +1,20 @@
+// 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://html.spec.whatwg.org/multipage/scripting.html#canvaspath
+
+[
+    NoInterfaceObject // Always used on target of 'implements'
+] interface CanvasPath {
+    // shared path API methods
+    void closePath();
+    void moveTo(unrestricted float x, unrestricted float y);
+    void lineTo(unrestricted float x, unrestricted float y);
+    void quadraticCurveTo(unrestricted float cpx, unrestricted float cpy, unrestricted float x, unrestricted float y);
+    void bezierCurveTo(unrestricted float cp1x, unrestricted float cp1y, unrestricted float cp2x, unrestricted float cp2y, unrestricted float x, unrestricted float y);
+    [RaisesException] void arcTo(unrestricted float x1, unrestricted float y1, unrestricted float x2, unrestricted float y2, unrestricted float radius);
+    void rect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
+    [RaisesException] void arc(unrestricted float x, unrestricted float y, unrestricted float radius, unrestricted float startAngle, unrestricted float endAngle, [Default=Undefined] optional boolean anticlockwise);
+    [RaisesException] void ellipse(unrestricted float x, unrestricted float y, unrestricted float radiusX, unrestricted float radiusY, unrestricted float rotation, unrestricted float startAngle, unrestricted float endAngle, [Default=Undefined] optional boolean anticlockwise);
+};
diff --git a/modules/canvas2d/CanvasPathMethods.idl b/modules/canvas2d/CanvasPathMethods.idl
deleted file mode 100644
index 2c37810..0000000
--- a/modules/canvas2d/CanvasPathMethods.idl
+++ /dev/null
@@ -1,20 +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://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvaspathmethods
-
-[
-    NoInterfaceObject, // Always used on target of 'implements'
-] interface CanvasPathMethods {
-    // shared path API methods
-    void closePath();
-    void moveTo(unrestricted float x, unrestricted float y);
-    void lineTo(unrestricted float x, unrestricted float y);
-    void quadraticCurveTo(unrestricted float cpx, unrestricted float cpy, unrestricted float x, unrestricted float y);
-    void bezierCurveTo(unrestricted float cp1x, unrestricted float cp1y, unrestricted float cp2x, unrestricted float cp2y, unrestricted float x, unrestricted float y);
-    [RaisesException] void arcTo(unrestricted float x1, unrestricted float y1, unrestricted float x2, unrestricted float y2, unrestricted float radius);
-    void rect(unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
-    [RaisesException] void arc(unrestricted float x, unrestricted float y, unrestricted float radius, unrestricted float startAngle, unrestricted float endAngle, [Default=Undefined] optional boolean anticlockwise);
-    [RaisesException] void ellipse(unrestricted float x, unrestricted float y, unrestricted float radiusX, unrestricted float radiusY, unrestricted float rotation, unrestricted float startAngle, unrestricted float endAngle, [Default=Undefined] optional boolean anticlockwise);
-};
diff --git a/modules/canvas2d/CanvasPattern.idl b/modules/canvas2d/CanvasPattern.idl
index d0804d7..8cd46b0 100644
--- a/modules/canvas2d/CanvasPattern.idl
+++ b/modules/canvas2d/CanvasPattern.idl
@@ -23,9 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    GarbageCollected,
+    Exposed(Worker ExperimentalCanvasFeatures, Window StableBlinkFeatures)
 ] interface CanvasPattern {
 
-    [RuntimeEnabled=ExperimentalCanvasFeatures] void setTransform(SVGMatrix transform);
+    [RuntimeEnabled=ExperimentalCanvasFeatures,Exposed=Window] void setTransform(SVGMatrix transform);
 
 };
diff --git a/modules/canvas2d/CanvasRenderingContext2D.idl b/modules/canvas2d/CanvasRenderingContext2D.idl
index a2a897c..9cd7355 100644
--- a/modules/canvas2d/CanvasRenderingContext2D.idl
+++ b/modules/canvas2d/CanvasRenderingContext2D.idl
@@ -25,18 +25,27 @@
 
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#canvasrenderingcontext2d
 
-typedef (HTMLImageElement or
+// The spec specifies:
+//    typedef (HTMLImageElement or
+//             SVGImageElement) HTMLOrSVGImageElement;
+// but there's a problem with our IDL code generator for typedef-in-typedef,
+// so we split this into two for simplicity. There's no difference from a user
+// perspective.
+// TODO(fserb): revisit this once union typedefs are finalized.
+
+typedef (CSSImageValue or
+         HTMLImageElement or
+         SVGImageElement or
          HTMLVideoElement or
          HTMLCanvasElement or
-         // CanvasRenderingContext2D or
-         ImageBitmap) CanvasImageSource;
+         ImageBitmap or
+         OffscreenCanvas) CanvasImageSource;
 
 enum CanvasFillRule { "nonzero", "evenodd" };
 enum ImageSmoothingQuality {"low", "medium", "high"};
 
 [
-    SetWrapperReferenceFrom=canvas,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface CanvasRenderingContext2D {
     // back-reference to the canvas
     readonly attribute HTMLCanvasElement canvas;
@@ -57,19 +66,18 @@
     // compositing
     attribute unrestricted double globalAlpha; // (default 1.0)
     attribute DOMString globalCompositeOperation; // (default source-over)
-    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString filter; // (default 'none')
+    [MeasureAs=Canvas2DFilter] attribute DOMString filter; // (default 'none')
 
     // image smoothing
-    [ImplementedAs=imageSmoothingEnabled, DeprecateAs=PrefixedImageSmoothingEnabled] attribute boolean webkitImageSmoothingEnabled;
-    [MeasureAs=UnprefixedImageSmoothingEnabled] attribute boolean imageSmoothingEnabled; // (default True)
-    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute ImageSmoothingQuality imageSmoothingQuality; // (default "low")
+    attribute boolean imageSmoothingEnabled; // (default True)
+    [MeasureAs=Canvas2DImageSmoothingQuality]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(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);
+    [CallWith=ScriptState, RaisesException] CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=NullString] DOMString repetitionType);
 
     // shadows
     attribute unrestricted double shadowOffsetX;
@@ -82,7 +90,7 @@
     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)
+    // path API (see also CanvasPath)
     void beginPath();
     void fill(optional CanvasFillRule winding);
     void fill(Path2D path, optional CanvasFillRule winding);
@@ -106,9 +114,9 @@
     TextMetrics measureText(DOMString text);
 
     // drawing images
-    [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);
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y);
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    [CallWith=ScriptState, 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);
@@ -116,17 +124,21 @@
     [RuntimeEnabled=ExperimentalCanvasFeatures] void clearHitRegions();
 
     // pixel manipulation
-    ImageData createImageData(ImageData imagedata);
-    [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);
+    [RaisesException] ImageData createImageData(ImageData imagedata);
+    [RaisesException] ImageData createImageData(long sw, long sh);
+    [RaisesException] ImageData getImageData(long sx, long sy, long sw, long sh);
+    [RaisesException] void putImageData(ImageData imagedata, long dx, long dy);
+    [RaisesException] void putImageData(ImageData imagedata, long dx, long dy, long dirtyX, long dirtyY, long dirtyWidth, long dirtyHeight);
+    
+    // https://github.com/WICG/canvas-color-space/blob/master/CanvasColorSpaceProposal.md
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] ImageData createImageData(unsigned long sw, unsigned long sh, ImageDataColorSettings imageDataColorSettings);
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] ImageData createImageData(ImageDataArray data, unsigned long sw, unsigned long sh, optional ImageDataColorSettings imageDataColorSettings);
 
     // Context state
     // Should be merged with WebGL counterpart in CanvasRenderingContext, once no-longer experimental
     [RuntimeEnabled=ExperimentalCanvasFeatures] boolean isContextLost();
 
-    Canvas2DContextAttributes getContextAttributes();
+    [RuntimeEnabled=ExperimentalCanvasFeatures, MeasureAs=GetCanvas2DContextAttributes] CanvasRenderingContext2DSettings getContextAttributes();
 
     // FIXME: factor out to CanvasDrawingStyles
     // line caps/joins
@@ -148,4 +160,4 @@
 
 };
 
-CanvasRenderingContext2D implements CanvasPathMethods;
+CanvasRenderingContext2D implements CanvasPath;
diff --git a/modules/canvas2d/CanvasRenderingContext2DSettings.idl b/modules/canvas2d/CanvasRenderingContext2DSettings.idl
new file mode 100644
index 0000000..283cb92
--- /dev/null
+++ b/modules/canvas2d/CanvasRenderingContext2DSettings.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium 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/WICG/canvas-color-space/blob/master/CanvasColorSpaceProposal.md
+
+[PermissiveDictionaryConversion]
+dictionary CanvasRenderingContext2DSettings {
+    boolean alpha = true;
+
+    // TODO(crbug.com/637288): Do we keep "legacy-srgb" as the default?
+    // Must decide before shipping.
+    [RuntimeEnabled=ExperimentalCanvasFeatures] CanvasColorSpace colorSpace = "legacy-srgb";
+    [RuntimeEnabled=ExperimentalCanvasFeatures] CanvasPixelFormat pixelFormat = "8-8-8-8";
+    [RuntimeEnabled=ExperimentalCanvasFeatures] boolean linearPixelMath = false;
+};
+
diff --git a/modules/canvas2d/MouseEventHitRegion.idl b/modules/canvas2d/MouseEventHitRegion.idl
deleted file mode 100644
index e501b4e..0000000
--- a/modules/canvas2d/MouseEventHitRegion.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.
-
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#MouseEvent-partial
-
-[
-    RuntimeEnabled=ExperimentalCanvasFeatures
-] partial interface MouseEvent {
-    readonly attribute DOMString? region;
-};
diff --git a/modules/canvas2d/Path2D.idl b/modules/canvas2d/Path2D.idl
index 8f8a2a1..0842495 100644
--- a/modules/canvas2d/Path2D.idl
+++ b/modules/canvas2d/Path2D.idl
@@ -32,10 +32,10 @@
     Constructor,
     Constructor(Path2D path),
     Constructor(DOMString text),
-    GarbageCollected,
+    Exposed(Worker ExperimentalCanvasFeatures, Window StableBlinkFeatures, PaintWorklet CSSPaintAPI)
 ] interface Path2D {
 
     [RuntimeEnabled=ExperimentalCanvasFeatures] void addPath(Path2D path, optional SVGMatrix? transform);
 };
 
-Path2D implements CanvasPathMethods;
+Path2D implements CanvasPath;
diff --git a/modules/canvas2d/TouchHitRegion.idl b/modules/canvas2d/TouchHitRegion.idl
deleted file mode 100644
index 50c6a92..0000000
--- a/modules/canvas2d/TouchHitRegion.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.
-
-// https://html.spec.whatwg.org/multipage/scripting.html#Touch-partial
-
-[
-    RuntimeEnabled=ExperimentalCanvasFeatures
-] partial interface Touch {
-    readonly attribute DOMString? region;
-};
diff --git a/modules/compositorworker/AnimationWorkletGlobalScope.idl b/modules/compositorworker/AnimationWorkletGlobalScope.idl
new file mode 100644
index 0000000..e94fd5b
--- /dev/null
+++ b/modules/compositorworker/AnimationWorkletGlobalScope.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.
+
+[
+    Exposed=AnimationWorklet,
+    Global=(Worklet,AnimationWorklet),
+    RuntimeEnabled=AnimationWorklet
+] interface AnimationWorkletGlobalScope : WorkletGlobalScope {
+    [RaisesException] void registerAnimator(DOMString name, Function animatorConstructor);
+};
diff --git a/modules/compositorworker/CompositorWorker.idl b/modules/compositorworker/CompositorWorker.idl
deleted file mode 100644
index c7a57ed..0000000
--- a/modules/compositorworker/CompositorWorker.idl
+++ /dev/null
@@ -1,18 +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.
-
-[
-    DependentLifetime,
-    Constructor(DOMString scriptUrl),
-    ConstructorCallWith=ExecutionContext,
-    GarbageCollected,
-    RaisesException=Constructor,
-    RuntimeEnabled=CompositorWorker,
-] interface CompositorWorker : EventTarget {
-    attribute EventHandler onmessage;
-    [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
-    void terminate();
-};
-
-CompositorWorker implements AbstractWorker;
diff --git a/modules/compositorworker/CompositorWorkerGlobalScope.idl b/modules/compositorworker/CompositorWorkerGlobalScope.idl
deleted file mode 100644
index f51d663..0000000
--- a/modules/compositorworker/CompositorWorkerGlobalScope.idl
+++ /dev/null
@@ -1,15 +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=CompositorWorker,
-    Global=CompositorWorker,
-    RuntimeEnabled=CompositorWorker,
-] interface CompositorWorkerGlobalScope : WorkerGlobalScope {
-    [PostMessage, RaisesException] void postMessage(any message, optional sequence<Transferable> transfer);
-    attribute EventHandler onmessage;
-
-    long requestAnimationFrame(FrameRequestCallback callback);
-    void cancelAnimationFrame(long handle);
-};
diff --git a/modules/compositorworker/WindowAnimationWorklet.idl b/modules/compositorworker/WindowAnimationWorklet.idl
new file mode 100644
index 0000000..071ccd6
--- /dev/null
+++ b/modules/compositorworker/WindowAnimationWorklet.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=WindowAnimationWorklet,
+    RuntimeEnabled=AnimationWorklet
+] partial interface Window {
+    readonly attribute Worklet animationWorklet;
+};
diff --git a/modules/compositorworker/WorkletAnimation.idl b/modules/compositorworker/WorkletAnimation.idl
new file mode 100644
index 0000000..e2afda4
--- /dev/null
+++ b/modules/compositorworker/WorkletAnimation.idl
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium 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/animation-worklet/#worklet-animation-desc
+
+// TODO(smcgruer): Update constructor to match latest spec.
+[
+    Constructor(DOMString animatorName,
+                sequence<KeyframeEffectReadOnly> effects,
+                sequence<(DocumentTimeline or ScrollTimeline)> timelines,
+                SerializedScriptValue options),
+    RaisesException=Constructor,
+    RuntimeEnabled=AnimationWorklet
+] interface WorkletAnimation {
+  readonly attribute AnimationPlayState playState;
+  void play();
+  void cancel();
+};
diff --git a/modules/cookie_store/CookieListItem.idl b/modules/cookie_store/CookieListItem.idl
new file mode 100644
index 0000000..a886361
--- /dev/null
+++ b/modules/cookie_store/CookieListItem.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/WICG/async-cookies-api/blob/gh-pages/explainer.md
+
+dictionary CookieListItem {
+  DOMString name;
+  DOMString value;
+};
+
+typedef sequence<CookieListItem> CookieList;
diff --git a/modules/cookie_store/CookieStore.idl b/modules/cookie_store/CookieStore.idl
new file mode 100644
index 0000000..04aa7d9
--- /dev/null
+++ b/modules/cookie_store/CookieStore.idl
@@ -0,0 +1,20 @@
+// Copyright 2017 The Chromium 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/WICG/async-cookies-api/blob/gh-pages/explainer.md
+
+[
+  Exposed=Window,
+  RuntimeEnabled=AsyncCookies
+] interface CookieStore {
+  // https://github.com/WICG/async-cookies-api/blob/gh-pages/explainer.md#reading
+  [CallWith=ScriptState, RaisesException] Promise<CookieList?> getAll(
+      optional CookieStoreGetOptions options);
+
+  // https://github.com/WICG/async-cookies-api/blob/gh-pages/explainer.md#writing
+  [CallWith=ScriptState, RaisesException] Promise<void> set(
+      DOMString name, DOMString value, optional CookieStoreSetOptions options);
+
+  // TODO(crbug.com/729800): Implement the other operations in the spec.
+};
diff --git a/modules/cookie_store/CookieStoreGetOptions.idl b/modules/cookie_store/CookieStoreGetOptions.idl
new file mode 100644
index 0000000..b7f3ebb
--- /dev/null
+++ b/modules/cookie_store/CookieStoreGetOptions.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/WICG/async-cookies-api/blob/gh-pages/explainer.md
+
+dictionary CookieStoreGetOptions {
+  // TODO(crbug.com/729800): Implement the members in the specification.
+};
diff --git a/modules/cookie_store/CookieStoreSetOptions.idl b/modules/cookie_store/CookieStoreSetOptions.idl
new file mode 100644
index 0000000..d6ee7d9
--- /dev/null
+++ b/modules/cookie_store/CookieStoreSetOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/WICG/async-cookies-api/blob/gh-pages/explainer.md
+
+dictionary CookieStoreSetOptions {
+  // TODO(crbug.com/729800): Implement the other members in the specification.
+
+  DOMTimeStamp? expires = null;
+};
diff --git a/modules/cookie_store/WindowCookieStore.idl b/modules/cookie_store/WindowCookieStore.idl
new file mode 100644
index 0000000..70f6518
--- /dev/null
+++ b/modules/cookie_store/WindowCookieStore.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/WICG/async-cookies-api/blob/gh-pages/explainer.md
+
+[
+    RuntimeEnabled=AsyncCookies,
+    ImplementedAs=GlobalCookieStore
+] partial interface Window {
+    [Replaceable, SameObject] readonly attribute CookieStore cookieStore;
+};
diff --git a/modules/credentialmanager/AuthenticatorAssertionResponse.idl b/modules/credentialmanager/AuthenticatorAssertionResponse.idl
new file mode 100644
index 0000000..a88a613
--- /dev/null
+++ b/modules/credentialmanager/AuthenticatorAssertionResponse.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#authenticatorassertionresponse
+
+[
+    RuntimeEnabled=WebAuth,
+    SecureContext
+] interface AuthenticatorAssertionResponse : AuthenticatorResponse {
+    readonly attribute ArrayBuffer authenticatorData;
+    readonly attribute ArrayBuffer signature;
+};
diff --git a/modules/credentialmanager/AuthenticatorAttestationResponse.idl b/modules/credentialmanager/AuthenticatorAttestationResponse.idl
new file mode 100644
index 0000000..f203582
--- /dev/null
+++ b/modules/credentialmanager/AuthenticatorAttestationResponse.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#authenticatorattestationresponse
+
+[
+    RuntimeEnabled=WebAuth,
+    SecureContext
+] interface AuthenticatorAttestationResponse : AuthenticatorResponse {
+    readonly attribute ArrayBuffer attestationObject;
+};
diff --git a/modules/credentialmanager/AuthenticatorResponse.idl b/modules/credentialmanager/AuthenticatorResponse.idl
new file mode 100644
index 0000000..b10dc2e
--- /dev/null
+++ b/modules/credentialmanager/AuthenticatorResponse.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#authenticatorresponse
+
+[
+    RuntimeEnabled=WebAuth,
+    SecureContext
+] interface AuthenticatorResponse {
+    readonly attribute ArrayBuffer clientDataJSON;
+};
diff --git a/modules/credentialmanager/AuthenticatorSelectionCriteria.idl b/modules/credentialmanager/AuthenticatorSelectionCriteria.idl
new file mode 100644
index 0000000..b2a1528
--- /dev/null
+++ b/modules/credentialmanager/AuthenticatorSelectionCriteria.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#enumdef-authenticatorattachment
+
+enum Attachment {
+  "platform",
+  "cross-platform"
+};
+
+// https://www.w3.org/TR/2017/WD-webauthn-20170505/#dictdef-authenticatorselectioncriteria
+
+dictionary AuthenticatorSelectionCriteria {
+  Attachment attachment;
+  boolean requireResidentKey = false;
+};
diff --git a/modules/credentialmanager/CollectedClientData.idl b/modules/credentialmanager/CollectedClientData.idl
new file mode 100644
index 0000000..01ac885
--- /dev/null
+++ b/modules/credentialmanager/CollectedClientData.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://www.w3.org/TR/2017/WD-webauthn-20170505/#dictdef-collectedclientdata
+
+dictionary CollectedClientData {
+    required DOMString challenge;
+    required DOMString origin;
+    required DOMString hashAlg;
+    DOMString tokenBindingId;
+    // TODO(crbug.com/733033): Add extension support
+};
diff --git a/modules/credentialmanager/Credential.idl b/modules/credentialmanager/Credential.idl
index 27a73ae..01b853e 100644
--- a/modules/credentialmanager/Credential.idl
+++ b/modules/credentialmanager/Credential.idl
@@ -2,17 +2,10 @@
 // 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/#credential
+// https://w3c.github.io/webappsec-credential-management/#credential
 
-[
-    RuntimeEnabled=CredentialManager,
-    GarbageCollected,
-    Exposed=Window
-] interface Credential {
-    readonly attribute DOMString id;
+[Exposed=Window, SecureContext]
+interface Credential {
+    readonly attribute USVString id;
     readonly attribute DOMString type;
-
-    // TODO(mkwst): These should be on LocallyStoredCredential.
-    readonly attribute DOMString name;
-    readonly attribute DOMString iconURL;
 };
diff --git a/modules/credentialmanager/CredentialCreationOptions.idl b/modules/credentialmanager/CredentialCreationOptions.idl
new file mode 100644
index 0000000..6a3cf46
--- /dev/null
+++ b/modules/credentialmanager/CredentialCreationOptions.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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-credential-management/#dictdef-credentialcreationoptions
+// https://w3c.github.io/webappsec-credential-management/#dictdef-credentialcreationoptions0
+// https://w3c.github.io/webappsec-credential-management/#dictdef-credentialcreationoptions1
+
+typedef (PasswordCredentialData or HTMLFormElement) PasswordCredentialInit;
+
+dictionary CredentialCreationOptions {
+    PasswordCredentialInit? password;
+    FederatedCredentialInit? federated;
+    MakeCredentialOptions? publicKey;
+};
diff --git a/modules/credentialmanager/CredentialData.idl b/modules/credentialmanager/CredentialData.idl
index 68d5363..55c2f8f 100644
--- a/modules/credentialmanager/CredentialData.idl
+++ b/modules/credentialmanager/CredentialData.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://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-credentialdata
+// https://w3c.github.io/webappsec-credential-management/#dictdef-credentialdata
 
 dictionary CredentialData {
     DOMString id;
diff --git a/modules/credentialmanager/CredentialRequestOptions.idl b/modules/credentialmanager/CredentialRequestOptions.idl
index 0e5902a..7cab340 100644
--- a/modules/credentialmanager/CredentialRequestOptions.idl
+++ b/modules/credentialmanager/CredentialRequestOptions.idl
@@ -2,11 +2,29 @@
 // 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-credentialrequestoptions
+// https://w3c.github.io/webappsec-credential-management/#dictdef-credentialrequestoptions
+
+enum CredentialMediationRequirement {
+  "silent",
+  "optional",
+  "required"
+};
 
 dictionary CredentialRequestOptions {
-    FederatedCredentialRequestOptions federated;
+    FederatedCredentialRequestOptions? federated;
 
     boolean password = false;
-    boolean unmediated = false;
+    // Defaults to false. This is not set here to detect when both 'unmediated'
+    // and 'mediation' are user provided, which results in a warning if they
+    // contradict each other.
+    [DeprecateAs=CredentialManagerCredentialRequestOptionsUnmediated] boolean
+    unmediated;
+    // Defaults to "optional". This is not set here to detect when both
+    // 'unmediated' and 'mediation' are user provided, which results in a
+    // warning if they contradict each other.
+    // TODO(http://crbug.com/715077): Set the default here when 'unmediated' is
+    // removed.
+    CredentialMediationRequirement mediation;
+
+    PublicKeyCredentialRequestOptions? publicKey;
 };
diff --git a/modules/credentialmanager/CredentialUserData.idl b/modules/credentialmanager/CredentialUserData.idl
new file mode 100644
index 0000000..970140e
--- /dev/null
+++ b/modules/credentialmanager/CredentialUserData.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/webappsec-credential-management/#credentialuserdata
+
+[NoInterfaceObject]
+interface CredentialUserData {
+    readonly attribute USVString name;
+    readonly attribute USVString iconURL;
+};
diff --git a/modules/credentialmanager/CredentialsContainer.idl b/modules/credentialmanager/CredentialsContainer.idl
index dc7c109..61af179 100644
--- a/modules/credentialmanager/CredentialsContainer.idl
+++ b/modules/credentialmanager/CredentialsContainer.idl
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    RuntimeEnabled=CredentialManager,
-    GarbageCollected
-] interface CredentialsContainer {
+// https://w3c.github.io/webappsec-credential-management/#credentialscontainer
+
+[Exposed=Window, SecureContext]
+interface CredentialsContainer {
     [CallWith=ScriptState, MeasureAs=CredentialManagerGet] Promise get(optional CredentialRequestOptions options);
     [CallWith=ScriptState, MeasureAs=CredentialManagerStore] Promise store(Credential credential);
-    [CallWith=ScriptState, MeasureAs=CredentialManagerRequireUserMediation] Promise requireUserMediation();
+    [CallWith=ScriptState, RaisesException, MeasureAs=CredentialManagerCreate] Promise create(optional CredentialCreationOptions options);
+    [CallWith=ScriptState, MeasureAs=CredentialManagerPreventSilentAccess] Promise preventSilentAccess();
+    [CallWith=ScriptState, DeprecateAs=CredentialManagerRequireUserMediation] Promise requireUserMediation();
 };
diff --git a/modules/credentialmanager/FederatedCredential.idl b/modules/credentialmanager/FederatedCredential.idl
index f72009a..efd7e22 100644
--- a/modules/credentialmanager/FederatedCredential.idl
+++ b/modules/credentialmanager/FederatedCredential.idl
@@ -2,16 +2,17 @@
 // 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/#federatedcredential
+// https://w3c.github.io/webappsec-credential-management/#federatedcredential
 
 [
-    RuntimeEnabled=CredentialManager,
     RaisesException=Constructor,
-    Constructor(FederatedCredentialData data),
-    Exposed=Window
+    Constructor(FederatedCredentialInit data),
+    Exposed=Window,
+    SecureContext
 ] interface FederatedCredential : Credential {
     readonly attribute USVString provider;
 
     // TODO(mkwst): We don't really support this yet; it always returns ''.
     readonly attribute DOMString? protocol;
 };
+FederatedCredential implements CredentialUserData;
diff --git a/modules/credentialmanager/FederatedCredentialData.idl b/modules/credentialmanager/FederatedCredentialData.idl
deleted file mode 100644
index e9c92cb..0000000
--- a/modules/credentialmanager/FederatedCredentialData.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/webappsec/specs/credentialmanagement/#dictdef-federatedcredentialdata
-
-dictionary FederatedCredentialData : LocallyStoredCredentialData {
-    USVString provider;
-};
diff --git a/modules/credentialmanager/FederatedCredentialInit.idl b/modules/credentialmanager/FederatedCredentialInit.idl
new file mode 100644
index 0000000..4e4fff4
--- /dev/null
+++ b/modules/credentialmanager/FederatedCredentialInit.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/webappsec-credential-management/#dictdef-federatedcredentialinit
+
+dictionary FederatedCredentialInit : CredentialData {
+  USVString name;
+  USVString iconURL;
+  required USVString provider;
+  DOMString protocol;
+};
diff --git a/modules/credentialmanager/FederatedCredentialRequestOptions.idl b/modules/credentialmanager/FederatedCredentialRequestOptions.idl
index d1eea0f..4f7937a 100644
--- a/modules/credentialmanager/FederatedCredentialRequestOptions.idl
+++ b/modules/credentialmanager/FederatedCredentialRequestOptions.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://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-federatedcredentialrequestoptions
+// https://w3c.github.io/webappsec-credential-management/#dictdef-federatedcredentialrequestoptions
 
 dictionary FederatedCredentialRequestOptions {
     sequence<DOMString> providers;
diff --git a/modules/credentialmanager/FormDataOptions.idl b/modules/credentialmanager/FormDataOptions.idl
index 76ddd9c..680a79e 100644
--- a/modules/credentialmanager/FormDataOptions.idl
+++ b/modules/credentialmanager/FormDataOptions.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://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-formdataoptions
+// TODO: Add specification URL.
 
 dictionary FormDataOptions {
     DOMString idName = "username";
diff --git a/modules/credentialmanager/LocallyStoredCredentialData.idl b/modules/credentialmanager/LocallyStoredCredentialData.idl
deleted file mode 100644
index 2d127f9..0000000
--- a/modules/credentialmanager/LocallyStoredCredentialData.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.
-
-// https://w3c.github.io/webappsec/specs/credentialmanagement/#dictdef-locallystoredcredentialdata
-
-dictionary LocallyStoredCredentialData : CredentialData {
-    DOMString name;
-    DOMString iconURL;
-};
diff --git a/modules/credentialmanager/MakeCredentialOptions.idl b/modules/credentialmanager/MakeCredentialOptions.idl
new file mode 100644
index 0000000..b318e81
--- /dev/null
+++ b/modules/credentialmanager/MakeCredentialOptions.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#dictdef-makecredentialoptions
+
+dictionary MakeCredentialOptions {
+    required PublicKeyCredentialEntity rp;
+    required PublicKeyCredentialUserEntity user;
+    required BufferSource challenge;
+    required sequence<PublicKeyCredentialParameters> parameters;
+    unsigned long timeout;
+    sequence<PublicKeyCredentialDescriptor> excludeList = [];
+    AuthenticatorSelectionCriteria authenticatorSelection;
+    // TODO(crbug.com/733033): Add extension support
+};
diff --git a/modules/credentialmanager/NavigatorCredentials.idl b/modules/credentialmanager/NavigatorCredentials.idl
index 35b163b..f41a5e6 100644
--- a/modules/credentialmanager/NavigatorCredentials.idl
+++ b/modules/credentialmanager/NavigatorCredentials.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=CredentialManager,
+    ImplementedAs=NavigatorCredentials
 ] partial interface Navigator {
-    readonly attribute CredentialsContainer credentials;
+    [SecureContext, SameObject] readonly attribute CredentialsContainer credentials;
 };
diff --git a/modules/credentialmanager/PasswordCredential.idl b/modules/credentialmanager/PasswordCredential.idl
index 2e91a60..f9508c9 100644
--- a/modules/credentialmanager/PasswordCredential.idl
+++ b/modules/credentialmanager/PasswordCredential.idl
@@ -2,15 +2,20 @@
 // 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-credential-management/#passwordcredential
+
 typedef (FormData or URLSearchParams) CredentialBodyType;
 
 [
-    RuntimeEnabled=CredentialManager,
     RaisesException=Constructor,
     Constructor(PasswordCredentialData data),
+    Constructor(HTMLFormElement form),
     Exposed=Window,
+    SecureContext
 ] interface PasswordCredential : Credential {
-    attribute USVString idName;
-    attribute USVString passwordName;
-    attribute CredentialBodyType? additionalData;
+    [DeprecateAs=CredentialManagerIdName] attribute USVString idName;
+    [DeprecateAs=CredentialManagerPasswordName] attribute USVString passwordName;
+    [DeprecateAs=CredentialManagerAdditionalData] attribute CredentialBodyType? additionalData;
+    readonly attribute DOMString password;
 };
+PasswordCredential implements CredentialUserData;
diff --git a/modules/credentialmanager/PasswordCredentialData.idl b/modules/credentialmanager/PasswordCredentialData.idl
index 8739fe6..3c6b2d9 100644
--- a/modules/credentialmanager/PasswordCredentialData.idl
+++ b/modules/credentialmanager/PasswordCredentialData.idl
@@ -2,8 +2,10 @@
 // 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-passwordcredentialdata
+// https://w3c.github.io/webappsec-credential-management/#dictdef-passwordcredentialdata
 
-dictionary PasswordCredentialData : LocallyStoredCredentialData {
-    DOMString password;
+dictionary PasswordCredentialData : CredentialData {
+    USVString name;
+    USVString iconURL;
+    required USVString password;
 };
diff --git a/modules/credentialmanager/PublicKeyCredential.idl b/modules/credentialmanager/PublicKeyCredential.idl
new file mode 100644
index 0000000..c8c8127
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredential.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#publickeycredential
+
+[
+    RuntimeEnabled=WebAuth,
+    SecureContext,
+    Exposed=Window
+] interface PublicKeyCredential : Credential {
+    [SameObject] readonly attribute ArrayBuffer           rawId;
+    [SameObject] readonly attribute AuthenticatorResponse response;
+    // TODO(crbug.com/733033): Add extension support
+};
diff --git a/modules/credentialmanager/PublicKeyCredentialDescriptor.idl b/modules/credentialmanager/PublicKeyCredentialDescriptor.idl
new file mode 100644
index 0000000..0a3e924
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredentialDescriptor.idl
@@ -0,0 +1,19 @@
+// 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://www.w3.org/TR/2017/WD-webauthn-20170505/#enumdef-authenticatortransport
+
+enum Transport {
+    "usb",
+    "nfc",
+    "ble"
+};
+
+// https://w3c.github.io/webauthn/#dictdef-publickeycredentialdescriptor
+
+dictionary PublicKeyCredentialDescriptor {
+    required PublicKeyCredentialType type;
+    required BufferSource id;
+    sequence<Transport> transports;
+};
diff --git a/modules/credentialmanager/PublicKeyCredentialEntity.idl b/modules/credentialmanager/PublicKeyCredentialEntity.idl
new file mode 100644
index 0000000..0e15dc9
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredentialEntity.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#dictdef-publickeycredentialentity
+
+dictionary PublicKeyCredentialEntity {
+    DOMString id;
+    DOMString name;
+    USVString icon;
+};
diff --git a/modules/credentialmanager/PublicKeyCredentialParameters.idl b/modules/credentialmanager/PublicKeyCredentialParameters.idl
new file mode 100644
index 0000000..82a3aeb
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredentialParameters.idl
@@ -0,0 +1,20 @@
+// 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://www.w3.org/TR/2017/WD-webauthn-20170505/#enumdef-publickeycredentialtype
+
+enum PublicKeyCredentialType {
+    "public-key"
+};
+
+// https://w3c.github.io/webauthn/#alg-identifier
+
+typedef long COSEAlgorithmIdentifier;
+
+// https://www.w3.org/TR/2017/WD-webauthn-20170505/#dictdef-publickeycredentialparameters
+
+dictionary PublicKeyCredentialParameters {
+    required PublicKeyCredentialType type;
+    required COSEAlgorithmIdentifier algorithm;
+};
diff --git a/modules/credentialmanager/PublicKeyCredentialRequestOptions.idl b/modules/credentialmanager/PublicKeyCredentialRequestOptions.idl
new file mode 100644
index 0000000..1386f77
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredentialRequestOptions.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://www.w3.org/TR/2017/WD-webauthn-20170505/#dictdef-publickeycredentialrequestoptions
+
+dictionary PublicKeyCredentialRequestOptions {
+    required BufferSource challenge;
+    unsigned long timeout;
+    USVString rpId;
+    sequence <PublicKeyCredentialDescriptor> allowList = [];
+    // TODO(crbug.com/733033): Add extension support
+};
diff --git a/modules/credentialmanager/PublicKeyCredentialUserEntity.idl b/modules/credentialmanager/PublicKeyCredentialUserEntity.idl
new file mode 100644
index 0000000..c792c80
--- /dev/null
+++ b/modules/credentialmanager/PublicKeyCredentialUserEntity.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/2017/WD-webauthn-20170505/#dictdef-publickeycredentialuserentity
+
+dictionary PublicKeyCredentialUserEntity : PublicKeyCredentialEntity {
+    DOMString displayName;
+};
diff --git a/modules/crypto/Crypto.idl b/modules/crypto/Crypto.idl
index b754187..01f7bc8 100644
--- a/modules/crypto/Crypto.idl
+++ b/modules/crypto/Crypto.idl
@@ -26,11 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://w3c.github.io/webcrypto/Overview.html#crypto-interface
+
 [
-    GarbageCollected,
     Exposed=(Window,Worker)
 ] interface Crypto {
     [RaisesException, MeasureAs=CryptoGetRandomValues] ArrayBufferView getRandomValues(ArrayBufferView array);
 
-    readonly attribute SubtleCrypto subtle;
+    [SecureContext] readonly attribute SubtleCrypto subtle;
 };
diff --git a/modules/crypto/CryptoKey.idl b/modules/crypto/CryptoKey.idl
index 3fcabf1..4063752 100644
--- a/modules/crypto/CryptoKey.idl
+++ b/modules/crypto/CryptoKey.idl
@@ -28,12 +28,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://w3c.github.io/webcrypto/Overview.html#cryptokey-interface
+
 [
-    GarbageCollected,
     Exposed=(Window,Worker)
 ] interface CryptoKey {
     readonly attribute DOMString type;
     readonly attribute boolean extractable;
     [CallWith=ScriptState] readonly attribute object algorithm;
-    readonly attribute DOMString[] usages;
+    [CallWith=ScriptState] readonly attribute object usages;
 };
diff --git a/modules/crypto/SubtleCrypto.idl b/modules/crypto/SubtleCrypto.idl
index 04beea2..c5c75b0 100644
--- a/modules/crypto/SubtleCrypto.idl
+++ b/modules/crypto/SubtleCrypto.idl
@@ -28,15 +28,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface
+// https://w3c.github.io/webcrypto/Overview.html#subtlecrypto-interface
 
 typedef DOMString KeyFormat;
 typedef DOMString KeyUsage;
 typedef (Dictionary or DOMString) AlgorithmIdentifier;
 
 [
-    GarbageCollected,
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] 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/crypto/WindowCrypto.idl b/modules/crypto/WindowCrypto.idl
index b80f161..28bd167 100644
--- a/modules/crypto/WindowCrypto.idl
+++ b/modules/crypto/WindowCrypto.idl
@@ -28,8 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://w3c.github.io/webcrypto/Overview.html#crypto-interface
+
 [
-    ImplementedAs=DOMWindowCrypto,
+    ImplementedAs=DOMWindowCrypto
 ] partial interface Window {
     readonly attribute Crypto crypto;
 };
diff --git a/modules/crypto/WorkerGlobalScopeCrypto.idl b/modules/crypto/WorkerGlobalScopeCrypto.idl
index 86786bf..c180ef3 100644
--- a/modules/crypto/WorkerGlobalScopeCrypto.idl
+++ b/modules/crypto/WorkerGlobalScopeCrypto.idl
@@ -28,6 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface WorkerGlobalScope {
+// https://w3c.github.io/webcrypto/Overview.html#crypto-interface
+
+[
+    ImplementedAs=WorkerGlobalScopeCrypto
+] partial interface WorkerGlobalScope {
     readonly attribute Crypto crypto;
 };
diff --git a/modules/csspaint/CSSPaintWorklet.idl b/modules/csspaint/CSSPaintWorklet.idl
new file mode 100644
index 0000000..a1fbc67
--- /dev/null
+++ b/modules/csspaint/CSSPaintWorklet.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://drafts.css-houdini.org/css-paint-api/#dom-css-paintworklet
+
+[
+    ImplementedAs=CSSPaintWorklet,
+    RuntimeEnabled=CSSPaintAPI
+] partial interface CSS {
+    [CallWith=ScriptState] static readonly attribute Worklet paintWorklet;
+};
diff --git a/modules/csspaint/PaintRenderingContext2D.idl b/modules/csspaint/PaintRenderingContext2D.idl
new file mode 100644
index 0000000..7acb4a3
--- /dev/null
+++ b/modules/csspaint/PaintRenderingContext2D.idl
@@ -0,0 +1,82 @@
+// 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/css-paint-api/#paintrenderingcontext2d
+
+[
+    Exposed=PaintWorklet,
+    RuntimeEnabled=CSSPaintAPI
+] interface PaintRenderingContext2D {
+    // state
+    void save(); // push state on state stack
+    void restore(); // pop state stack and restore state
+
+    // transformations (default transform is the identity matrix)
+    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute SVGMatrix currentTransform;
+    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 double globalAlpha; // (default 1.0)
+    attribute DOMString globalCompositeOperation; // (default source-over)
+    attribute DOMString filter;
+
+    // image smoothing
+    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(double x0, double y0, double x1, double y1);
+    [RaisesException] CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
+    [CallWith=ScriptState, RaisesException] CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=NullString] DOMString repetitionType);
+
+    // shadows
+    attribute unrestricted double shadowOffsetX;
+    attribute unrestricted double shadowOffsetY;
+    attribute unrestricted double shadowBlur;
+    attribute DOMString shadowColor;
+
+    // rects
+    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 CanvasPath)
+    void beginPath();
+    void fill(optional CanvasFillRule winding);
+    void fill(Path2D path, optional CanvasFillRule winding);
+    void stroke();
+    void stroke(Path2D path);
+
+    void clip(optional CanvasFillRule winding);
+    void clip(Path2D path, optional CanvasFillRule winding);
+    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);
+
+    // drawing images
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y);
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    [CallWith=ScriptState, 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);
+
+    // FIXME: factor out to CanvasDrawingStyles
+    // line caps/joins
+    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 double> dash);
+    sequence<unrestricted double> getLineDash();
+    attribute unrestricted double lineDashOffset;
+};
+PaintRenderingContext2D implements CanvasPath;
diff --git a/modules/csspaint/PaintRenderingContext2DSettings.idl b/modules/csspaint/PaintRenderingContext2DSettings.idl
new file mode 100644
index 0000000..a1ff9be
--- /dev/null
+++ b/modules/csspaint/PaintRenderingContext2DSettings.idl
@@ -0,0 +1,7 @@
+// Copyright 2017 The Chromium 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 PaintRenderingContext2DSettings {
+    boolean alpha = true;
+};
diff --git a/modules/csspaint/PaintSize.idl b/modules/csspaint/PaintSize.idl
new file mode 100644
index 0000000..d7d9a81
--- /dev/null
+++ b/modules/csspaint/PaintSize.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/css-paint-api/#paintworkletglobalscope
+
+[
+    Exposed=PaintWorklet,
+    RuntimeEnabled=CSSPaintAPI
+] interface PaintSize {
+    readonly attribute double width;
+    readonly attribute double height;
+};
diff --git a/modules/csspaint/PaintWorkletGlobalScope.idl b/modules/csspaint/PaintWorkletGlobalScope.idl
new file mode 100644
index 0000000..88bfdc1
--- /dev/null
+++ b/modules/csspaint/PaintWorkletGlobalScope.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.
+
+// https://drafts.css-houdini.org/css-paint-api/#paintworkletglobalscope
+
+[
+    Exposed=PaintWorklet,
+    Global=(Worklet,PaintWorklet),
+    RuntimeEnabled=CSSPaintAPI
+] interface PaintWorkletGlobalScope : WorkletGlobalScope {
+    readonly attribute unrestricted double devicePixelRatio;
+    [RaisesException] void registerPaint(DOMString name, Function paintCtor);
+};
diff --git a/modules/device_light/DeviceLightEvent.idl b/modules/device_light/DeviceLightEvent.idl
deleted file mode 100644
index 6a1f13f..0000000
--- a/modules/device_light/DeviceLightEvent.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.
-
-// http://w3c.github.io/ambient-light/#idl-def-DeviceLightEvent
-
-[
-    RuntimeEnabled=DeviceLight,
-    Constructor(DOMString type, optional DeviceLightEventInit eventInitDict),
-] interface DeviceLightEvent : Event {
-    readonly attribute unrestricted double value;
-};
diff --git a/modules/device_light/DeviceLightEventInit.idl b/modules/device_light/DeviceLightEventInit.idl
deleted file mode 100644
index c7245e6..0000000
--- a/modules/device_light/DeviceLightEventInit.idl
+++ /dev/null
@@ -1,9 +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://w3c.github.io/ambient-light/#idl-def-DeviceLightEvent
-
-dictionary DeviceLightEventInit : EventInit {
-    unrestricted double value;
-};
diff --git a/modules/device_light/WindowDeviceLight.idl b/modules/device_light/WindowDeviceLight.idl
deleted file mode 100644
index 1b8cd79..0000000
--- a/modules/device_light/WindowDeviceLight.idl
+++ /dev/null
@@ -1,10 +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.
-
-[
-    RuntimeEnabled=DeviceLight,
-    ImplementedAs=DOMWindowDeviceLight
-] partial interface Window {
-    attribute EventHandler ondevicelight;
-};
diff --git a/modules/device_orientation/DeviceAcceleration.idl b/modules/device_orientation/DeviceAcceleration.idl
index 1b2c23e..f1bc23d 100644
--- a/modules/device_orientation/DeviceAcceleration.idl
+++ b/modules/device_orientation/DeviceAcceleration.idl
@@ -23,10 +23,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+// https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface DeviceAcceleration {
     readonly attribute double? x;
diff --git a/modules/device_orientation/DeviceAccelerationInit.idl b/modules/device_orientation/DeviceAccelerationInit.idl
new file mode 100644
index 0000000..85ece50
--- /dev/null
+++ b/modules/device_orientation/DeviceAccelerationInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/deviceorientation/spec-source-orientation.html#devicemotion
+
+dictionary DeviceAccelerationInit {
+  double? x = null;
+  double? y = null;
+  double? z = null;
+};
diff --git a/modules/device_orientation/DeviceMotionEvent.idl b/modules/device_orientation/DeviceMotionEvent.idl
index 138f704..9d4636b 100644
--- a/modules/device_orientation/DeviceMotionEvent.idl
+++ b/modules/device_orientation/DeviceMotionEvent.idl
@@ -23,22 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+// https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
 
-// TODO(philipj): DeviceMotionEvent should have a constructor.
+[Constructor(DOMString type, optional DeviceMotionEventInit eventInitDict)]
 interface DeviceMotionEvent : Event {
     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,
-                                                 [Default=Undefined] optional DeviceAcceleration acceleration,
-                                                 [Default=Undefined] optional DeviceAcceleration accelerationIncludingGravity,
-                                                 [Default=Undefined] optional DeviceRotationRate rotationRate,
-                                                 [Default=Undefined] optional double interval);
+    readonly attribute double interval;
 };
diff --git a/modules/device_orientation/DeviceMotionEventInit.idl b/modules/device_orientation/DeviceMotionEventInit.idl
new file mode 100644
index 0000000..5995c96
--- /dev/null
+++ b/modules/device_orientation/DeviceMotionEventInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/deviceorientation/spec-source-orientation.html#devicemotion
+
+dictionary DeviceMotionEventInit : EventInit {
+  DeviceAccelerationInit? acceleration;
+  DeviceAccelerationInit? accelerationIncludingGravity;
+  DeviceRotationRateInit? rotationRate;
+  double interval = 0;
+};
diff --git a/modules/device_orientation/DeviceOrientationEvent.idl b/modules/device_orientation/DeviceOrientationEvent.idl
index e8e0c9d..14a53d6 100644
--- a/modules/device_orientation/DeviceOrientationEvent.idl
+++ b/modules/device_orientation/DeviceOrientationEvent.idl
@@ -23,23 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation
+// https://w3c.github.io/deviceorientation/spec-source-orientation.html#deviceorientation
 
-// TODO(philipj): DeviceOrientationEvent should have a constructor.
+[Constructor(DOMString type, optional DeviceOrientationEventInit eventInitDict)]
 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,
-                                              [Default=Undefined] optional double? alpha,
-                                              [Default=Undefined] optional double? beta,
-                                              [Default=Undefined] optional double? gamma,
-                                              [Default=Undefined] optional boolean? absolute);
+    readonly attribute boolean absolute;
 };
diff --git a/modules/device_orientation/DeviceOrientationEventInit.idl b/modules/device_orientation/DeviceOrientationEventInit.idl
new file mode 100644
index 0000000..12d5761
--- /dev/null
+++ b/modules/device_orientation/DeviceOrientationEventInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/deviceorientation/spec-source-orientation.html#deviceorientation
+
+dictionary DeviceOrientationEventInit : EventInit {
+  double? alpha = null;
+  double? beta = null;
+  double? gamma = null;
+  boolean absolute = false;
+};
diff --git a/modules/device_orientation/DeviceRotationRate.idl b/modules/device_orientation/DeviceRotationRate.idl
index a8c780b..78ea0b6 100644
--- a/modules/device_orientation/DeviceRotationRate.idl
+++ b/modules/device_orientation/DeviceRotationRate.idl
@@ -23,10 +23,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
+// https://w3c.github.io/deviceorientation/spec-source-orientation.html#devicemotion
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface DeviceRotationRate {
     readonly attribute double? alpha;
diff --git a/modules/device_orientation/DeviceRotationRateInit.idl b/modules/device_orientation/DeviceRotationRateInit.idl
new file mode 100644
index 0000000..e08ef7e
--- /dev/null
+++ b/modules/device_orientation/DeviceRotationRateInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/deviceorientation/spec-source-orientation.html#deviceorientation
+
+dictionary DeviceRotationRateInit {
+  double? alpha = null;
+  double? beta = null;
+  double? gamma = null;
+};
diff --git a/modules/device_orientation/WindowDeviceOrientation.idl b/modules/device_orientation/WindowDeviceOrientation.idl
index ccbcf55..b8fc188 100644
--- a/modules/device_orientation/WindowDeviceOrientation.idl
+++ b/modules/device_orientation/WindowDeviceOrientation.idl
@@ -6,5 +6,5 @@
     ImplementedAs=DOMWindowDeviceOrientation
 ] partial interface Window {
     attribute EventHandler ondeviceorientation;
-    [RuntimeEnabled=DeviceOrientationAbsolute] attribute EventHandler ondeviceorientationabsolute;
+    attribute EventHandler ondeviceorientationabsolute;
 };
diff --git a/modules/donottrack/NavigatorDoNotTrack.idl b/modules/donottrack/NavigatorDoNotTrack.idl
index 1f1b615..ef59beb 100644
--- a/modules/donottrack/NavigatorDoNotTrack.idl
+++ b/modules/donottrack/NavigatorDoNotTrack.idl
@@ -28,6 +28,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorDoNotTrack
+] partial interface Navigator {
     readonly attribute DOMString? doNotTrack;
 };
diff --git a/modules/encoding/TextDecodeOptions.idl b/modules/encoding/TextDecodeOptions.idl
index da115c4..ca6472c 100644
--- a/modules/encoding/TextDecodeOptions.idl
+++ b/modules/encoding/TextDecodeOptions.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://encoding.spec.whatwg.org/#textdecoder
+// https://encoding.spec.whatwg.org/#textdecoder
 
 dictionary TextDecodeOptions {
     boolean stream = false;
diff --git a/modules/encoding/TextDecoder.idl b/modules/encoding/TextDecoder.idl
index 6127555..9e1a9b6 100644
--- a/modules/encoding/TextDecoder.idl
+++ b/modules/encoding/TextDecoder.idl
@@ -32,7 +32,6 @@
     Exposed=(Window,Worker),
     Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
     RaisesException=Constructor,
-    GarbageCollected,
     MeasureAs=TextDecoderConstructor
 ] interface TextDecoder {
     readonly attribute DOMString encoding;
diff --git a/modules/encoding/TextDecoderOptions.idl b/modules/encoding/TextDecoderOptions.idl
index c222515..58c0103 100644
--- a/modules/encoding/TextDecoderOptions.idl
+++ b/modules/encoding/TextDecoderOptions.idl
@@ -2,11 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://encoding.spec.whatwg.org/#textdecoder
+// https://encoding.spec.whatwg.org/#textdecoder
 
-[
-    GarbageCollected
-] dictionary TextDecoderOptions {
+dictionary TextDecoderOptions {
     boolean fatal = false;
     boolean ignoreBOM = false;
 };
diff --git a/modules/encoding/TextEncoder.idl b/modules/encoding/TextEncoder.idl
index 8730de4..e18d109 100644
--- a/modules/encoding/TextEncoder.idl
+++ b/modules/encoding/TextEncoder.idl
@@ -30,10 +30,9 @@
 
 [
     Exposed=(Window,Worker),
-    Constructor(optional DOMString utfLabel = "utf-8"),
+    Constructor(),
     ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    GarbageCollected,
     MeasureAs=TextEncoderConstructor
 ] interface TextEncoder {
     readonly attribute DOMString encoding;
diff --git a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
index f096397..1c6bc5b 100644
--- a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
+++ b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
@@ -1,9 +1,11 @@
 // Copyright 2014 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-
-partial interface HTMLMediaElement {
-    [RuntimeEnabled=EncryptedMedia] readonly attribute MediaKeys mediaKeys;
-    [RuntimeEnabled=EncryptedMedia, CallWith=ScriptState] Promise setMediaKeys(MediaKeys? mediaKeys);
-    [RuntimeEnabled=EncryptedMedia] attribute EventHandler onencrypted;
+[
+    ImplementedAs=HTMLMediaElementEncryptedMedia
+] partial interface HTMLMediaElement {
+    readonly attribute MediaKeys mediaKeys;
+    [SecureContext, CallWith=ScriptState] Promise setMediaKeys(MediaKeys? mediaKeys);
+    attribute EventHandler onencrypted;
+    attribute EventHandler onwaitingforkey;
 };
diff --git a/modules/encryptedmedia/MediaEncryptedEvent.idl b/modules/encryptedmedia/MediaEncryptedEvent.idl
index ec07de9..7239a36 100644
--- a/modules/encryptedmedia/MediaEncryptedEvent.idl
+++ b/modules/encryptedmedia/MediaEncryptedEvent.idl
@@ -26,10 +26,8 @@
 // https://w3c.github.io/encrypted-media/#mediaencryptedevent
 
 [
-    Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict),
-    RuntimeEnabled=EncryptedMedia,
+    Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict)
 ] interface MediaEncryptedEvent : Event {
     readonly attribute DOMString initDataType;
     readonly attribute ArrayBuffer? initData;
 };
-
diff --git a/modules/encryptedmedia/MediaKeyMessageEvent.idl b/modules/encryptedmedia/MediaKeyMessageEvent.idl
index 1d9dbdb..5afa759 100644
--- a/modules/encryptedmedia/MediaKeyMessageEvent.idl
+++ b/modules/encryptedmedia/MediaKeyMessageEvent.idl
@@ -32,10 +32,8 @@
 };
 
 [
-    Constructor(DOMString type, optional MediaKeyMessageEventInit eventInitDict),
-    RuntimeEnabled=EncryptedMedia
+    Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict)
 ] interface MediaKeyMessageEvent : Event {
     readonly attribute MediaKeyMessageType messageType;
     readonly attribute ArrayBuffer message;
 };
-
diff --git a/modules/encryptedmedia/MediaKeyMessageEventInit.idl b/modules/encryptedmedia/MediaKeyMessageEventInit.idl
index a5e355d..1a8e92e 100644
--- a/modules/encryptedmedia/MediaKeyMessageEventInit.idl
+++ b/modules/encryptedmedia/MediaKeyMessageEventInit.idl
@@ -5,6 +5,6 @@
 // https://w3c.github.io/encrypted-media/#mediakeymessageevent
 
 dictionary MediaKeyMessageEventInit : EventInit {
-    MediaKeyMessageType messageType = "license-request";
-    ArrayBuffer message;
+    required MediaKeyMessageType messageType;
+    required ArrayBuffer message;
 };
diff --git a/modules/encryptedmedia/MediaKeySession.idl b/modules/encryptedmedia/MediaKeySession.idl
index 5c3e214..e16a995 100644
--- a/modules/encryptedmedia/MediaKeySession.idl
+++ b/modules/encryptedmedia/MediaKeySession.idl
@@ -24,15 +24,16 @@
  */
 
 [
-    DependentLifetime,
-    RuntimeEnabled=EncryptedMedia,
-    GarbageCollected,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface MediaKeySession : EventTarget {
     // session properties
     readonly attribute DOMString sessionId;
     readonly attribute unrestricted double expiration;
-    [CallWith=ScriptState] readonly attribute Promise closed;
+    [CallWith=ScriptState] readonly attribute Promise<void> closed;
     readonly attribute MediaKeyStatusMap keyStatuses;
+    attribute EventHandler onkeystatuseschange;
+    attribute EventHandler onmessage;
 
     // session initialization
     [CallWith=ScriptState] Promise<void> generateRequest(DOMString initDataType, BufferSource initData);
diff --git a/modules/encryptedmedia/MediaKeyStatusMap.idl b/modules/encryptedmedia/MediaKeyStatusMap.idl
index e5956a2..f6f363f 100644
--- a/modules/encryptedmedia/MediaKeyStatusMap.idl
+++ b/modules/encryptedmedia/MediaKeyStatusMap.idl
@@ -14,9 +14,9 @@
     "internal-error"
 };
 
-[
-    GarbageCollected,
-] interface MediaKeyStatusMap {
+interface MediaKeyStatusMap {
+    iterable <BufferSource, MediaKeyStatus>;
     readonly attribute unsigned long size;
-    readonly maplike <BufferSource, MediaKeyStatus>;
+    boolean has(BufferSource keyId);
+    [CallWith=ScriptState] any get(BufferSource keyId);
 };
diff --git a/modules/encryptedmedia/MediaKeySystemAccess.idl b/modules/encryptedmedia/MediaKeySystemAccess.idl
index 02069e7..44292eb 100644
--- a/modules/encryptedmedia/MediaKeySystemAccess.idl
+++ b/modules/encryptedmedia/MediaKeySystemAccess.idl
@@ -2,12 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface
+// https://w3c.github.io/encrypted-media/#mediakeysystemaccess-interface
 
-[
-    RuntimeEnabled=EncryptedMedia,
-    GarbageCollected,
-] interface MediaKeySystemAccess {
+interface MediaKeySystemAccess {
     readonly attribute DOMString keySystem;
     MediaKeySystemConfiguration getConfiguration();
     [CallWith=ScriptState] Promise<MediaKeys> createMediaKeys();
diff --git a/modules/encryptedmedia/MediaKeySystemConfiguration.idl b/modules/encryptedmedia/MediaKeySystemConfiguration.idl
index 2db1454..5261952 100644
--- a/modules/encryptedmedia/MediaKeySystemConfiguration.idl
+++ b/modules/encryptedmedia/MediaKeySystemConfiguration.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://w3c.github.io/encrypted-media/#idl-def-MediaKeySystemConfiguration
+// https://w3c.github.io/encrypted-media/#mediakeysystemconfiguration-dictionary
 
 enum MediaKeysRequirement {
     "required",
@@ -10,14 +10,12 @@
     "not-allowed"
 };
 
-[
-    RuntimeEnabled=EncryptedMedia
-] dictionary MediaKeySystemConfiguration {
-    sequence<DOMString> initDataTypes;
-    sequence<MediaKeySystemMediaCapability> audioCapabilities;
-    sequence<MediaKeySystemMediaCapability> videoCapabilities;
+dictionary MediaKeySystemConfiguration {
+    DOMString label = "";
+    sequence<DOMString> initDataTypes = [];
+    sequence<MediaKeySystemMediaCapability> audioCapabilities = [];
+    sequence<MediaKeySystemMediaCapability> videoCapabilities = [];
     MediaKeysRequirement distinctiveIdentifier = "optional";
     MediaKeysRequirement persistentState = "optional";
     sequence<DOMString> sessionTypes;
-    DOMString label;
 };
diff --git a/modules/encryptedmedia/MediaKeySystemMediaCapability.idl b/modules/encryptedmedia/MediaKeySystemMediaCapability.idl
index 4f06468..2895169 100644
--- a/modules/encryptedmedia/MediaKeySystemMediaCapability.idl
+++ b/modules/encryptedmedia/MediaKeySystemMediaCapability.idl
@@ -4,9 +4,7 @@
 
 // https://w3c.github.io/encrypted-media/#idl-def-MediaKeySystemMediaCapability
 
-[
-    RuntimeEnabled=EncryptedMedia
-] dictionary MediaKeySystemMediaCapability {
+dictionary MediaKeySystemMediaCapability {
     DOMString contentType = "";
     DOMString robustness = "";
 };
diff --git a/modules/encryptedmedia/MediaKeys.idl b/modules/encryptedmedia/MediaKeys.idl
index 8bf9389..a5fb5de 100644
--- a/modules/encryptedmedia/MediaKeys.idl
+++ b/modules/encryptedmedia/MediaKeys.idl
@@ -29,11 +29,11 @@
 };
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
-    RuntimeEnabled=EncryptedMedia,
-    GarbageCollected,
+    SecureContext
 ] interface MediaKeys {
     [CallWith=ScriptState, RaisesException] MediaKeySession createSession(optional MediaKeySessionType sessionType = "temporary");
 
-    [CallWith=ScriptState] Promise<void> setServerCertificate(BufferSource serverCertificate);
+    [CallWith=ScriptState] Promise<boolean> setServerCertificate(BufferSource serverCertificate);
 };
diff --git a/modules/encryptedmedia/MediaKeysGetStatusForPolicy.idl b/modules/encryptedmedia/MediaKeysGetStatusForPolicy.idl
new file mode 100644
index 0000000..0555f98
--- /dev/null
+++ b/modules/encryptedmedia/MediaKeysGetStatusForPolicy.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/WICG/media-capabilities/blob/master/eme-extension-policy-check.md
+
+[
+    ImplementedAs=MediaKeysGetStatusForPolicy,
+    RuntimeEnabled=EncryptedMediaHdcpPolicyCheck
+] partial interface MediaKeys {
+    [CallWith=ScriptState] Promise<MediaKeyStatus> getStatusForPolicy(MediaKeysPolicy policy);
+};
diff --git a/modules/encryptedmedia/MediaKeysPolicy.idl b/modules/encryptedmedia/MediaKeysPolicy.idl
new file mode 100644
index 0000000..845ff41
--- /dev/null
+++ b/modules/encryptedmedia/MediaKeysPolicy.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/WICG/media-capabilities/blob/master/eme-extension-policy-check.md
+
+[
+    Exposed=Window,
+    RuntimeEnabled=EncryptedMediaHdcpPolicyCheck,
+    Constructor(MediaKeysPolicyInit init)
+] interface MediaKeysPolicy {
+    readonly attribute DOMString minHdcpVersion;
+};
diff --git a/modules/encryptedmedia/MediaKeysPolicyInit.idl b/modules/encryptedmedia/MediaKeysPolicyInit.idl
new file mode 100644
index 0000000..d13abfa
--- /dev/null
+++ b/modules/encryptedmedia/MediaKeysPolicyInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/WICG/media-capabilities/blob/master/eme-extension-policy-check.md
+
+dictionary MediaKeysPolicyInit {
+    DOMString minHdcpVersion = "";
+};
diff --git a/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.idl b/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.idl
index e04f29a..a71acbe 100644
--- a/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.idl
+++ b/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.idl
@@ -5,7 +5,7 @@
 // https://w3c.github.io/encrypted-media/#navigator-extension-requestmediakeysystemaccess
 
 [
-    RuntimeEnabled=EncryptedMedia
+    ImplementedAs=NavigatorRequestMediaKeySystemAccess
 ] partial interface Navigator {
-    [CallWith=ScriptState] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfigurations);
+    [SecureContext, CallWith=ScriptState] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfigurations);
 };
diff --git a/modules/eventsource/EventSource.idl b/modules/eventsource/EventSource.idl
new file mode 100644
index 0000000..3030a55
--- /dev/null
+++ b/modules/eventsource/EventSource.idl
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Ericsson AB. All rights reserved.
+ * Copyright (C) 2010, 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.
+ * 3. Neither the name of Ericsson 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/multipage/comms.html#the-eventsource-interface
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Constructor(DOMString url, optional EventSourceInit eventSourceInitDict),
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    RaisesException=Constructor
+] interface EventSource : EventTarget {
+    readonly attribute DOMString url;
+    readonly attribute boolean withCredentials;
+
+    // ready state
+    const unsigned short CONNECTING = 0;
+    const unsigned short OPEN = 1;
+    const unsigned short CLOSED = 2;
+    readonly attribute unsigned short readyState;
+
+    // networking
+    attribute EventHandler onopen;
+    attribute EventHandler onmessage;
+    attribute EventHandler onerror;
+    void close();
+};
diff --git a/core/page/EventSourceInit.idl b/modules/eventsource/EventSourceInit.idl
similarity index 100%
rename from core/page/EventSourceInit.idl
rename to modules/eventsource/EventSourceInit.idl
diff --git a/modules/fetch/Body.idl b/modules/fetch/Body.idl
index f943545..7e13072 100644
--- a/modules/fetch/Body.idl
+++ b/modules/fetch/Body.idl
@@ -2,24 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://fetch.spec.whatwg.org/#body
-typedef object JSON;
+// https://fetch.spec.whatwg.org/#body
+
 [
-    Exposed=ServiceWorker,
-    NoInterfaceObject,
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    Exposed=ServiceWorker,
+    NoInterfaceObject
 ] interface Body {
     readonly attribute boolean bodyUsed;
-    [CallWith=ScriptState] Promise<ArrayBuffer> arrayBuffer();
-    [CallWith=ScriptState] Promise<Blob> blob();
-    [CallWith=ScriptState] Promise<JSON> json();
-    [CallWith=ScriptState] Promise<USVString> text();
+    [CallWith=ScriptState, NewObject] Promise<ArrayBuffer> arrayBuffer();
+    [CallWith=ScriptState, NewObject] Promise<Blob> blob();
+    [CallWith=ScriptState, NewObject] Promise<FormData> formData();
+    [CallWith=ScriptState, NewObject] Promise<JSON> json();
+    [CallWith=ScriptState, NewObject] Promise<USVString> text();
 
     // body attribute is defined in sub-interfaces, because the IDL processor
     // cannot deal with attribute inheritance with runtime enabled flag.
     // [RuntimeEnabled=ExperimentalStream] readonly attribute ReadableByteStream body;
-
-    // Still to be implemented.
-    // [CallWith=ScriptState] Promise<FormData> formData();
 };
diff --git a/modules/fetch/Headers.idl b/modules/fetch/Headers.idl
index 6ea05d7..102691f 100644
--- a/modules/fetch/Headers.idl
+++ b/modules/fetch/Headers.idl
@@ -2,21 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://fetch.spec.whatwg.org/#headers-class
-typedef Dictionary OpenEndedDictionary;
+// https://fetch.spec.whatwg.org/#typedefdef-headersinit
+
+typedef (sequence<sequence<ByteString>> or record<ByteString, ByteString>) HeadersInit;
+
+// https://fetch.spec.whatwg.org/#headers-class
+
 [
-    Constructor,
-    Constructor(Headers input),
-    Constructor(OpenEndedDictionary input),
-    Constructor(sequence<sequence<ByteString>> input),
+    Constructor(optional HeadersInit init),
     Exposed=(Window,Worker),
-    RaisesException=Constructor,
-    GarbageCollected,
+    RaisesException=Constructor
 ] interface Headers {
     [RaisesException] void append(ByteString name, ByteString value);
     [ImplementedAs=remove, RaisesException] void delete(ByteString key);
     [RaisesException] ByteString? get(ByteString key);
-    [RaisesException] sequence<ByteString> getAll(ByteString name);
     [RaisesException] boolean has(ByteString key);
     [RaisesException] void set(ByteString key, ByteString value);
     iterable<ByteString, ByteString>;
diff --git a/modules/fetch/Request.idl b/modules/fetch/Request.idl
index 7fe8fed..ab7a576 100644
--- a/modules/fetch/Request.idl
+++ b/modules/fetch/Request.idl
@@ -2,39 +2,47 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://fetch.spec.whatwg.org/#request-class
+// https://fetch.spec.whatwg.org/#request-class
 
 typedef (Request or USVString) RequestInfo;
 
-enum RequestContext {
-    "", "audio", "beacon", "cspreport", "download", "embed", "eventsource", "favicon",
-    "fetch", "font", "form", "frame", "hyperlink", "iframe", "image", "imageset", "import",
-    "internal", "location", "manifest", "metarefresh", "object", "ping", "plugin",
-    "prefetch", "script", "serviceworker", "sharedworker",
-    "subresource", "style", "track", "video", "worker", "xmlhttprequest", "xslt"
-};
 enum RequestMode { "navigate", "same-origin", "no-cors", "cors" };
 enum RequestCredentials { "omit", "same-origin", "include" };
 enum RequestRedirect { "follow", "error", "manual" };
+enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", 
+    "only-if-cached" };
+
+// https://w3c.github.io/webappsec-referrer-policy/#referrer-policies
+
+enum ReferrerPolicy {
+    "",
+    "no-referrer",
+    "no-referrer-when-downgrade",
+    "origin",
+    "origin-when-cross-origin",
+    "unsafe-url"
+};
 
 [
+    ActiveScriptWrappable,
     Constructor(RequestInfo input, optional Dictionary requestInitDict),
     ConstructorCallWith=ScriptState,
     Exposed=(Window,Worker),
     RaisesException=Constructor,
-    DependentLifetime,
-    GarbageCollected,
+    DependentLifetime
 ] interface Request {
     readonly attribute ByteString method;
     readonly attribute USVString url;
-    readonly attribute Headers headers;
+    [ImplementedAs=getHeaders, SameObject] readonly attribute Headers headers;
     readonly attribute DOMString referrer;
+    [ImplementedAs=getReferrerPolicy] readonly attribute ReferrerPolicy referrerPolicy;
     readonly attribute RequestMode mode;
     readonly attribute RequestCredentials credentials;
+    [RuntimeEnabled=FetchRequestCache]readonly attribute RequestCache cache;
     readonly attribute RequestRedirect redirect;
     readonly attribute DOMString integrity;
 
-    [RaisesException] Request clone();
+    [RaisesException, CallWith=ScriptState, DoNotTestNewObject, NewObject] Request clone();
 };
 
 Request implements Body;
diff --git a/modules/fetch/Response.idl b/modules/fetch/Response.idl
index cd8a275..6ed6118 100644
--- a/modules/fetch/Response.idl
+++ b/modules/fetch/Response.idl
@@ -2,32 +2,33 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://fetch.spec.whatwg.org/#response-class
+// https://fetch.spec.whatwg.org/#response-class
 
 enum ResponseType { "basic", "cors", "default", "error", "opaque", "opaqueredirect" };
 
 [
+    ActiveScriptWrappable,
     // 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),
+    Constructor(optional any body, optional ResponseInit init),
     ConstructorCallWith=ScriptState,
-    Exposed=(Window,Worker),
-    RaisesException=Constructor,
     DependentLifetime,
-    GarbageCollected,
+    Exposed=(Window,Worker),
+    RaisesException=Constructor
 ] interface Response {
-    [CallWith=ExecutionContext] static Response error();
-    [CallWith=ExecutionContext, RaisesException] static Response redirect(USVString url, optional unsigned short status = 302);
+    [CallWith=ScriptState, NewObject] static Response error();
+    [CallWith=ScriptState, NewObject, RaisesException] static Response redirect(USVString url, optional unsigned short status = 302);
     readonly attribute ResponseType type;
     readonly attribute USVString url;
+    readonly attribute boolean redirected;
     readonly attribute unsigned short status;
     readonly attribute boolean ok;
     readonly attribute ByteString statusText;
-    readonly attribute Headers headers;
+    [SameObject] readonly attribute Headers headers;
 
-    [RaisesException] Response clone();
+    [RaisesException, CallWith=ScriptState, DoNotTestNewObject, NewObject] Response clone();
 
-    [ImplementedAs=bodyWithUseCounter] readonly attribute ReadableByteStream body;
+    [CallWith=ScriptState, MeasureAs=FetchBodyStream] readonly attribute any body;
 };
 
 Response implements Body;
diff --git a/modules/fetch/ResponseInit.idl b/modules/fetch/ResponseInit.idl
new file mode 100644
index 0000000..8dc8e0d
--- /dev/null
+++ b/modules/fetch/ResponseInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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://fetch.spec.whatwg.org/#responseinit
+
+dictionary ResponseInit {
+    unsigned short status = 200;
+    ByteString statusText = "OK";
+    HeadersInit headers;
+};
diff --git a/modules/fetch/WindowFetch.idl b/modules/fetch/WindowFetch.idl
index d2b48ad..f2de064 100644
--- a/modules/fetch/WindowFetch.idl
+++ b/modules/fetch/WindowFetch.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ImplementedAs=GlobalFetch,
+    ImplementedAs=GlobalFetch
 ] partial interface Window {
-    [CallWith=ScriptState, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
+    [CallWith=ScriptState, NewObject, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
 };
diff --git a/modules/fetch/WorkerFetch.idl b/modules/fetch/WorkerFetch.idl
index 8c2c87e..1954a75 100644
--- a/modules/fetch/WorkerFetch.idl
+++ b/modules/fetch/WorkerFetch.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ImplementedAs=GlobalFetch,
+    ImplementedAs=GlobalFetch
 ] partial interface WorkerGlobalScope {
-    [CallWith=ScriptState, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
+    [CallWith=ScriptState, NewObject, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
 };
diff --git a/modules/fetch/testing/InternalsFetch.idl b/modules/fetch/testing/InternalsFetch.idl
new file mode 100644
index 0000000..c68fdd5
--- /dev/null
+++ b/modules/fetch/testing/InternalsFetch.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.
+
+[
+    ImplementedAs=InternalsFetch
+] partial interface Internals {
+    sequence<USVString> getInternalResponseURLList(Response response);
+};
diff --git a/modules/fetch/testing/WorkerInternalsFetch.idl b/modules/fetch/testing/WorkerInternalsFetch.idl
new file mode 100644
index 0000000..9115908
--- /dev/null
+++ b/modules/fetch/testing/WorkerInternalsFetch.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.
+
+[
+    ImplementedAs=WorkerInternalsFetch
+] partial interface WorkerInternals {
+    sequence<USVString> getInternalResponseURLList(Response response);
+};
diff --git a/modules/filesystem/DOMFileSystem.idl b/modules/filesystem/DOMFileSystem.idl
index 1652123..cc985ba 100644
--- a/modules/filesystem/DOMFileSystem.idl
+++ b/modules/filesystem/DOMFileSystem.idl
@@ -29,10 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileSystem
 [
-    NoInterfaceObject,
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface DOMFileSystem {
     readonly attribute DOMString name;
     readonly attribute DirectoryEntry root;
diff --git a/modules/filesystem/DOMFileSystemSync.idl b/modules/filesystem/DOMFileSystemSync.idl
index 55ce1d7..f106f69 100644
--- a/modules/filesystem/DOMFileSystemSync.idl
+++ b/modules/filesystem/DOMFileSystemSync.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileSystemSync
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface DOMFileSystemSync {
     readonly attribute DOMString name;
     readonly attribute DirectoryEntrySync root;
diff --git a/modules/filesystem/DataTransferItemFileSystem.idl b/modules/filesystem/DataTransferItemFileSystem.idl
index 28f3151..90f5215 100644
--- a/modules/filesystem/DataTransferItemFileSystem.idl
+++ b/modules/filesystem/DataTransferItemFileSystem.idl
@@ -28,6 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface DataTransferItem {
-    [CallWith=ExecutionContext] Entry webkitGetAsEntry();
+// https://wicg.github.io/entries-api/#html-data
+
+[
+    ImplementedAs=DataTransferItemFileSystem
+] partial interface DataTransferItem {
+    [CallWith=ScriptState, Measure] Entry? webkitGetAsEntry();
 };
diff --git a/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl b/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
index d050cd6..0777415 100644
--- a/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
+++ b/modules/filesystem/DedicatedWorkerGlobalScopeFileSystem.idl
@@ -24,6 +24,7 @@
  *
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-LocalFileSystem
 [ImplementedAs=WorkerGlobalScopeFileSystem]
 partial interface DedicatedWorkerGlobalScope {
     const unsigned short TEMPORARY = 0;
diff --git a/modules/filesystem/DevToolsHostFileSystem.idl b/modules/filesystem/DevToolsHostFileSystem.idl
index c0a283a..51bd9a4 100644
--- a/modules/filesystem/DevToolsHostFileSystem.idl
+++ b/modules/filesystem/DevToolsHostFileSystem.idl
@@ -3,7 +3,8 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=FileSystem,
+    ImplementedAs=DevToolsHostFileSystem,
+    RuntimeEnabled=FileSystem
 ] partial interface DevToolsHost {
     DOMFileSystem isolatedFileSystem(DOMString fileSystemId, DOMString registeredName);
     void upgradeDraggedFileSystemPermissions(DOMFileSystem domFileSystem);
diff --git a/modules/filesystem/DirectoryEntry.idl b/modules/filesystem/DirectoryEntry.idl
index 854a088..5ef306a 100644
--- a/modules/filesystem/DirectoryEntry.idl
+++ b/modules/filesystem/DirectoryEntry.idl
@@ -28,11 +28,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-DirectoryEntry
 [
     NoInterfaceObject
 ] interface DirectoryEntry : Entry {
     DirectoryReader createReader();
-    void getFile([TreatUndefinedAs=NullString] DOMString? path, optional FileSystemFlags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
-    void getDirectory([TreatUndefinedAs=NullString] DOMString? path, optional FileSystemFlags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void getFile(DOMString? path, optional FileSystemFlags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void getDirectory(DOMString? path, optional FileSystemFlags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
     void removeRecursively(VoidCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/DirectoryEntrySync.idl b/modules/filesystem/DirectoryEntrySync.idl
index 07de469..eb86bbb 100644
--- a/modules/filesystem/DirectoryEntrySync.idl
+++ b/modules/filesystem/DirectoryEntrySync.idl
@@ -28,11 +28,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-DirectoryEntrySync
 [
     NoInterfaceObject
 ] interface DirectoryEntrySync : EntrySync {
     DirectoryReaderSync createReader();
-    [RaisesException] FileEntrySync getFile([TreatUndefinedAs=NullString] DOMString? path, FileSystemFlags flags);
-    [RaisesException] DirectoryEntrySync getDirectory([TreatUndefinedAs=NullString] DOMString? path, FileSystemFlags flags);
+    [RaisesException] FileEntrySync getFile(DOMString? path, FileSystemFlags flags);
+    [RaisesException] DirectoryEntrySync getDirectory(DOMString? path, FileSystemFlags flags);
     [RaisesException] void removeRecursively();
 };
diff --git a/modules/filesystem/DirectoryReader.idl b/modules/filesystem/DirectoryReader.idl
index f4971fa..f7cf5e4 100644
--- a/modules/filesystem/DirectoryReader.idl
+++ b/modules/filesystem/DirectoryReader.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-DirectoryReader
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface DirectoryReader {
     void readEntries(EntriesCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/DirectoryReaderSync.idl b/modules/filesystem/DirectoryReaderSync.idl
index 2f30b1c..b8123af 100644
--- a/modules/filesystem/DirectoryReaderSync.idl
+++ b/modules/filesystem/DirectoryReaderSync.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-DirectoryReaderSync
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface DirectoryReaderSync {
-    [RaisesException] EntrySync[] readEntries();
+    [RaisesException] sequence<EntrySync> readEntries();
 };
diff --git a/modules/filesystem/EntriesCallback.idl b/modules/filesystem/EntriesCallback.idl
index ba3cca9..bfeb66f 100644
--- a/modules/filesystem/EntriesCallback.idl
+++ b/modules/filesystem/EntriesCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-EntriesCallback
 callback interface EntriesCallback {
-    void handleEvent(Entry[] entries);
+    void handleEvent(sequence<Entry> entries);
 };
diff --git a/modules/filesystem/Entry.idl b/modules/filesystem/Entry.idl
index d7162ef..ae0d2ed 100644
--- a/modules/filesystem/Entry.idl
+++ b/modules/filesystem/Entry.idl
@@ -28,20 +28,20 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-Entry
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface Entry {
     readonly attribute boolean isFile;
     readonly attribute boolean isDirectory;
     readonly attribute DOMString name;
     readonly attribute DOMString fullPath;
-    readonly attribute DOMFileSystem filesystem;
+    [CallWith=ScriptState] readonly attribute DOMFileSystem filesystem;
 
-    void getMetadata(MetadataCallback successCallback, optional ErrorCallback errorCallback);
-    void moveTo(DirectoryEntry parent, [TreatUndefinedAs=NullString] optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
-    void copyTo(DirectoryEntry parent, [TreatUndefinedAs=NullString] optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
-    DOMString toURL();
-    void remove(VoidCallback successCallback, optional ErrorCallback errorCallback);
-    void getParent(optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    [CallWith=ScriptState] void getMetadata(MetadataCallback successCallback, optional ErrorCallback errorCallback);
+    [CallWith=ScriptState] void moveTo(DirectoryEntry parent, optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    [CallWith=ScriptState] void copyTo(DirectoryEntry parent, optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    [CallWith=ScriptState] DOMString toURL();
+    [CallWith=ScriptState] void remove(VoidCallback successCallback, optional ErrorCallback errorCallback);
+    [CallWith=ScriptState] void getParent(optional EntryCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/EntryCallback.idl b/modules/filesystem/EntryCallback.idl
index 02eebc5..10a3706 100644
--- a/modules/filesystem/EntryCallback.idl
+++ b/modules/filesystem/EntryCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-EntryCallback
 callback interface EntryCallback {
     void handleEvent(Entry entry);
 };
diff --git a/modules/filesystem/EntrySync.idl b/modules/filesystem/EntrySync.idl
index e574cbc..2b60af9 100644
--- a/modules/filesystem/EntrySync.idl
+++ b/modules/filesystem/EntrySync.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-EntrySync
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface EntrySync {
     readonly attribute boolean isFile;
     readonly attribute boolean isDirectory;
@@ -39,8 +39,8 @@
     readonly attribute DOMFileSystemSync filesystem;
 
     [RaisesException] Metadata getMetadata();
-    [RaisesException] EntrySync moveTo(DirectoryEntrySync parent, [TreatUndefinedAs=NullString] DOMString? name);
-    [RaisesException] EntrySync copyTo(DirectoryEntrySync parent, [TreatUndefinedAs=NullString] DOMString? name);
+    [RaisesException] EntrySync moveTo(DirectoryEntrySync parent, DOMString? name);
+    [RaisesException] EntrySync copyTo(DirectoryEntrySync parent, DOMString? name);
     DOMString toURL();
     [RaisesException] void remove();
     DirectoryEntrySync getParent();
diff --git a/modules/filesystem/ErrorCallback.idl b/modules/filesystem/ErrorCallback.idl
index 8f05cf4..bd3566f 100644
--- a/modules/filesystem/ErrorCallback.idl
+++ b/modules/filesystem/ErrorCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-ErrorCallback
 callback interface ErrorCallback {
-    void handleEvent(FileError error);
+    void handleEvent(DOMException error);
 };
diff --git a/modules/filesystem/FileEntry.idl b/modules/filesystem/FileEntry.idl
index a8382ea..c1f791a 100644
--- a/modules/filesystem/FileEntry.idl
+++ b/modules/filesystem/FileEntry.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileEntry
 [
     NoInterfaceObject
 ] interface FileEntry : Entry {
diff --git a/modules/filesystem/FileEntrySync.idl b/modules/filesystem/FileEntrySync.idl
index 52b3e2a..af2ceb9 100644
--- a/modules/filesystem/FileEntrySync.idl
+++ b/modules/filesystem/FileEntrySync.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileEntrySync
 [
     NoInterfaceObject
 ] interface FileEntrySync : EntrySync {
diff --git a/modules/filesystem/FileSystemCallback.idl b/modules/filesystem/FileSystemCallback.idl
index 6a10f18..ef2d658 100644
--- a/modules/filesystem/FileSystemCallback.idl
+++ b/modules/filesystem/FileSystemCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileSystemCallback
 callback interface FileSystemCallback {
     void handleEvent(DOMFileSystem fileSystem);
 };
diff --git a/modules/filesystem/FileSystemFlags.idl b/modules/filesystem/FileSystemFlags.idl
index 84707ae..7d68450 100644
--- a/modules/filesystem/FileSystemFlags.idl
+++ b/modules/filesystem/FileSystemFlags.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://www.w3.org/TR/2012/WD-file-system-api-20120417/
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-Flags
 // In the spec, the flags don't have default values, but Blink assumes
 // that they are false when not specified.
 
diff --git a/modules/filesystem/FileWriter.idl b/modules/filesystem/FileWriter.idl
index 0e07baf..c38e0ef 100644
--- a/modules/filesystem/FileWriter.idl
+++ b/modules/filesystem/FileWriter.idl
@@ -29,10 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-writer-api-20120417/#idl-def-FileWriter
 [
-    NoInterfaceObject,
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface FileWriter : EventTarget {
     // ready states
     const unsigned short INIT = 0;
@@ -47,7 +48,7 @@
 
     [RaisesException] void abort();
 
-    readonly attribute FileError error;
+    readonly attribute DOMException? error;
     readonly attribute long long position;
     readonly attribute long long length;
 
diff --git a/modules/filesystem/FileWriterCallback.idl b/modules/filesystem/FileWriterCallback.idl
index 9492e24..aa7bf43 100644
--- a/modules/filesystem/FileWriterCallback.idl
+++ b/modules/filesystem/FileWriterCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-FileWriterCallback
 callback interface FileWriterCallback {
     void handleEvent(FileWriter fileWriter);
 };
diff --git a/modules/filesystem/FileWriterSync.idl b/modules/filesystem/FileWriterSync.idl
index 40fca49..463d0dd 100644
--- a/modules/filesystem/FileWriterSync.idl
+++ b/modules/filesystem/FileWriterSync.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-writer-api-20120417/#idl-def-FileWriterSync
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface FileWriterSync {
     // synchronous write/modify methods
     [RaisesException] void write(Blob data);
diff --git a/modules/filesystem/HTMLInputElementFileSystem.idl b/modules/filesystem/HTMLInputElementFileSystem.idl
index c55dcd9..71ffafe 100644
--- a/modules/filesystem/HTMLInputElementFileSystem.idl
+++ b/modules/filesystem/HTMLInputElementFileSystem.idl
@@ -28,8 +28,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://wicg.github.io/entries-api/#html-forms
+
 [
-    RuntimeEnabled=FileSystem,
+    ImplementedAs=HTMLInputElementFileSystem,
+    RuntimeEnabled=FileSystem
 ] partial interface HTMLInputElement {
-    [CallWith=ExecutionContext] readonly attribute Entry[] webkitEntries;
+    [CallWith=ScriptState, Measure] readonly attribute FrozenArray<Entry> webkitEntries;
 };
diff --git a/modules/filesystem/Metadata.idl b/modules/filesystem/Metadata.idl
index 5e556fe..afcabf6 100644
--- a/modules/filesystem/Metadata.idl
+++ b/modules/filesystem/Metadata.idl
@@ -28,9 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-Metadata
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface Metadata {
     readonly attribute Date modificationTime;
     readonly attribute unsigned long long size;
diff --git a/modules/filesystem/MetadataCallback.idl b/modules/filesystem/MetadataCallback.idl
index 819a299..300c721 100644
--- a/modules/filesystem/MetadataCallback.idl
+++ b/modules/filesystem/MetadataCallback.idl
@@ -28,6 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-MetadataCallback
 callback interface MetadataCallback {
     void handleEvent(Metadata metadata);
 };
diff --git a/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl b/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
index b01deac..77d78ee 100644
--- a/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
+++ b/modules/filesystem/SharedWorkerGlobalScopeFileSystem.idl
@@ -24,6 +24,7 @@
  *
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-LocalFileSystem
 [ImplementedAs=WorkerGlobalScopeFileSystem]
 partial interface SharedWorkerGlobalScope {
     const unsigned short TEMPORARY = 0;
diff --git a/modules/filesystem/WindowFileSystem.idl b/modules/filesystem/WindowFileSystem.idl
index 4d98026..c133ee4 100644
--- a/modules/filesystem/WindowFileSystem.idl
+++ b/modules/filesystem/WindowFileSystem.idl
@@ -24,8 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/2012/WD-file-system-api-20120417/#idl-def-LocalFileSystem
 [
-    ImplementedAs=DOMWindowFileSystem,
+    ImplementedAs=DOMWindowFileSystem
 ] partial interface Window {
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
diff --git a/modules/gamepad/Gamepad.idl b/modules/gamepad/Gamepad.idl
index 9459de1..73e64de 100644
--- a/modules/gamepad/Gamepad.idl
+++ b/modules/gamepad/Gamepad.idl
@@ -23,14 +23,25 @@
  * DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface Gamepad {
+// https://w3c.github.io/gamepad/extensions.html#gamepadhand-enum
+enum GamepadHand {
+  "left",
+  "right"
+};
+
+// https://w3c.github.io/gamepad/#gamepad-interface
+interface Gamepad {
     readonly attribute DOMString id;
     readonly attribute unsigned long index;
     readonly attribute boolean connected;
     readonly attribute unsigned long long timestamp;
     readonly attribute DOMString mapping;
-    readonly attribute double[] axes;
-    readonly attribute GamepadButton[] buttons;
+    [CachedAttribute=isAxisDataDirty, MeasureAs=GamepadAxes] readonly attribute FrozenArray<double> axes;
+    [CachedAttribute=isButtonDataDirty, MeasureAs=GamepadButtons] readonly attribute FrozenArray<GamepadButton> buttons;
+
+    [OriginTrialEnabled=GamepadExtensions, MeasureAs=GamepadPose] readonly attribute GamepadPose? pose;
+    [OriginTrialEnabled=GamepadExtensions, MeasureAs=GamepadHand] readonly attribute GamepadHand hand;
+
+    // https://w3c.github.io/webvr/#interface-gamepad
+    [OriginTrialEnabled=GamepadExtensions, MeasureAs=GamepadDisplayId] readonly attribute unsigned long displayId;
 };
diff --git a/modules/gamepad/GamepadButton.idl b/modules/gamepad/GamepadButton.idl
index 1a4a8cb..85f09c8 100644
--- a/modules/gamepad/GamepadButton.idl
+++ b/modules/gamepad/GamepadButton.idl
@@ -2,9 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    GarbageCollected,
-] interface GamepadButton {
+interface GamepadButton {
     readonly attribute boolean pressed;
+    [OriginTrialEnabled=GamepadExtensions, MeasureAs=GamepadButtonTouched] readonly attribute boolean touched;
     readonly attribute double value;
 };
diff --git a/modules/gamepad/GamepadEvent.idl b/modules/gamepad/GamepadEvent.idl
index 86c0b2a..e38ef38 100644
--- a/modules/gamepad/GamepadEvent.idl
+++ b/modules/gamepad/GamepadEvent.idl
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#gamepadevent-interface
+// https://w3c.github.io/gamepad/#gamepadevent-interface
 
 [
-    Constructor(DOMString type, optional GamepadEventInit eventInitDict),
+    Constructor(DOMString type, optional GamepadEventInit eventInitDict)
 ] interface GamepadEvent : Event {
-    readonly attribute Gamepad gamepad;
+    [ImplementedAs=getGamepad] readonly attribute Gamepad gamepad;
 };
diff --git a/modules/gamepad/GamepadEventInit.idl b/modules/gamepad/GamepadEventInit.idl
index 4291a7e..3bccf6c 100644
--- a/modules/gamepad/GamepadEventInit.idl
+++ b/modules/gamepad/GamepadEventInit.idl
@@ -2,8 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#gamepadevent-interface
+// https://w3c.github.io/gamepad/#gamepadevent-interface
 
 dictionary GamepadEventInit : EventInit {
-    Gamepad gamepad;
+    // TODO(foolip): |gamepad| should be required and not nullable.
+    // https://crbug.com/647693
+    // https://github.com/w3c/gamepad/issues/35
+    Gamepad? gamepad;
 };
diff --git a/modules/gamepad/GamepadList.idl b/modules/gamepad/GamepadList.idl
index 03602d4..de8254c 100644
--- a/modules/gamepad/GamepadList.idl
+++ b/modules/gamepad/GamepadList.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface GamepadList {
     readonly attribute unsigned long length;
     getter Gamepad item([Default=Undefined] optional unsigned long index);
diff --git a/modules/gamepad/GamepadPose.idl b/modules/gamepad/GamepadPose.idl
new file mode 100644
index 0000000..05495f2
--- /dev/null
+++ b/modules/gamepad/GamepadPose.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.
+
+// https://w3c.github.io/gamepad/extensions.html#gamepadpose-interface
+[
+    OriginTrialEnabled=GamepadExtensions
+] interface GamepadPose {
+    [MeasureAs=GamepadPoseHasOrientation] readonly attribute boolean hasOrientation;
+    [MeasureAs=GamepadPoseHasPosition] readonly attribute boolean hasPosition;
+    [MeasureAs=GamepadPosePosition] readonly attribute Float32Array? position;
+    [MeasureAs=GamepadPoseLinearVelocity] readonly attribute Float32Array? linearVelocity;
+    [MeasureAs=GamepadPoseLinearAcceleration] readonly attribute Float32Array? linearAcceleration;
+    [MeasureAs=GamepadPoseOrientation] readonly attribute Float32Array? orientation;
+    [MeasureAs=GamepadPoseAngularVelocity] readonly attribute Float32Array? angularVelocity;
+    [MeasureAs=GamepadPoseAngularAcceleration] readonly attribute Float32Array? angularAcceleration;
+};
diff --git a/modules/gamepad/NavigatorGamepad.idl b/modules/gamepad/NavigatorGamepad.idl
index a854d79..7ed5277 100644
--- a/modules/gamepad/NavigatorGamepad.idl
+++ b/modules/gamepad/NavigatorGamepad.idl
@@ -17,6 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-partial interface Navigator {
-    GamepadList getGamepads();
+[
+    ImplementedAs=NavigatorGamepad
+] partial interface Navigator {
+    [MeasureAs=GetGamepads] GamepadList getGamepads();
 };
diff --git a/modules/geofencing/CircularGeofencingRegion.idl b/modules/geofencing/CircularGeofencingRegion.idl
deleted file mode 100644
index 6cac262..0000000
--- a/modules/geofencing/CircularGeofencingRegion.idl
+++ /dev/null
@@ -1,17 +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.
-
-[
-    RuntimeEnabled=Geofencing,
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    Constructor(CircularGeofencingRegionInit init)
-] interface CircularGeofencingRegion : GeofencingRegion {
-    const double MIN_RADIUS = 1.0;
-    const double MAX_RADIUS = 100.0;
-
-    readonly attribute double latitude;
-    readonly attribute double longitude;
-    readonly attribute double radius;
-};
diff --git a/modules/geofencing/CircularGeofencingRegionInit.idl b/modules/geofencing/CircularGeofencingRegionInit.idl
deleted file mode 100644
index 4abc486..0000000
--- a/modules/geofencing/CircularGeofencingRegionInit.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.
-
-// FIXME: Add the spec URL.
-
-dictionary CircularGeofencingRegionInit {
-    DOMString? id = null;
-    double latitude;
-    double longitude;
-    double radius;
-};
diff --git a/modules/geofencing/Geofencing.idl b/modules/geofencing/Geofencing.idl
deleted file mode 100644
index 7b36e70..0000000
--- a/modules/geofencing/Geofencing.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.
-
-[
-    NoInterfaceObject,
-    RuntimeEnabled=Geofencing,
-    GarbageCollected,
-] interface Geofencing {
-    [CallWith=ScriptState] Promise registerRegion(GeofencingRegion region);
-    [CallWith=ScriptState] Promise unregisterRegion(DOMString regionId);
-    [CallWith=ScriptState] Promise getRegisteredRegions();
-};
diff --git a/modules/geofencing/GeofencingEvent.idl b/modules/geofencing/GeofencingEvent.idl
deleted file mode 100644
index 47b3cc9..0000000
--- a/modules/geofencing/GeofencingEvent.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.
-
-[
-    RuntimeEnabled=Geofencing,
-    Exposed=ServiceWorker
-] interface GeofencingEvent : Event {
-    readonly attribute DOMString id;
-    readonly attribute GeofencingRegion region;
-};
diff --git a/modules/geofencing/GeofencingRegion.idl b/modules/geofencing/GeofencingRegion.idl
deleted file mode 100644
index 4e22058..0000000
--- a/modules/geofencing/GeofencingRegion.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.
-
-[
-    RuntimeEnabled=Geofencing,
-    NoInterfaceObject,
-    GarbageCollected,
-] interface GeofencingRegion {
-    readonly attribute DOMString id;
-};
diff --git a/modules/geofencing/ServiceWorkerGlobalScopeGeofencing.idl b/modules/geofencing/ServiceWorkerGlobalScopeGeofencing.idl
deleted file mode 100644
index 418f02e..0000000
--- a/modules/geofencing/ServiceWorkerGlobalScopeGeofencing.idl
+++ /dev/null
@@ -1,10 +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.
-
-[
-    RuntimeEnabled=Geofencing,
-] partial interface ServiceWorkerGlobalScope {
-    attribute EventHandler ongeofenceenter;
-    attribute EventHandler ongeofenceleave;
-};
diff --git a/modules/geofencing/ServiceWorkerRegistrationGeofencing.idl b/modules/geofencing/ServiceWorkerRegistrationGeofencing.idl
deleted file mode 100644
index 1d0df55..0000000
--- a/modules/geofencing/ServiceWorkerRegistrationGeofencing.idl
+++ /dev/null
@@ -1,9 +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.
-
-[
-    RuntimeEnabled=Geofencing,
-] partial interface ServiceWorkerRegistration {
-    readonly attribute Geofencing geofencing;
-};
diff --git a/modules/geofencing/WorkerNavigatorGeofencing.idl b/modules/geofencing/WorkerNavigatorGeofencing.idl
deleted file mode 100644
index 6af4e01..0000000
--- a/modules/geofencing/WorkerNavigatorGeofencing.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.
-
-[
-    RuntimeEnabled=Geofencing,
-    Exposed=Worker,
-] partial interface WorkerNavigator {
-    // FIXME: Delete this class once ServiceWorkerRegistration is exposed in service workers.
-    readonly attribute Geofencing geofencing;
-};
diff --git a/modules/geolocation/Coordinates.idl b/modules/geolocation/Coordinates.idl
index 9ff3e28..ed2b8bf 100644
--- a/modules/geolocation/Coordinates.idl
+++ b/modules/geolocation/Coordinates.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface Coordinates {
     readonly attribute double latitude;
diff --git a/modules/geolocation/Geolocation.idl b/modules/geolocation/Geolocation.idl
index 1961845..5a6e5c5 100644
--- a/modules/geolocation/Geolocation.idl
+++ b/modules/geolocation/Geolocation.idl
@@ -23,10 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/geolocation-API/#geolocation_interface
+// https://www.w3.org/TR/geolocation-API/#geolocation_interface
 [
-    GarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface Geolocation {
     [LogActivity] void getCurrentPosition(PositionCallback successCallback,
                                      optional PositionErrorCallback errorCallback,
@@ -38,3 +37,6 @@
 
     void clearWatch(long watchID);
 };
+
+// https://www.w3.org/TR/geolocation-API/#position-callback
+callback PositionCallback = void(Position position);
diff --git a/modules/geolocation/Geoposition.idl b/modules/geolocation/Geoposition.idl
deleted file mode 100644
index 7d5c597..0000000
--- a/modules/geolocation/Geoposition.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject
-] interface Geoposition {
-    readonly attribute Coordinates coords;
-    readonly attribute DOMTimeStamp timestamp;
-};
diff --git a/modules/geolocation/NavigatorGeolocation.idl b/modules/geolocation/NavigatorGeolocation.idl
index 9b96fd7..8cab44e 100644
--- a/modules/geolocation/NavigatorGeolocation.idl
+++ b/modules/geolocation/NavigatorGeolocation.idl
@@ -17,6 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorGeolocation
+] partial interface Navigator {
     readonly attribute Geolocation geolocation;
 };
diff --git a/modules/geolocation/Position.idl b/modules/geolocation/Position.idl
new file mode 100644
index 0000000..8081e3f
--- /dev/null
+++ b/modules/geolocation/Position.idl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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.
+ */
+
+// https://www.w3.org/TR/geolocation-API/#position_interface
+
+[
+    NoInterfaceObject,
+    ImplementedAs=Geoposition
+] interface Position {
+    readonly attribute Coordinates coords;
+    readonly attribute DOMTimeStamp timestamp;
+};
diff --git a/modules/geolocation/PositionCallback.idl b/modules/geolocation/PositionCallback.idl
deleted file mode 100644
index b00d1d0..0000000
--- a/modules/geolocation/PositionCallback.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-callback interface PositionCallback {
-    void handleEvent(Geoposition position);
-};
diff --git a/modules/geolocation/PositionError.idl b/modules/geolocation/PositionError.idl
index b4a7f83..a05815e 100644
--- a/modules/geolocation/PositionError.idl
+++ b/modules/geolocation/PositionError.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface PositionError {
     readonly attribute unsigned short code;
@@ -34,4 +33,3 @@
     const unsigned short POSITION_UNAVAILABLE = 2;
     const unsigned short TIMEOUT = 3;
 };
-
diff --git a/modules/geolocation/PositionErrorCallback.idl b/modules/geolocation/PositionErrorCallback.idl
index a1470c1..272e70a 100644
--- a/modules/geolocation/PositionErrorCallback.idl
+++ b/modules/geolocation/PositionErrorCallback.idl
@@ -10,16 +10,17 @@
  *     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.
+ * 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.
  */
 
 callback interface PositionErrorCallback {
diff --git a/modules/geolocation/testing/InternalsGeolocation.idl b/modules/geolocation/testing/InternalsGeolocation.idl
deleted file mode 100644
index ac6b2d3..0000000
--- a/modules/geolocation/testing/InternalsGeolocation.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-partial interface Internals {
-    void setGeolocationClientMock(Document document);
-    void setGeolocationPosition(Document document, double latitude, double longitude, double accuracy);
-    void setGeolocationPositionUnavailableError(Document document, DOMString message);
-    void setGeolocationPermission(Document document, boolean allowed);
-    long numberOfPendingGeolocationPermissionRequests(Document document);
-};
diff --git a/modules/imagebitmap/ImageBitmapRenderingContext.idl b/modules/imagebitmap/ImageBitmapRenderingContext.idl
index ac6f794..c50300a 100644
--- a/modules/imagebitmap/ImageBitmapRenderingContext.idl
+++ b/modules/imagebitmap/ImageBitmapRenderingContext.idl
@@ -2,13 +2,13 @@
 // 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#the-imagebitmap-rendering-context
+
 [
-    RuntimeEnabled=ExperimentalCanvasFeatures,
-    SetWrapperReferenceFrom=canvas,
-    WillBeGarbageCollected,
+    DependentLifetime
 ] interface ImageBitmapRenderingContext {
     // back-reference to the canvas
     readonly attribute HTMLCanvasElement canvas;
 
-    void transferImageBitmap(ImageBitmap bitmap);
+    [RaisesException] void transferFromImageBitmap(ImageBitmap? bitmap);
 };
diff --git a/modules/imagecapture/ConstrainPoint2DParameters.idl b/modules/imagecapture/ConstrainPoint2DParameters.idl
new file mode 100644
index 0000000..763a9a5
--- /dev/null
+++ b/modules/imagecapture/ConstrainPoint2DParameters.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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-image/#additional-constrainable-props
+
+dictionary ConstrainPoint2DParameters {
+    sequence<Point2D> exact;
+    sequence<Point2D> ideal;
+};
diff --git a/modules/imagecapture/ImageCapture.idl b/modules/imagecapture/ImageCapture.idl
new file mode 100644
index 0000000..fec612d
--- /dev/null
+++ b/modules/imagecapture/ImageCapture.idl
@@ -0,0 +1,22 @@
+// 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/mediacapture-image/#ImageCaptureAPI
+
+[
+    ActiveScriptWrappable,
+    ConstructorCallWith=ExecutionContext,
+    Constructor(MediaStreamTrack track),
+    DependentLifetime,
+    MeasureAs=ImageCaptureConstructor,
+    RaisesException=Constructor
+] interface ImageCapture {
+    [ImplementedAs=videoStreamTrack] readonly attribute MediaStreamTrack track;
+
+    [CallWith=ScriptState] Promise<PhotoCapabilities> getPhotoCapabilities();
+    [CallWith=ScriptState] Promise<PhotoSettings> getPhotoSettings();
+    [CallWith=ScriptState, MeasureAs=ImageCaptureSetOptions] Promise<void> setOptions(PhotoSettings photoSettings);
+    [CallWith=ScriptState] Promise<Blob> takePhoto(optional PhotoSettings photoSettings);
+    [CallWith=ScriptState] Promise<ImageBitmap> grabFrame();
+};
diff --git a/modules/imagecapture/MediaSettingsRange.idl b/modules/imagecapture/MediaSettingsRange.idl
new file mode 100644
index 0000000..6acf927
--- /dev/null
+++ b/modules/imagecapture/MediaSettingsRange.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/mediacapture-image/#mediasettingsrange
+
+interface MediaSettingsRange {
+    readonly attribute double max;
+    readonly attribute double min;
+    readonly attribute double step;
+};
diff --git a/modules/imagecapture/PhotoCapabilities.idl b/modules/imagecapture/PhotoCapabilities.idl
new file mode 100644
index 0000000..e97ead1
--- /dev/null
+++ b/modules/imagecapture/PhotoCapabilities.idl
@@ -0,0 +1,31 @@
+// 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/mediacapture-image/##photocapabilities-section
+
+enum MeteringMode {
+    "none",
+    "manual",
+    "single-shot",
+    "continuous",
+};
+
+enum RedEyeReduction {
+    "never",
+    "always",
+    "controllable",
+};
+
+enum FillLightMode {
+    "off",
+    "auto",
+    "flash",
+};
+
+interface PhotoCapabilities {
+  readonly attribute RedEyeReduction            redEyeReduction;
+  readonly attribute MediaSettingsRange         imageHeight;
+  readonly attribute MediaSettingsRange         imageWidth;
+  readonly attribute FrozenArray<FillLightMode> fillLightMode;
+};
diff --git a/modules/imagecapture/PhotoSettings.idl b/modules/imagecapture/PhotoSettings.idl
new file mode 100644
index 0000000..8e2f6bf
--- /dev/null
+++ b/modules/imagecapture/PhotoSettings.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/mediacapture-image/##photosettings-section
+
+dictionary PhotoSettings {
+    boolean redEyeReduction;
+    double imageHeight;
+    double imageWidth;
+    FillLightMode fillLightMode;
+};
diff --git a/modules/imagecapture/Point2D.idl b/modules/imagecapture/Point2D.idl
new file mode 100644
index 0000000..b77caf6
--- /dev/null
+++ b/modules/imagecapture/Point2D.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/mediacapture-image/#point2d-section
+
+dictionary Point2D {
+  float x = 0.0;
+  float y = 0.0;
+};
diff --git a/modules/indexeddb/IDBCursor.idl b/modules/indexeddb/IDBCursor.idl
index a0a25f3..e07e2e4 100644
--- a/modules/indexeddb/IDBCursor.idl
+++ b/modules/indexeddb/IDBCursor.idl
@@ -35,18 +35,17 @@
 // https://w3c.github.io/IndexedDB/#idl-def-IDBCursor
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface IDBCursor {
     [CallWith=ScriptState] readonly attribute any source;
     readonly attribute IDBCursorDirection direction;
     [CallWith=ScriptState, CachedAttribute=isKeyDirty] readonly attribute any key;
     [CallWith=ScriptState, CachedAttribute=isPrimaryKeyDirty] readonly attribute any primaryKey;
 
-    [CallWith=ScriptState, RaisesException] IDBRequest update(any value);
     [RaisesException] void advance([EnforceRange] unsigned long count);
     [CallWith=ScriptState, ImplementedAs=continueFunction, RaisesException] void continue([Default=Undefined] optional any key);
-    // TODO(jsbell): Proposal: https://github.com/w3c/IndexedDB/issues/14
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] void continuePrimaryKey(any key, any primaryKey);
-    [CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete();
+    [CallWith=ScriptState, RaisesException] void continuePrimaryKey(any key, any primaryKey);
+
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest update(any value);
+    [NewObject, CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete();
 };
diff --git a/modules/indexeddb/IDBCursorWithValue.idl b/modules/indexeddb/IDBCursorWithValue.idl
index b9887cd..7755c39 100644
--- a/modules/indexeddb/IDBCursorWithValue.idl
+++ b/modules/indexeddb/IDBCursorWithValue.idl
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue
+// https://w3c.github.io/IndexedDB/#idbcursorwithvalue
 
 [
     Exposed=(Window,Worker)
diff --git a/modules/indexeddb/IDBDatabase.idl b/modules/indexeddb/IDBDatabase.idl
index b6d72d4..9304f41 100644
--- a/modules/indexeddb/IDBDatabase.idl
+++ b/modules/indexeddb/IDBDatabase.idl
@@ -27,19 +27,22 @@
 // https://w3c.github.io/IndexedDB/#idl-def-IDBDatabase
 
 [
-    Exposed=(Window,Worker),
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface IDBDatabase : EventTarget {
     readonly attribute DOMString name;
     readonly attribute unsigned long long version;
-    [Measure] readonly attribute DOMStringList objectStoreNames;
+    readonly attribute DOMStringList objectStoreNames;
 
-    [RaisesException] IDBObjectStore createObjectStore(DOMString name, optional IDBObjectStoreParameters options);
-    [RaisesException] void deleteObjectStore(DOMString name);
-    [CallWith=ScriptState, RaisesException] IDBTransaction transaction((DOMString or sequence<DOMString> or DOMStringList) storeNames, optional IDBTransactionMode mode = "readonly");
+    [NewObject, CallWith=ScriptState, RaisesException] IDBTransaction transaction((DOMString or sequence<DOMString>) storeNames,
+                                                                                  optional IDBTransactionMode mode = "readonly");
     void close();
 
+    [NewObject, RaisesException] IDBObjectStore createObjectStore(DOMString name,
+                                                                  optional IDBObjectStoreParameters options);
+    [RaisesException] void deleteObjectStore(DOMString name);
+
     attribute EventHandler onabort;
     attribute EventHandler onclose;
     attribute EventHandler onerror;
diff --git a/modules/indexeddb/IDBFactory.idl b/modules/indexeddb/IDBFactory.idl
index 4e57591..60e0cd8 100644
--- a/modules/indexeddb/IDBFactory.idl
+++ b/modules/indexeddb/IDBFactory.idl
@@ -23,16 +23,14 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory
+// https://w3c.github.io/IndexedDB/#idbfactory
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface IDBFactory {
-    [CallWith=ScriptState, ImplementedAs=getDatabaseNames, RaisesException] IDBRequest webkitGetDatabaseNames();
-
-    [CallWith=ScriptState, RaisesException] IDBOpenDBRequest open(DOMString name, [EnforceRange] optional unsigned long long version);
-    [CallWith=ScriptState, RaisesException] IDBOpenDBRequest deleteDatabase(DOMString name);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBOpenDBRequest open(DOMString name,
+                                                                             [EnforceRange] optional unsigned long long version);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBOpenDBRequest deleteDatabase(DOMString name);
 
     [CallWith=ScriptState, RaisesException] short cmp(any first, any second);
 };
diff --git a/modules/indexeddb/IDBIndex.idl b/modules/indexeddb/IDBIndex.idl
index e2e17b7..8e26c8b 100644
--- a/modules/indexeddb/IDBIndex.idl
+++ b/modules/indexeddb/IDBIndex.idl
@@ -26,23 +26,24 @@
 // https://w3c.github.io/IndexedDB/#idl-def-IDBIndex
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface IDBIndex {
-    readonly attribute DOMString name;
-    readonly attribute IDBObjectStore objectStore;
+    [RaisesException=Setter] attribute DOMString name;
+    [SameObject] readonly attribute IDBObjectStore objectStore;
     [CallWith=ScriptState] readonly attribute any keyPath;
     readonly attribute boolean multiEntry;
     readonly attribute boolean unique;
 
-    [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] 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] 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");
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest get(any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getKey(any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAll([Default=Undefined] optional any query,
+                                                                         [EnforceRange] optional unsigned long count);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAllKeys([Default=Undefined] optional any query,
+                                                                             [EnforceRange] optional unsigned long count);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest count([Default=Undefined] optional any key);
 
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range,
+                                                                             optional IDBCursorDirection direction = "next");
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range,
+                                                                                optional IDBCursorDirection direction = "next");
 };
diff --git a/modules/indexeddb/IDBIndexParameters.idl b/modules/indexeddb/IDBIndexParameters.idl
index c6f07ba..33bd183 100644
--- a/modules/indexeddb/IDBIndexParameters.idl
+++ b/modules/indexeddb/IDBIndexParameters.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://www.w3.org/TR/IndexedDB/#idl-def-IDBIndexParameters
+// https://w3c.github.io/IndexedDB/#dictdef-idbindexparameters
 
 dictionary IDBIndexParameters {
     boolean unique = false;
diff --git a/modules/indexeddb/IDBKeyRange.idl b/modules/indexeddb/IDBKeyRange.idl
index a55200e..2c88174 100644
--- a/modules/indexeddb/IDBKeyRange.idl
+++ b/modules/indexeddb/IDBKeyRange.idl
@@ -23,19 +23,23 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange
+// https://w3c.github.io/IndexedDB/#idbkeyrange
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface IDBKeyRange {
     [ImplementedAs=lowerValue, CallWith=ScriptState] readonly attribute any lower;
     [ImplementedAs=upperValue, CallWith=ScriptState] readonly attribute any upper;
     readonly attribute boolean lowerOpen;
     readonly attribute boolean upperOpen;
 
-    [CallWith=ExecutionContext, RaisesException] static IDBKeyRange only(any value);
-    [CallWith=ExecutionContext, RaisesException] static IDBKeyRange lowerBound(any bound, optional boolean open = false);
-    [CallWith=ExecutionContext, RaisesException] static IDBKeyRange upperBound(any bound, optional boolean open = false);
-    [CallWith=ExecutionContext, RaisesException] static IDBKeyRange bound(any lower, any upper, optional boolean lowerOpen = false, optional boolean upperOpen = false);
+    [NewObject, CallWith=ScriptState, RaisesException] static IDBKeyRange only(any value);
+    [NewObject, CallWith=ScriptState, RaisesException] static IDBKeyRange lowerBound(any bound, optional boolean open = false);
+    [NewObject, CallWith=ScriptState, RaisesException] static IDBKeyRange upperBound(any bound, optional boolean open = false);
+    [NewObject, CallWith=ScriptState, RaisesException] static IDBKeyRange bound(any lower,
+                                                                                any upper,
+                                                                                optional boolean lowerOpen = false,
+                                                                                optional boolean upperOpen = false);
+
+    [CallWith=ScriptState, RaisesException] boolean includes(any key);
 };
diff --git a/modules/indexeddb/IDBObjectStore.idl b/modules/indexeddb/IDBObjectStore.idl
index 3422d7c..c38bbb6 100644
--- a/modules/indexeddb/IDBObjectStore.idl
+++ b/modules/indexeddb/IDBObjectStore.idl
@@ -26,28 +26,34 @@
 // https://w3c.github.io/IndexedDB/#idl-def-IDBObjectStore
 
 [
-    Exposed=(Window,Worker),
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface IDBObjectStore {
-    readonly attribute DOMString name;
+    [RaisesException=Setter] attribute DOMString name;
     [CallWith=ScriptState] readonly attribute any keyPath;
-    [Measure] readonly attribute DOMStringList indexNames;
-    readonly attribute IDBTransaction transaction;
+    readonly attribute DOMStringList indexNames;
+    [SameObject] readonly attribute IDBTransaction transaction;
     readonly attribute boolean autoIncrement;
 
-    [CallWith=ScriptState, RaisesException] IDBRequest put(any value, [Default=Undefined] optional any key);
-    [CallWith=ScriptState, RaisesException] IDBRequest add(any value, [Default=Undefined] optional any key);
-    [CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete(any key);
-    [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] 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] 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] 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);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest put(any value, [Default=Undefined] optional any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest add(any value, [Default=Undefined] optional any key);
+    [NewObject, CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete(any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest clear();
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest get(any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getKey(any key);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAll([Default=Undefined] optional any query,
+                                                                                    [EnforceRange] optional unsigned long count);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAllKeys([Default=Undefined] optional any query,
+                                                                             [EnforceRange] optional unsigned long count);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest count([Default=Undefined] optional any key);
+
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range,
+                                                                             optional IDBCursorDirection direction = "next");
+    [NewObject, CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range,
+                                                                                optional IDBCursorDirection direction = "next");
+
     [RaisesException] IDBIndex index(DOMString name);
+    [NewObject, CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name,
+                                                                            (DOMString or sequence<DOMString>) keyPath,
+                                                                            optional IDBIndexParameters options);
     [RaisesException] void deleteIndex(DOMString name);
 };
diff --git a/modules/indexeddb/IDBObjectStoreParameters.idl b/modules/indexeddb/IDBObjectStoreParameters.idl
index cd49459..32d9fff 100644
--- a/modules/indexeddb/IDBObjectStoreParameters.idl
+++ b/modules/indexeddb/IDBObjectStoreParameters.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://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStoreParameters
+// https://w3c.github.io/IndexedDB/#dictdef-idbobjectstoreparameters
 
 dictionary IDBObjectStoreParameters {
     (DOMString or sequence<DOMString>)? keyPath = null;
diff --git a/modules/indexeddb/IDBObservation.idl b/modules/indexeddb/IDBObservation.idl
new file mode 100644
index 0000000..c25bbf5
--- /dev/null
+++ b/modules/indexeddb/IDBObservation.idl
@@ -0,0 +1,22 @@
+// 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/WICG/indexed-db-observers/blob/gh-pages/EXPLAINER.md#records
+
+enum IDBObservationType {
+    "add",
+    "put",
+    "delete",
+    "clear"
+};
+[
+   Exposed=(Window,Worker),
+   RuntimeEnabled=IDBObserver
+]
+ interface IDBObservation {
+   readonly attribute  IDBObservationType type;
+   // When the record is a "delete" type, this is an IDBKeyRange.
+   [CallWith=ScriptState] readonly attribute any key;
+   [CallWith=ScriptState] readonly attribute any value;
+};
diff --git a/modules/indexeddb/IDBObserver.idl b/modules/indexeddb/IDBObserver.idl
new file mode 100644
index 0000000..258c490
--- /dev/null
+++ b/modules/indexeddb/IDBObserver.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/WICG/indexed-db-observers/issues/24
+
+callback IDBObserverCallback = void (IDBObserverChanges changes);
+
+[
+   Exposed=(Window,Worker),
+   Constructor(IDBObserverCallback callback),
+   RuntimeEnabled=IDBObserver
+] interface IDBObserver {
+    [RaisesException, Measure] void observe(IDBDatabase db, IDBTransaction tx, IDBObserverInit options);
+    [RaisesException, Measure] void unobserve(IDBDatabase db);
+};
diff --git a/modules/indexeddb/IDBObserverChanges.idl b/modules/indexeddb/IDBObserverChanges.idl
new file mode 100644
index 0000000..8090820
--- /dev/null
+++ b/modules/indexeddb/IDBObserverChanges.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/WICG/indexed-db-observers/blob/gh-pages/EXPLAINER.md#changes-argument
+
+[
+   Exposed=(Window, Worker),
+   RuntimeEnabled=IDBObserver
+] interface IDBObserverChanges {
+    readonly attribute IDBDatabase database;
+    // Transaction contains the same object stores as the transaction on which IDBTransaction.observe was called.
+    readonly attribute IDBTransaction transaction;
+    // Map object from String (object store name) to Array of IDBObservation.
+    [CallWith=ScriptState] readonly attribute any records;
+};
diff --git a/modules/indexeddb/IDBObserverInit.idl b/modules/indexeddb/IDBObserverInit.idl
new file mode 100644
index 0000000..d22dfbd
--- /dev/null
+++ b/modules/indexeddb/IDBObserverInit.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://github.com/WICG/indexed-db-observers/blob/gh-pages/EXPLAINER.md#options-argument
+
+dictionary IDBObserverInit {
+    boolean transaction = false;
+    boolean values = false;
+    boolean noRecords = false;
+    sequence<IDBObservationType> operationTypes = [];
+};
diff --git a/modules/indexeddb/IDBOpenDBRequest.idl b/modules/indexeddb/IDBOpenDBRequest.idl
index dbb2313..9594c8a 100644
--- a/modules/indexeddb/IDBOpenDBRequest.idl
+++ b/modules/indexeddb/IDBOpenDBRequest.idl
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest
+// https://w3c.github.io/IndexedDB/#idbopendbrequest
 
 [
     Exposed=(Window,Worker)
diff --git a/modules/indexeddb/IDBRequest.idl b/modules/indexeddb/IDBRequest.idl
index 0620d7f..4f8a88a 100644
--- a/modules/indexeddb/IDBRequest.idl
+++ b/modules/indexeddb/IDBRequest.idl
@@ -27,27 +27,24 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequestReadyState
+// https://w3c.github.io/IndexedDB/#enumdef-idbrequestreadystate
 
 enum IDBRequestReadyState {
     "pending",
     "done"
 };
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest
+// https://w3c.github.io/IndexedDB/#idbrequest
 
 [
-    Exposed=(Window,Worker),
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface IDBRequest : EventTarget {
-    [RaisesException=Getter, CachedAttribute=isResultDirty] readonly attribute any result;
+    [CallWith=ScriptState, RaisesException=Getter, CachedAttribute=isResultDirty] readonly attribute any result;
     [RaisesException=Getter] readonly attribute DOMException error;
-
-    readonly attribute any source;
+    [CallWith=ScriptState] readonly attribute any source;
     readonly attribute IDBTransaction transaction;
-
-    // States
     readonly attribute IDBRequestReadyState readyState;
 
     // Events
diff --git a/modules/indexeddb/IDBTransaction.idl b/modules/indexeddb/IDBTransaction.idl
index abe303d..49a272e 100644
--- a/modules/indexeddb/IDBTransaction.idl
+++ b/modules/indexeddb/IDBTransaction.idl
@@ -35,15 +35,15 @@
 // https://w3c.github.io/IndexedDB/#idl-def-IDBTransaction
 
 [
-    Exposed=(Window,Worker),
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected
+    Exposed=(Window,Worker)
 ] interface IDBTransaction : EventTarget {
 
     // Properties
-    [Measure] readonly attribute DOMStringList objectStoreNames;
+    readonly attribute DOMStringList objectStoreNames;
     readonly attribute IDBTransactionMode mode;
-    readonly attribute IDBDatabase db;
+    [SameObject] readonly attribute IDBDatabase db;
     readonly attribute DOMException error;
 
     // Methods
diff --git a/modules/indexeddb/IDBVersionChangeEvent.idl b/modules/indexeddb/IDBVersionChangeEvent.idl
index b6656a7..b3bdfbb 100644
--- a/modules/indexeddb/IDBVersionChangeEvent.idl
+++ b/modules/indexeddb/IDBVersionChangeEvent.idl
@@ -23,11 +23,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent
+// https://w3c.github.io/IndexedDB/#events
 
-// FIXME: This enum is non-standard, see
-// https://www.w3.org/Bugs/Public/show_bug.cgi?id=22370
+// FIXME: This enum is non-standard, see https://crbug.com/711586
 enum IDBDataLossAmount { "none", "total" };
+
 [
     Exposed=(Window,Worker),
     Constructor(DOMString type, optional IDBVersionChangeEventInit eventInitDict)
@@ -35,8 +35,7 @@
     readonly attribute unsigned long long oldVersion;
     readonly attribute unsigned long long? newVersion;
 
-    // FIXME: These are non-standard, see
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22370
+    // FIXME: These are non-standard, see https://crbug.com/711586
     readonly attribute IDBDataLossAmount dataLoss;
     readonly attribute DOMString dataLossMessage;
 };
diff --git a/modules/indexeddb/IDBVersionChangeEventInit.idl b/modules/indexeddb/IDBVersionChangeEventInit.idl
index 1ee4c85..1742fae 100644
--- a/modules/indexeddb/IDBVersionChangeEventInit.idl
+++ b/modules/indexeddb/IDBVersionChangeEventInit.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://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEventInit
+// https://w3c.github.io/IndexedDB/#events
 
 dictionary IDBVersionChangeEventInit : EventInit {
     unsigned long long  oldVersion = 0;
diff --git a/modules/indexeddb/WindowIndexedDatabase.idl b/modules/indexeddb/WindowIndexedDatabase.idl
index eb08dd1..183376f 100644
--- a/modules/indexeddb/WindowIndexedDatabase.idl
+++ b/modules/indexeddb/WindowIndexedDatabase.idl
@@ -25,18 +25,7 @@
  */
 
 [
-    ImplementedAs=DOMWindowIndexedDatabase,
+    ImplementedAs=GlobalIndexedDB
 ] partial interface Window {
-    [ImplementedAs=indexedDB, DeprecateAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
-
     [MeasureAs=UnprefixedIndexedDB] readonly attribute IDBFactory indexedDB;
-
-    [DeprecateAs=PrefixedIDBCursorConstructor] attribute IDBCursorConstructor webkitIDBCursor;
-    [DeprecateAs=PrefixedIDBDatabaseConstructor] attribute IDBDatabaseConstructor webkitIDBDatabase;
-    [DeprecateAs=PrefixedIDBFactoryConstructor] attribute IDBFactoryConstructor webkitIDBFactory;
-    [DeprecateAs=PrefixedIDBIndexConstructor] attribute IDBIndexConstructor webkitIDBIndex;
-    [DeprecateAs=PrefixedIDBKeyRangeConstructor] attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-    [DeprecateAs=PrefixedIDBObjectStoreConstructor] attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-    [DeprecateAs=PrefixedIDBRequestConstructor] attribute IDBRequestConstructor webkitIDBRequest;
-    [DeprecateAs=PrefixedIDBTransactionConstructor] attribute IDBTransactionConstructor webkitIDBTransaction;
 };
diff --git a/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl b/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
index 796cd5d..75bf1f0 100644
--- a/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
+++ b/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
@@ -24,17 +24,8 @@
  *
  */
 
-partial interface WorkerGlobalScope {
-    [ImplementedAs=indexedDB, DeprecateAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
-
-    [DeprecateAs=PrefixedIDBCursorConstructor] attribute IDBCursorConstructor webkitIDBCursor;
-    [DeprecateAs=PrefixedIDBDatabaseConstructor] attribute IDBDatabaseConstructor webkitIDBDatabase;
-    [DeprecateAs=PrefixedIDBFactoryConstructor] attribute IDBFactoryConstructor webkitIDBFactory;
-    [DeprecateAs=PrefixedIDBIndexConstructor] attribute IDBIndexConstructor webkitIDBIndex;
-    [DeprecateAs=PrefixedIDBKeyRangeConstructor] attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-    [DeprecateAs=PrefixedIDBObjectStoreConstructor] attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-    [DeprecateAs=PrefixedIDBRequestConstructor] attribute IDBRequestConstructor webkitIDBRequest;
-    [DeprecateAs=PrefixedIDBTransactionConstructor] attribute IDBTransactionConstructor webkitIDBTransaction;
-
+[
+    ImplementedAs=GlobalIndexedDB
+] partial interface WorkerGlobalScope {
     readonly attribute IDBFactory indexedDB;
 };
diff --git a/modules/installedapp/NavigatorInstalledApp.idl b/modules/installedapp/NavigatorInstalledApp.idl
new file mode 100644
index 0000000..11b223f
--- /dev/null
+++ b/modules/installedapp/NavigatorInstalledApp.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(mgiuca): Link to full spec, rather than explainer, upon completion.
+// https://github.com/WICG/get-installed-related-apps/blob/master/EXPLAINER.md
+
+[
+    ImplementedAs=NavigatorInstalledApp,
+    OriginTrialEnabled=InstalledApp
+] partial interface Navigator {
+    [CallWith=ScriptState, Measure, SecureContext] Promise<RelatedApplication> getInstalledRelatedApps();
+};
diff --git a/modules/installedapp/RelatedApplication.idl b/modules/installedapp/RelatedApplication.idl
new file mode 100644
index 0000000..80fe74a
--- /dev/null
+++ b/modules/installedapp/RelatedApplication.idl
@@ -0,0 +1,18 @@
+// 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(mgiuca): Link to full spec, rather than explainer, upon completion.
+// https://github.com/WICG/get-installed-related-apps/blob/master/EXPLAINER.md
+
+// TODO(mgiuca): This should be a dictionary, not an interface.
+// (NoInterfaceObject is basically a makeshift dictionary.)
+// https://crbug.com/687444.
+[
+    NoInterfaceObject,
+    OriginTrialEnabled=InstalledApp
+] interface RelatedApplication {
+    readonly attribute DOMString platform;
+    readonly attribute DOMString url;
+    readonly attribute DOMString id;
+};
diff --git a/modules/keyboard_lock/NavigatorKeyboardLock.idl b/modules/keyboard_lock/NavigatorKeyboardLock.idl
new file mode 100644
index 0000000..b39db8e
--- /dev/null
+++ b/modules/keyboard_lock/NavigatorKeyboardLock.idl
@@ -0,0 +1,25 @@
+// Copyright 2017 The Chromium 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://rawgit.com/w3c/keyboard-lock/gh-pages/index.html.
+// TODO(zijiehe, garykac): Update the spec to match the implementation.
+// 1. "System" should be removed from both the function names: these functions
+//    are not for system keys or key combinations only.
+//    See https://github.com/w3c/keyboard-lock/issues/6
+// 2. Returns Promise<void> from requestKeyboardLock() function: user agents can
+//    decline the request, and web page can get a notification once the
+//    requested keys should be received.
+//    See https://github.com/w3c/keyboard-lock/issues/7
+// 3. The parameter of requestKeyboardLock() should be
+//        optional sequence<DOMString> keyCodes = []
+//    See https://github.com/w3c/keyboard-lock/issues/21
+// 4. cancelKeyboardLock() function is implicitly called whenever the unloading
+//    document cleanup steps run with a document.
+//    See https://github.com/w3c/keyboard-lock/issues/22
+[
+    ImplementedAs=NavigatorKeyboardLock
+] partial interface Navigator {
+    [SecureContext, RuntimeEnabled=KeyboardLock, CallWith=ScriptState] Promise<void> requestKeyboardLock(optional sequence<DOMString> keyCodes = []);
+    [SecureContext, RuntimeEnabled=KeyboardLock] void cancelKeyboardLock();
+};
diff --git a/modules/media_capabilities/AudioConfiguration.idl b/modules/media_capabilities/AudioConfiguration.idl
new file mode 100644
index 0000000..37ce30e
--- /dev/null
+++ b/modules/media_capabilities/AudioConfiguration.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#dictdef-audioconfiguration
+
+dictionary AudioConfiguration {
+    required DOMString contentType;
+
+    DOMString channels;
+    unsigned long bitrate;
+    unsigned long samplerate;
+};
diff --git a/modules/media_capabilities/MediaCapabilities.idl b/modules/media_capabilities/MediaCapabilities.idl
new file mode 100644
index 0000000..21def83
--- /dev/null
+++ b/modules/media_capabilities/MediaCapabilities.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#mediacapabilities
+
+[
+    Exposed=Window,
+    RuntimeEnabled=MediaCapabilities
+] interface MediaCapabilities {
+    [CallWith=ScriptState] Promise<MediaCapabilitiesInfo> decodingInfo(MediaDecodingConfiguration configuration);
+    [CallWith=ScriptState] Promise<MediaCapabilitiesInfo> encodingInfo(
+        MediaEncodingConfiguration configuration);
+};
diff --git a/modules/media_capabilities/MediaCapabilitiesInfo.idl b/modules/media_capabilities/MediaCapabilitiesInfo.idl
new file mode 100644
index 0000000..6feab9a
--- /dev/null
+++ b/modules/media_capabilities/MediaCapabilitiesInfo.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#mediacapabilitiesinfo
+
+[
+    Exposed=Window,
+    RuntimeEnabled=MediaCapabilities
+] interface MediaCapabilitiesInfo {
+    readonly attribute boolean supported;
+    readonly attribute boolean smooth;
+    readonly attribute boolean powerEfficient;
+};
diff --git a/modules/media_capabilities/MediaConfiguration.idl b/modules/media_capabilities/MediaConfiguration.idl
new file mode 100644
index 0000000..afaa0f0
--- /dev/null
+++ b/modules/media_capabilities/MediaConfiguration.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#dictdef-mediaconfiguration
+
+dictionary MediaConfiguration {
+    VideoConfiguration video;
+    AudioConfiguration audio;
+};
diff --git a/modules/media_capabilities/MediaDecodingConfiguration.idl b/modules/media_capabilities/MediaDecodingConfiguration.idl
new file mode 100644
index 0000000..b794fd6
--- /dev/null
+++ b/modules/media_capabilities/MediaDecodingConfiguration.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#enumdef-mediadecodingtype
+
+enum MediaDecodingType {
+    "file",
+    "media-source",
+};
+
+// https://wicg.github.io/media-capabilities/#dictdef-mediadecodingconfiguration
+
+dictionary MediaDecodingConfiguration : MediaConfiguration {
+    required MediaDecodingType type;
+};
diff --git a/modules/media_capabilities/MediaEncodingConfiguration.idl b/modules/media_capabilities/MediaEncodingConfiguration.idl
new file mode 100644
index 0000000..d433c36
--- /dev/null
+++ b/modules/media_capabilities/MediaEncodingConfiguration.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#dictdef-mediaencodingconfiguration
+
+enum MediaEncodingType {
+    "record",
+    // TODO(mcasas): Implement other types https://crbug.com/709181
+};
+
+dictionary MediaEncodingConfiguration : MediaConfiguration{
+  required MediaEncodingType type;
+};
diff --git a/modules/media_capabilities/NavigatorMediaCapabilities.idl b/modules/media_capabilities/NavigatorMediaCapabilities.idl
new file mode 100644
index 0000000..ed04a7e
--- /dev/null
+++ b/modules/media_capabilities/NavigatorMediaCapabilities.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#navigators-extensions
+
+[
+    Exposed=Window,
+    ImplementedAs=NavigatorMediaCapabilities,
+    RuntimeEnabled=MediaCapabilities
+] partial interface Navigator {
+    [SameObject] readonly attribute MediaCapabilities mediaCapabilities;
+};
diff --git a/modules/media_capabilities/VideoConfiguration.idl b/modules/media_capabilities/VideoConfiguration.idl
new file mode 100644
index 0000000..af63d0b
--- /dev/null
+++ b/modules/media_capabilities/VideoConfiguration.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/media-capabilities/#dictdef-videoconfiguration
+
+dictionary VideoConfiguration {
+    required DOMString contentType;
+    required unsigned long width;
+    required unsigned long height;
+    required unsigned long bitrate;
+    required double framerate;
+};
diff --git a/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl b/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
index 69c5fef..e283bb7 100644
--- a/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
+++ b/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.idl
@@ -2,10 +2,8 @@
 // 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 {
+// https://w3c.github.io/mediacapture-fromelement/#the-canvascapturemediastreamtrack
+interface CanvasCaptureMediaStreamTrack : MediaStreamTrack {
     readonly attribute HTMLCanvasElement canvas;
     void requestFrame ();
 };
diff --git a/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl b/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl
index ca2cc74..73eb3bb 100644
--- a/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl
+++ b/modules/mediacapturefromelement/HTMLCanvasElementCapture.idl
@@ -2,9 +2,9 @@
 // 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
+// https://w3c.github.io/mediacapture-fromelement/#html-canvas-element-media-capture-extensions
 [
-    RuntimeEnabled=MediaCaptureFromCanvas
+    ImplementedAs=HTMLCanvasElementCapture
 ] partial interface HTMLCanvasElement {
-    [RaisesException] MediaStream captureStream (optional double frameRate);
+    [RaisesException, CallWith=ScriptState] MediaStream captureStream (optional double frameRate);
 };
diff --git a/modules/mediacapturefromelement/HTMLMediaElementCapture.idl b/modules/mediacapturefromelement/HTMLMediaElementCapture.idl
index 059f3d1..212dd1e 100644
--- a/modules/mediacapturefromelement/HTMLMediaElementCapture.idl
+++ b/modules/mediacapturefromelement/HTMLMediaElementCapture.idl
@@ -5,6 +5,7 @@
 // https://w3c.github.io/mediacapture-fromelement/#html-media-element-media-capture-extensions
 
 [
+    ImplementedAs=HTMLMediaElementCapture,
     RuntimeEnabled=MediaCaptureFromVideo
 ] partial interface HTMLMediaElement {
     [RaisesException] MediaStream captureStream();
diff --git a/modules/mediarecorder/BlobEvent.idl b/modules/mediarecorder/BlobEvent.idl
index 5d46d57..a73a18f 100644
--- a/modules/mediarecorder/BlobEvent.idl
+++ b/modules/mediarecorder/BlobEvent.idl
@@ -5,9 +5,9 @@
 // https://w3c.github.io/mediacapture-record/MediaRecorder.html#blob-event
 
 [
-    Constructor(DOMString type, BlobEventInit eventInitDict),
-    RuntimeEnabled=MediaRecorder
+    Constructor(DOMString type, BlobEventInit eventInitDict)
 ]
 interface BlobEvent : Event {
-    readonly attribute Blob data;
+    [SameObject] readonly attribute Blob data;
+    readonly attribute DOMHighResTimeStamp timecode;
 };
diff --git a/modules/mediarecorder/BlobEventInit.idl b/modules/mediarecorder/BlobEventInit.idl
index 23fe9bd..f6c3595 100644
--- a/modules/mediarecorder/BlobEventInit.idl
+++ b/modules/mediarecorder/BlobEventInit.idl
@@ -6,4 +6,5 @@
 
 dictionary BlobEventInit : EventInit {
     required Blob data;
+             DOMHighResTimeStamp timecode;
 };
diff --git a/modules/mediarecorder/MediaRecorder.idl b/modules/mediarecorder/MediaRecorder.idl
index aa15744..3eb90d6 100644
--- a/modules/mediarecorder/MediaRecorder.idl
+++ b/modules/mediarecorder/MediaRecorder.idl
@@ -7,12 +7,11 @@
 enum RecordingState { "inactive", "recording", "paused" };
 
 [
-    GarbageCollected,
-    DependentLifetime,
-    Constructor(MediaStream stream, optional MediaRecorderOptions options),
+    ActiveScriptWrappable,
     ConstructorCallWith=ExecutionContext,
-    RaisesException=Constructor,
-    RuntimeEnabled=MediaRecorder,
+    Constructor(MediaStream stream, optional MediaRecorderOptions options),
+    DependentLifetime,
+    RaisesException=Constructor
 ] interface MediaRecorder : EventTarget {
     readonly attribute MediaStream stream;
     readonly attribute DOMString mimeType;
@@ -24,11 +23,10 @@
     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, Measure] void start(optional long timeslice);
     [RaisesException] void stop();
     [RaisesException] void pause();
     [RaisesException] void resume();
diff --git a/modules/mediasession/HTMLMediaElementMediaSession.idl b/modules/mediasession/HTMLMediaElementMediaSession.idl
deleted file mode 100644
index a32ece1..0000000
--- a/modules/mediasession/HTMLMediaElementMediaSession.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.
-
-// https://mediasession.spec.whatwg.org/#extensions-to-the-htmlmediaelement-interface
-
-[
-    RuntimeEnabled=MediaSession,
-] partial interface HTMLMediaElement {
-    [RaisesException=Setter] attribute MediaSession? session;
-};
diff --git a/modules/mediasession/MediaImage.idl b/modules/mediasession/MediaImage.idl
new file mode 100644
index 0000000..ef4703a
--- /dev/null
+++ b/modules/mediasession/MediaImage.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://wicg.github.io/mediasession/#dictdef-mediaimage
+
+dictionary MediaImage {
+  required USVString src;
+  DOMString sizes = "";
+  DOMString type = "";
+};
diff --git a/modules/mediasession/MediaMetadata.idl b/modules/mediasession/MediaMetadata.idl
index 03f0d45..5456a5d 100644
--- a/modules/mediasession/MediaMetadata.idl
+++ b/modules/mediasession/MediaMetadata.idl
@@ -2,14 +2,16 @@
 // 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
+// https://wicg.github.io/mediasession/#the-mediametadata-interface
 
 [
-    Constructor(MediaMetadataInit metadata),
-    GarbageCollected,
-    RuntimeEnabled=MediaSession,
+    ConstructorCallWith=ScriptState,
+    Constructor(optional MediaMetadataInit metadata),
+    RaisesException=Constructor,
+    RuntimeEnabled=MediaSession
 ] interface MediaMetadata {
-    readonly attribute DOMString title;
-    readonly attribute DOMString artist;
-    readonly attribute DOMString album;
+    attribute DOMString title;
+    attribute DOMString artist;
+    attribute DOMString album;
+    [CallWith=ScriptState, RaisesException=Setter] attribute FrozenArray<MediaImage> artwork;
 };
diff --git a/modules/mediasession/MediaMetadataInit.idl b/modules/mediasession/MediaMetadataInit.idl
index 60377cd..4f08593 100644
--- a/modules/mediasession/MediaMetadataInit.idl
+++ b/modules/mediasession/MediaMetadataInit.idl
@@ -2,10 +2,11 @@
 // 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
+// https://wicg.github.io/mediasession/#the-mediametadata-interface
 
 dictionary MediaMetadataInit {
     DOMString title = "";
     DOMString artist = "";
     DOMString album = "";
+    sequence<MediaImage> artwork = [];
 };
diff --git a/modules/mediasession/MediaSession.idl b/modules/mediasession/MediaSession.idl
index b09cbc3..73413db 100644
--- a/modules/mediasession/MediaSession.idl
+++ b/modules/mediasession/MediaSession.idl
@@ -2,17 +2,34 @@
 // 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-mediasession-interface
+// https://wicg.github.io/mediasession/#enumdef-mediasessionplaybackstate
+
+enum MediaSessionPlaybackState {
+    "none",
+    "paused",
+    "playing"
+};
+
+// https://wicg.github.io/mediasession/#the-mediasession-interface
+
+enum MediaSessionAction {
+  "play",
+  "pause",
+  "previoustrack",
+  "nexttrack",
+  "seekbackward",
+  "seekforward"
+};
+
+callback MediaSessionActionHandler = void ();
 
 [
-    Constructor(),
-    ConstructorCallWith=ExecutionContext,
-    RaisesException=Constructor,
-    GarbageCollected,
     RuntimeEnabled=MediaSession,
+    DependentLifetime
 ] interface MediaSession {
-    attribute MediaMetadata? metadata;
+    [Measure] attribute MediaMetadata? metadata;
+    [Measure] attribute MediaSessionPlaybackState playbackState;
 
-    [CallWith=ScriptState] Promise<void> activate();
-    [CallWith=ScriptState] Promise<void> deactivate();
+    [Measure] void setActionHandler(MediaSessionAction action,
+                                    MediaSessionActionHandler? handler);
 };
diff --git a/modules/mediasession/NavigatorMediaSession.idl b/modules/mediasession/NavigatorMediaSession.idl
new file mode 100644
index 0000000..5f6d68d
--- /dev/null
+++ b/modules/mediasession/NavigatorMediaSession.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/mediasession/#the-mediasession-interface
+
+[
+    Exposed=(Window),
+    ImplementedAs=NavigatorMediaSession,
+    RuntimeEnabled=MediaSession
+] partial interface Navigator {
+    [CallWith=ScriptState, SameObject] readonly attribute MediaSession mediaSession;
+};
diff --git a/modules/mediasource/AudioTrackSourceBuffer.idl b/modules/mediasource/AudioTrackSourceBuffer.idl
new file mode 100644
index 0000000..cc19b7f
--- /dev/null
+++ b/modules/mediasource/AudioTrackSourceBuffer.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/media-source/#audio-track-extensions
+[
+    ImplementedAs=SourceBufferTrackBaseSupplement,
+    RuntimeEnabled=AudioVideoTracks
+] partial interface AudioTrack {
+    readonly attribute SourceBuffer? sourceBuffer;
+};
diff --git a/modules/mediasource/HTMLVideoElementMediaSource.idl b/modules/mediasource/HTMLVideoElementMediaSource.idl
index 57de64f..f9ff337 100644
--- a/modules/mediasource/HTMLVideoElementMediaSource.idl
+++ b/modules/mediasource/HTMLVideoElementMediaSource.idl
@@ -29,7 +29,8 @@
  */
 
 [
-    RuntimeEnabled=MediaSourceExperimental,
+    ImplementedAs=HTMLVideoElementMediaSource,
+    RuntimeEnabled=MediaSourceExperimental
 ] partial interface HTMLVideoElement {
     VideoPlaybackQuality getVideoPlaybackQuality();
 };
diff --git a/modules/mediasource/MediaSource.idl b/modules/mediasource/MediaSource.idl
index 253faa0..cd6ac7b 100644
--- a/modules/mediasource/MediaSource.idl
+++ b/modules/mediasource/MediaSource.idl
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-MediaSource
+// https://w3c.github.io/media-source/#idl-def-mediasource
 
 enum EndOfStreamError {
     "network",
@@ -36,10 +36,10 @@
 };
 
 [
-    DependentLifetime,
+    ActiveScriptWrappable,
     Constructor,
     ConstructorCallWith=ExecutionContext,
-    RuntimeEnabled=MediaSource,
+    DependentLifetime
 ] interface MediaSource : EventTarget {
     // All the source buffers created by this object.
     readonly attribute SourceBufferList sourceBuffers;
@@ -48,13 +48,16 @@
     readonly attribute SourceBufferList activeSourceBuffers;
 
     [RaisesException=Setter] attribute unrestricted double duration;
-
+    attribute EventHandler onsourceopen;
+    attribute EventHandler onsourceended;
+    attribute EventHandler onsourceclose;
     [RaisesException] SourceBuffer addSourceBuffer(DOMString type);
     [RaisesException] void removeSourceBuffer(SourceBuffer buffer);
-
     readonly attribute DOMString readyState;
-
     [RaisesException] void endOfStream(optional EndOfStreamError error);
 
+    [RaisesException] void setLiveSeekableRange(double start, double end);
+    [RaisesException] void clearLiveSeekableRange();
+
     static boolean isTypeSupported (DOMString type);
 };
diff --git a/modules/mediasource/SourceBuffer.idl b/modules/mediasource/SourceBuffer.idl
index a3f206e..3ad08b3 100644
--- a/modules/mediasource/SourceBuffer.idl
+++ b/modules/mediasource/SourceBuffer.idl
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-SourceBuffer
+// https://w3c.github.io/media-source/#idl-def-sourcebuffer
 
 enum AppendMode {
     "segments",
@@ -36,8 +36,8 @@
 };
 
 [
-    DependentLifetime,
-    RuntimeEnabled=MediaSource,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface SourceBuffer : EventTarget {
 
     // Gets or sets the AppendMode.
@@ -51,18 +51,25 @@
     // Applies an offset to media segment timestamps.
     [RaisesException=Setter] attribute double timestampOffset;
 
+    [RuntimeEnabled=AudioVideoTracks] readonly attribute AudioTrackList audioTracks;
+    [RuntimeEnabled=AudioVideoTracks] readonly attribute VideoTrackList videoTracks;
+
     // Presentation timestamp for the start of append window.
     [RaisesException=Setter] attribute double appendWindowStart;
 
     // Presentation timestamp for the end of append window.
     [RaisesException=Setter] attribute unrestricted double appendWindowEnd;
 
+    attribute EventHandler onupdatestart;
+    attribute EventHandler onupdate;
+    attribute EventHandler onupdateend;
+    attribute EventHandler onerror;
+    attribute EventHandler onabort;
+
     // Append segment data.
     [RaisesException] void appendBuffer(ArrayBuffer data);
     [RaisesException] void appendBuffer(ArrayBufferView data);
 
-    [RaisesException, RuntimeEnabled=ExperimentalStream] void appendStream(Stream stream, optional unsigned long long maxSize);
-
     // Abort the current segment append sequence.
     [RaisesException] void abort();
     [RaisesException] void remove(double start, unrestricted double end);
diff --git a/modules/mediasource/SourceBufferList.idl b/modules/mediasource/SourceBufferList.idl
index 2cd26cc..2a3049e 100644
--- a/modules/mediasource/SourceBufferList.idl
+++ b/modules/mediasource/SourceBufferList.idl
@@ -28,11 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-    RuntimeEnabled=MediaSource,
-] interface SourceBufferList : EventTarget {
+interface SourceBufferList : EventTarget {
     readonly attribute unsigned long length;
+    attribute EventHandler onaddsourcebuffer;
+    attribute EventHandler onremovesourcebuffer;
     [ImplementedAs=item] getter SourceBuffer (unsigned long index);
 };
-
diff --git a/modules/mediasource/TrackDefault.idl b/modules/mediasource/TrackDefault.idl
index 5c8687f..8a8e11a 100644
--- a/modules/mediasource/TrackDefault.idl
+++ b/modules/mediasource/TrackDefault.idl
@@ -10,12 +10,16 @@
 [
     Constructor(TrackDefaultType type, DOMString language, DOMString label, sequence<DOMString> kinds, optional DOMString byteStreamTrackID = ""),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=MediaSourceExperimental,
+    RuntimeEnabled=MediaSourceExperimental
 ] interface TrackDefault {
     readonly attribute TrackDefaultType type;
     readonly attribute DOMString byteStreamTrackID;
     readonly attribute DOMString language;
     readonly attribute DOMString label;
-    readonly attribute DOMString[] kinds;
+    // TrackDefault was removed from the spec in
+    // https://github.com/w3c/media-source/pull/138, and the last version to
+    // have it had getKinds() instead of |kinds|. Use an object here to avoid
+    // WebIDL arrays (which no longer exist) while not breaking compatibility
+    // See also: https://crbug.com/619665.
+    [CallWith=ScriptState] readonly attribute object kinds;
 };
diff --git a/modules/mediasource/TrackDefaultList.idl b/modules/mediasource/TrackDefaultList.idl
index 2b962fc..9ed5174 100644
--- a/modules/mediasource/TrackDefaultList.idl
+++ b/modules/mediasource/TrackDefaultList.idl
@@ -8,8 +8,7 @@
 [
     Constructor(optional sequence<TrackDefault> trackDefaults = []),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=MediaSourceExperimental,
+    RuntimeEnabled=MediaSourceExperimental
 ] interface TrackDefaultList {
     readonly attribute unsigned long length;
     [ImplementedAs=item] getter TrackDefault (unsigned long index);
diff --git a/modules/mediasource/URLMediaSource.idl b/modules/mediasource/URLMediaSource.idl
index db0aa53..7151a94 100644
--- a/modules/mediasource/URLMediaSource.idl
+++ b/modules/mediasource/URLMediaSource.idl
@@ -28,8 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-URL
+// https://w3c.github.io/media-source/#url
 
-partial interface URL {
-    [CallWith=ExecutionContext] static DOMString? createObjectURL(MediaSource source);
+[
+    ImplementedAs=URLMediaSource
+] partial interface URL {
+    [Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState] static DOMString createObjectURL(MediaSource source);
 };
diff --git a/modules/mediasource/VideoPlaybackQuality.idl b/modules/mediasource/VideoPlaybackQuality.idl
index 063888e..809bb88 100644
--- a/modules/mediasource/VideoPlaybackQuality.idl
+++ b/modules/mediasource/VideoPlaybackQuality.idl
@@ -28,8 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    GarbageCollected,
-    RuntimeEnabled=MediaSourceExperimental,
+    RuntimeEnabled=MediaSourceExperimental
 ] interface VideoPlaybackQuality {
     readonly attribute double creationTime;
     readonly attribute unsigned long totalVideoFrames;
diff --git a/modules/mediasource/VideoTrackSourceBuffer.idl b/modules/mediasource/VideoTrackSourceBuffer.idl
new file mode 100644
index 0000000..3b986a2
--- /dev/null
+++ b/modules/mediasource/VideoTrackSourceBuffer.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/media-source/#video-track-extensions
+[
+    ImplementedAs=SourceBufferTrackBaseSupplement,
+    RuntimeEnabled=AudioVideoTracks
+] partial interface VideoTrack {
+    readonly attribute SourceBuffer? sourceBuffer;
+};
diff --git a/modules/mediastream/ConstrainBooleanParameters.idl b/modules/mediastream/ConstrainBooleanParameters.idl
index c8e9677..55aafb0 100644
--- a/modules/mediastream/ConstrainBooleanParameters.idl
+++ b/modules/mediastream/ConstrainBooleanParameters.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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainBooleanParameters
+// https://w3c.github.io/mediacapture-main/#idl-def-constrainbooleanparameters
 
 dictionary ConstrainBooleanParameters {
     boolean exact;
diff --git a/modules/mediastream/ConstrainDOMStringParameters.idl b/modules/mediastream/ConstrainDOMStringParameters.idl
index 93bc42e..a27c88b 100644
--- a/modules/mediastream/ConstrainDOMStringParameters.idl
+++ b/modules/mediastream/ConstrainDOMStringParameters.idl
@@ -2,13 +2,9 @@
 // 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
+// https://w3c.github.io/mediacapture-main/#idl-def-constraindomstringparameters
 
 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
+    (DOMString or sequence<DOMString>) exact;
+    (DOMString or sequence<DOMString>) ideal;
 };
diff --git a/modules/mediastream/ConstrainDoubleRange.idl b/modules/mediastream/ConstrainDoubleRange.idl
index 15e92f2..aefc25a 100644
--- a/modules/mediastream/ConstrainDoubleRange.idl
+++ b/modules/mediastream/ConstrainDoubleRange.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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainDoubleRange
+// https://w3c.github.io/mediacapture-main/#idl-def-constraindoublerange
 
 dictionary ConstrainDoubleRange : DoubleRange {
     double exact;
diff --git a/modules/mediastream/ConstrainLongRange.idl b/modules/mediastream/ConstrainLongRange.idl
index a894734..d3ece44 100644
--- a/modules/mediastream/ConstrainLongRange.idl
+++ b/modules/mediastream/ConstrainLongRange.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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-ConstrainLongRange
+// https://w3c.github.io/mediacapture-main/#idl-def-constrainlongrange
 
 dictionary ConstrainLongRange : LongRange {
     long exact;
diff --git a/modules/mediastream/DoubleRange.idl b/modules/mediastream/DoubleRange.idl
index 424dfb0..774d3f5 100644
--- a/modules/mediastream/DoubleRange.idl
+++ b/modules/mediastream/DoubleRange.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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-DoubleRange
+// https://w3c.github.io/mediacapture-main/#idl-def-doublerange
 
 dictionary DoubleRange {
     double max;
diff --git a/modules/mediastream/LongRange.idl b/modules/mediastream/LongRange.idl
index d6dc0a4..d251187 100644
--- a/modules/mediastream/LongRange.idl
+++ b/modules/mediastream/LongRange.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://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-LongRange
+// https://w3c.github.io/mediacapture-main/#idl-def-longrange
 
 dictionary LongRange {
     long max;
diff --git a/modules/mediastream/MediaDeviceInfo.idl b/modules/mediastream/MediaDeviceInfo.idl
index 34b0e0c..3ff1e1d 100644
--- a/modules/mediastream/MediaDeviceInfo.idl
+++ b/modules/mediastream/MediaDeviceInfo.idl
@@ -23,16 +23,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://w3c.github.io/mediacapture-main/#device-info
+
 enum MediaDeviceKind {
     "audioinput",
     "audiooutput",
     "videoinput"
 };
 
-[
-    GarbageCollected,
-    NoInterfaceObject
-] interface MediaDeviceInfo {
+interface MediaDeviceInfo {
     readonly attribute DOMString deviceId;
     readonly attribute MediaDeviceKind kind;
     readonly attribute DOMString label;
diff --git a/modules/mediastream/MediaDevices.idl b/modules/mediastream/MediaDevices.idl
index f7aa991..bfd830d 100644
--- a/modules/mediastream/MediaDevices.idl
+++ b/modules/mediastream/MediaDevices.idl
@@ -3,14 +3,18 @@
 // found in the LICENSE file.
 
 // The spec for MediaDevices is in two parts:
-// http://w3c.github.io/mediacapture-main/#mediadevices
-// http://w3c.github.io/mediacapture-main/#mediadevices-interface-extensions
+// https://w3c.github.io/mediacapture-main/#mediadevices
+// https://w3c.github.io/mediacapture-main/#mediadevices-interface-extensions
 
 [
-    GarbageCollected,
-    RuntimeEnabled=MediaDevices
-]
-interface MediaDevices {
+    ActiveScriptWrappable,
+    DependentLifetime
+] interface MediaDevices : EventTarget {
+    [RuntimeEnabled=OnDeviceChange] attribute EventHandler ondevicechange;
     [CallWith=ScriptState, MeasureAs=MediaDevicesEnumerateDevices] Promise<sequence<MediaDeviceInfo>> enumerateDevices();
-    [RuntimeEnabled=GetUserMedia, CallWith=ScriptState, RaisesException] Promise<MediaStream> getUserMedia(MediaStreamConstraints options);
+    MediaTrackSupportedConstraints getSupportedConstraints();
+    [CallWith=ScriptState,
+     RaisesException,
+     MeasureAs=GetUserMediaPromise
+    ] Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints);
 };
diff --git a/modules/mediastream/MediaStream.idl b/modules/mediastream/MediaStream.idl
index 146dff1..9add324 100644
--- a/modules/mediastream/MediaStream.idl
+++ b/modules/mediastream/MediaStream.idl
@@ -10,47 +10,41 @@
  *     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.
+ * 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.
  */
 
-// http://w3c.github.io/mediacapture-main/getusermedia.html#idl-def-MediaStream
+// https://w3c.github.io/mediacapture-main/#idl-def-mediastream
 
 [
-    GarbageCollected,
     Constructor,
     Constructor(MediaStream stream),
-    Constructor(MediaStreamTrack[] tracks),
-    ConstructorCallWith=ExecutionContext,
-    NoInterfaceObject,
+    Constructor(sequence<MediaStreamTrack> tracks),
+    ConstructorCallWith=ExecutionContext
 ] interface MediaStream : EventTarget {
-
     readonly attribute DOMString id;
-
     sequence<MediaStreamTrack> getAudioTracks();
     sequence<MediaStreamTrack> getVideoTracks();
     sequence<MediaStreamTrack> getTracks();
-
+    MediaStreamTrack? getTrackById(DOMString trackId);
     [RaisesException] void addTrack(MediaStreamTrack track);
     [RaisesException] void removeTrack(MediaStreamTrack track);
-    MediaStreamTrack getTrackById(DOMString trackId);
-    [CallWith=ExecutionContext] MediaStream clone();
-
-    readonly attribute boolean active;
-
-    attribute EventHandler onactive;
-    attribute EventHandler oninactive;
-    //  DEPRECATED
-    [MeasureAs=MediaStreamOnEnded] attribute EventHandler onended;
-
+    [CallWith=ScriptState] MediaStream clone();
+    [Measure] readonly attribute boolean active;
     attribute EventHandler onaddtrack;
     attribute EventHandler onremovetrack;
+
+    // TODO(guidou): Remove the active and inactive events on MediaStream.
+    // https://crbug.com/649328
+    attribute EventHandler onactive;
+    attribute EventHandler oninactive;
 };
diff --git a/modules/mediastream/MediaStreamConstraints.idl b/modules/mediastream/MediaStreamConstraints.idl
index b5a8fee..a63c6e3 100644
--- a/modules/mediastream/MediaStreamConstraints.idl
+++ b/modules/mediastream/MediaStreamConstraints.idl
@@ -2,9 +2,9 @@
 // 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
+// https://w3c.github.io/mediacapture-main/#idl-def-mediastreamconstraints
 
 dictionary MediaStreamConstraints {
-  (boolean or MediaTrackConstraintSet) video;
-  (boolean or MediaTrackConstraintSet) audio;
+    (boolean or MediaTrackConstraints) video = false;
+    (boolean or MediaTrackConstraints) audio = false;
 };
diff --git a/modules/mediastream/MediaStreamEvent.idl b/modules/mediastream/MediaStreamEvent.idl
index f088583..80a1082 100644
--- a/modules/mediastream/MediaStreamEvent.idl
+++ b/modules/mediastream/MediaStreamEvent.idl
@@ -10,22 +10,24 @@
  *     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.
+ * 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.
  */
 
-// http://www.w3.org/TR/webrtc/#mediastreamevent
+// An old version of WebRTC defines the MediaStreamEvent interface:
+// https://www.w3.org/TR/2015/WD-webrtc-20150210/#mediastreamevent
 
 [
-    Constructor(DOMString type, optional MediaStreamEventInit eventInitDict),
+    Constructor(DOMString type, optional MediaStreamEventInit eventInitDict)
 ] interface MediaStreamEvent : Event {
     readonly attribute MediaStream? stream;
 };
diff --git a/modules/mediastream/MediaStreamEventInit.idl b/modules/mediastream/MediaStreamEventInit.idl
index f7ba224..8c58e16 100644
--- a/modules/mediastream/MediaStreamEventInit.idl
+++ b/modules/mediastream/MediaStreamEventInit.idl
@@ -2,8 +2,9 @@
 // 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/webrtc/#mediastreamevent
+// An old version of WebRTC defines the MediaStreamEvent interface:
+// https://www.w3.org/TR/2015/WD-webrtc-20150210/#mediastreamevent
 
 dictionary MediaStreamEventInit : EventInit {
-    MediaStream stream;
+    MediaStream? stream;
 };
diff --git a/modules/mediastream/MediaStreamTrack.idl b/modules/mediastream/MediaStreamTrack.idl
index 1c7f1fd..a5783f7 100644
--- a/modules/mediastream/MediaStreamTrack.idl
+++ b/modules/mediastream/MediaStreamTrack.idl
@@ -10,20 +10,31 @@
  *     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.
+ * 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://w3c.github.io/mediacapture-main/#mediastreamtrack
+
+// TODO(foolip): Remove or standardize MediaStreamTrackState "muted".
+// https://crbug.com/651414
+enum MediaStreamTrackState {
+    "live",
+    "muted",
+    "ended"
+};
+
 [
-    GarbageCollected,
+    ActiveScriptWrappable,
     DependentLifetime
 ] interface MediaStreamTrack : EventTarget {
     readonly attribute DOMString kind;
@@ -31,15 +42,19 @@
     readonly attribute DOMString label;
     attribute boolean enabled;
     readonly attribute boolean muted;
-    readonly attribute boolean remote;
-    readonly attribute DOMString readyState;
-
-    [CallWith=ExecutionContext, RaisesException, DeprecateAs=MediaStreamTrackGetSources] static void getSources(MediaStreamTrackSourcesCallback callback);
-    [ImplementedAs=stopTrack, RaisesException] void stop();
-    [CallWith=ExecutionContext] MediaStreamTrack clone();
-
     attribute EventHandler onmute;
     attribute EventHandler onunmute;
+    readonly attribute MediaStreamTrackState readyState;
     attribute EventHandler onended;
-};
 
+    [CallWith=ScriptState] MediaStreamTrack clone();
+    [ImplementedAs=stopTrack, RaisesException] void stop();
+
+    MediaTrackCapabilities getCapabilities();
+    MediaTrackConstraints getConstraints();
+    MediaTrackSettings getSettings();
+    // Spec resolves applyConstraints() with void, here we resolve with the
+    // applied MediaTrackConstraints instead:
+    // https://github.com/w3c/mediacapture-main/issues/462
+    [CallWith=ScriptState] Promise<MediaTrackConstraints> applyConstraints(optional MediaTrackConstraints constraints);
+};
diff --git a/modules/mediastream/MediaStreamTrackContentHint.idl b/modules/mediastream/MediaStreamTrackContentHint.idl
new file mode 100644
index 0000000..c333f0e
--- /dev/null
+++ b/modules/mediastream/MediaStreamTrackContentHint.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://wicg.github.io/mst-content-hint/#extension-to-mediastreamtrack
+[
+    ImplementedAs=MediaStreamTrackContentHint,
+    RuntimeEnabled=MediaStreamTrackContentHint
+] partial interface MediaStreamTrack {
+    attribute DOMString contentHint;
+};
diff --git a/modules/mediastream/MediaStreamTrackEvent.idl b/modules/mediastream/MediaStreamTrackEvent.idl
index b3967d4..0d0f447 100644
--- a/modules/mediastream/MediaStreamTrackEvent.idl
+++ b/modules/mediastream/MediaStreamTrackEvent.idl
@@ -10,21 +10,24 @@
  *     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.
+ * 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.
  */
 
-[
-    NoInterfaceObject
-] interface MediaStreamTrackEvent : Event {
-   readonly attribute MediaStreamTrack track;
-};
+// https://w3c.github.io/mediacapture-main/#mediastreamtrackevent
 
+[
+    Exposed=Window,
+    Constructor(DOMString type, MediaStreamTrackEventInit eventInitDict)
+] interface MediaStreamTrackEvent : Event {
+   [SameObject] readonly attribute MediaStreamTrack track;
+};
diff --git a/modules/mediastream/MediaStreamTrackEventInit.idl b/modules/mediastream/MediaStreamTrackEventInit.idl
new file mode 100644
index 0000000..4be97fa
--- /dev/null
+++ b/modules/mediastream/MediaStreamTrackEventInit.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.
+
+// https://w3c.github.io/mediacapture-main/#mediastreamtrackevent
+
+dictionary MediaStreamTrackEventInit : EventInit {
+    required MediaStreamTrack track;
+};
diff --git a/modules/mediastream/MediaStreamTrackSourcesCallback.idl b/modules/mediastream/MediaStreamTrackSourcesCallback.idl
deleted file mode 100644
index e18f7bb..0000000
--- a/modules/mediastream/MediaStreamTrackSourcesCallback.idl
+++ /dev/null
@@ -1,29 +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:
- * 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 GOOGLE 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 GOOGLE 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.
- */
-
-callback interface MediaStreamTrackSourcesCallback {
-    void handleEvent(sequence<SourceInfo> sources);
-};
-
diff --git a/modules/mediastream/MediaTrackCapabilities.idl b/modules/mediastream/MediaTrackCapabilities.idl
new file mode 100644
index 0000000..ee500dc
--- /dev/null
+++ b/modules/mediastream/MediaTrackCapabilities.idl
@@ -0,0 +1,22 @@
+// Copyright 2017 The Chromium 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 MediaTrackCapabilities {
+    // W3C Image Capture API
+    // https://w3c.github.io/mediacapture-image/#mediatrackcapabilities-section
+    // TODO(mcasas) move out when partial dictionaries are supported
+    // http://crbug.com/579896.
+    sequence<DOMString>  whiteBalanceMode;
+    sequence<DOMString>  exposureMode;
+    sequence<DOMString>  focusMode;
+    MediaSettingsRange   exposureCompensation;
+    MediaSettingsRange   colorTemperature;
+    MediaSettingsRange   iso;
+    MediaSettingsRange   brightness;
+    MediaSettingsRange   contrast;
+    MediaSettingsRange   saturation;
+    MediaSettingsRange   sharpness;
+    MediaSettingsRange   zoom;
+    boolean              torch;
+};
diff --git a/modules/mediastream/MediaTrackConstraintSet.idl b/modules/mediastream/MediaTrackConstraintSet.idl
index 04a3f33..eb1d7c5 100644
--- a/modules/mediastream/MediaTrackConstraintSet.idl
+++ b/modules/mediastream/MediaTrackConstraintSet.idl
@@ -2,33 +2,55 @@
 // 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
+// https://w3c.github.io/mediacapture-main/#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
+typedef (long or ConstrainLongRange) ConstrainLong;
+typedef (double or ConstrainDoubleRange) ConstrainDouble;
+typedef (boolean or ConstrainBooleanParameters) ConstrainBoolean;
+typedef (DOMString or sequence<DOMString> or ConstrainDOMStringParameters) ConstrainDOMString;
+typedef (sequence<Point2D> or ConstrainPoint2DParameters) ConstrainPoint2D;
 
 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;
+    ConstrainLong width;
+    ConstrainLong height;
+    ConstrainDouble aspectRatio;
+    ConstrainDouble frameRate;
+    ConstrainDOMString facingMode;
+    ConstrainDouble volume;
+    ConstrainLong sampleRate;
+    ConstrainLong sampleSize;
+    ConstrainBoolean echoCancellation;
+    ConstrainDouble latency;
+    ConstrainLong channelCount;
+    ConstrainDOMString deviceId;
+    ConstrainDOMString groupId;
+    // Media Capture Depth Stream Extensions
+    // https://w3c.github.io/mediacapture-depth/#mediatrackconstraints
+    // TODO(aleksandar.stojiljkovic): videoKind, depthNear, depthFar,
+    // focalLengthX and focalLengthY attributes should be declared as partial
+    // dictionary but IDL parser can't support it yet. http://crbug.com/579896.
+    [RuntimeEnabled=MediaCaptureDepthVideoKind] ConstrainDOMString videoKind;
+    [RuntimeEnabled=MediaCaptureDepth] ConstrainDouble depthNear;
+    [RuntimeEnabled=MediaCaptureDepth] ConstrainDouble depthFar;
+    [RuntimeEnabled=MediaCaptureDepth] ConstrainDouble focalLengthX;
+    [RuntimeEnabled=MediaCaptureDepth] ConstrainDouble focalLengthY;
+    // W3C Image Capture API
+    // https://w3c.github.io/mediacapture-image/#mediatrackconstraintset-section
+    // TODO(mcasas) move out when partial dictionaries are supported
+    // http://crbug.com/579896.
+    ConstrainDOMString whiteBalanceMode;
+    ConstrainDOMString exposureMode;
+    ConstrainDOMString focusMode;
+    ConstrainPoint2D   pointsOfInterest;
+    ConstrainDouble    exposureCompensation;
+    ConstrainDouble    colorTemperature;
+    ConstrainDouble    iso;
+    ConstrainDouble    brightness;
+    ConstrainDouble    contrast;
+    ConstrainDouble    saturation;
+    ConstrainDouble    sharpness;
+    ConstrainDouble    zoom;
+    ConstrainBoolean   torch;
     // The "mandatory" and "_optional" members are retained for conformance
     // with https://www.w3.org/TR/2013/WD-mediacapture-streams-20130903/
     Dictionary mandatory;
diff --git a/modules/mediastream/MediaTrackConstraints.idl b/modules/mediastream/MediaTrackConstraints.idl
new file mode 100644
index 0000000..78de586
--- /dev/null
+++ b/modules/mediastream/MediaTrackConstraints.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.
+
+// https://w3c.github.io/mediacapture-main/#idl-def-mediatrackconstraints
+
+dictionary MediaTrackConstraints : MediaTrackConstraintSet {
+  sequence<MediaTrackConstraintSet> advanced;
+};
diff --git a/modules/mediastream/MediaTrackSettings.idl b/modules/mediastream/MediaTrackSettings.idl
new file mode 100644
index 0000000..0c21eaa
--- /dev/null
+++ b/modules/mediastream/MediaTrackSettings.idl
@@ -0,0 +1,51 @@
+// 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/mediacapture-main/#idl-def-mediatracksettings
+
+dictionary MediaTrackSettings {
+    long width;
+    long height;
+    double aspectRatio;
+    double frameRate;
+    DOMString facingMode;
+    // volume, sampleRate and sampleSize are not implemented.
+    // double volume;
+    // long sampleRate;
+    // long sampleSize;
+    boolean echoCancellation;
+    // latency and channelCount are not implemented.
+    // double latency;
+    // long channelCount;
+    DOMString deviceId;
+    // groupId is not implemented.
+    // DOMString groupId;
+    // Media Capture Depth Stream Extensions
+    // https://w3c.github.io/mediacapture-depth/#mediatracksettings-dictionary
+    // TODO(aleksandar.stojiljkovic): videoKind, depthNear, depthFar,
+    // focalLengthX and focalLengthY attributes should be declared as partial
+    // dictionary but IDL parser can't support it yet. http://crbug.com/579896.
+    [RuntimeEnabled=MediaCaptureDepthVideoKind] DOMString videoKind;
+    [RuntimeEnabled=MediaCaptureDepth] double depthNear;
+    [RuntimeEnabled=MediaCaptureDepth] double depthFar;
+    [RuntimeEnabled=MediaCaptureDepth] double focalLengthX;
+    [RuntimeEnabled=MediaCaptureDepth] double focalLengthY;
+    // W3C Image Capture API
+    // https://w3c.github.io/mediacapture-image/#mediatracksettings-section
+    // TODO(mcasas) move out when partial dictionaries are supported
+    // http://crbug.com/579896.
+    DOMString         whiteBalanceMode;
+    DOMString         exposureMode;
+    DOMString         focusMode;
+    sequence<Point2D> pointsOfInterest;
+    double            exposureCompensation;
+    double            colorTemperature;
+    double            iso;
+    double            brightness;
+    double            contrast;
+    double            saturation;
+    double            sharpness;
+    double            zoom;
+    boolean           torch;
+};
diff --git a/modules/mediastream/MediaTrackSupportedConstraints.idl b/modules/mediastream/MediaTrackSupportedConstraints.idl
new file mode 100644
index 0000000..4f07446
--- /dev/null
+++ b/modules/mediastream/MediaTrackSupportedConstraints.idl
@@ -0,0 +1,53 @@
+// 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/mediacapture-main/#idl-def-mediatracksupportedconstraints
+
+// NOTE: The names of this dictionary MUST be kept aligned with those in
+// MediaTrackConstraintSet.idl.
+
+dictionary MediaTrackSupportedConstraints {
+    boolean width = true;
+    boolean height = true;
+    boolean aspectRatio = true;
+    boolean frameRate = true;
+    boolean facingMode = true;
+    boolean volume = true;
+    boolean sampleRate = true;
+    boolean sampleSize = true;
+    boolean echoCancellation = true;
+    boolean latency = true;
+    boolean channelCount = true;
+    boolean deviceId = true;
+    boolean groupId = true;
+
+    // Media Capture Depth Stream Extensions
+    // https://w3c.github.io/mediacapture-depth
+    // TODO(aleksandar.stojiljkovic): videoKind, depthNear, depthFar,
+    // focalLengthX and focalLengthY attributes should be declared as partial
+    // dictionary but IDL parser can't support it yet. http://crbug.com/579896.
+    [RuntimeEnabled=MediaCaptureDepthVideoKind] boolean videoKind = true;
+    [RuntimeEnabled=MediaCaptureDepth] boolean depthNear = true;
+    [RuntimeEnabled=MediaCaptureDepth] boolean depthFar = true;
+    [RuntimeEnabled=MediaCaptureDepth] boolean focalLengthX = true;
+    [RuntimeEnabled=MediaCaptureDepth] boolean focalLengthY = true;
+
+    // W3C Image Capture API
+    // https://w3c.github.io/mediacapture-image/#mediatracksupportedconstraints-section
+    // TODO(mcasas) move out when partial dictionaries are supported
+    // http://crbug.com/579896.
+    boolean whiteBalanceMode = true;
+    boolean exposureMode = true;
+    boolean focusMode = true;
+    boolean pointsOfInterest = true;
+    boolean exposureCompensation = true;
+    boolean colorTemperature = true;
+    boolean iso = true;
+    boolean brightness = true;
+    boolean contrast = true;
+    boolean saturation = true;
+    boolean sharpness = true;
+    boolean zoom = true;
+    boolean torch = true;
+};
diff --git a/modules/mediastream/NavigatorMediaStream.idl b/modules/mediastream/NavigatorMediaStream.idl
index 9453f9f..85c3e5f 100644
--- a/modules/mediastream/NavigatorMediaStream.idl
+++ b/modules/mediastream/NavigatorMediaStream.idl
@@ -17,8 +17,22 @@
  * Boston, MA 02110-1301, USA.
  */
 
-partial interface Navigator {
-    [RaisesException] void webkitGetUserMedia(MediaStreamConstraints options,
-                                              NavigatorUserMediaSuccessCallback successCallback,
-                                              NavigatorUserMediaErrorCallback errorCallback);
+// https://w3c.github.io/mediacapture-main/#navigatorusermedia-interface-extensions
+
+[
+    ImplementedAs=NavigatorMediaStream
+] partial interface Navigator {
+    [RaisesException,
+     MeasureAs=GetUserMediaLegacy
+    ] void getUserMedia(MediaStreamConstraints constraints,
+                        NavigatorUserMediaSuccessCallback successCallback,
+                        NavigatorUserMediaErrorCallback errorCallback);
+
+    // Non-standard
+    [RaisesException,
+     ImplementedAs=getUserMedia,
+     MeasureAs=GetUserMediaPrefixed
+    ] void webkitGetUserMedia(MediaStreamConstraints constraints,
+                              NavigatorUserMediaSuccessCallback successCallback,
+                              NavigatorUserMediaErrorCallback errorCallback);
 };
diff --git a/modules/mediastream/NavigatorUserMedia.idl b/modules/mediastream/NavigatorUserMedia.idl
index c3ba9f0..fa51c2d 100644
--- a/modules/mediastream/NavigatorUserMedia.idl
+++ b/modules/mediastream/NavigatorUserMedia.idl
@@ -2,9 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://w3c.github.io/mediacapture-main/#navigatorusermedia
+// https://w3c.github.io/mediacapture-main/#navigatorusermedia
 
-partial interface Navigator {
-    [RuntimeEnabled=MediaDevices] readonly attribute MediaDevices mediaDevices;
+[
+    ImplementedAs=NavigatorUserMedia
+] partial interface Navigator {
+    [SameObject] readonly attribute MediaDevices mediaDevices;
 };
-
diff --git a/modules/mediastream/NavigatorUserMediaError.idl b/modules/mediastream/NavigatorUserMediaError.idl
index f3b5fbb..6a44acd 100644
--- a/modules/mediastream/NavigatorUserMediaError.idl
+++ b/modules/mediastream/NavigatorUserMediaError.idl
@@ -10,24 +10,30 @@
  *     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.
+ * 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://w3c.github.io/mediacapture-main/archives/20150629/getusermedia.html#mediastreamerror
+
+// TODO(foolip): This become OverconstrainedError in
+// https://github.com/w3c/mediacapture-main/pull/194 but but that does not have
+// a |constraintName| member:
+// https://w3c.github.io/mediacapture-main/#overconstrainederror-object
+// See also https://github.com/w3c/mediacapture-main/issues/405
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface NavigatorUserMediaError {
     readonly attribute DOMString name;
     readonly attribute DOMString message;
-    readonly attribute DOMString constraintName;
+    [Measure] readonly attribute DOMString constraintName;
 };
-
diff --git a/modules/mediastream/NavigatorUserMediaErrorCallback.idl b/modules/mediastream/NavigatorUserMediaErrorCallback.idl
index e1304de..ceeceed 100644
--- a/modules/mediastream/NavigatorUserMediaErrorCallback.idl
+++ b/modules/mediastream/NavigatorUserMediaErrorCallback.idl
@@ -10,19 +10,23 @@
  *     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.
+ * 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://w3c.github.io/mediacapture-main/#navigatorusermediaerrorcallback
+
+// TODO(foolip): This should be a callback function, not a callback interface.
+// https://crbug.com/569301
 callback interface NavigatorUserMediaErrorCallback {
     void handleEvent(NavigatorUserMediaError error);
 };
-
diff --git a/modules/mediastream/NavigatorUserMediaSuccessCallback.idl b/modules/mediastream/NavigatorUserMediaSuccessCallback.idl
index 8f443a6..02db88b 100644
--- a/modules/mediastream/NavigatorUserMediaSuccessCallback.idl
+++ b/modules/mediastream/NavigatorUserMediaSuccessCallback.idl
@@ -10,19 +10,23 @@
  *     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.
+ * 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://w3c.github.io/mediacapture-main/#navigatorusermediasuccesscallback
+
+// TODO(foolip): This should be a callback function, not a callback interface.
+// https://crbug.com/569301
 callback interface NavigatorUserMediaSuccessCallback {
     void handleEvent(MediaStream stream);
 };
-
diff --git a/modules/mediastream/OverconstrainedError.idl b/modules/mediastream/OverconstrainedError.idl
new file mode 100644
index 0000000..328a768
--- /dev/null
+++ b/modules/mediastream/OverconstrainedError.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/#overconstrainederror-object
+
+// TODO(guidou): OverconstrainedError should be an Error subclass and not an
+// interface. http://crbug.com/769726
+[
+    Constructor(DOMString constraint, DOMString message)
+] interface OverconstrainedError {
+    readonly attribute DOMString name;
+    readonly attribute DOMString? message;
+    readonly attribute DOMString? constraint;
+};
diff --git a/modules/mediastream/RTCCertificate.idl b/modules/mediastream/RTCCertificate.idl
deleted file mode 100644
index b6e9a4a..0000000
--- a/modules/mediastream/RTCCertificate.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 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.
- * 3. 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://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
deleted file mode 100644
index 25cd3e5..0000000
--- a/modules/mediastream/RTCDTMFSender.idl
+++ /dev/null
@@ -1,40 +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:
- * 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 GOOGLE 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 GOOGLE 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject,
-    DependentLifetime
-] interface RTCDTMFSender : EventTarget {
-    readonly attribute boolean canInsertDTMF;
-    readonly attribute MediaStreamTrack track;
-    readonly attribute DOMString toneBuffer;
-    readonly attribute long duration;
-    readonly attribute long interToneGap;
-
-    [RaisesException] void insertDTMF(DOMString tones, optional long duration, optional long interToneGap);
-
-    attribute EventHandler ontonechange;
-};
diff --git a/modules/mediastream/RTCDTMFToneChangeEvent.idl b/modules/mediastream/RTCDTMFToneChangeEvent.idl
deleted file mode 100644
index 15b64ac..0000000
--- a/modules/mediastream/RTCDTMFToneChangeEvent.idl
+++ /dev/null
@@ -1,33 +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:
- * 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 GOOGLE 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 GOOGLE 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/webrtc/#rtcdtmftonechangeevent
-
-[
-    NoInterfaceObject,
-    Constructor(DOMString type, RTCDTMFToneChangeEventInit eventInitDict),
-] interface RTCDTMFToneChangeEvent : Event {
-    readonly attribute DOMString tone;
-};
diff --git a/modules/mediastream/RTCDTMFToneChangeEventInit.idl b/modules/mediastream/RTCDTMFToneChangeEventInit.idl
deleted file mode 100644
index a070229..0000000
--- a/modules/mediastream/RTCDTMFToneChangeEventInit.idl
+++ /dev/null
@@ -1,9 +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://www.w3.org/TR/webrtc/#rtcdtmftonechangeevent
-
-dictionary RTCDTMFToneChangeEventInit : EventInit {
-    DOMString tone;
-};
diff --git a/modules/mediastream/RTCDataChannel.idl b/modules/mediastream/RTCDataChannel.idl
deleted file mode 100644
index ee017de..0000000
--- a/modules/mediastream/RTCDataChannel.idl
+++ /dev/null
@@ -1,53 +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 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.
- */
-
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
-
-[
-    GarbageCollected,
-    NoInterfaceObject,
-] interface RTCDataChannel : EventTarget {
-    readonly attribute DOMString label;
-    readonly attribute boolean reliable; // DEPRECATED
-    readonly attribute boolean ordered;
-    readonly attribute unsigned short maxRetransmitTime;
-    readonly attribute unsigned short maxRetransmits;
-    readonly attribute DOMString protocol;
-    readonly attribute boolean negotiated;
-    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();
-             attribute EventHandler onmessage;
-    [RaisesException=Setter] attribute DOMString binaryType;
-    [RaisesException] void send(DOMString data);
-    [RaisesException] void send(Blob data);
-    [RaisesException] void send(ArrayBuffer data);
-    [RaisesException] void send(ArrayBufferView data);
-};
diff --git a/modules/mediastream/RTCDataChannelEvent.idl b/modules/mediastream/RTCDataChannelEvent.idl
deleted file mode 100644
index 98f40d6..0000000
--- a/modules/mediastream/RTCDataChannelEvent.idl
+++ /dev/null
@@ -1,29 +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 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.
- */
-
-[
-    NoInterfaceObject
-] interface RTCDataChannelEvent : Event {
-    readonly attribute RTCDataChannel channel;
-};
diff --git a/modules/mediastream/RTCIceCandidate.idl b/modules/mediastream/RTCIceCandidate.idl
deleted file mode 100644
index d3bce54..0000000
--- a/modules/mediastream/RTCIceCandidate.idl
+++ /dev/null
@@ -1,41 +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.
- * 3. 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.
- */
-
-[
-    GarbageCollected,
-    Constructor(RTCIceCandidateInit candidateInitDict),
-    RaisesException=Constructor
-] interface RTCIceCandidate {
-    attribute DOMString candidate;
-    attribute DOMString sdpMid;
-    attribute unsigned short sdpMLineIndex;
-    serializer = {attribute};
-};
-
diff --git a/modules/mediastream/RTCIceCandidateEvent.idl b/modules/mediastream/RTCIceCandidateEvent.idl
deleted file mode 100644
index 0cd3e43..0000000
--- a/modules/mediastream/RTCIceCandidateEvent.idl
+++ /dev/null
@@ -1,30 +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 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.
- */
-
-[
-    NoInterfaceObject
-] interface RTCIceCandidateEvent : Event {
-    readonly attribute RTCIceCandidate candidate;
-};
-
diff --git a/modules/mediastream/RTCIceCandidateInit.idl b/modules/mediastream/RTCIceCandidateInit.idl
deleted file mode 100644
index e5a883e..0000000
--- a/modules/mediastream/RTCIceCandidateInit.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.
-
-// http://www.w3.org/TR/webrtc/#idl-def-RTCIceCandidateInit
-
-dictionary RTCIceCandidateInit {
-    DOMString candidate;
-    DOMString sdpMid;
-    unsigned short sdpMLineIndex;
-};
diff --git a/modules/mediastream/RTCPeerConnection.idl b/modules/mediastream/RTCPeerConnection.idl
deleted file mode 100644
index 8938088..0000000
--- a/modules/mediastream/RTCPeerConnection.idl
+++ /dev/null
@@ -1,133 +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.
- * 3. 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://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,
-    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 {
-    // 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;
-
-    // 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
deleted file mode 100644
index c159a9f..0000000
--- a/modules/mediastream/RTCPeerConnectionErrorCallback.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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/mediastream/RTCSessionDescription.idl b/modules/mediastream/RTCSessionDescription.idl
deleted file mode 100644
index 6c9f668..0000000
--- a/modules/mediastream/RTCSessionDescription.idl
+++ /dev/null
@@ -1,47 +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.
- * 3. 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.
- */
-
-// http://www.w3.org/TR/webrtc/#idl-def-RTCSessionDescription
-
-enum RTCSdpType {
-    "offer",
-    "pranswer",
-    "answer"
-};
-
-[
-    GarbageCollected,
-    Constructor(optional RTCSessionDescriptionInit descriptionInitDict)
-] interface RTCSessionDescription {
-    attribute RTCSdpType? type;
-    attribute DOMString? sdp;
-    serializer = {attribute};
-};
-
diff --git a/modules/mediastream/RTCSessionDescriptionCallback.idl b/modules/mediastream/RTCSessionDescriptionCallback.idl
deleted file mode 100644
index 59ffe44..0000000
--- a/modules/mediastream/RTCSessionDescriptionCallback.idl
+++ /dev/null
@@ -1,34 +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.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-callback interface RTCSessionDescriptionCallback {
-    void handleEvent(RTCSessionDescription sdp);
-};
-
diff --git a/modules/mediastream/RTCSessionDescriptionInit.idl b/modules/mediastream/RTCSessionDescriptionInit.idl
deleted file mode 100644
index ed958e7..0000000
--- a/modules/mediastream/RTCSessionDescriptionInit.idl
+++ /dev/null
@@ -1,10 +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://www.w3.org/TR/webrtc/#idl-def-RTCSessionDescription
-
-dictionary RTCSessionDescriptionInit {
-    RTCSdpType type;
-    DOMString sdp;
-};
diff --git a/modules/mediastream/RTCStatsCallback.idl b/modules/mediastream/RTCStatsCallback.idl
deleted file mode 100644
index 8e0c080..0000000
--- a/modules/mediastream/RTCStatsCallback.idl
+++ /dev/null
@@ -1,28 +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 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.
- */
-
-callback interface RTCStatsCallback {
-    void handleEvent(RTCStatsResponse response);
-};
-
diff --git a/modules/mediastream/RTCStatsReport.idl b/modules/mediastream/RTCStatsReport.idl
deleted file mode 100644
index a00ebaa..0000000
--- a/modules/mediastream/RTCStatsReport.idl
+++ /dev/null
@@ -1,34 +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 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject
-] interface RTCStatsReport {
-    readonly attribute Date timestamp;
-    readonly attribute DOMString id;
-    readonly attribute DOMString type;
-    DOMString stat(DOMString name);
-    sequence<DOMString> names();
-};
diff --git a/modules/mediastream/RTCStatsResponse.idl b/modules/mediastream/RTCStatsResponse.idl
deleted file mode 100644
index 69fd239..0000000
--- a/modules/mediastream/RTCStatsResponse.idl
+++ /dev/null
@@ -1,32 +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 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject
-] interface RTCStatsResponse {
-    sequence<RTCStatsReport> result();
-    RTCStatsReport namedItem([Default=Undefined] optional DOMString name);
-    [NotEnumerable, ImplementedAs=namedItem] getter RTCStatsReport ([Default=Undefined] optional DOMString name);
-};
diff --git a/modules/mediastream/SourceInfo.idl b/modules/mediastream/SourceInfo.idl
deleted file mode 100644
index 60f2419..0000000
--- a/modules/mediastream/SourceInfo.idl
+++ /dev/null
@@ -1,34 +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:
- * 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 GOOGLE 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 GOOGLE 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject
-] interface SourceInfo {
-    readonly attribute DOMString id;
-    readonly attribute DOMString kind;
-    readonly attribute DOMString label;
-    readonly attribute DOMString facing;
-};
diff --git a/modules/mediastream/URLMediaStream.idl b/modules/mediastream/URLMediaStream.idl
index 334509f..c7f8d34 100644
--- a/modules/mediastream/URLMediaStream.idl
+++ b/modules/mediastream/URLMediaStream.idl
@@ -28,8 +28,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/mediacapture-streams/#idl-def-URL
+// An old version of Media Capture and Streams defines URL.createObjectURL:
+// https://w3c.github.io/mediacapture-main/archives/20131017/getusermedia.html
 
-partial interface URL {
-    [CallWith=ExecutionContext] static DOMString? createObjectURL(MediaStream stream);
+// TODO(foolip): Update link if it's revived in the spec:
+// https://github.com/w3c/mediacapture-main/issues/404
+
+[
+    ImplementedAs=URLMediaStream
+] partial interface URL {
+    [Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState] static DOMString createObjectURL(MediaStream stream);
 };
diff --git a/modules/mediastream/WindowMediaStream.idl b/modules/mediastream/WindowMediaStream.idl
index fb06a6a..63c2c59 100644
--- a/modules/mediastream/WindowMediaStream.idl
+++ b/modules/mediastream/WindowMediaStream.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ImplementedAs=DOMWindowMediaStream,
+    ImplementedAs=DOMWindowMediaStream
 ] partial interface Window {
     attribute MediaStreamConstructor webkitMediaStream;
 
diff --git a/modules/mediastream/testing/InternalsMediaStream.idl b/modules/mediastream/testing/InternalsMediaStream.idl
new file mode 100644
index 0000000..02717c6
--- /dev/null
+++ b/modules/mediastream/testing/InternalsMediaStream.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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=InternalsMediaStream
+] partial interface Internals {
+  [CallWith=ScriptState] Promise<void> addFakeDevice(
+      MediaDeviceInfo deviceInfo,
+      MediaTrackConstraints capabilities,
+      MediaStreamTrack? dataSource);
+};
diff --git a/modules/navigatorconnect/CrossOriginServiceWorkerClient.idl b/modules/navigatorconnect/CrossOriginServiceWorkerClient.idl
deleted file mode 100644
index cc868af..0000000
--- a/modules/navigatorconnect/CrossOriginServiceWorkerClient.idl
+++ /dev/null
@@ -1,16 +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-CrossOriginServiceWorkerClient
-[
-    RuntimeEnabled=NavigatorConnect,
-    Exposed=ServiceWorker,
-    GarbageCollected
-] interface CrossOriginServiceWorkerClient : EventTarget {
-    readonly attribute DOMString origin;
-    readonly attribute DOMString targetUrl;
-
-    [PostMessage, RaisesException, CallWith=ExecutionContext]
-    void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
-};
diff --git a/modules/navigatorconnect/NavigatorServices.idl b/modules/navigatorconnect/NavigatorServices.idl
deleted file mode 100644
index 99f52f8..0000000
--- a/modules/navigatorconnect/NavigatorServices.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.
-
-// https://mkruisselbrink.github.io/navigator-connect/#idl-def-NavigatorServices
-[
-    RuntimeEnabled=NavigatorConnect,
-]  partial interface Navigator {
-    [CallWith=ExecutionContext] readonly attribute ServicePortCollection services;
-};
diff --git a/modules/navigatorconnect/ServicePort.idl b/modules/navigatorconnect/ServicePort.idl
deleted file mode 100644
index 8cbfeee..0000000
--- a/modules/navigatorconnect/ServicePort.idl
+++ /dev/null
@@ -1,17 +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://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePort
-[
-    Exposed=(Window,Worker),
-    RuntimeEnabled=NavigatorConnect,
-    GarbageCollected,
-]  interface ServicePort {
-    readonly attribute DOMString targetURL;
-    readonly attribute DOMString name;
-    [CallWith=ScriptState] readonly attribute any data;
-    [PostMessage, RaisesException, CallWith=ExecutionContext]
-    void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
-    void close();
-};
diff --git a/modules/navigatorconnect/ServicePortCollection.idl b/modules/navigatorconnect/ServicePortCollection.idl
deleted file mode 100644
index bcdc2b0..0000000
--- a/modules/navigatorconnect/ServicePortCollection.idl
+++ /dev/null
@@ -1,17 +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://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortCollection
-[
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    RuntimeEnabled=NavigatorConnect,
-]  interface ServicePortCollection : EventTarget {
-    [CallWith=ScriptState, RaisesException] Promise<ServicePort> connect(DOMString url, optional ServicePortConnectOptions options);
-    [CallWith=ScriptState] Promise<ServicePort> match(ServicePortMatchOptions options);
-    [CallWith=ScriptState] Promise<sequence<ServicePort>> matchAll(optional ServicePortMatchOptions options);
-    [Exposed=ServiceWorker] attribute EventHandler onconnect;
-    attribute EventHandler onmessage;
-    attribute EventHandler onclose;
-};
diff --git a/modules/navigatorconnect/ServicePortConnectEvent.idl b/modules/navigatorconnect/ServicePortConnectEvent.idl
deleted file mode 100644
index 27fd436..0000000
--- a/modules/navigatorconnect/ServicePortConnectEvent.idl
+++ /dev/null
@@ -1,14 +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://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortConnectEvent
-[
-    Exposed=ServiceWorker,
-    RuntimeEnabled=NavigatorConnect,
-    Constructor(DOMString type, optional ServicePortConnectEventInit eventInitDict),
-] interface ServicePortConnectEvent : ExtendableEvent {
-    readonly attribute DOMString targetURL;
-    readonly attribute DOMString origin;
-    [CallWith=ScriptState, RaisesException] Promise<ServicePort> respondWith(Promise<ServicePortConnectResponse> response);
-};
diff --git a/modules/navigatorconnect/ServicePortConnectEventInit.idl b/modules/navigatorconnect/ServicePortConnectEventInit.idl
deleted file mode 100644
index 1afd760..0000000
--- a/modules/navigatorconnect/ServicePortConnectEventInit.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.
-
-// https://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortConnectEventInit
-
-dictionary ServicePortConnectEventInit : ExtendableEventInit {
-    DOMString targetURL;
-    DOMString origin;
-};
-
diff --git a/modules/navigatorconnect/ServicePortConnectOptions.idl b/modules/navigatorconnect/ServicePortConnectOptions.idl
deleted file mode 100644
index 4268cb1..0000000
--- a/modules/navigatorconnect/ServicePortConnectOptions.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.
-
-// https://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortConnectOptions
-
-dictionary ServicePortConnectOptions {
-    DOMString name;
-    any data;
-};
diff --git a/modules/navigatorconnect/ServicePortConnectResponse.idl b/modules/navigatorconnect/ServicePortConnectResponse.idl
deleted file mode 100644
index ea7e097..0000000
--- a/modules/navigatorconnect/ServicePortConnectResponse.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://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortConnectResponse
-
-dictionary ServicePortConnectResponse {
-    boolean accept;
-    DOMString name;
-    any data;
-};
-
diff --git a/modules/navigatorconnect/ServicePortMatchOptions.idl b/modules/navigatorconnect/ServicePortMatchOptions.idl
deleted file mode 100644
index b596995..0000000
--- a/modules/navigatorconnect/ServicePortMatchOptions.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.
-
-// https://mkruisselbrink.github.io/navigator-connect/#idl-def-ServicePortMatchOptions
-
-dictionary ServicePortMatchOptions {
-    DOMString name;
-    DOMString targetURL;
-};
diff --git a/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl b/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.idl
deleted file mode 100644
index fe645ae..0000000
--- a/modules/navigatorconnect/ServiceWorkerGlobalScopeNavigatorConnect.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.
-
-// http://mkruisselbrink.github.io/navigator-connect/#idl-def-ServiceWorkerGlobalScope
-
-[
-    RuntimeEnabled=NavigatorConnect,
-] partial interface ServiceWorkerGlobalScope {
-    attribute EventHandler oncrossoriginmessage;
-};
diff --git a/modules/navigatorconnect/WorkerNavigatorServices.idl b/modules/navigatorconnect/WorkerNavigatorServices.idl
deleted file mode 100644
index e5e87bd..0000000
--- a/modules/navigatorconnect/WorkerNavigatorServices.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.
-
-// https://mkruisselbrink.github.io/navigator-connect/#idl-def-NavigatorServices
-[
-    RuntimeEnabled=NavigatorConnect,
-]  partial interface WorkerNavigator {
-    [CallWith=ExecutionContext] readonly attribute ServicePortCollection services;
-};
diff --git a/modules/navigatorcontentutils/NavigatorContentUtils.idl b/modules/navigatorcontentutils/NavigatorContentUtils.idl
index b5a05db..8bf44a1 100644
--- a/modules/navigatorcontentutils/NavigatorContentUtils.idl
+++ b/modules/navigatorcontentutils/NavigatorContentUtils.idl
@@ -18,8 +18,11 @@
     Boston, MA 02110-1301, USA.
 */
 
-// http://www.w3.org/TR/html5/system-state-and-capabilities.html#custom-handlers
-partial interface Navigator {
+// https://html.spec.whatwg.org/multipage/webappapis.html#custom-handlers
+
+[
+    ImplementedAs=NavigatorContentUtils
+] partial interface Navigator {
     [RuntimeEnabled=NavigatorContentUtils, RaisesException] void registerProtocolHandler(DOMString scheme, DOMString url, DOMString title);
     [RuntimeEnabled=CustomSchemeHandler, RaisesException] DOMString isProtocolHandlerRegistered(DOMString scheme, DOMString url);
     [RuntimeEnabled=NavigatorContentUtils, RaisesException] void unregisterProtocolHandler(DOMString scheme, DOMString url);
diff --git a/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.idl b/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.idl
index 0d43a95..a8430ed 100644
--- a/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.idl
+++ b/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.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.
 
-partial interface Internals {
+[
+    ImplementedAs=InternalsNavigatorContentUtils
+] partial interface Internals {
     void setNavigatorContentUtilsClientMock(Document document);
 };
diff --git a/modules/netinfo/NavigatorNetworkInformation.idl b/modules/netinfo/NavigatorNetworkInformation.idl
index 7d41395..b5857d3 100644
--- a/modules/netinfo/NavigatorNetworkInformation.idl
+++ b/modules/netinfo/NavigatorNetworkInformation.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=NetworkInformation
+    ImplementedAs=NavigatorNetworkInformation
 ] partial interface Navigator {
     [MeasureAs=NetInfo] readonly attribute NetworkInformation connection;
 };
diff --git a/modules/netinfo/NetworkInformation.idl b/modules/netinfo/NetworkInformation.idl
index c45ccdb..90589e3 100644
--- a/modules/netinfo/NetworkInformation.idl
+++ b/modules/netinfo/NetworkInformation.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.
 
+// https://wicg.github.io/netinfo/#the-networkinformation-interface
+
 enum ConnectionType {
     "cellular",
     "bluetooth",
@@ -13,17 +15,26 @@
     "unknown"
 };
 
-typedef unrestricted double Megabit;
-
-[
-    RuntimeEnabled=NetworkInformation,
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    DependentLifetime
-] interface NetworkInformation : EventTarget {
-    [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;
+enum EffectiveConnectionType {
+    "slow-2g",
+    "2g",
+    "3g",
+    "4g"
 };
 
+typedef unrestricted double Megabit;
+typedef unsigned long long Milliseconds;
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Exposed=(Window,Worker)
+] interface NetworkInformation : EventTarget {
+    [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoType] readonly attribute ConnectionType type;
+    [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoDownlinkMax] readonly attribute Megabit downlinkMax;
+    [RuntimeEnabled=NetInfoEffectiveType, MeasureAs=NetInfoOnChange] attribute EventHandler onchange;
+    [RuntimeEnabled=NetInfoDownlinkMax, MeasureAs=NetInfoOnTypeChange] attribute EventHandler ontypechange;
+    [RuntimeEnabled=NetInfoEffectiveType, MeasureAs=NetInfoEffectiveType] readonly attribute EffectiveConnectionType effectiveType;
+    [RuntimeEnabled=NetInfoRtt, MeasureAs=NetInfoRtt] readonly attribute Milliseconds rtt;
+    [RuntimeEnabled=NetInfoDownlink, MeasureAs=NetInfoDownlink] readonly attribute Megabit downlink;
+};
diff --git a/modules/netinfo/WorkerNavigatorNetworkInformation.idl b/modules/netinfo/WorkerNavigatorNetworkInformation.idl
index b47c770..888d8df 100644
--- a/modules/netinfo/WorkerNavigatorNetworkInformation.idl
+++ b/modules/netinfo/WorkerNavigatorNetworkInformation.idl
@@ -3,8 +3,8 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=NetworkInformation,
-    Exposed=Worker
+    Exposed=Worker,
+    ImplementedAs=WorkerNavigatorNetworkInformation
 ] partial interface WorkerNavigator {
-    [CallWith=ExecutionContext, MeasureAs=NetInfo] readonly attribute NetworkInformation connection;
+    [CallWith=ScriptState, MeasureAs=NetInfo] readonly attribute NetworkInformation connection;
 };
diff --git a/modules/nfc/NFC.idl b/modules/nfc/NFC.idl
index bb0f520..050972f 100644
--- a/modules/nfc/NFC.idl
+++ b/modules/nfc/NFC.idl
@@ -7,11 +7,10 @@
 typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage;
 
 [
-  GarbageCollected,
-  RuntimeEnabled=WebNFC,
+  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);
+    [CallWith=ScriptState, MeasureAs=WebNFCPush] Promise<void> push (NFCPushMessage message, optional NFCPushOptions options);
+    [CallWith=ScriptState, MeasureAs=WebNFCCancelPush] Promise<void> cancelPush (optional NFCPushTarget target = "any");
+    [CallWith=ScriptState, MeasureAs=WebNFCWatch] Promise<long> watch (MessageCallback callback, optional NFCWatchOptions options);
+    [CallWith=ScriptState, MeasureAs=WebNFCCancelWatch] Promise<void> cancelWatch (optional long id);
 };
diff --git a/modules/nfc/NFCMessage.idl b/modules/nfc/NFCMessage.idl
index 5cea9c7..de49b5d 100644
--- a/modules/nfc/NFCMessage.idl
+++ b/modules/nfc/NFCMessage.idl
@@ -5,6 +5,6 @@
 // https://w3c.github.io/web-nfc/#the-nfcmessage-dictionary
 
 dictionary NFCMessage {
-    sequence<NFCRecord> data;
+    sequence<NFCRecord> records;
     USVString url;
 };
diff --git a/modules/nfc/NavigatorNFC.idl b/modules/nfc/NavigatorNFC.idl
index 1b6d2e6..8fb0fb1 100644
--- a/modules/nfc/NavigatorNFC.idl
+++ b/modules/nfc/NavigatorNFC.idl
@@ -2,10 +2,11 @@
 // 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/
+// https://w3c.github.io/web-nfc/#extensions-to-the-navigator-interface
 
 [
-  RuntimeEnabled=WebNFC,
+    ImplementedAs=NavigatorNFC,
+    RuntimeEnabled=WebNFC
 ] partial interface Navigator {
     readonly attribute NFC nfc;
 };
diff --git a/modules/notifications/Notification.idl b/modules/notifications/Notification.idl
index 8ad23a1..075c432 100644
--- a/modules/notifications/Notification.idl
+++ b/modules/notifications/Notification.idl
@@ -40,14 +40,14 @@
 // https://notifications.spec.whatwg.org/#api
 
 [
-    GarbageCollected,
-    DependentLifetime,
-    Constructor(DOMString title, optional NotificationOptions options),
+    ActiveScriptWrappable,
     ConstructorCallWith=ExecutionContext,
+    Constructor(DOMString title, optional NotificationOptions options),
+    DependentLifetime,
     Exposed=(Window,Worker),
     MeasureAs=NotificationCreated,
     RaisesException=Constructor,
-    RuntimeEnabled=Notifications,
+    RuntimeEnabled=Notifications
 ] interface Notification : EventTarget {
     [CallWith=ExecutionContext, MeasureAs=NotificationPermission] static readonly attribute NotificationPermission permission;
 
@@ -65,19 +65,17 @@
     readonly attribute DOMString lang;
     readonly attribute DOMString body;
     readonly attribute DOMString tag;
+    [RuntimeEnabled=NotificationContentImage] readonly attribute USVString image;
     readonly attribute USVString icon;
+    readonly attribute USVString badge;
 
-    [RuntimeEnabled=NotificationExperimental] readonly attribute sequence<unsigned long>? vibrate;
+    [SameObject, SaveSameObject] readonly attribute FrozenArray<unsigned long> vibrate;
     readonly attribute DOMTimeStamp timestamp;
     readonly attribute boolean renotify;
     readonly attribute boolean silent;
     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;
+    [CallWith=ScriptState, SameObject, SaveSameObject] readonly attribute any data;
+    [CallWith=ScriptState, SameObject, SaveSameObject] readonly attribute FrozenArray<NotificationAction> actions;
 
     [MeasureAs=NotificationClosed] void close();
 };
diff --git a/modules/notifications/NotificationAction.idl b/modules/notifications/NotificationAction.idl
index be78856..4f0ec6c 100644
--- a/modules/notifications/NotificationAction.idl
+++ b/modules/notifications/NotificationAction.idl
@@ -4,8 +4,15 @@
 
 // https://notifications.spec.whatwg.org/#dictdef-notificationaction
 
+[RuntimeEnabled=NotificationInlineReplies] enum NotificationActionType {
+    "button",
+    "text"
+};
+
 dictionary NotificationAction {
+    [RuntimeEnabled=NotificationInlineReplies] NotificationActionType type = "button";
     required DOMString action;
     required DOMString title;
-    [RuntimeEnabled=NotificationActionIcons] USVString icon;
+    USVString icon;
+    [RuntimeEnabled=NotificationInlineReplies] DOMString? placeholder = null;
 };
diff --git a/modules/notifications/NotificationEvent.idl b/modules/notifications/NotificationEvent.idl
index 4261777..7490f2a 100644
--- a/modules/notifications/NotificationEvent.idl
+++ b/modules/notifications/NotificationEvent.idl
@@ -7,8 +7,9 @@
 [
     Constructor(DOMString type, NotificationEventInit eventInitDict),
     Exposed=ServiceWorker,
-    RuntimeEnabled=Notifications,
+    RuntimeEnabled=Notifications
 ] interface NotificationEvent : ExtendableEvent {
-    readonly attribute Notification notification;
+    [ImplementedAs=getNotification] readonly attribute Notification notification;
     readonly attribute DOMString action;
+    [RuntimeEnabled=NotificationInlineReplies] readonly attribute DOMString? reply;
 };
diff --git a/modules/notifications/NotificationEventInit.idl b/modules/notifications/NotificationEventInit.idl
index 79ab16b..b1081e3 100644
--- a/modules/notifications/NotificationEventInit.idl
+++ b/modules/notifications/NotificationEventInit.idl
@@ -7,4 +7,5 @@
 dictionary NotificationEventInit : ExtendableEventInit {
     required Notification notification;
     DOMString action = "";
+    [RuntimeEnabled=NotificationInlineReplies] DOMString? reply = "";
 };
diff --git a/modules/notifications/NotificationOptions.idl b/modules/notifications/NotificationOptions.idl
index 9b1ded4..40e0cd5 100644
--- a/modules/notifications/NotificationOptions.idl
+++ b/modules/notifications/NotificationOptions.idl
@@ -15,7 +15,9 @@
     DOMString lang = "";
     DOMString body = "";
     DOMString tag = "";
+    [RuntimeEnabled=NotificationContentImage] USVString image;
     USVString icon;
+    USVString badge;
     // TODO(sh919.park): vibrate should be ([Clamp] unsigned long or sequence<unsigned long>)
     (unsigned long or sequence<unsigned long>) vibrate;
     DOMTimeStamp timestamp;
diff --git a/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl b/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
index 45f2c54..725c91b 100644
--- a/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
+++ b/modules/notifications/ServiceWorkerGlobalScopeNotifications.idl
@@ -5,7 +5,8 @@
 // https://notifications.spec.whatwg.org/#service-worker-api
 
 [
-    RuntimeEnabled=Notifications,
+    ImplementedAs=ServiceWorkerGlobalScopeNotifications,
+    RuntimeEnabled=Notifications
 ] partial interface ServiceWorkerGlobalScope {
     attribute EventHandler onnotificationclick;
     attribute EventHandler onnotificationclose;
diff --git a/modules/notifications/ServiceWorkerRegistrationNotifications.idl b/modules/notifications/ServiceWorkerRegistrationNotifications.idl
index bb5330b..587cb1f 100644
--- a/modules/notifications/ServiceWorkerRegistrationNotifications.idl
+++ b/modules/notifications/ServiceWorkerRegistrationNotifications.idl
@@ -5,7 +5,8 @@
 // https://notifications.spec.whatwg.org/#service-worker-api
 
 [
-    Exposed=(Window, ServiceWorker),
+    Exposed=(Window,Worker),
+    ImplementedAs=ServiceWorkerRegistrationNotifications,
     RuntimeEnabled=Notifications
 ] partial interface ServiceWorkerRegistration {
     [CallWith=ScriptState, RaisesException] Promise showNotification(DOMString title, optional NotificationOptions options);
diff --git a/modules/offscreencanvas/OffscreenCanvasModules.idl b/modules/offscreencanvas/OffscreenCanvasModules.idl
new file mode 100644
index 0000000..081dcd2
--- /dev/null
+++ b/modules/offscreencanvas/OffscreenCanvasModules.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://html.spec.whatwg.org/multipage/scripting.html#the-offscreencanvas-interface
+
+typedef (OffscreenCanvasRenderingContext2D or
+         WebGLRenderingContext or
+         WebGL2RenderingContext) OffscreenRenderingContext;
+enum OffscreenRenderingContextType { "2d", "webgl", "webgl2" };
+
+[
+    ImplementedAs=OffscreenCanvasModules
+] partial interface OffscreenCanvas {
+    [CallWith=ExecutionContext, RaisesException, RuntimeEnabled=ExperimentalCanvasFeatures] OffscreenRenderingContext? getContext(OffscreenRenderingContextType contextType, optional CanvasContextCreationAttributes attributes);
+};
diff --git a/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl b/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl
new file mode 100644
index 0000000..256d375
--- /dev/null
+++ b/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.idl
@@ -0,0 +1,109 @@
+// 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://html.spec.whatwg.org/multipage/scripting.html#the-offscreen-2d-rendering-context
+
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=ExperimentalCanvasFeatures
+] interface OffscreenCanvasRenderingContext2D {
+    // back-reference to the canvas
+    [ImplementedAs=offscreenCanvasForBinding] readonly attribute OffscreenCanvas canvas;
+
+    [CallWith=ScriptState, RaisesException] Promise commit();
+
+    // state
+    void save(); // push state on state stack
+    void restore(); // pop state stack and restore state
+
+    // transformations (default transform is the identity matrix)
+    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 double globalAlpha; // (default 1.0)
+    attribute DOMString globalCompositeOperation; // (default source-over)
+    [MeasureAs=Canvas2DFilter]attribute DOMString filter;
+
+    // image smoothing
+    attribute boolean imageSmoothingEnabled; // (default True)
+    [MeasureAs=Canvas2DImageSmoothingQuality] attribute ImageSmoothingQuality imageSmoothingQuality; // (default "low")
+
+    // colors and styles
+    attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
+    attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
+    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);
+    [CallWith=ScriptState, RaisesException] CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=NullString] DOMString repetitionType);
+
+    // shadows
+    attribute unrestricted double shadowOffsetX;
+    attribute unrestricted double shadowOffsetY;
+    attribute unrestricted double shadowBlur;
+    attribute DOMString shadowColor;
+
+    // CanvasRect interface
+    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 BaseRenderingContext2D)
+    void beginPath();
+    void fill(optional CanvasFillRule winding);
+    void fill(Path2D path, optional CanvasFillRule winding);
+    void stroke();
+    void stroke(Path2D path);
+    void clip();
+    void clip(Path2D path);
+    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 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
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y);
+    [CallWith=ScriptState, RaisesException] void drawImage(CanvasImageSource image, unrestricted double x, unrestricted double y, unrestricted double width, unrestricted double height);
+    [CallWith=ScriptState, 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);
+
+    // pixel manipulation
+    [RaisesException] ImageData createImageData(ImageData imagedata);
+    [RaisesException] ImageData createImageData(long sw, long sh);
+    [RaisesException] ImageData getImageData(long sx, long sy, long sw, long sh);
+    [RaisesException] void putImageData(ImageData imagedata, long dx, long dy);
+    [RaisesException] void putImageData(ImageData imagedata, long dx, long dy, long dirtyX, long dirtyY, long dirtyWidth, long dirtyHeight);
+
+    // If OffscreenCanva ships before color managed canvas, this method must remain behind flag.
+    // https://github.com/WICG/canvas-color-space/blob/master/CanvasColorSpaceProposal.md
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] ImageData createImageData(unsigned long sw, unsigned long sh, ImageDataColorSettings imageDataColorSettings);
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] ImageData createImageData(ImageDataArray data, unsigned long sw, unsigned long sh, ImageDataColorSettings imageDataColorSettings);
+
+
+    // Line caps/joins
+    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 double> dash);
+    sequence<unrestricted double> getLineDash();
+    attribute unrestricted double lineDashOffset;
+
+    // text
+    attribute DOMString font; // (default 10px sans-serif)
+    attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start")
+    attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic")
+    [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString direction; // "inherit", "rtl", "ltr" (default: "inherit")
+};
+
+OffscreenCanvasRenderingContext2D implements CanvasPath;
diff --git a/modules/payments/AbortPaymentEvent.idl b/modules/payments/AbortPaymentEvent.idl
new file mode 100644
index 0000000..e1cd327
--- /dev/null
+++ b/modules/payments/AbortPaymentEvent.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/w3c/payment-handler/pull/170
+
+[
+    RuntimeEnabled=PaymentApp,
+    Constructor(DOMString type, ExtendableEventInit eventInitDict),
+    Exposed=ServiceWorker
+] interface AbortPaymentEvent : ExtendableEvent {
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<boolean> paymentAbortedResponse);
+};
diff --git a/modules/payments/AndroidPayMethodData.idl b/modules/payments/AndroidPayMethodData.idl
new file mode 100644
index 0000000..ad52173
--- /dev/null
+++ b/modules/payments/AndroidPayMethodData.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://developers.google.com/web/fundamentals/getting-started/primers/payment-request/android-pay
+// TODO(rouslan): Stop parsing Android Pay data. http://crbug.com/620173
+
+dictionary AndroidPayMethodData {
+    DOMString environment;
+    DOMString merchantName;
+    DOMString merchantId;
+    sequence<DOMString> allowedCardNetworks;
+    AndroidPayTokenization paymentMethodTokenizationParameters;
+    DOMString minGooglePlayServicesVersion;
+    long apiVersion;
+};
diff --git a/modules/payments/AndroidPayTokenization.idl b/modules/payments/AndroidPayTokenization.idl
new file mode 100644
index 0000000..dfd7688
--- /dev/null
+++ b/modules/payments/AndroidPayTokenization.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://developers.google.com/web/fundamentals/getting-started/primers/payment-request/android-pay
+// TODO(rouslan): Stop parsing Android Pay data. http://crbug.com/620173
+
+dictionary AndroidPayTokenization {
+    DOMString tokenizationType;
+    Dictionary parameters;
+};
diff --git a/modules/payments/BasicCardRequest.idl b/modules/payments/BasicCardRequest.idl
new file mode 100644
index 0000000..9bd0aeb
--- /dev/null
+++ b/modules/payments/BasicCardRequest.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://w3c.github.io/webpayments-methods-card/#basiccardrequest
+
+enum BasicCardType {
+    "credit",
+    "debit",
+    "prepaid"
+};
+
+dictionary BasicCardRequest {
+    sequence<DOMString> supportedNetworks;
+    sequence<BasicCardType> supportedTypes;
+};
diff --git a/modules/payments/CanMakePaymentEvent.idl b/modules/payments/CanMakePaymentEvent.idl
new file mode 100644
index 0000000..0c49b5a
--- /dev/null
+++ b/modules/payments/CanMakePaymentEvent.idl
@@ -0,0 +1,18 @@
+// Copyright 2017 The Chromium 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/w3c/payment-handler/pull/170
+
+[
+    RuntimeEnabled=PaymentApp,
+    Constructor(DOMString type, CanMakePaymentEventInit eventInitDict),
+    Exposed=ServiceWorker
+] interface CanMakePaymentEvent : ExtendableEvent {
+    readonly attribute USVString topLevelOrigin;
+    readonly attribute USVString paymentRequestOrigin;
+    readonly attribute FrozenArray<PaymentMethodData> methodData;
+    readonly attribute FrozenArray<PaymentDetailsModifier> modifiers;
+
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<boolean> canMakePaymentResponse);
+};
diff --git a/modules/payments/CanMakePaymentEventInit.idl b/modules/payments/CanMakePaymentEventInit.idl
new file mode 100644
index 0000000..ebb909b
--- /dev/null
+++ b/modules/payments/CanMakePaymentEventInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/w3c/payment-handler/pull/170
+
+dictionary CanMakePaymentEventInit : ExtendableEventInit {
+    USVString topLevelOrigin;
+    USVString paymentRequestOrigin;
+    sequence<PaymentMethodData> methodData;
+    sequence<PaymentDetailsModifier> modifiers;
+};
diff --git a/modules/payments/HTMLIFrameElementPayments.idl b/modules/payments/HTMLIFrameElementPayments.idl
new file mode 100644
index 0000000..7b5bc9b
--- /dev/null
+++ b/modules/payments/HTMLIFrameElementPayments.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/browser-payment-api/#paymentrequest-and-iframes
+
+[
+    ImplementedAs=HTMLIFrameElementPayments,
+    RuntimeEnabled=PaymentRequest
+] partial interface HTMLIFrameElement {
+    [CEReactions, Reflect] attribute boolean allowPaymentRequest;
+};
diff --git a/modules/payments/ImageObject.idl b/modules/payments/ImageObject.idl
new file mode 100644
index 0000000..e8ddb48
--- /dev/null
+++ b/modules/payments/ImageObject.idl
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium 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/w3c/payment-handler/pull/174/files/6e6768c423e24719cb0e592cd98614f052e52a78
+
+dictionary ImageObject {
+    // Note that the src could be relative path to the service worker
+    // scope.
+    required USVString src;
+    DOMString sizes;
+    DOMString type;
+};
diff --git a/modules/payments/PaymentAddress.idl b/modules/payments/PaymentAddress.idl
new file mode 100644
index 0000000..8f51485
--- /dev/null
+++ b/modules/payments/PaymentAddress.idl
@@ -0,0 +1,22 @@
+// 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/browser-payment-api/#paymentaddress-interface
+
+[
+    RuntimeEnabled=PaymentRequest
+] interface PaymentAddress {
+    serializer = {attribute};
+    readonly attribute DOMString country;
+    readonly attribute FrozenArray<DOMString> addressLine;
+    readonly attribute DOMString region;
+    readonly attribute DOMString city;
+    readonly attribute DOMString dependentLocality;
+    readonly attribute DOMString postalCode;
+    readonly attribute DOMString sortingCode;
+    readonly attribute DOMString languageCode;
+    readonly attribute DOMString organization;
+    readonly attribute DOMString recipient;
+    readonly attribute DOMString phone;
+};
diff --git a/modules/payments/PaymentAppServiceWorkerGlobalScope.idl b/modules/payments/PaymentAppServiceWorkerGlobalScope.idl
new file mode 100644
index 0000000..ae5001e
--- /dev/null
+++ b/modules/payments/PaymentAppServiceWorkerGlobalScope.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.
+
+// https://w3c.github.io/webpayments-payment-apps-api/#idl-def-serviceworkerglobalscope-partial-1
+
+[
+    ImplementedAs=PaymentAppServiceWorkerGlobalScope,
+    RuntimeEnabled=PaymentApp
+] partial interface ServiceWorkerGlobalScope {
+    attribute EventHandler onabortpayment;
+    attribute EventHandler oncanmakepayment;
+    attribute EventHandler onpaymentrequest;
+};
diff --git a/modules/payments/PaymentAppServiceWorkerRegistration.idl b/modules/payments/PaymentAppServiceWorkerRegistration.idl
new file mode 100644
index 0000000..030c354
--- /dev/null
+++ b/modules/payments/PaymentAppServiceWorkerRegistration.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/webpayments-payment-apps-api/#idl-def-serviceworkerregistration-partial-1
+
+[
+    ImplementedAs=PaymentAppServiceWorkerRegistration,
+    RuntimeEnabled=PaymentApp
+] partial interface ServiceWorkerRegistration {
+    [CallWith=ScriptState] readonly attribute PaymentManager paymentManager;
+};
diff --git a/modules/payments/PaymentCurrencyAmount.idl b/modules/payments/PaymentCurrencyAmount.idl
new file mode 100644
index 0000000..0f13ffa
--- /dev/null
+++ b/modules/payments/PaymentCurrencyAmount.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/browser-payment-api/#paymentcurrencyamount
+
+dictionary PaymentCurrencyAmount {
+    required DOMString currency;
+    required DOMString value;
+    DOMString currencySystem = "urn:iso:std:iso:4217";
+};
diff --git a/modules/payments/PaymentDetailsBase.idl b/modules/payments/PaymentDetailsBase.idl
new file mode 100644
index 0000000..4b85564
--- /dev/null
+++ b/modules/payments/PaymentDetailsBase.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/browser-payment-api/#paymentdetailsbase-dictionary
+
+dictionary PaymentDetailsBase {
+    sequence<PaymentItem> displayItems;
+    sequence<PaymentShippingOption> shippingOptions;
+    sequence<PaymentDetailsModifier> modifiers;
+};
diff --git a/modules/payments/PaymentDetailsInit.idl b/modules/payments/PaymentDetailsInit.idl
new file mode 100644
index 0000000..9a784e3
--- /dev/null
+++ b/modules/payments/PaymentDetailsInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/browser-payment-api/#paymentdetailsinit-dictionary
+
+dictionary PaymentDetailsInit : PaymentDetailsBase {
+    DOMString id;
+    required PaymentItem total;
+};
diff --git a/modules/payments/PaymentDetailsModifier.idl b/modules/payments/PaymentDetailsModifier.idl
new file mode 100644
index 0000000..0da69ce
--- /dev/null
+++ b/modules/payments/PaymentDetailsModifier.idl
@@ -0,0 +1,20 @@
+// 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/browser-payment-api/#idl-def-paymentdetailsmodifier
+
+dictionary PaymentDetailsModifier {
+    // TODO(zino): The supportedMethods's type was changed from
+    // sequence<DOMString> to DOMString[1][2]. But we are not sure if we can
+    // remove them now. So, we will define it as union type of DOMString and
+    // sequence<DOMString> temporarily for now.
+    // Please see: https://crbug.com/754779
+    //
+    // [1] https://github.com/w3c/browser-payment-api/pull/551
+    // [2] https://w3c.github.io/browser-payment-api/#paymentdetailsmodifier-dictionary
+    required (DOMString or sequence<DOMString>) supportedMethods;
+    PaymentItem total;
+    sequence<PaymentItem> additionalDisplayItems;
+    [RuntimeEnabled=PaymentDetailsModifierData] object data;
+};
diff --git a/modules/payments/PaymentDetailsUpdate.idl b/modules/payments/PaymentDetailsUpdate.idl
new file mode 100644
index 0000000..73d0fcd
--- /dev/null
+++ b/modules/payments/PaymentDetailsUpdate.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/browser-payment-api/#paymentdetailsupdate-dictionary
+
+dictionary PaymentDetailsUpdate : PaymentDetailsBase {
+    DOMString error;
+    PaymentItem total;
+};
diff --git a/modules/payments/PaymentHandlerResponse.idl b/modules/payments/PaymentHandlerResponse.idl
new file mode 100644
index 0000000..0327bd0
--- /dev/null
+++ b/modules/payments/PaymentHandlerResponse.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/payment-handler/#paymenthandlerresponse-dictionary
+
+dictionary PaymentHandlerResponse {
+    DOMString methodName;
+    object details;
+};
diff --git a/modules/payments/PaymentInstrument.idl b/modules/payments/PaymentInstrument.idl
new file mode 100644
index 0000000..ad09a33
--- /dev/null
+++ b/modules/payments/PaymentInstrument.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/payment-handler/#paymentinstrument-dictionary
+
+dictionary PaymentInstrument {
+    required DOMString name;
+    sequence<ImageObject> icons;
+    sequence<DOMString> enabledMethods;
+    object capabilities;
+};
diff --git a/modules/payments/PaymentInstruments.idl b/modules/payments/PaymentInstruments.idl
new file mode 100644
index 0000000..53cdad9
--- /dev/null
+++ b/modules/payments/PaymentInstruments.idl
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium 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/webpayments-payment-apps-api/#payment-instruments
+
+[
+    RuntimeEnabled=PaymentApp,
+    Exposed=(Window,Worker)
+] interface PaymentInstruments {
+    [CallWith=ScriptState, ImplementedAs=deleteInstrument] Promise<boolean> delete(DOMString instrumentKey);
+    [CallWith=ScriptState] Promise<PaymentInstrument> get(DOMString instrumentKey);
+    [CallWith=ScriptState] Promise<sequence<DOMString>> keys();
+    [CallWith=ScriptState] Promise<boolean> has(DOMString instrumentKey);
+    [CallWith=ScriptState, RaisesException] Promise<void> set(DOMString instrumentKey, PaymentInstrument details);
+    [CallWith=ScriptState] Promise<void> clear();
+};
diff --git a/modules/payments/PaymentItem.idl b/modules/payments/PaymentItem.idl
new file mode 100644
index 0000000..48b92d9
--- /dev/null
+++ b/modules/payments/PaymentItem.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/browser-payment-api/#paymentitem-dictionary
+
+dictionary PaymentItem {
+    required DOMString label;
+    required PaymentCurrencyAmount amount;
+    boolean pending = false;
+};
diff --git a/modules/payments/PaymentManager.idl b/modules/payments/PaymentManager.idl
new file mode 100644
index 0000000..414659b
--- /dev/null
+++ b/modules/payments/PaymentManager.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.
+
+// https://w3c.github.io/webpayments-payment-apps-api/#idl-def-paymentappmanager
+
+[
+    RuntimeEnabled=PaymentApp,
+    ConstructorCallWith=ExecutionContext,
+    DependentLifetime
+] interface PaymentManager {
+    readonly attribute PaymentInstruments instruments;
+    attribute DOMString userHint;
+};
diff --git a/modules/payments/PaymentMethodData.idl b/modules/payments/PaymentMethodData.idl
new file mode 100644
index 0000000..4cd8cfc
--- /dev/null
+++ b/modules/payments/PaymentMethodData.idl
@@ -0,0 +1,18 @@
+// 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/browser-payment-api/#idl-def-paymentmethoddata
+
+dictionary PaymentMethodData {
+    // TODO(zino): The supportedMethods's type was changed from
+    // sequence<DOMString> to DOMString[1][2]. But we are not sure if we can
+    // remove them now. So, we will define it as union type of DOMString and
+    // sequence<DOMString> temporarily for now.
+    // Please see: https://crbug.com/754779
+    //
+    // [1] https://github.com/w3c/browser-payment-api/pull/551
+    // [2] https://w3c.github.io/browser-payment-api/#paymentdetailsmodifier-dictionary
+    required (DOMString or sequence<DOMString>) supportedMethods;
+    object data;
+};
diff --git a/modules/payments/PaymentOptions.idl b/modules/payments/PaymentOptions.idl
new file mode 100644
index 0000000..9520cf1
--- /dev/null
+++ b/modules/payments/PaymentOptions.idl
@@ -0,0 +1,19 @@
+// 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/browser-payment-api/#paymentoptions-dictionary
+
+enum PaymentShippingType {
+    "shipping",
+    "delivery",
+    "pickup"
+};
+
+dictionary PaymentOptions {
+    boolean requestPayerName = false;
+    boolean requestPayerEmail = false;
+    boolean requestPayerPhone = false;
+    boolean requestShipping = false;
+    PaymentShippingType shippingType = "shipping";
+};
diff --git a/modules/payments/PaymentRequest.idl b/modules/payments/PaymentRequest.idl
new file mode 100644
index 0000000..20f5cc3
--- /dev/null
+++ b/modules/payments/PaymentRequest.idl
@@ -0,0 +1,27 @@
+// 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/browser-payment-api/#paymentrequest-interface
+// http://crbug.com/587995
+
+[
+    RuntimeEnabled=PaymentRequest,
+    Constructor(sequence<PaymentMethodData> methodData, PaymentDetailsInit details, optional PaymentOptions options),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    ActiveScriptWrappable,
+    DependentLifetime
+] interface PaymentRequest : EventTarget {
+    [CallWith=ScriptState] Promise<PaymentResponse> show();
+    [CallWith=ScriptState] Promise<void> abort();
+    [CallWith=ScriptState] Promise<boolean> canMakePayment();
+
+    readonly attribute DOMString id;
+    [ImplementedAs=getShippingAddress] readonly attribute PaymentAddress? shippingAddress;
+    readonly attribute DOMString? shippingOption;
+    readonly attribute PaymentShippingType? shippingType;
+
+    attribute EventHandler onshippingaddresschange;
+    attribute EventHandler onshippingoptionchange;
+};
diff --git a/modules/payments/PaymentRequestEvent.idl b/modules/payments/PaymentRequestEvent.idl
new file mode 100644
index 0000000..4e375c8
--- /dev/null
+++ b/modules/payments/PaymentRequestEvent.idl
@@ -0,0 +1,22 @@
+// 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/payment-handler/#the-paymentrequestevent
+
+[
+    RuntimeEnabled=PaymentApp,
+    Constructor(DOMString type, PaymentRequestEventInit eventInitDict),
+    Exposed=ServiceWorker
+] interface PaymentRequestEvent : ExtendableEvent {
+    readonly attribute USVString topLevelOrigin;
+    readonly attribute USVString paymentRequestOrigin;
+    readonly attribute DOMString paymentRequestId;
+    readonly attribute FrozenArray<PaymentMethodData> methodData;
+    [CallWith=ScriptState] readonly attribute object total;
+    readonly attribute FrozenArray<PaymentDetailsModifier> modifiers;
+    readonly attribute DOMString instrumentKey;
+
+    [CallWith=ScriptState] Promise<WindowClient?> openWindow(USVString url);
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<PaymentResponse> response);
+};
diff --git a/modules/payments/PaymentRequestEventInit.idl b/modules/payments/PaymentRequestEventInit.idl
new file mode 100644
index 0000000..9404171
--- /dev/null
+++ b/modules/payments/PaymentRequestEventInit.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://w3c.github.io/payment-handler/#paymentrequesteventinit-dictionary
+
+dictionary PaymentRequestEventInit : ExtendableEventInit {
+    USVString topLevelOrigin;
+    USVString paymentRequestOrigin;
+    DOMString paymentRequestId;
+    sequence<PaymentMethodData> methodData;
+    PaymentCurrencyAmount total;
+    sequence<PaymentDetailsModifier> modifiers;
+    DOMString instrumentKey;
+};
diff --git a/modules/payments/PaymentRequestUpdateEvent.idl b/modules/payments/PaymentRequestUpdateEvent.idl
new file mode 100644
index 0000000..c3aed3a
--- /dev/null
+++ b/modules/payments/PaymentRequestUpdateEvent.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://w3c.github.io/browser-payment-api/#idl-def-paymentrequestupdateevent
+
+[
+    RuntimeEnabled=PaymentRequest,
+    Constructor(DOMString type, optional PaymentRequestUpdateEventInit eventInitDict),
+    ConstructorCallWith=ExecutionContext
+] interface PaymentRequestUpdateEvent : Event {
+    [CallWith=ScriptState,RaisesException] void updateWith(Promise<PaymentDetailsUpdate> detailsPromise);
+};
diff --git a/modules/payments/PaymentRequestUpdateEventInit.idl b/modules/payments/PaymentRequestUpdateEventInit.idl
new file mode 100644
index 0000000..f6eb356
--- /dev/null
+++ b/modules/payments/PaymentRequestUpdateEventInit.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.
+
+// https://w3c.github.io/browser-payment-api/#idl-def-paymentrequestupdateevent
+
+dictionary PaymentRequestUpdateEventInit : EventInit {
+};
diff --git a/modules/payments/PaymentResponse.idl b/modules/payments/PaymentResponse.idl
new file mode 100644
index 0000000..8a5bb93
--- /dev/null
+++ b/modules/payments/PaymentResponse.idl
@@ -0,0 +1,30 @@
+// 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/payment-request/#dom-paymentcomplete
+
+enum PaymentComplete {
+    "fail",
+    "success",
+    "unknown"
+};
+
+// https://w3c.github.io/browser-payment-api/#paymentresponse-interface
+
+[
+    RuntimeEnabled=PaymentRequest
+] interface PaymentResponse {
+    serializer = {attribute};
+
+    readonly attribute DOMString requestId;
+    readonly attribute DOMString methodName;
+    readonly attribute DOMString? payerName;
+    readonly attribute DOMString? payerEmail;
+    readonly attribute DOMString? payerPhone;
+    [CallWith=ScriptState, RaisesException] readonly attribute object details;
+    readonly attribute PaymentAddress? shippingAddress;
+    readonly attribute DOMString? shippingOption;
+
+    [CallWith=ScriptState] Promise<void> complete(optional PaymentComplete paymentResult = "unknown");
+};
diff --git a/modules/payments/PaymentShippingOption.idl b/modules/payments/PaymentShippingOption.idl
new file mode 100644
index 0000000..cf99041
--- /dev/null
+++ b/modules/payments/PaymentShippingOption.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/browser-payment-api/#paymentshippingoption-dictionary
+
+dictionary PaymentShippingOption {
+    required DOMString id;
+    required DOMString label;
+    required PaymentCurrencyAmount amount;
+    boolean selected = false;
+};
diff --git a/modules/peerconnection/RTCAnswerOptions.idl b/modules/peerconnection/RTCAnswerOptions.idl
new file mode 100644
index 0000000..a92204a
--- /dev/null
+++ b/modules/peerconnection/RTCAnswerOptions.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.
+
+// https://w3c.github.io/webrtc-pc/#offer-answer-options
+
+dictionary RTCAnswerOptions : RTCOfferAnswerOptions {
+};
diff --git a/modules/peerconnection/RTCCertificate.idl b/modules/peerconnection/RTCCertificate.idl
new file mode 100644
index 0000000..cc4210a
--- /dev/null
+++ b/modules/peerconnection/RTCCertificate.idl
@@ -0,0 +1,36 @@
+/*
+ * 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 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.
+ * 3. 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://w3c.github.io/webrtc-pc/#rtccertificate-interface
+interface RTCCertificate {
+    // The expiration time in ms relative to epoch, 1970-01-01T00:00:00Z.
+    readonly attribute DOMTimeStamp expires;
+    sequence<RTCDtlsFingerprint> getFingerprints();
+};
diff --git a/modules/peerconnection/RTCConfiguration.idl b/modules/peerconnection/RTCConfiguration.idl
new file mode 100644
index 0000000..3daa5c3
--- /dev/null
+++ b/modules/peerconnection/RTCConfiguration.idl
@@ -0,0 +1,42 @@
+// 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/#rtcicetransportpolicy-enum
+
+enum RTCIceTransportPolicy {
+    "relay",
+    "all"
+};
+
+// https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum
+
+enum RTCBundlePolicy {
+    "balanced",
+    "max-compat",
+    "max-bundle"
+};
+
+// https://w3c.github.io/webrtc-pc/#rtcrtcpmuxpolicy-enum
+
+enum RTCRtcpMuxPolicy {
+    "negotiate",
+    "require"
+};
+
+// https://w3c.github.io/webrtc-pc/#rtcconfiguration-dictionary
+
+dictionary RTCConfiguration {
+    sequence<RTCIceServer> iceServers;
+    // TODO(foolip): |iceTransportPolicy| default should be "all", but it is
+    // omitted to allow fallback to |iceTransports| if not specified.
+    RTCIceTransportPolicy iceTransportPolicy;
+    // TODO(foolip): |iceTransports| is not in the spec.
+    // https://crbug.com/659131
+    RTCIceTransportPolicy iceTransports;
+    RTCBundlePolicy bundlePolicy = "balanced";
+    RTCRtcpMuxPolicy rtcpMuxPolicy = "require";
+    // TODO(foolip): DOMString peerIdentity;
+    sequence<RTCCertificate> certificates;
+    [EnforceRange] octet iceCandidatePoolSize = 0;
+};
diff --git a/modules/peerconnection/RTCDTMFSender.idl b/modules/peerconnection/RTCDTMFSender.idl
new file mode 100644
index 0000000..790e0ce
--- /dev/null
+++ b/modules/peerconnection/RTCDTMFSender.idl
@@ -0,0 +1,39 @@
+/*
+ * 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:
+ * 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 GOOGLE 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 GOOGLE 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.
+ */
+
+[
+    NoInterfaceObject,
+    DependentLifetime
+] interface RTCDTMFSender : EventTarget {
+    readonly attribute boolean canInsertDTMF;
+    readonly attribute MediaStreamTrack track;
+    readonly attribute DOMString toneBuffer;
+    readonly attribute long duration;
+    readonly attribute long interToneGap;
+
+    [RaisesException] void insertDTMF(DOMString tones, optional long duration, optional long interToneGap);
+
+    attribute EventHandler ontonechange;
+};
diff --git a/modules/peerconnection/RTCDTMFToneChangeEvent.idl b/modules/peerconnection/RTCDTMFToneChangeEvent.idl
new file mode 100644
index 0000000..c162262
--- /dev/null
+++ b/modules/peerconnection/RTCDTMFToneChangeEvent.idl
@@ -0,0 +1,33 @@
+/*
+ * 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:
+ * 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 GOOGLE 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 GOOGLE 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://w3c.github.io/webrtc-pc/#rtcdtmftonechangeevent
+
+[
+    NoInterfaceObject,
+    Constructor(DOMString type, RTCDTMFToneChangeEventInit eventInitDict)
+] interface RTCDTMFToneChangeEvent : Event {
+    readonly attribute DOMString tone;
+};
diff --git a/modules/peerconnection/RTCDTMFToneChangeEventInit.idl b/modules/peerconnection/RTCDTMFToneChangeEventInit.idl
new file mode 100644
index 0000000..82b8213
--- /dev/null
+++ b/modules/peerconnection/RTCDTMFToneChangeEventInit.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/webrtc-pc/#rtcdtmftonechangeevent
+
+dictionary RTCDTMFToneChangeEventInit : EventInit {
+    DOMString tone;
+};
diff --git a/modules/peerconnection/RTCDataChannel.idl b/modules/peerconnection/RTCDataChannel.idl
new file mode 100644
index 0000000..406eb05
--- /dev/null
+++ b/modules/peerconnection/RTCDataChannel.idl
@@ -0,0 +1,68 @@
+/*
+ * 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 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://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelstate
+
+enum RTCDataChannelState {
+    "connecting",
+    "open",
+    "closing",
+    "closed"
+};
+
+// https://w3c.github.io/webrtc-pc/#rtcdatachannel
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime
+] interface RTCDataChannel : EventTarget {
+    readonly attribute USVString label;
+    readonly attribute boolean ordered;
+    // TODO(foolip): |maxRetransmitTime| is called |maxPacketLifeTime| in the
+    // spec and both it and |maxRetransmits| are nullable.
+    [Measure] readonly attribute unsigned short maxRetransmitTime;
+    [Measure] readonly attribute unsigned short maxRetransmits;
+    readonly attribute USVString protocol;
+    readonly attribute boolean negotiated;
+    readonly attribute unsigned short id;
+    readonly attribute RTCDataChannelState readyState;
+    readonly attribute unsigned long bufferedAmount;
+             attribute unsigned long bufferedAmountLowThreshold;
+             attribute EventHandler onopen;
+             attribute EventHandler onbufferedamountlow;
+             attribute EventHandler onerror;
+             attribute EventHandler onclose;
+    void close();
+             attribute EventHandler onmessage;
+    [RaisesException=Setter] attribute DOMString binaryType;
+    // TODO(foolip): |data| should be USVString.
+    [RaisesException] void send(DOMString data);
+    [RaisesException] void send(Blob data);
+    [RaisesException] void send(ArrayBuffer data);
+    [RaisesException] void send(ArrayBufferView data);
+
+    // Non-standard APIs
+    [Measure] readonly attribute boolean reliable;
+};
diff --git a/modules/peerconnection/RTCDataChannelEvent.idl b/modules/peerconnection/RTCDataChannelEvent.idl
new file mode 100644
index 0000000..6ba2684
--- /dev/null
+++ b/modules/peerconnection/RTCDataChannelEvent.idl
@@ -0,0 +1,32 @@
+/*
+ * 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 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://w3c.github.io/webrtc-pc/#rtcdatachannelevent
+
+[
+    Constructor(DOMString type, RTCDataChannelEventInit eventInitDict)
+] interface RTCDataChannelEvent : Event {
+    readonly attribute RTCDataChannel channel;
+};
diff --git a/modules/peerconnection/RTCDataChannelEventInit.idl b/modules/peerconnection/RTCDataChannelEventInit.idl
new file mode 100644
index 0000000..ac9bef8
--- /dev/null
+++ b/modules/peerconnection/RTCDataChannelEventInit.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.
+
+// https://w3c.github.io/webrtc-pc/#idl-def-rtcdatachanneleventinit
+
+dictionary RTCDataChannelEventInit : EventInit {
+    required RTCDataChannel channel;
+};
diff --git a/modules/peerconnection/RTCDataChannelInit.idl b/modules/peerconnection/RTCDataChannelInit.idl
new file mode 100644
index 0000000..6ecbe84
--- /dev/null
+++ b/modules/peerconnection/RTCDataChannelInit.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://w3c.github.io/webrtc-pc/#idl-def-rtcdatachannelinit
+
+dictionary RTCDataChannelInit {
+    boolean ordered = true;
+    // TODO(guidou): Rename |maxRetransmitTime| to |maxPacketLifeTime|.
+    // https://crbug.com/696681
+    unsigned short maxRetransmitTime;
+    unsigned short maxRetransmits;
+    USVString protocol = "";
+    boolean negotiated = false;
+    [EnforceRange] unsigned short id;
+};
diff --git a/modules/peerconnection/RTCDtlsFingerprint.idl b/modules/peerconnection/RTCDtlsFingerprint.idl
new file mode 100644
index 0000000..6299ba7
--- /dev/null
+++ b/modules/peerconnection/RTCDtlsFingerprint.idl
@@ -0,0 +1,9 @@
+// Copyright 2017 The Chromium 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/#rtcdtlsfingerprint*
+dictionary RTCDtlsFingerprint {
+    DOMString algorithm;
+    DOMString value;
+};
diff --git a/modules/peerconnection/RTCIceCandidate.idl b/modules/peerconnection/RTCIceCandidate.idl
new file mode 100644
index 0000000..be3173e
--- /dev/null
+++ b/modules/peerconnection/RTCIceCandidate.idl
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ * 3. 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.
+ */
+
+[
+    Constructor(RTCIceCandidateInit candidateInitDict),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor
+] interface RTCIceCandidate {
+    attribute DOMString candidate;
+    attribute DOMString sdpMid;
+    attribute unsigned short sdpMLineIndex;
+    serializer = {attribute};
+};
diff --git a/modules/peerconnection/RTCIceCandidateInit.idl b/modules/peerconnection/RTCIceCandidateInit.idl
new file mode 100644
index 0000000..76c5bc1
--- /dev/null
+++ b/modules/peerconnection/RTCIceCandidateInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/webrtc-pc/#idl-def-rtcicecandidateinit
+
+dictionary RTCIceCandidateInit {
+    DOMString candidate;
+    DOMString sdpMid;
+    unsigned short sdpMLineIndex;
+};
diff --git a/modules/peerconnection/RTCIceServer.idl b/modules/peerconnection/RTCIceServer.idl
new file mode 100644
index 0000000..038af94
--- /dev/null
+++ b/modules/peerconnection/RTCIceServer.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://w3c.github.io/webrtc-pc/#rtciceserver-dictionary
+
+dictionary RTCIceServer {
+    // TODO(foolip): |urls| should be required and |url| is not in the spec.
+    // https://crbug.com/659133
+    (DOMString or sequence<DOMString>) urls;
+    DOMString url;
+    DOMString username;
+    DOMString credential;
+    // TODO(foolip): RTCIceCredentialType credentialType = "password";
+};
diff --git a/modules/peerconnection/RTCLegacyStatsReport.idl b/modules/peerconnection/RTCLegacyStatsReport.idl
new file mode 100644
index 0000000..79a28e3
--- /dev/null
+++ b/modules/peerconnection/RTCLegacyStatsReport.idl
@@ -0,0 +1,34 @@
+/*
+ * 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 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.
+ */
+
+[
+    NoInterfaceObject
+] interface RTCLegacyStatsReport {
+    readonly attribute Date timestamp;
+    readonly attribute DOMString id;
+    readonly attribute DOMString type;
+    DOMString stat(DOMString name);
+    sequence<DOMString> names();
+};
diff --git a/modules/peerconnection/RTCOfferAnswerOptions.idl b/modules/peerconnection/RTCOfferAnswerOptions.idl
new file mode 100644
index 0000000..26f98a3
--- /dev/null
+++ b/modules/peerconnection/RTCOfferAnswerOptions.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.
+
+// https://w3c.github.io/webrtc-pc/#offer-answer-options
+
+dictionary RTCOfferAnswerOptions {
+    boolean voiceActivityDetection = true;
+};
diff --git a/modules/peerconnection/RTCOfferOptions.idl b/modules/peerconnection/RTCOfferOptions.idl
new file mode 100644
index 0000000..7075df0
--- /dev/null
+++ b/modules/peerconnection/RTCOfferOptions.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.
+
+// https://w3c.github.io/webrtc-pc/#offer-answer-options
+
+dictionary RTCOfferOptions : RTCOfferAnswerOptions {
+    boolean iceRestart = false;
+
+    // TODO(guidou): Deprecate the offerToReceive fields depending on the
+    // outcome of https://github.com/w3c/webrtc-pc/issues/709
+    long offerToReceiveVideo;
+    long offerToReceiveAudio;
+};
diff --git a/modules/peerconnection/RTCPeerConnection.idl b/modules/peerconnection/RTCPeerConnection.idl
new file mode 100644
index 0000000..aec6dc4
--- /dev/null
+++ b/modules/peerconnection/RTCPeerConnection.idl
@@ -0,0 +1,142 @@
+/*
+ * 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.
+ * 3. 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://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
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    // TODO(guidou): There should only be one constructor argument.
+    Constructor(optional RTCConfiguration configuration, optional Dictionary mediaConstraints),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor
+] interface RTCPeerConnection : EventTarget {
+    [CallWith=ScriptState] Promise<RTCSessionDescription> createOffer(optional RTCOfferOptions options);
+    [CallWith=ScriptState] 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, MeasureAs=RTCPeerConnectionAddIceCandidatePromise] 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();
+    [CallWith=ScriptState, RaisesException] void setConfiguration(RTCConfiguration configuration);
+    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 Promise<void> because having Promise-based versions requires that all overloads return Promises.
+    [CallWith=ScriptState, RaisesException] Promise<void> createOffer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional Dictionary rtcOfferOptions);
+    // TODO(guidou): There should be no mediaConstraints argument.
+    [CallWith=ScriptState] Promise<void> createAnswer(RTCSessionDescriptionCallback successCallback, RTCPeerConnectionErrorCallback failureCallback, optional Dictionary mediaConstraints);
+    [CallWith=ScriptState] Promise<void> setLocalDescription(RTCSessionDescriptionInit description, VoidCallback successCallback, [Default=Undefined] optional RTCPeerConnectionErrorCallback failureCallback);
+    // TODO(guidou): The failureCallback argument should be non-optional.
+    [CallWith=ScriptState] Promise<void> setRemoteDescription(RTCSessionDescriptionInit description, VoidCallback successCallback, [Default=Undefined] optional RTCPeerConnectionErrorCallback failureCallback);
+    [CallWith=ScriptState, MeasureAs=RTCPeerConnectionAddIceCandidateLegacy] Promise<void> addIceCandidate((RTCIceCandidateInit or 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=ScriptState, LegacyInterfaceTypeChecking] Promise<void> getStats(RTCStatsCallback successCallback, optional MediaStreamTrack? selector);
+    // TODO(hbos): The spec has an optional |selector| argument that is not
+    // supported yet. There is a discussion about what to do with it (clarify
+    // spec, remove it or change it?): https://github.com/w3c/webrtc-stats/issues/116
+    [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
+
+    // RTP Media API
+    // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getsenders
+    [RuntimeEnabled=RTCRtpSender] sequence<RTCRtpSender> getSenders();
+    // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getreceivers
+    sequence<RTCRtpReceiver> getReceivers();
+    // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtrack
+    [RuntimeEnabled=RTCRtpSender, RaisesException] RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams);
+    // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-removetrack
+    [RuntimeEnabled=RTCRtpSender, RaisesException] void removeTrack(RTCRtpSender sender);
+    // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-ontrack
+    [RuntimeEnabled=RTCRtpSender] attribute EventHandler ontrack;
+
+    // https://w3c.github.io/webrtc-pc/#peer-to-peer-data-api
+    [CallWith=ScriptState, RaisesException] RTCDataChannel createDataChannel(USVString label, optional RTCDataChannelInit dataChannelDict);
+    attribute EventHandler ondatachannel;
+
+    // Certificate management
+    // https://w3c.github.io/webrtc-pc/#sec.cert-mgmt
+    [RaisesException, CallWith=ScriptState] static Promise<RTCCertificate> generateCertificate(AlgorithmIdentifier keygenAlgorithm);
+
+    // Non-standard or removed from the spec:
+    [Measure] sequence<MediaStream> getLocalStreams();
+    [Measure] sequence<MediaStream> getRemoteStreams();
+    [Measure, CallWith=ScriptState, RaisesException] void addStream(MediaStream? stream, optional Dictionary mediaConstraints);
+    [Measure, RaisesException] void removeStream(MediaStream? stream);
+    [Measure, RaisesException] RTCDTMFSender createDTMFSender(MediaStreamTrack track);
+    attribute EventHandler onaddstream;
+    attribute EventHandler onremovestream;
+};
diff --git a/modules/peerconnection/RTCPeerConnectionErrorCallback.idl b/modules/peerconnection/RTCPeerConnectionErrorCallback.idl
new file mode 100644
index 0000000..f42696d
--- /dev/null
+++ b/modules/peerconnection/RTCPeerConnectionErrorCallback.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.
+
+// https://w3c.github.io/webrtc-pc/#rtcpeerconnectionerrorcallback
+
+callback interface RTCPeerConnectionErrorCallback {
+    void handleEvent(DOMException exception);
+};
diff --git a/modules/peerconnection/RTCPeerConnectionIceEvent.idl b/modules/peerconnection/RTCPeerConnectionIceEvent.idl
new file mode 100644
index 0000000..a5440dd
--- /dev/null
+++ b/modules/peerconnection/RTCPeerConnectionIceEvent.idl
@@ -0,0 +1,32 @@
+/*
+ * 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 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.
+ */
+
+[
+    Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict)
+] interface RTCPeerConnectionIceEvent : Event {
+    readonly attribute RTCIceCandidate? candidate;
+    // TODO(loonybear): add nullable url attribute here:
+    // https://rawgit.com/w3c/webrtc-pc/master/webrtc.html#rtcpeerconnectioniceevent
+};
diff --git a/modules/peerconnection/RTCPeerConnectionIceEventInit.idl b/modules/peerconnection/RTCPeerConnectionIceEventInit.idl
new file mode 100644
index 0000000..7b18b69
--- /dev/null
+++ b/modules/peerconnection/RTCPeerConnectionIceEventInit.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/webrtc-pc/#rtcpeerconnectioniceeventinit
+
+dictionary RTCPeerConnectionIceEventInit : EventInit {
+    RTCIceCandidate? candidate;
+    // TODO(loonybear): add url attribute.
+    // DOMString? url;
+};
diff --git a/modules/peerconnection/RTCRtpContributingSource.idl b/modules/peerconnection/RTCRtpContributingSource.idl
new file mode 100644
index 0000000..0a0ff1f
--- /dev/null
+++ b/modules/peerconnection/RTCRtpContributingSource.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/#dom-rtcrtpcontributingsource
+interface RTCRtpContributingSource {
+    readonly attribute DOMHighResTimeStamp timestamp;
+    readonly attribute unsigned long       source;
+
+    // TODO(hbos): Support every member of the spec. https://crbug.com/705993
+};
diff --git a/modules/peerconnection/RTCRtpReceiver.idl b/modules/peerconnection/RTCRtpReceiver.idl
new file mode 100644
index 0000000..c4cb2d6
--- /dev/null
+++ b/modules/peerconnection/RTCRtpReceiver.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/#rtcrtpreceiver-interface
+interface RTCRtpReceiver {
+    readonly attribute MediaStreamTrack track;
+    sequence<RTCRtpContributingSource> getContributingSources();
+
+    // TODO(hbos): Support every member of the spec. https://crbug.com/700916
+};
diff --git a/modules/peerconnection/RTCRtpSender.idl b/modules/peerconnection/RTCRtpSender.idl
new file mode 100644
index 0000000..6718c79
--- /dev/null
+++ b/modules/peerconnection/RTCRtpSender.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/#rtcrtpsender-interface
+[
+    RuntimeEnabled=RTCRtpSender
+] interface RTCRtpSender {
+    readonly attribute MediaStreamTrack? track;
+    // TODO(hbos): Implement the rest of RTCRtpSender, https://crbug.com/700916.
+};
diff --git a/modules/peerconnection/RTCSessionDescription.idl b/modules/peerconnection/RTCSessionDescription.idl
new file mode 100644
index 0000000..00b6ca1
--- /dev/null
+++ b/modules/peerconnection/RTCSessionDescription.idl
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ * 3. 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://w3c.github.io/webrtc-pc/#rtcsessiondescription-class
+
+enum RTCSdpType {
+    "offer",
+    "pranswer",
+    "answer"
+    // TODO(foolip): "rollback" is in the spec and Gecko's IDL.
+};
+
+[
+    Constructor(optional RTCSessionDescriptionInit descriptionInitDict),
+    ConstructorCallWith=ExecutionContext
+] interface RTCSessionDescription {
+    // TODO(foolip): |type| and |sdp| should be readonly and not nullable.
+    // https://crbug.com/662898
+    [Measure] attribute RTCSdpType? type;
+    [Measure] attribute DOMString? sdp;
+    serializer = {attribute};
+};
diff --git a/modules/peerconnection/RTCSessionDescriptionCallback.idl b/modules/peerconnection/RTCSessionDescriptionCallback.idl
new file mode 100644
index 0000000..5bf268e
--- /dev/null
+++ b/modules/peerconnection/RTCSessionDescriptionCallback.idl
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ * 3. Neither the name of Google Inc. nor the names of its contributors
+ *    may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+callback interface RTCSessionDescriptionCallback {
+    void handleEvent(RTCSessionDescription sdp);
+};
diff --git a/modules/peerconnection/RTCSessionDescriptionInit.idl b/modules/peerconnection/RTCSessionDescriptionInit.idl
new file mode 100644
index 0000000..4baebd3
--- /dev/null
+++ b/modules/peerconnection/RTCSessionDescriptionInit.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://w3c.github.io/webrtc-pc/#rtcsessiondescription-class
+
+dictionary RTCSessionDescriptionInit {
+    // TODO(foolip): |type| should be required. https://crbug.com/662898
+    RTCSdpType type;
+    DOMString sdp;
+};
diff --git a/modules/peerconnection/RTCStatsCallback.idl b/modules/peerconnection/RTCStatsCallback.idl
new file mode 100644
index 0000000..acbecb2
--- /dev/null
+++ b/modules/peerconnection/RTCStatsCallback.idl
@@ -0,0 +1,28 @@
+/*
+ * 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 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.
+ */
+
+callback interface RTCStatsCallback {
+    void handleEvent(RTCStatsResponse response);
+};
diff --git a/modules/peerconnection/RTCStatsReport.idl b/modules/peerconnection/RTCStatsReport.idl
new file mode 100644
index 0000000..3b9f98a
--- /dev/null
+++ b/modules/peerconnection/RTCStatsReport.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.
+
+// https://w3c.github.io/webrtc-pc/#rtcstatsreport-object
+interface RTCStatsReport {
+    readonly maplike<DOMString, object>;
+};
diff --git a/modules/peerconnection/RTCStatsResponse.idl b/modules/peerconnection/RTCStatsResponse.idl
new file mode 100644
index 0000000..641ca05
--- /dev/null
+++ b/modules/peerconnection/RTCStatsResponse.idl
@@ -0,0 +1,32 @@
+/*
+ * 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 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.
+ */
+
+[
+    NoInterfaceObject
+] interface RTCStatsResponse {
+    sequence<RTCLegacyStatsReport> result();
+    RTCLegacyStatsReport namedItem([Default=Undefined] optional DOMString name);
+    [NotEnumerable, ImplementedAs=namedItem] getter RTCLegacyStatsReport ([Default=Undefined] optional DOMString name);
+};
diff --git a/modules/peerconnection/RTCTrackEvent.idl b/modules/peerconnection/RTCTrackEvent.idl
new file mode 100644
index 0000000..d9dd31c
--- /dev/null
+++ b/modules/peerconnection/RTCTrackEvent.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/#rtctrackevent
+[
+    RuntimeEnabled=RTCRtpSender,
+    Constructor(DOMString type, RTCTrackEventInit eventInitDict)
+] interface RTCTrackEvent : Event {
+    readonly attribute RTCRtpReceiver           receiver;
+    readonly attribute MediaStreamTrack         track;
+    [SameObject]
+    readonly attribute FrozenArray<MediaStream> streams;
+    // TODO(hbos): When RTCRtpTransceiver is supported, add:
+    // readonly attribute RTCRtpTransceiver        transceiver;
+};
diff --git a/modules/peerconnection/RTCTrackEventInit.idl b/modules/peerconnection/RTCTrackEventInit.idl
new file mode 100644
index 0000000..74d6c43
--- /dev/null
+++ b/modules/peerconnection/RTCTrackEventInit.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/#rtctrackevent
+dictionary RTCTrackEventInit : EventInit {
+    required RTCRtpReceiver        receiver;
+    required MediaStreamTrack      track;
+             sequence<MediaStream> streams = [];
+    // TODO(hbos): When RTCRtpTransceiver is supported, add:
+    // required RTCRtpTransceiver     transceiver;
+};
diff --git a/modules/peerconnection/testing/InternalsRTCCertificate.idl b/modules/peerconnection/testing/InternalsRTCCertificate.idl
new file mode 100644
index 0000000..c61cf2a
--- /dev/null
+++ b/modules/peerconnection/testing/InternalsRTCCertificate.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.
+
+[
+    ImplementedAs=InternalsRTCCertificate
+] partial interface Internals {
+    boolean rtcCertificateEquals(RTCCertificate a, RTCCertificate b);
+};
diff --git a/modules/permissions/NavigatorPermissions.idl b/modules/permissions/NavigatorPermissions.idl
index 1735096..45c5e4f 100644
--- a/modules/permissions/NavigatorPermissions.idl
+++ b/modules/permissions/NavigatorPermissions.idl
@@ -7,6 +7,7 @@
 
 [
     Exposed=(Window),
+    ImplementedAs=NavigatorPermissions,
     RuntimeEnabled=Permissions
 ] partial interface Navigator {
     readonly attribute Permissions permissions;
diff --git a/modules/permissions/PermissionDescriptor.idl b/modules/permissions/PermissionDescriptor.idl
index 22e1725..3ce943f 100644
--- a/modules/permissions/PermissionDescriptor.idl
+++ b/modules/permissions/PermissionDescriptor.idl
@@ -6,7 +6,13 @@
     "geolocation",
     "midi",
     "notifications",
-    "push"
+    "push",
+    "background-sync",
+    "ambient-light-sensor",
+    "accelerometer",
+    "gyroscope",
+    "magnetometer",
+    "accessibility-events",
 };
 
 // The PermissionDescriptor dictionary is a base to describe permissions. Some
diff --git a/modules/permissions/PermissionStatus.idl b/modules/permissions/PermissionStatus.idl
index e62fa89..b4c2940 100644
--- a/modules/permissions/PermissionStatus.idl
+++ b/modules/permissions/PermissionStatus.idl
@@ -12,10 +12,10 @@
 };
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
     Exposed=(Window,Worker),
-    RuntimeEnabled=Permissions,
+    RuntimeEnabled=Permissions
 ] interface PermissionStatus : EventTarget {
     readonly attribute PermissionState state;
              attribute EventHandler onchange;
diff --git a/modules/permissions/Permissions.idl b/modules/permissions/Permissions.idl
index 9f2306a..121b762 100644
--- a/modules/permissions/Permissions.idl
+++ b/modules/permissions/Permissions.idl
@@ -7,7 +7,6 @@
 
 [
     Exposed=(Window,Worker),
-    GarbageCollected,
     RuntimeEnabled=Permissions
 ] interface Permissions {
     [CallWith=ScriptState, Measure] Promise<PermissionStatus> query(Dictionary permission);
diff --git a/modules/permissions/PushPermissionDescriptor.idl b/modules/permissions/PushPermissionDescriptor.idl
index 952743d..2cf1afb 100644
--- a/modules/permissions/PushPermissionDescriptor.idl
+++ b/modules/permissions/PushPermissionDescriptor.idl
@@ -3,6 +3,6 @@
 // found in the LICENSE file.
 
 dictionary PushPermissionDescriptor : PermissionDescriptor {
-    // See https://w3c.github.io/push-api/.
+    // https://w3c.github.io/push-api/#pushsubscriptionoptions-interface-and-dictionary
     boolean userVisibleOnly = false;
 };
diff --git a/modules/permissions/WorkerNavigatorPermissions.idl b/modules/permissions/WorkerNavigatorPermissions.idl
index 917433a..f73ad6b 100644
--- a/modules/permissions/WorkerNavigatorPermissions.idl
+++ b/modules/permissions/WorkerNavigatorPermissions.idl
@@ -7,6 +7,7 @@
 
 [
     Exposed=(Worker),
+    ImplementedAs=WorkerNavigatorPermissions,
     RuntimeEnabled=Permissions
 ] partial interface WorkerNavigator {
     readonly attribute Permissions permissions;
diff --git a/modules/plugins/MimeType.idl b/modules/plugins/MimeType.idl
index e70959e..213765e 100644
--- a/modules/plugins/MimeType.idl
+++ b/modules/plugins/MimeType.idl
@@ -19,7 +19,6 @@
 */
 
 [
-    GarbageCollected,
     ImplementedAs=DOMMimeType
 ] interface MimeType {
     readonly attribute DOMString type;
@@ -27,4 +26,3 @@
     readonly attribute DOMString description;
     readonly attribute Plugin enabledPlugin;
 };
-
diff --git a/modules/plugins/MimeTypeArray.idl b/modules/plugins/MimeTypeArray.idl
index 9e583c7..1a59dcf 100644
--- a/modules/plugins/MimeTypeArray.idl
+++ b/modules/plugins/MimeTypeArray.idl
@@ -19,12 +19,10 @@
 */
 
 [
-    GarbageCollected,
-    ImplementedAs=DOMMimeTypeArray
+    ImplementedAs=DOMMimeTypeArray,
+    LegacyUnenumerableNamedProperties
 ] interface MimeTypeArray {
     readonly attribute unsigned long length;
-    getter MimeType item([Default=Undefined] optional unsigned long index);
-    MimeType namedItem([Default=Undefined] optional DOMString name);
-    [NotEnumerable, ImplementedAs=namedItem] getter MimeType ([Default=Undefined] optional DOMString name);
+    getter MimeType? item(unsigned long index);
+    getter MimeType? namedItem(DOMString name);
 };
-
diff --git a/modules/plugins/NavigatorPlugins.idl b/modules/plugins/NavigatorPlugins.idl
index 97b209a..8c2ee1d 100644
--- a/modules/plugins/NavigatorPlugins.idl
+++ b/modules/plugins/NavigatorPlugins.idl
@@ -3,7 +3,9 @@
 // found in the LICENSE file.
 
 // https://html.spec.whatwg.org/multipage/webappapis.html#navigatorplugins
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorPlugins
+] partial interface Navigator {
     readonly attribute PluginArray plugins;
     readonly attribute MimeTypeArray mimeTypes;
     boolean javaEnabled();
diff --git a/modules/plugins/Plugin.idl b/modules/plugins/Plugin.idl
index 94a9a88..2a8136c 100644
--- a/modules/plugins/Plugin.idl
+++ b/modules/plugins/Plugin.idl
@@ -18,16 +18,16 @@
     Boston, MA 02110-1301, USA.
 */
 
+// https://html.spec.whatwg.org/multipage/webappapis.html#plugins-2
+
 [
-    GarbageCollected,
-    ImplementedAs=DOMPlugin
+    ImplementedAs=DOMPlugin,
+    LegacyUnenumerableNamedProperties
 ] interface Plugin {
     readonly attribute DOMString name;
     readonly attribute DOMString filename;
     readonly attribute DOMString description;
     readonly attribute unsigned long length;
-    getter MimeType item([Default=Undefined] optional unsigned long index);
-    MimeType namedItem([Default=Undefined] optional DOMString name);
-    [NotEnumerable, ImplementedAs=namedItem] getter MimeType ([Default=Undefined] optional DOMString name);
+    getter MimeType? item(unsigned long index);
+    getter MimeType? namedItem(DOMString name);
 };
-
diff --git a/modules/plugins/PluginArray.idl b/modules/plugins/PluginArray.idl
index c0a5abb..8b744aa 100644
--- a/modules/plugins/PluginArray.idl
+++ b/modules/plugins/PluginArray.idl
@@ -18,14 +18,14 @@
     Boston, MA 02110-1301, USA.
 */
 
+// https://html.spec.whatwg.org/multipage/webappapis.html#plugins-2
+
 [
-    GarbageCollected,
-    ImplementedAs=DOMPluginArray
+    ImplementedAs=DOMPluginArray,
+    LegacyUnenumerableNamedProperties
 ] interface PluginArray {
     readonly attribute unsigned long length;
-    getter Plugin item([Default=Undefined] optional unsigned long index);
-    Plugin namedItem([Default=Undefined] optional DOMString name);
-    [NotEnumerable, ImplementedAs=namedItem] getter Plugin ([Default=Undefined] optional DOMString name);
+    getter Plugin? item(unsigned long index);
+    getter Plugin? namedItem(DOMString name);
     void refresh([Default=Undefined] optional boolean reload);
 };
-
diff --git a/modules/presentation/NavigatorPresentation.idl b/modules/presentation/NavigatorPresentation.idl
index 2056380..7b0799a 100644
--- a/modules/presentation/NavigatorPresentation.idl
+++ b/modules/presentation/NavigatorPresentation.idl
@@ -5,6 +5,7 @@
 // https://w3c.github.io/presentation-api/#interface-navigatorpresentation
 
 [
+    ImplementedAs=NavigatorPresentation,
     RuntimeEnabled=Presentation
 ] partial interface Navigator {
     [SameObject] readonly attribute Presentation presentation;
diff --git a/modules/presentation/Presentation.idl b/modules/presentation/Presentation.idl
index 968abde..2305de7 100644
--- a/modules/presentation/Presentation.idl
+++ b/modules/presentation/Presentation.idl
@@ -5,11 +5,10 @@
 // https://w3c.github.io/presentation-api/#interface-presentation
 
 [
-    GarbageCollected,
     RuntimeEnabled=Presentation
 ] interface Presentation {
     [MeasureAs=PresentationDefaultRequest] attribute PresentationRequest? defaultRequest;
 
     // This API is available on the receiving browsing context.
-    [RuntimeEnabled=PresentationReceiver, SameObject] readonly attribute PresentationReceiver? receiver;
+    [SameObject] readonly attribute PresentationReceiver? receiver;
 };
diff --git a/modules/presentation/PresentationAvailability.idl b/modules/presentation/PresentationAvailability.idl
index a1c72cb..90e2b56 100644
--- a/modules/presentation/PresentationAvailability.idl
+++ b/modules/presentation/PresentationAvailability.idl
@@ -5,9 +5,9 @@
 // https://w3c.github.io/presentation-api/#interface-presentationavailability
 
 [
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
-    RuntimeEnabled=Presentation,
+    RuntimeEnabled=Presentation
 ] interface PresentationAvailability : EventTarget {
     readonly attribute boolean value;
     attribute EventHandler onchange;
diff --git a/modules/presentation/PresentationConnection.idl b/modules/presentation/PresentationConnection.idl
index 0210567..9b6138f 100644
--- a/modules/presentation/PresentationConnection.idl
+++ b/modules/presentation/PresentationConnection.idl
@@ -11,14 +11,13 @@
 };
 
 [
-    GarbageCollected,
     RuntimeEnabled=Presentation
 ] interface PresentationConnection : EventTarget {
-    readonly attribute DOMString? id;
+    readonly attribute USVString id;
+    readonly attribute USVString url;
     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;
diff --git a/modules/presentation/PresentationConnectionCloseEvent.idl b/modules/presentation/PresentationConnectionCloseEvent.idl
index 88f004b..c742216 100644
--- a/modules/presentation/PresentationConnectionCloseEvent.idl
+++ b/modules/presentation/PresentationConnectionCloseEvent.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://w3c.github.io/presentation-api/#interface-presentationconnectioncloseevent
+// https://w3c.github.io/presentation-api/#interface-presentationconnectioncloseevent
 
 enum PresentationConnectionCloseReason { "error", "closed", "wentaway" };
 
diff --git a/modules/presentation/PresentationConnectionList.idl b/modules/presentation/PresentationConnectionList.idl
new file mode 100644
index 0000000..6e1fe7e
--- /dev/null
+++ b/modules/presentation/PresentationConnectionList.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/presentation-api/#interface-presentationconnectionlist
+
+interface PresentationConnectionList : EventTarget {
+    readonly attribute FrozenArray<PresentationConnection> connections;
+    attribute EventHandler onconnectionavailable;
+};
diff --git a/modules/presentation/PresentationReceiver.idl b/modules/presentation/PresentationReceiver.idl
index 4039cec..0058b57 100644
--- a/modules/presentation/PresentationReceiver.idl
+++ b/modules/presentation/PresentationReceiver.idl
@@ -2,14 +2,8 @@
 // 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
+// https://w3c.github.io/presentation-api/#idl-def-presentationreceiver
 
-[
-    GarbageCollected,
-    RuntimeEnabled=PresentationReceiver
-] interface PresentationReceiver : EventTarget {
-    [CallWith=ScriptState] Promise<PresentationConnection> getConnection();
-    [CallWith=ScriptState] Promise<sequence<PresentationConnection>> getConnections();
-
-    attribute EventHandler onconnectionavailable;
+interface PresentationReceiver {
+    [SameObject, CallWith=ScriptState] readonly attribute Promise<PresentationConnectionList> connectionList;
 };
diff --git a/modules/presentation/PresentationRequest.idl b/modules/presentation/PresentationRequest.idl
index dc92159..9b2c951 100644
--- a/modules/presentation/PresentationRequest.idl
+++ b/modules/presentation/PresentationRequest.idl
@@ -2,17 +2,17 @@
 // 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),
+    ActiveScriptWrappable,
     ConstructorCallWith=ExecutionContext,
-    RaisesException=Constructor,
+    Constructor(USVString url),
+    Constructor(sequence<USVString> urls),
     DependentLifetime,
-    GarbageCollected,
-    RuntimeEnabled=Presentation,
-    MeasureAs=PresentationRequestConstructor
+    MeasureAs=PresentationRequestConstructor,
+    RaisesException=Constructor,
+    RuntimeEnabled=Presentation
 ] interface PresentationRequest : EventTarget {
     [CallWith=ScriptState, MeasureAs=PresentationRequestStart] Promise<PresentationConnection> start();
     [CallWith=ScriptState, MeasureAs=PresentationRequestReconnect] Promise<PresentationConnection> reconnect(DOMString id);
diff --git a/modules/push_messaging/PushEvent.idl b/modules/push_messaging/PushEvent.idl
index aa6d116..28a1cdc 100644
--- a/modules/push_messaging/PushEvent.idl
+++ b/modules/push_messaging/PushEvent.idl
@@ -7,7 +7,7 @@
 [
     Constructor(DOMString type, optional PushEventInit eventInitDict),
     Exposed=ServiceWorker,
-    RuntimeEnabled=PushMessaging,
+    RuntimeEnabled=PushMessaging
 ] interface PushEvent : ExtendableEvent {
-    [RuntimeEnabled=PushMessagingData] readonly attribute PushMessageData data;
+    readonly attribute PushMessageData? data;
 };
diff --git a/modules/push_messaging/PushManager.idl b/modules/push_messaging/PushManager.idl
index ddb6139..1441123 100644
--- a/modules/push_messaging/PushManager.idl
+++ b/modules/push_messaging/PushManager.idl
@@ -5,11 +5,13 @@
 // https://w3c.github.io/push-api/#pushmanager-interface
 
 [
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=PushMessaging,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=PushMessaging
 ] interface PushManager {
-    [CallWith=ScriptState] Promise<PushSubscription> subscribe(optional PushSubscriptionOptions options);
+    [SameObject, SaveSameObject]
+    static readonly attribute FrozenArray<DOMString> supportedContentEncodings;
+
+    [CallWith=ScriptState, RaisesException] Promise<PushSubscription> subscribe(optional PushSubscriptionOptionsInit options);
     [CallWith=ScriptState] Promise<PushSubscription?> getSubscription();
-    [CallWith=ScriptState] Promise permissionState(optional PushSubscriptionOptions options);
+    [CallWith=ScriptState, RaisesException] Promise permissionState(optional PushSubscriptionOptionsInit options);
 };
diff --git a/modules/push_messaging/PushMessageData.idl b/modules/push_messaging/PushMessageData.idl
index 9af96db..6385558 100644
--- a/modules/push_messaging/PushMessageData.idl
+++ b/modules/push_messaging/PushMessageData.idl
@@ -2,14 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://w3c.github.io/push-api/#pushmessagedata-interface
-
-typedef object JSON;
+// https://w3c.github.io/push-api/#pushmessagedata-interface
 
 [
-    Exposed=ServiceWorker,
-    GarbageCollected,
-    RuntimeEnabled=PushMessagingData,
+    Exposed=ServiceWorker
 ] interface PushMessageData {
     ArrayBuffer arrayBuffer();
     Blob blob();
diff --git a/modules/push_messaging/PushSubscription.idl b/modules/push_messaging/PushSubscription.idl
index 469bd8c..9304c02 100644
--- a/modules/push_messaging/PushSubscription.idl
+++ b/modules/push_messaging/PushSubscription.idl
@@ -10,13 +10,14 @@
 };
 
 [
-    Exposed=(Window,ServiceWorker),
-    GarbageCollected,
-    RuntimeEnabled=PushMessaging,
+    Exposed=(Window,Worker),
+    RuntimeEnabled=PushMessaging
 ] interface PushSubscription {
     readonly attribute USVString endpoint;
+    readonly attribute DOMTimeStamp? expirationTime;
+    [SameObject] readonly attribute PushSubscriptionOptions options;
 
-    [RuntimeEnabled=PushMessagingData] ArrayBuffer? getKey(PushEncryptionKeyName name);
+    ArrayBuffer? getKey(PushEncryptionKeyName name);
     [CallWith=ScriptState] Promise<boolean> unsubscribe();
 
     serializer;
diff --git a/modules/push_messaging/PushSubscriptionOptions.idl b/modules/push_messaging/PushSubscriptionOptions.idl
index f034242..16d2076 100644
--- a/modules/push_messaging/PushSubscriptionOptions.idl
+++ b/modules/push_messaging/PushSubscriptionOptions.idl
@@ -4,6 +4,10 @@
 
 // https://w3c.github.io/push-api/#idl-def-PushSubscriptionOptions
 
-dictionary PushSubscriptionOptions {
-    boolean userVisibleOnly = false;
+[
+    Exposed=(Window,Worker),
+    RuntimeEnabled=PushMessaging
+] interface PushSubscriptionOptions {
+    readonly attribute boolean userVisibleOnly;
+    [SameObject] readonly attribute ArrayBuffer? applicationServerKey;
 };
diff --git a/modules/push_messaging/PushSubscriptionOptionsInit.idl b/modules/push_messaging/PushSubscriptionOptionsInit.idl
new file mode 100644
index 0000000..7201018
--- /dev/null
+++ b/modules/push_messaging/PushSubscriptionOptionsInit.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/push-api/#idl-def-PushSubscriptionOptionsInit
+
+dictionary PushSubscriptionOptionsInit {
+    boolean userVisibleOnly = false;
+    BufferSource? applicationServerKey = null;
+};
diff --git a/modules/push_messaging/ServiceWorkerGlobalScopePush.idl b/modules/push_messaging/ServiceWorkerGlobalScopePush.idl
index 3395b3d..cc7848a 100644
--- a/modules/push_messaging/ServiceWorkerGlobalScopePush.idl
+++ b/modules/push_messaging/ServiceWorkerGlobalScopePush.idl
@@ -3,7 +3,8 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=PushMessaging,
+    ImplementedAs=ServiceWorkerGlobalScopePush,
+    RuntimeEnabled=PushMessaging
 ] partial interface ServiceWorkerGlobalScope {
     attribute EventHandler onpush;
 };
diff --git a/modules/push_messaging/ServiceWorkerRegistrationPush.idl b/modules/push_messaging/ServiceWorkerRegistrationPush.idl
index 06e1cfd..51f9fd7 100644
--- a/modules/push_messaging/ServiceWorkerRegistrationPush.idl
+++ b/modules/push_messaging/ServiceWorkerRegistrationPush.idl
@@ -5,8 +5,9 @@
 // https://w3c.github.io/push-api/#extensions-to-the-serviceworkerregistration-interface
 
 [
-    Exposed=(Window, ServiceWorker),
-    RuntimeEnabled=PushMessaging,
+    Exposed=(Window,Worker),
+    ImplementedAs=ServiceWorkerRegistrationPush,
+    RuntimeEnabled=PushMessaging
 ] partial interface ServiceWorkerRegistration {
     readonly attribute PushManager pushManager;
 };
diff --git a/modules/quota/DOMError.idl b/modules/quota/DOMError.idl
new file mode 100644
index 0000000..cd62ea7
--- /dev/null
+++ b/modules/quota/DOMError.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2007 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.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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/#domerror
+
+// FIXME: DOMError has been removed from the spec. crbug.com/460725
+[
+    Constructor(DOMString name, optional DOMString message = null),
+    Measure
+] interface DOMError {
+    [Measure] readonly attribute DOMString name;
+    [Measure] readonly attribute DOMString message;
+};
diff --git a/modules/quota/DeprecatedStorageInfo.idl b/modules/quota/DeprecatedStorageInfo.idl
index c69dcbc..cb59d9f 100644
--- a/modules/quota/DeprecatedStorageInfo.idl
+++ b/modules/quota/DeprecatedStorageInfo.idl
@@ -24,12 +24,11 @@
  */
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface DeprecatedStorageInfo {
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
 
-    [CallWith=ExecutionContext] void queryUsageAndQuota(unsigned short storageType, optional StorageUsageCallback usageCallback, optional StorageErrorCallback errorCallback);
-    [CallWith=ExecutionContext] void requestQuota(unsigned short storageType, unsigned long long newQuotaInBytes, optional StorageQuotaCallback quotaCallback, optional StorageErrorCallback errorCallback);
+    [Measure, CallWith=ScriptState] void queryUsageAndQuota(unsigned short storageType, optional StorageUsageCallback usageCallback, optional StorageErrorCallback errorCallback);
+    [Measure, CallWith=ScriptState] void requestQuota(unsigned short storageType, unsigned long long newQuotaInBytes, optional StorageQuotaCallback quotaCallback, optional StorageErrorCallback errorCallback);
 };
diff --git a/modules/quota/DeprecatedStorageQuota.idl b/modules/quota/DeprecatedStorageQuota.idl
index 1562bc4..fc8e356 100644
--- a/modules/quota/DeprecatedStorageQuota.idl
+++ b/modules/quota/DeprecatedStorageQuota.idl
@@ -24,9 +24,8 @@
  */
 
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface DeprecatedStorageQuota {
-    [CallWith=ExecutionContext] void queryUsageAndQuota(StorageUsageCallback usageCallback, optional StorageErrorCallback errorCallback);
-    [CallWith=ExecutionContext] void requestQuota(unsigned long long newQuotaInBytes, optional StorageQuotaCallback quotaCallback, optional StorageErrorCallback errorCallback);
+    [Measure, CallWith=ScriptState] void queryUsageAndQuota(StorageUsageCallback usageCallback, optional StorageErrorCallback errorCallback);
+    [Measure, CallWith=ScriptState] void requestQuota(unsigned long long newQuotaInBytes, optional StorageQuotaCallback quotaCallback, optional StorageErrorCallback errorCallback);
 };
diff --git a/modules/quota/NavigatorStorageQuota.idl b/modules/quota/NavigatorStorageQuota.idl
index 26483d3..e8bd4d5 100644
--- a/modules/quota/NavigatorStorageQuota.idl
+++ b/modules/quota/NavigatorStorageQuota.idl
@@ -17,16 +17,15 @@
  * Boston, MA 02110-1301, USA.
  */
 
-// This partial interface is a merge of three different partial interfaces
+// This partial interface is a merge of two different partial interfaces
 // related to storage.
-partial interface Navigator {
+[
+    ImplementedAs=NavigatorStorageQuota
+] 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;
+    [SecureContext] readonly attribute StorageManager storage;
 };
diff --git a/modules/quota/StorageEstimate.idl b/modules/quota/StorageEstimate.idl
new file mode 100644
index 0000000..3b38d01
--- /dev/null
+++ b/modules/quota/StorageEstimate.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://storage.spec.whatwg.org/#api
+
+dictionary StorageEstimate {
+    unsigned long long usage;
+    unsigned long long quota;
+};
diff --git a/modules/quota/StorageInfo.idl b/modules/quota/StorageInfo.idl
deleted file mode 100644
index 112f4a4..0000000
--- a/modules/quota/StorageInfo.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject,
-    RuntimeEnabled=QuotaPromise
-] interface StorageInfo {
-    readonly attribute unsigned long long usage;
-    readonly attribute unsigned long long quota;
-};
diff --git a/modules/quota/StorageManager.idl b/modules/quota/StorageManager.idl
index 7d48dac..0fb919d 100644
--- a/modules/quota/StorageManager.idl
+++ b/modules/quota/StorageManager.idl
@@ -4,15 +4,12 @@
 
 // https://storage.spec.whatwg.org/#storagemanager
 
-enum PersistentStoragePermission { "default", "denied", "granted" };
-
+// TODO(jsbell): Should have [SecureContext] on interface
 [
-    Exposed=(Window,Worker),
-    GarbageCollected,
-    RuntimeEnabled=DurableStorage,
+    Exposed=(Window,Worker)
 ] interface StorageManager {
-    [Exposed=Window, CallWith=ScriptState] Promise<boolean> requestPersistent();
-    [CallWith=ScriptState] Promise<PersistentStoragePermission> persistentPermission();
+    [CallWith=ScriptState, MeasureAs=DurableStoragePersisted] Promise<boolean> persisted();
+    [Exposed=Window, CallWith=ScriptState, MeasureAs=DurableStoragePersist] Promise<boolean> persist();
 
-    // TODO(dgrogan): Implement estimate() and persistentEstimate().
+    [CallWith=ScriptState, MeasureAs=DurableStorageEstimate] Promise<StorageEstimate> estimate();
 };
diff --git a/modules/quota/StorageQuota.idl b/modules/quota/StorageQuota.idl
deleted file mode 100644
index 1cfb28a..0000000
--- a/modules/quota/StorageQuota.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-enum StorageType {
-    "temporary",
-    "persistent"
-};
-
-[
-    GarbageCollected,
-    NoInterfaceObject,
-    RuntimeEnabled=QuotaPromise
-] interface StorageQuota {
-    readonly attribute StorageType[] supportedTypes;
-    [CallWith=ScriptState] Promise queryInfo(StorageType type);
-    [CallWith=ScriptState] Promise requestPersistentQuota([Clamp] unsigned long long newQuota);
-};
diff --git a/modules/quota/WindowQuota.idl b/modules/quota/WindowQuota.idl
index 5d14c0b..786bc1b 100644
--- a/modules/quota/WindowQuota.idl
+++ b/modules/quota/WindowQuota.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementedAs=DOMWindowQuota,
+    ImplementedAs=DOMWindowQuota
 ] partial interface Window {
     [DeprecateAs=PrefixedStorageInfo] readonly attribute DeprecatedStorageInfo webkitStorageInfo;
 };
diff --git a/modules/quota/WorkerNavigatorStorageQuota.idl b/modules/quota/WorkerNavigatorStorageQuota.idl
index cb14bb6..0acd78e 100644
--- a/modules/quota/WorkerNavigatorStorageQuota.idl
+++ b/modules/quota/WorkerNavigatorStorageQuota.idl
@@ -17,13 +17,9 @@
  * 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;
-
+[
+    ImplementedAs=WorkerNavigatorStorageQuota
+] partial interface WorkerNavigator {
     // https://storage.spec.whatwg.org/#api
-    [RuntimeEnabled=DurableStorage] readonly attribute StorageManager storage;
+    [SecureContext] readonly attribute StorageManager storage;
 };
diff --git a/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl b/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl
index 87e23c7..d9ef231 100644
--- a/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl
+++ b/modules/remoteplayback/HTMLMediaElementRemotePlayback.idl
@@ -4,6 +4,9 @@
 
 // https://w3c.github.io/remote-playback/#extension-to-the-htmlmediaelement
 
-partial interface HTMLMediaElement {
-    [Reflect] attribute boolean disableRemotePlayback;
+[
+    ImplementedAs=HTMLMediaElementRemotePlayback
+] partial interface HTMLMediaElement {
+    [RuntimeEnabled=RemotePlayback] readonly attribute RemotePlayback remote;
+    [CEReactions, Reflect, RuntimeEnabled=RemotePlayback] attribute boolean disableRemotePlayback;
 };
diff --git a/modules/remoteplayback/RemotePlayback.idl b/modules/remoteplayback/RemotePlayback.idl
new file mode 100644
index 0000000..6c328a8
--- /dev/null
+++ b/modules/remoteplayback/RemotePlayback.idl
@@ -0,0 +1,28 @@
+// 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/remote-playback/#idl-def-remoteplayback
+
+enum RemotePlaybackState {
+    "connecting",
+    "connected",
+    "disconnected"
+};
+
+callback RemotePlaybackAvailabilityCallback = void(boolean available);
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    RuntimeEnabled=RemotePlayback
+] interface RemotePlayback : EventTarget {
+    readonly attribute RemotePlaybackState state;
+    attribute EventHandler onconnecting;
+    attribute EventHandler onconnect;
+    attribute EventHandler ondisconnect;
+
+    [CallWith=ScriptState] Promise<long> watchAvailability(RemotePlaybackAvailabilityCallback callback);
+    [CallWith=ScriptState] Promise<void> cancelWatchAvailability(optional long id);
+    [CallWith=ScriptState] Promise<void> prompt();
+};
diff --git a/modules/screen_orientation/ScreenOrientation.idl b/modules/screen_orientation/ScreenOrientation.idl
index 8569fbd..f46ee29 100644
--- a/modules/screen_orientation/ScreenOrientation.idl
+++ b/modules/screen_orientation/ScreenOrientation.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.
 
+// https://w3c.github.io/screen-orientation/#screenorientation-interface
+
 enum OrientationLockType {
     "any",
     "natural",
@@ -20,10 +22,7 @@
     "landscape-secondary"
 };
 
-[
-    GarbageCollected,
-    RuntimeEnabled=ScreenOrientation
-] interface ScreenOrientation : EventTarget {
+interface ScreenOrientation : EventTarget {
     [MeasureAs=ScreenOrientationAngle] readonly attribute unsigned short angle;
     [MeasureAs=ScreenOrientationType] readonly attribute DOMString type;
 
diff --git a/modules/screen_orientation/ScreenScreenOrientation.idl b/modules/screen_orientation/ScreenScreenOrientation.idl
index 2905343..f2eb03f 100644
--- a/modules/screen_orientation/ScreenScreenOrientation.idl
+++ b/modules/screen_orientation/ScreenScreenOrientation.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    RuntimeEnabled=ScreenOrientation
+    ImplementedAs=ScreenScreenOrientation
 ] partial interface Screen {
     [CallWith=ScriptState] readonly attribute ScreenOrientation orientation;
 };
diff --git a/modules/sensor/AbsoluteOrientationSensor.idl b/modules/sensor/AbsoluteOrientationSensor.idl
new file mode 100644
index 0000000..aff2bb0
--- /dev/null
+++ b/modules/sensor/AbsoluteOrientationSensor.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Specification at:
+// https://w3c.github.io/orientation-sensor/#absoluteorientationsensor-interface
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=AbsoluteOrientationSensorConstructor
+] interface AbsoluteOrientationSensor : OrientationSensor {
+};
diff --git a/modules/sensor/Accelerometer.idl b/modules/sensor/Accelerometer.idl
new file mode 100644
index 0000000..fc0f66e
--- /dev/null
+++ b/modules/sensor/Accelerometer.idl
@@ -0,0 +1,18 @@
+// 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.
+
+// Specification at:
+// https://w3c.github.io/accelerometer/#accelerometer-interface
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=AccelerometerConstructor
+] interface Accelerometer : Sensor {
+    readonly attribute unrestricted double? x;
+    readonly attribute unrestricted double? y;
+    readonly attribute unrestricted double? z;
+};
diff --git a/modules/sensor/AmbientLightSensor.idl b/modules/sensor/AmbientLightSensor.idl
new file mode 100644
index 0000000..dc36105
--- /dev/null
+++ b/modules/sensor/AmbientLightSensor.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.
+
+// Specification at:
+// https://w3c.github.io/ambient-light/#ambient-light-sensor-interface
+
+[
+    RuntimeEnabled=SensorExtraClasses,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=AmbientLightSensorConstructor
+] interface AmbientLightSensor : Sensor {
+    readonly attribute unrestricted double? illuminance;
+};
diff --git a/modules/sensor/Gyroscope.idl b/modules/sensor/Gyroscope.idl
new file mode 100644
index 0000000..69684f4
--- /dev/null
+++ b/modules/sensor/Gyroscope.idl
@@ -0,0 +1,18 @@
+// 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.
+
+// Specification at:
+// https://w3c.github.io/gyroscope/#gyroscope-interface
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=GyroscopeConstructor
+] interface Gyroscope : Sensor {
+    readonly attribute unrestricted double? x;
+    readonly attribute unrestricted double? y;
+    readonly attribute unrestricted double? z;
+};
diff --git a/modules/sensor/LinearAccelerationSensor.idl b/modules/sensor/LinearAccelerationSensor.idl
new file mode 100644
index 0000000..bba298d
--- /dev/null
+++ b/modules/sensor/LinearAccelerationSensor.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Specification at:
+// https://w3c.github.io/accelerometer/#linearaccelerationsensor
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=LinearAccelerationSensorConstructor
+] interface LinearAccelerationSensor : Accelerometer {
+};
diff --git a/modules/sensor/Magnetometer.idl b/modules/sensor/Magnetometer.idl
new file mode 100644
index 0000000..5024f0d
--- /dev/null
+++ b/modules/sensor/Magnetometer.idl
@@ -0,0 +1,18 @@
+// 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.
+
+// Specification at:
+// https://w3c.github.io/magnetometer/#magnetometer-interface
+
+[
+    RuntimeEnabled=SensorExtraClasses,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=MagnetometerConstructor
+] interface Magnetometer : Sensor {
+    readonly attribute unrestricted double? x;
+    readonly attribute unrestricted double? y;
+    readonly attribute unrestricted double? z;
+};
diff --git a/modules/sensor/OrientationSensor.idl b/modules/sensor/OrientationSensor.idl
new file mode 100644
index 0000000..091f5e3
--- /dev/null
+++ b/modules/sensor/OrientationSensor.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Specification at:
+// https://w3c.github.io/orientation-sensor/
+
+typedef (Float32Array or Float64Array or DOMMatrix) RotationMatrixType;
+
+[
+    OriginTrialEnabled=Sensor
+] interface OrientationSensor : Sensor {
+    [CachedAttribute=isReadingDirty] readonly attribute FrozenArray<double>? quaternion;
+    [RaisesException, MeasureAs=OrientationSensorPopulateMatrix] void populateMatrix(RotationMatrixType targetBuffer);
+};
diff --git a/modules/sensor/RelativeOrientationSensor.idl b/modules/sensor/RelativeOrientationSensor.idl
new file mode 100644
index 0000000..a448333
--- /dev/null
+++ b/modules/sensor/RelativeOrientationSensor.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Specification at:
+// https://w3c.github.io/orientation-sensor/#relativeorientationsensor-interface
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(optional SensorOptions sensorOptions),
+    ConstructorCallWith=ExecutionContext,
+    RaisesException=Constructor,
+    MeasureAs=RelativeOrientationSensorConstructor
+] interface RelativeOrientationSensor : OrientationSensor {
+};
diff --git a/modules/sensor/Sensor.idl b/modules/sensor/Sensor.idl
new file mode 100644
index 0000000..8d122af
--- /dev/null
+++ b/modules/sensor/Sensor.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.
+
+// Specification at:
+// https://w3c.github.io/sensors/#the-sensor-interface
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    OriginTrialEnabled=Sensor
+] interface Sensor : EventTarget {
+    [MeasureAs=GenericSensorActivated] readonly attribute boolean activated;
+    readonly attribute boolean hasReading;
+    [CallWith=ScriptState] readonly attribute DOMHighResTimeStamp? timestamp;
+
+    [MeasureAs=GenericSensorStart] void start();
+    [MeasureAs=GenericSensorStop] void stop();
+
+    [MeasureAs=GenericSensorOnError] attribute EventHandler onerror;
+    [MeasureAs=GenericSensorOnChange] attribute EventHandler onreading;
+    [MeasureAs=GenericSensorOnActivate] attribute EventHandler onactivate;
+};
diff --git a/modules/sensor/SensorErrorEvent.idl b/modules/sensor/SensorErrorEvent.idl
new file mode 100644
index 0000000..9e38c7c
--- /dev/null
+++ b/modules/sensor/SensorErrorEvent.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.
+
+// Specification at:
+// https://w3c.github.io/sensors/#sensorerrorevent
+
+[
+    OriginTrialEnabled=Sensor,
+    Constructor(DOMString type, SensorErrorEventInit eventInitDict)
+] interface SensorErrorEvent : Event {
+    readonly attribute DOMException error;
+};
diff --git a/modules/sensor/SensorErrorEventInit.idl b/modules/sensor/SensorErrorEventInit.idl
new file mode 100644
index 0000000..27e44e4
--- /dev/null
+++ b/modules/sensor/SensorErrorEventInit.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.
+
+// Specification at:
+// https://w3c.github.io/sensors/#dictdef-sensorerroreventinit
+
+dictionary SensorErrorEventInit : EventInit {
+    DOMException error;
+};
diff --git a/modules/sensor/SensorOptions.idl b/modules/sensor/SensorOptions.idl
new file mode 100644
index 0000000..8ea6530
--- /dev/null
+++ b/modules/sensor/SensorOptions.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.
+
+// Specification at:
+// https://w3c.github.io/sensors/#dictdef-sensoroptions
+
+dictionary SensorOptions {
+    double? frequency;
+};
diff --git a/modules/serviceworkers/Client.idl b/modules/serviceworkers/Client.idl
index 01dd03e..2761202 100644
--- a/modules/serviceworkers/Client.idl
+++ b/modules/serviceworkers/Client.idl
@@ -2,14 +2,16 @@
 // 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#service-worker-client-interface
+// https://w3c.github.io/ServiceWorker/#client-interface
 [
     Exposed=ServiceWorker,
-    GarbageCollected,
-    ImplementedAs=ServiceWorkerClient,
+    ImplementedAs=ServiceWorkerClient
 ] interface Client {
-    [RuntimeEnabled=ServiceWorkerClientAttributes] readonly attribute USVString url;
-    [RuntimeEnabled=ServiceWorkerClientAttributes] readonly attribute ContextFrameType frameType;
-    [RuntimeEnabled=ServiceWorkerClientAttributes] readonly attribute DOMString id;
-    [PostMessage, RaisesException, CallWith=ExecutionContext] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+    readonly attribute USVString url;
+    readonly attribute DOMString id;
+    readonly attribute ClientType type;
+    [PostMessage, RaisesException, CallWith=ScriptState] void postMessage(any message, optional sequence<object> transfer);
+
+    // FIXME: frameType is non-standard, see https://crbug.com/697110
+    [CallWith=ScriptState] readonly attribute ContextFrameType frameType;
 };
diff --git a/modules/serviceworkers/ClientQueryOptions.idl b/modules/serviceworkers/ClientQueryOptions.idl
index 0d1437a..e840839 100644
--- a/modules/serviceworkers/ClientQueryOptions.idl
+++ b/modules/serviceworkers/ClientQueryOptions.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/#client-type-enum
+// https://w3c.github.io/ServiceWorker/#enumdef-clienttype
 enum ClientType {
     "window",
     "worker",
@@ -10,7 +10,7 @@
     "all"
 };
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#serviceworker-client-query-options-dictionary
+// https://w3c.github.io/ServiceWorker/#dictdef-clientqueryoptions
 dictionary ClientQueryOptions {
     boolean includeUncontrolled = false;
     ClientType type = "window";
diff --git a/modules/serviceworkers/Clients.idl b/modules/serviceworkers/Clients.idl
index df84bec..8f90d4d 100644
--- a/modules/serviceworkers/Clients.idl
+++ b/modules/serviceworkers/Clients.idl
@@ -2,14 +2,13 @@
 // 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/#clients-interface
+// https://w3c.github.io/ServiceWorker/#clients-interface
 [
     Exposed=ServiceWorker,
-    GarbageCollected,
-    ImplementedAs=ServiceWorkerClients,
+    ImplementedAs=ServiceWorkerClients
 ] interface Clients {
-    [RuntimeEnabled=ServiceWorkerClientsGetID, CallWith=ScriptState] Promise<any> get(DOMString id);
+    [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<WindowClient?> openWindow(USVString url);
     [CallWith=ScriptState] Promise<void> claim();
 };
diff --git a/modules/serviceworkers/ExtendableEvent.idl b/modules/serviceworkers/ExtendableEvent.idl
index 6bef9da..a55175d 100644
--- a/modules/serviceworkers/ExtendableEvent.idl
+++ b/modules/serviceworkers/ExtendableEvent.idl
@@ -28,10 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#extendable-event-interface
+// https://w3c.github.io/ServiceWorker/#extendableevent-interface
 [
     Constructor(DOMString type, optional ExtendableEventInit eventInitDict),
-    Exposed=ServiceWorker,
+    Exposed=ServiceWorker
 ] interface ExtendableEvent : Event {
     [CallWith=ScriptState, RaisesException] void waitUntil(Promise<any> f);
 };
diff --git a/modules/serviceworkers/ExtendableEventInit.idl b/modules/serviceworkers/ExtendableEventInit.idl
index 81d8afa..bef230b 100644
--- a/modules/serviceworkers/ExtendableEventInit.idl
+++ b/modules/serviceworkers/ExtendableEventInit.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#extendable-event-interface
+// https://w3c.github.io/ServiceWorker/#dictdef-extendableeventinit
 
 dictionary ExtendableEventInit : EventInit {
     // Defined for the forward compatibility across the derived events
diff --git a/modules/serviceworkers/ExtendableMessageEvent.idl b/modules/serviceworkers/ExtendableMessageEvent.idl
index 6da6bbf..a508c35 100644
--- a/modules/serviceworkers/ExtendableMessageEvent.idl
+++ b/modules/serviceworkers/ExtendableMessageEvent.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#extendablemessage-event-section
+// https://w3c.github.io/ServiceWorker/#extendablemessageevent-interface
 
 [
     // TODO(bashi): Stop using CustomConstructor once we solve reference
@@ -10,12 +10,11 @@
     // Constructor should be:
     // Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict),
     CustomConstructor,
-    Exposed=ServiceWorker,
-    RuntimeEnabled=ServiceWorkerExtendableMessageEvent,
+    Exposed=ServiceWorker
 ] 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;
+    readonly attribute FrozenArray<MessagePort> ports;
 };
diff --git a/modules/serviceworkers/ExtendableMessageEventInit.idl b/modules/serviceworkers/ExtendableMessageEventInit.idl
index 9d3bbe0..765cda3 100644
--- a/modules/serviceworkers/ExtendableMessageEventInit.idl
+++ b/modules/serviceworkers/ExtendableMessageEventInit.idl
@@ -2,14 +2,12 @@
 // 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
+// https://w3c.github.io/ServiceWorker/#dictdef-extendablemessageeventinit
 
-[
-    RuntimeEnabled=ServiceWorkerExtendableMessageEvent,
-] dictionary ExtendableMessageEventInit : ExtendableEventInit {
+dictionary ExtendableMessageEventInit : ExtendableEventInit {
      any data;
      DOMString origin;
      DOMString lastEventId;
      (Client or ServiceWorker or MessagePort)? source;
-     sequence<MessagePort>? ports;
+     sequence<MessagePort> ports;
 };
diff --git a/modules/serviceworkers/FetchEvent.idl b/modules/serviceworkers/FetchEvent.idl
index e8f4551..3529ee3 100644
--- a/modules/serviceworkers/FetchEvent.idl
+++ b/modules/serviceworkers/FetchEvent.idl
@@ -2,14 +2,18 @@
 // 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
+// https://w3c.github.io/ServiceWorker/#fetchevent-interface
 [
+    ActiveScriptWrappable,
+    DependentLifetime,
     Constructor(DOMString type, FetchEventInit eventInitDict),
-    Exposed=ServiceWorker,
+    ConstructorCallWith=ScriptState,
+    Exposed=ServiceWorker
 ] interface FetchEvent : ExtendableEvent {
     [SameObject] readonly attribute Request request;
     readonly attribute DOMString? clientId;
     readonly attribute boolean isReload;
 
     [CallWith=ScriptState, RaisesException] void respondWith(Promise<Response> r);
+    [CallWith=ScriptState] readonly attribute Promise<any> preloadResponse;
 };
diff --git a/modules/serviceworkers/FetchEventInit.idl b/modules/serviceworkers/FetchEventInit.idl
index 80da60f..c373916 100644
--- a/modules/serviceworkers/FetchEventInit.idl
+++ b/modules/serviceworkers/FetchEventInit.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
+// https://w3c.github.io/ServiceWorker/#dictdef-fetcheventinit
 
 dictionary FetchEventInit : ExtendableEventInit {
   required Request request;
diff --git a/modules/serviceworkers/ForeignFetchEvent.idl b/modules/serviceworkers/ForeignFetchEvent.idl
new file mode 100644
index 0000000..815af4b
--- /dev/null
+++ b/modules/serviceworkers/ForeignFetchEvent.idl
@@ -0,0 +1,16 @@
+// 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/ServiceWorker/#foreignfetchevent-interface
+[
+    Constructor(DOMString type, ForeignFetchEventInit eventInitDict),
+    ConstructorCallWith=ScriptState,
+    Exposed=ServiceWorker,
+    OriginTrialEnabled=ForeignFetch
+] interface ForeignFetchEvent : ExtendableEvent {
+    [SameObject] readonly attribute Request request;
+    readonly attribute USVString origin;
+
+    [CallWith=ScriptState, RaisesException] void respondWith(Promise<ForeignFetchResponse> r);
+};
diff --git a/modules/serviceworkers/ForeignFetchEventInit.idl b/modules/serviceworkers/ForeignFetchEventInit.idl
new file mode 100644
index 0000000..af8274c
--- /dev/null
+++ b/modules/serviceworkers/ForeignFetchEventInit.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/ServiceWorker/#dictdef-foreignfetcheventinit
+
+dictionary ForeignFetchEventInit : ExtendableEventInit {
+  required Request request;
+  USVString origin = "null";
+};
diff --git a/modules/serviceworkers/ForeignFetchOptions.idl b/modules/serviceworkers/ForeignFetchOptions.idl
new file mode 100644
index 0000000..2a7b72a
--- /dev/null
+++ b/modules/serviceworkers/ForeignFetchOptions.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/ServiceWorker/#dictdef-foreignfetchoptions
+
+dictionary ForeignFetchOptions {
+     required sequence<USVString> scopes;
+     required sequence<USVString> origins;
+};
diff --git a/modules/serviceworkers/ForeignFetchResponse.idl b/modules/serviceworkers/ForeignFetchResponse.idl
new file mode 100644
index 0000000..53ac924
--- /dev/null
+++ b/modules/serviceworkers/ForeignFetchResponse.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/ServiceWorker/#dictdef-foreignfetchresponse
+
+dictionary ForeignFetchResponse {
+  required Response response;
+  USVString origin;
+  sequence<ByteString> headers;
+};
diff --git a/modules/serviceworkers/InstallEvent.idl b/modules/serviceworkers/InstallEvent.idl
index dc9ee12..2113e2f 100644
--- a/modules/serviceworkers/InstallEvent.idl
+++ b/modules/serviceworkers/InstallEvent.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#fetch-event-interface
+// https://w3c.github.io/ServiceWorker/#installevent
+
 [
     Constructor(DOMString type, optional ExtendableEventInit eventInitDict),
-    Exposed=ServiceWorker,
-    RuntimeEnabled=ForeignFetch,
+    Exposed=ServiceWorker
 ] interface InstallEvent : ExtendableEvent {
-  [CallWith=ExecutionContext, RaisesException] void registerForeignFetchScopes(sequence<USVString> subScopes, (USVString or sequence<USVString>) origins);
+  [OriginTrialEnabled=ForeignFetch, CallWith=ScriptState, RaisesException] void registerForeignFetch(ForeignFetchOptions options);
 };
diff --git a/modules/serviceworkers/NavigationPreloadManager.idl b/modules/serviceworkers/NavigationPreloadManager.idl
new file mode 100644
index 0000000..7c830b6
--- /dev/null
+++ b/modules/serviceworkers/NavigationPreloadManager.idl
@@ -0,0 +1,18 @@
+// 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(falken): Revise link when this lands in the spec:
+// https://github.com/w3c/ServiceWorker/issues/920
+[
+    Exposed=(Window,Worker)
+] interface NavigationPreloadManager {
+    // TODO(mgiuca): Put SecureContext on the interface, not individual methods.
+    // Currently prevented due to clash with OriginTrialEnabled. This can be
+    // resolved either when OriginTrialEnabled is removed, or
+    // https://crbug.com/695123 is fixed.
+    [SecureContext, CallWith=ScriptState] Promise<void> enable();
+    [SecureContext, CallWith=ScriptState] Promise<void> disable();
+    [SecureContext, CallWith=ScriptState] Promise<void> setHeaderValue(ByteString value);
+    [SecureContext, CallWith=ScriptState] Promise<NavigationPreloadState> getState();
+};
diff --git a/modules/serviceworkers/NavigationPreloadState.idl b/modules/serviceworkers/NavigationPreloadState.idl
new file mode 100644
index 0000000..2a06381
--- /dev/null
+++ b/modules/serviceworkers/NavigationPreloadState.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.
+
+// TODO(falken): Revise link when this lands in the spec:
+// https://github.com/w3c/ServiceWorker/issues/920
+dictionary NavigationPreloadState {
+    boolean enabled = false;
+    ByteString headerValue;
+};
diff --git a/modules/serviceworkers/NavigatorServiceWorker.idl b/modules/serviceworkers/NavigatorServiceWorker.idl
index 7ffe838..ef59d5d 100644
--- a/modules/serviceworkers/NavigatorServiceWorker.idl
+++ b/modules/serviceworkers/NavigatorServiceWorker.idl
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#navigator-service-worker
-partial interface Navigator {
-    [RaisesException, CallWith=ExecutionContext] readonly attribute ServiceWorkerContainer serviceWorker;
+// https://w3c.github.io/ServiceWorker/#navigator-serviceworker
+[
+    ImplementedAs=NavigatorServiceWorker
+] partial interface Navigator {
+    [RaisesException, CallWith=ScriptState] readonly attribute ServiceWorkerContainer serviceWorker;
 };
diff --git a/modules/serviceworkers/RegistrationOptions.idl b/modules/serviceworkers/RegistrationOptions.idl
index 17f2d20..afc7562 100644
--- a/modules/serviceworkers/RegistrationOptions.idl
+++ b/modules/serviceworkers/RegistrationOptions.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#registration-option-list-dictionary
+// https://w3c.github.io/ServiceWorker/#dictdef-registrationoptions
 dictionary RegistrationOptions {
     USVString scope;
 };
diff --git a/modules/serviceworkers/ServiceWorker.idl b/modules/serviceworkers/ServiceWorker.idl
index 12f157b..b50b477 100644
--- a/modules/serviceworkers/ServiceWorker.idl
+++ b/modules/serviceworkers/ServiceWorker.idl
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-interface
+// https://w3c.github.io/ServiceWorker/#serviceworker-interface
 
 enum ServiceWorkerState {
     "installing",
@@ -39,11 +39,11 @@
 };
 
 [
-    DependentLifetime,
-    GarbageCollected,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface ServiceWorker : EventTarget {
 
-    [PostMessage, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+    [PostMessage, RaisesException] void postMessage(any message, optional sequence<object> transfer);
 
     readonly attribute USVString scriptURL;
     readonly attribute ServiceWorkerState  state;
diff --git a/modules/serviceworkers/ServiceWorkerContainer.idl b/modules/serviceworkers/ServiceWorkerContainer.idl
index bc58128..135059b 100644
--- a/modules/serviceworkers/ServiceWorkerContainer.idl
+++ b/modules/serviceworkers/ServiceWorkerContainer.idl
@@ -28,11 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-interface
-[
-    GarbageCollected,
-] interface ServiceWorkerContainer : EventTarget {
-    [Unforgeable] readonly attribute ServiceWorker? controller;
+// https://w3c.github.io/ServiceWorker/#serviceworkercontainer-interface
+interface ServiceWorkerContainer : EventTarget {
+    readonly attribute ServiceWorker? controller;
     [CallWith=ScriptState] readonly attribute Promise<ServiceWorkerRegistration> ready;
 
     [CallWith=ScriptState, ImplementedAs=registerServiceWorker] Promise<ServiceWorkerRegistration> register(USVString url, optional RegistrationOptions options);
diff --git a/modules/serviceworkers/ServiceWorkerGlobalScope.idl b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
index df412a7..4efdf5a 100644
--- a/modules/serviceworkers/ServiceWorkerGlobalScope.idl
+++ b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
@@ -28,11 +28,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-interface
+// https://w3c.github.io/ServiceWorker/#serviceworkerglobalscope-interface
 
 [
     Exposed=ServiceWorker,
-    Global=(Worker,ServiceWorker),
+    Global=(Worker,ServiceWorker)
 ] interface ServiceWorkerGlobalScope : WorkerGlobalScope {
 
   readonly attribute Clients clients;
@@ -40,13 +40,11 @@
 
   [CallWith=ScriptState, RaisesException] Promise<Response> fetch(RequestInfo input, optional Dictionary init);
 
-  [RaisesException] void close();
-
   [CallWith=ScriptState] Promise<void> skipWaiting();
 
   attribute EventHandler onactivate;
   attribute EventHandler onfetch;
   attribute EventHandler oninstall;
   attribute EventHandler onmessage;
-  [RuntimeEnabled=ForeignFetch] attribute EventHandler onforeignfetch;
+  [OriginTrialEnabled=ForeignFetch] attribute EventHandler onforeignfetch;
 };
diff --git a/modules/serviceworkers/ServiceWorkerMessageEvent.idl b/modules/serviceworkers/ServiceWorkerMessageEvent.idl
deleted file mode 100644
index f110925..0000000
--- a/modules/serviceworkers/ServiceWorkerMessageEvent.idl
+++ /dev/null
@@ -1,20 +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://slightlyoff.github.io/ServiceWorker/spec/service_worker/#serviceworkermessage-event-interface
-
-[
-    // 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;
-    readonly attribute DOMString origin;
-    readonly attribute DOMString lastEventId;
-    readonly attribute (ServiceWorker or MessagePort)? source;
-    readonly attribute MessagePort[]? ports;
-};
diff --git a/modules/serviceworkers/ServiceWorkerMessageEventInit.idl b/modules/serviceworkers/ServiceWorkerMessageEventInit.idl
deleted file mode 100644
index 9c134ec..0000000
--- a/modules/serviceworkers/ServiceWorkerMessageEventInit.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/#serviceworkermessage-event-init-dictionary
-
-dictionary ServiceWorkerMessageEventInit : EventInit {
-    any data;
-    DOMString origin;
-    DOMString lastEventId;
-    (ServiceWorker or MessagePort)? source;
-    sequence<MessagePort> ports;
-};
diff --git a/modules/serviceworkers/ServiceWorkerRegistration.idl b/modules/serviceworkers/ServiceWorkerRegistration.idl
index 97d7b82..bd9d3c6 100644
--- a/modules/serviceworkers/ServiceWorkerRegistration.idl
+++ b/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -2,15 +2,16 @@
 // 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#service-worker-registration-obj
+// https://w3c.github.io/ServiceWorker/#serviceworkerregistration-interface
 [
-    Exposed=(Window,Worker),
+    ActiveScriptWrappable,
     DependentLifetime,
-    GarbageCollected,
+    Exposed=(Window,Worker)
 ] interface ServiceWorkerRegistration : EventTarget {
-    [Unforgeable] readonly attribute ServiceWorker? installing;
-    [Unforgeable] readonly attribute ServiceWorker? waiting;
-    [Unforgeable] readonly attribute ServiceWorker? active;
+    readonly attribute ServiceWorker? installing;
+    readonly attribute ServiceWorker? waiting;
+    readonly attribute ServiceWorker? active;
+    readonly attribute NavigationPreloadManager navigationPreload;
 
     readonly attribute USVString scope;
 
diff --git a/modules/serviceworkers/WindowClient.idl b/modules/serviceworkers/WindowClient.idl
index 3639408..5b31045 100644
--- a/modules/serviceworkers/WindowClient.idl
+++ b/modules/serviceworkers/WindowClient.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://slightlyoff.github.io/ServiceWorker/spec/service_worker/#context-frame-type-enum
+// https://w3c.github.io/ServiceWorker/#context-frame-type-enum
 enum ContextFrameType {
     "top-level",
     "nested",
@@ -10,15 +10,13 @@
     "none"
 };
 
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/#window-client-interface
+// https://w3c.github.io/ServiceWorker/#windowclient
 [
     Exposed=ServiceWorker,
-    RuntimeEnabled=ServiceWorkerClientAttributes,
-    GarbageCollected,
-    ImplementedAs=ServiceWorkerWindowClient,
+    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);
+    [CallWith=ScriptState] Promise<WindowClient> navigate(USVString url);
 };
diff --git a/modules/serviceworkers/testing/InternalsServiceWorker.idl b/modules/serviceworkers/testing/InternalsServiceWorker.idl
index f20eecb..36f71b6 100644
--- a/modules/serviceworkers/testing/InternalsServiceWorker.idl
+++ b/modules/serviceworkers/testing/InternalsServiceWorker.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.
 
-partial interface Internals {
+[
+    ImplementedAs=InternalsServiceWorker
+] partial interface Internals {
     void terminateServiceWorker(ServiceWorker worker);
 };
diff --git a/modules/shapedetection/BarcodeDetector.idl b/modules/shapedetection/BarcodeDetector.idl
new file mode 100644
index 0000000..42690b5
--- /dev/null
+++ b/modules/shapedetection/BarcodeDetector.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://wicg.github.io/shape-detection-api/#barcode-detection-api
+
+[
+    Constructor,
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    MeasureAs=ShapeDetection_BarcodeDetectorConstructor,
+    RuntimeEnabled=ShapeDetection
+] interface BarcodeDetector {
+    [CallWith=ScriptState] Promise<sequence<DetectedBarcode>> detect(ImageBitmapSource image);
+};
diff --git a/modules/shapedetection/DetectedBarcode.idl b/modules/shapedetection/DetectedBarcode.idl
new file mode 100644
index 0000000..6bd2f7b
--- /dev/null
+++ b/modules/shapedetection/DetectedBarcode.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.
+
+// https://wicg.github.io/shape-detection-api/#barcode-detection-api
+
+[
+    Constructor,
+    RuntimeEnabled=ShapeDetection
+] interface DetectedBarcode {
+    // TODO(mcasas): Implement missing fields. https://crbug.com/646083
+    [SameObject] readonly attribute DOMString rawValue;
+    [SameObject] readonly attribute DOMRect boundingBox;
+    // 4 corner points in clockwise direction starting with top-left. Due to
+    // possible perspective distortions, this is not necessarily a rectangle.
+    [SameObject, SaveSameObject] readonly attribute FrozenArray<Point2D> cornerPoints;
+};
diff --git a/modules/shapedetection/DetectedFace.idl b/modules/shapedetection/DetectedFace.idl
new file mode 100644
index 0000000..fe8dba2
--- /dev/null
+++ b/modules/shapedetection/DetectedFace.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.
+
+// https://wicg.github.io/shape-detection-api/#face-detection-api
+
+[
+    Constructor,
+    RuntimeEnabled=ShapeDetection
+] interface DetectedFace {
+    // TODO(xianglu): Implement any other fields. https://crbug.com/646083
+    [SameObject] readonly attribute DOMRect boundingBox;
+    [SameObject, SaveSameObject] readonly attribute FrozenArray<Landmark> landmarks;
+};
diff --git a/modules/shapedetection/DetectedText.idl b/modules/shapedetection/DetectedText.idl
new file mode 100644
index 0000000..17df6ff
--- /dev/null
+++ b/modules/shapedetection/DetectedText.idl
@@ -0,0 +1,16 @@
+// Copyright 2017 The Chromium 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/shape-detection-api/#text-detection-api
+
+[
+    Constructor,
+    RuntimeEnabled=ShapeDetection
+] interface DetectedText {
+    [SameObject] readonly attribute DOMString rawValue;
+    [SameObject] readonly attribute DOMRect boundingBox;
+    // 4 corner points in clockwise direction starting with top-left. Due to
+    // possible perspective distortions, this is not necessarily a rectangle.
+    [SameObject] readonly attribute FrozenArray<Point2D> cornerPoints;
+};
diff --git a/modules/shapedetection/FaceDetector.idl b/modules/shapedetection/FaceDetector.idl
new file mode 100644
index 0000000..6b3b8ab
--- /dev/null
+++ b/modules/shapedetection/FaceDetector.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://wicg.github.io/shape-detection-api/#face-detection-api
+
+[
+    Constructor(optional FaceDetectorOptions faceDetectorOptions),
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    MeasureAs=ShapeDetection_FaceDetectorConstructor,
+    RuntimeEnabled=ShapeDetection
+] interface FaceDetector {
+    [CallWith=ScriptState] Promise<sequence<DetectedFace>> detect(ImageBitmapSource image);
+};
diff --git a/modules/shapedetection/FaceDetectorOptions.idl b/modules/shapedetection/FaceDetectorOptions.idl
new file mode 100644
index 0000000..3ee1e7e
--- /dev/null
+++ b/modules/shapedetection/FaceDetectorOptions.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://wicg.github.io/shape-detection-api/#face-detection-api
+
+dictionary FaceDetectorOptions {
+  unsigned short maxDetectedFaces = 10;
+  boolean fastMode = false;
+};
diff --git a/modules/shapedetection/Landmark.idl b/modules/shapedetection/Landmark.idl
new file mode 100644
index 0000000..6f57886
--- /dev/null
+++ b/modules/shapedetection/Landmark.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/shape-detection-api/#enumdef-landmarktype
+enum LandmarkType { "mouth", "eye" };
+
+// https://wicg.github.io/shape-detection-api/#dictdef-landmark
+dictionary Landmark {
+  required Point2D location;
+  LandmarkType type;
+};
diff --git a/modules/shapedetection/TextDetector.idl b/modules/shapedetection/TextDetector.idl
new file mode 100644
index 0000000..56df055
--- /dev/null
+++ b/modules/shapedetection/TextDetector.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/shape-detection-api/#text-detection-api
+
+[
+    Constructor,
+    ConstructorCallWith=ExecutionContext,
+    Exposed=(Window,Worker),
+    MeasureAs=ShapeDetection_TextDetectorConstructor,
+    RuntimeEnabled=ShapeDetection
+] interface TextDetector {
+    [CallWith=ScriptState] Promise<sequence<DetectedText>> detect(ImageBitmapSource image);
+};
diff --git a/modules/speech/SpeechGrammar.idl b/modules/speech/SpeechGrammar.idl
index 1e3a346..e1d0f25 100644
--- a/modules/speech/SpeechGrammar.idl
+++ b/modules/speech/SpeechGrammar.idl
@@ -23,11 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#dfn-speechgrammar
+
 [
     Constructor,
-    GarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface SpeechGrammar {
-    [URL,CallWith=ExecutionContext] attribute DOMString src;
+    [URL,CallWith=ScriptState] attribute DOMString src;
     attribute float weight;
 };
diff --git a/modules/speech/SpeechGrammarList.idl b/modules/speech/SpeechGrammarList.idl
index 48f78b8..85a60d4 100644
--- a/modules/speech/SpeechGrammarList.idl
+++ b/modules/speech/SpeechGrammarList.idl
@@ -23,13 +23,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#dfn-speechgrammarlist
+
 [
     Constructor,
-    GarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface SpeechGrammarList {
     readonly attribute unsigned long length;
     getter SpeechGrammar item(unsigned long index);
-    [CallWith=ExecutionContext] void addFromUri(DOMString src, optional float weight);
+    [CallWith=ScriptState] void addFromUri(DOMString src, optional float weight);
     void addFromString(DOMString string, optional float weight);
 };
diff --git a/modules/speech/SpeechRecognition.idl b/modules/speech/SpeechRecognition.idl
index cbd14c2..5901b6c 100644
--- a/modules/speech/SpeechRecognition.idl
+++ b/modules/speech/SpeechRecognition.idl
@@ -23,24 +23,31 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#dfn-speechreco
+
 [
-    GarbageCollected,
-    NoInterfaceObject,
-    DependentLifetime,
+    ActiveScriptWrappable,
     Constructor,
     ConstructorCallWith=ExecutionContext,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface SpeechRecognition : EventTarget {
-    [LegacyInterfaceTypeChecking] attribute SpeechGrammarList grammars;
+    // recognition parameters
+    attribute SpeechGrammarList grammars;
     attribute DOMString lang;
     attribute boolean continuous;
     attribute boolean interimResults;
     attribute unsigned long maxAlternatives;
-    [RuntimeEnabled=MediaStreamSpeech, LegacyInterfaceTypeChecking] attribute MediaStreamTrack audioTrack;
 
-    [RaisesException] void start();
+    // Speech Recognition with WebRTC. https://crbug.com/408940
+    [RuntimeEnabled=MediaStreamSpeech] attribute MediaStreamTrack? audioTrack;
+
+    // methods to drive the speech interaction
+    [RaisesException, Measure] void start();
     [ImplementedAs=stopFunction] void stop();
     void abort();
 
+    // event methods
     attribute EventHandler onaudiostart;
     attribute EventHandler onsoundstart;
     attribute EventHandler onspeechstart;
diff --git a/modules/speech/SpeechRecognitionAlternative.idl b/modules/speech/SpeechRecognitionAlternative.idl
index 38acdc0..920719a 100644
--- a/modules/speech/SpeechRecognitionAlternative.idl
+++ b/modules/speech/SpeechRecognitionAlternative.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionalternative
+
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SpeechRecognitionAlternative {
     readonly attribute DOMString transcript;
diff --git a/modules/speech/SpeechRecognitionError.idl b/modules/speech/SpeechRecognitionError.idl
index 5267e53..9eae1c3 100644
--- a/modules/speech/SpeechRecognitionError.idl
+++ b/modules/speech/SpeechRecognitionError.idl
@@ -23,9 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionerror
+
 [
     NoInterfaceObject,
-    Constructor(DOMString type, optional SpeechRecognitionErrorInit initDict),
+    Constructor(DOMString type, optional SpeechRecognitionErrorInit initDict)
 ] interface SpeechRecognitionError : Event {
     readonly attribute DOMString error;
     readonly attribute DOMString message;
diff --git a/modules/speech/SpeechRecognitionErrorInit.idl b/modules/speech/SpeechRecognitionErrorInit.idl
index c258ab6..3f7aeb3 100644
--- a/modules/speech/SpeechRecognitionErrorInit.idl
+++ b/modules/speech/SpeechRecognitionErrorInit.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.
 
-// FIXME: Add spec URL.
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#dfn-speechrecognitionerror
 
 dictionary SpeechRecognitionErrorInit : EventInit {
     DOMString error;
diff --git a/modules/speech/SpeechRecognitionEvent.idl b/modules/speech/SpeechRecognitionEvent.idl
index 289b103..06bab39 100644
--- a/modules/speech/SpeechRecognitionEvent.idl
+++ b/modules/speech/SpeechRecognitionEvent.idl
@@ -23,13 +23,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionevent
+
 [
     NoInterfaceObject,
-    Constructor(DOMString type, optional SpeechRecognitionEventInit initDict),
+    Constructor(DOMString type, optional SpeechRecognitionEventInit initDict)
 ] interface SpeechRecognitionEvent : Event {
     readonly attribute unsigned long resultIndex;
-    readonly attribute SpeechRecognitionResultList results;
+    readonly attribute SpeechRecognitionResultList? results;
 
-    readonly attribute Document interpretation;
-    readonly attribute Document emma;
+    readonly attribute Document? interpretation;
+    readonly attribute Document? emma;
 };
diff --git a/modules/speech/SpeechRecognitionEventInit.idl b/modules/speech/SpeechRecognitionEventInit.idl
index 4f55ebb..3c1dd4a 100644
--- a/modules/speech/SpeechRecognitionEventInit.idl
+++ b/modules/speech/SpeechRecognitionEventInit.idl
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// FIXME: Add spec URL.
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionevent
 
 dictionary SpeechRecognitionEventInit : EventInit {
     unsigned long resultIndex;
-    SpeechRecognitionResultList results;
+    SpeechRecognitionResultList? results;
 };
diff --git a/modules/speech/SpeechRecognitionResult.idl b/modules/speech/SpeechRecognitionResult.idl
index ab0761b..6802d29 100644
--- a/modules/speech/SpeechRecognitionResult.idl
+++ b/modules/speech/SpeechRecognitionResult.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionresult
+
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SpeechRecognitionResult {
     readonly attribute unsigned long length;
diff --git a/modules/speech/SpeechRecognitionResultList.idl b/modules/speech/SpeechRecognitionResultList.idl
index e93a5cf..a4de925 100644
--- a/modules/speech/SpeechRecognitionResultList.idl
+++ b/modules/speech/SpeechRecognitionResultList.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#speechrecognitionresultlist
+
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SpeechRecognitionResultList {
     readonly attribute unsigned long length;
diff --git a/modules/speech/SpeechSynthesis.idl b/modules/speech/SpeechSynthesis.idl
index 17fa33a..6f07665 100644
--- a/modules/speech/SpeechSynthesis.idl
+++ b/modules/speech/SpeechSynthesis.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#tts-section
+
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SpeechSynthesis : EventTarget {
     readonly attribute boolean pending;
diff --git a/modules/speech/SpeechSynthesisEvent.idl b/modules/speech/SpeechSynthesisEvent.idl
index cec1e47..4c35b5d 100644
--- a/modules/speech/SpeechSynthesisEvent.idl
+++ b/modules/speech/SpeechSynthesisEvent.idl
@@ -23,6 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#tts-section
+
 [
     RuntimeEnabled=ScriptedSpeech
 ] interface SpeechSynthesisEvent : Event {
diff --git a/modules/speech/SpeechSynthesisUtterance.idl b/modules/speech/SpeechSynthesisUtterance.idl
index 872fa89..e8e8fa2 100644
--- a/modules/speech/SpeechSynthesisUtterance.idl
+++ b/modules/speech/SpeechSynthesisUtterance.idl
@@ -23,15 +23,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#tts-section
+
 [
     Constructor(optional DOMString text = null),
     ConstructorCallWith=ExecutionContext,
-    RuntimeEnabled=ScriptedSpeech,
-    GarbageCollected,
+    RuntimeEnabled=ScriptedSpeech
 ] interface SpeechSynthesisUtterance : EventTarget {
     attribute DOMString text;
     attribute DOMString lang;
-    [LegacyInterfaceTypeChecking] attribute SpeechSynthesisVoice voice;
+    attribute SpeechSynthesisVoice? voice;
     attribute float volume;
     attribute float rate;
     attribute float pitch;
diff --git a/modules/speech/SpeechSynthesisVoice.idl b/modules/speech/SpeechSynthesisVoice.idl
index ea323b0..68f18cd 100644
--- a/modules/speech/SpeechSynthesisVoice.idl
+++ b/modules/speech/SpeechSynthesisVoice.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://dvcs.w3.org/hg/speech-api/raw-file/tip/webspeechapi.html#tts-section
+
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SpeechSynthesisVoice {
     readonly attribute DOMString voiceURI;
diff --git a/modules/speech/WindowSpeech.idl b/modules/speech/WindowSpeech.idl
index 0d331cc..fdc4623 100644
--- a/modules/speech/WindowSpeech.idl
+++ b/modules/speech/WindowSpeech.idl
@@ -4,11 +4,11 @@
 
 [
     ImplementedAs=DOMWindowSpeech,
-    RuntimeEnabled=ScriptedSpeech,
+    RuntimeEnabled=ScriptedSpeech
 ] partial interface Window {
-    attribute SpeechGrammarConstructor webkitSpeechGrammar;
-    attribute SpeechGrammarListConstructor webkitSpeechGrammarList;
-    attribute SpeechRecognitionConstructor webkitSpeechRecognition;
-    attribute SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
-    attribute SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
+    [Measure] attribute SpeechGrammarConstructor webkitSpeechGrammar;
+    [Measure] attribute SpeechGrammarListConstructor webkitSpeechGrammarList;
+    [Measure] attribute SpeechRecognitionConstructor webkitSpeechRecognition;
+    [Measure] attribute SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
+    [Measure] attribute SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
 };
diff --git a/modules/speech/WindowSpeechSynthesis.idl b/modules/speech/WindowSpeechSynthesis.idl
index 85f5b49..ca27255 100644
--- a/modules/speech/WindowSpeechSynthesis.idl
+++ b/modules/speech/WindowSpeechSynthesis.idl
@@ -25,7 +25,7 @@
 
 [
     ImplementedAs=DOMWindowSpeechSynthesis,
-    RuntimeEnabled=ScriptedSpeech,
+    RuntimeEnabled=ScriptedSpeech
 ] partial interface Window {
-    readonly attribute SpeechSynthesis speechSynthesis;
+    [Measure, CallWith=ScriptState] readonly attribute SpeechSynthesis speechSynthesis;
 };
diff --git a/modules/speech/testing/InternalsSpeechSynthesis.idl b/modules/speech/testing/InternalsSpeechSynthesis.idl
index 34f2bc8..3488084 100644
--- a/modules/speech/testing/InternalsSpeechSynthesis.idl
+++ b/modules/speech/testing/InternalsSpeechSynthesis.idl
@@ -28,6 +28,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface Internals {
-    void enableMockSpeechSynthesizer(Document document);
+[
+    ImplementedAs=InternalsSpeechSynthesis
+] partial interface Internals {
+    [CallWith=ScriptState] void enableMockSpeechSynthesizer(Window window);
 };
diff --git a/modules/srcobject/HTMLMediaElementSrcObject.idl b/modules/srcobject/HTMLMediaElementSrcObject.idl
new file mode 100644
index 0000000..501bf86
--- /dev/null
+++ b/modules/srcobject/HTMLMediaElementSrcObject.idl
@@ -0,0 +1,18 @@
+// 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://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-srcobject
+
+// TODO(guidou): Add support for MediaSource and Blob, as defined in the spec.
+typedef MediaStream MediaProvider;
+
+[
+    ImplementedAs=HTMLMediaElementSrcObject
+] partial interface HTMLMediaElement {
+    // TODO(haraken): Per the spec, the srcObject should be defined in
+    // HTMLMediaElement.idl. However, we cannot define srcObject in
+    // HTMLMediaElement.idl because of the dependency restriction from modules/
+    // to core/. For now we avoid the problem by using a partial interface.
+    [Measure] attribute MediaProvider? srcObject;
+};
diff --git a/modules/storage/Storage.idl b/modules/storage/Storage.idl
index d972137..76b9815 100644
--- a/modules/storage/Storage.idl
+++ b/modules/storage/Storage.idl
@@ -25,24 +25,11 @@
 
 // https://html.spec.whatwg.org/multipage/webstorage.html#the-storage-interface
 
-[
-    GarbageCollected
-] interface Storage {
-    // 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);
-
-    // Non-standard APIs
-    [NotEnumerable, RaisesException] getter DOMString (unsigned long index);
-    [RaisesException] setter DOMString (unsigned long index, DOMString value);
-    [RaisesException] deleter boolean (unsigned long index);
+interface Storage {
+    [RaisesException=Getter] readonly attribute unsigned long length;
+    [RaisesException] DOMString? key(unsigned long index);
+    [LogActivity, RaisesException] getter DOMString? getItem(DOMString key);
+    [LogActivity, RaisesException] setter void setItem(DOMString key, DOMString value);
+    [LogActivity, RaisesException] deleter void removeItem(DOMString key);
+    [LogActivity, RaisesException] void clear();
 };
diff --git a/modules/storage/StorageEvent.idl b/modules/storage/StorageEvent.idl
index bcf9162..f4a3688 100644
--- a/modules/storage/StorageEvent.idl
+++ b/modules/storage/StorageEvent.idl
@@ -26,7 +26,7 @@
 // https://html.spec.whatwg.org/multipage/webstorage.html#the-storageevent-interface
 
 [
-    Constructor(DOMString type, optional StorageEventInit eventInitDict),
+    Constructor(DOMString type, optional StorageEventInit eventInitDict)
 ] interface StorageEvent : Event {
     readonly attribute DOMString? key;
     readonly attribute DOMString? oldValue;
diff --git a/modules/storage/WindowStorage.idl b/modules/storage/WindowStorage.idl
index 5ddd617..91790a6 100644
--- a/modules/storage/WindowStorage.idl
+++ b/modules/storage/WindowStorage.idl
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 [
-    ImplementedAs=DOMWindowStorage,
+    ImplementedAs=DOMWindowStorage
 ] partial interface Window {
     // https://html.spec.whatwg.org/#the-sessionstorage-attribute
     [LogActivity=GetterOnly, RaisesException=Getter] readonly attribute Storage sessionStorage;
diff --git a/modules/vibration/NavigatorVibration.idl b/modules/vibration/NavigatorVibration.idl
index 8ed6624..33d86d0 100644
--- a/modules/vibration/NavigatorVibration.idl
+++ b/modules/vibration/NavigatorVibration.idl
@@ -17,10 +17,12 @@
  *  Boston, MA 02110-1301, USA.
  */
 
-// http://dev.w3.org/2009/dap/vibration/#idl-def-Navigator
+// https://w3c.github.io/vibration/#vibration-interface
 
-partial interface Navigator {
-    // FIXME: should be union type http://crbug.com/240176
+[
+    ImplementedAs=NavigatorVibration
+] partial interface Navigator {
+    // FIXME: should be union type https://crbug.com/240176
     // FIXME: The contents of the pattern argument should be clamped.
     // See https://code.google.com/p/chromium/issues/detail?id=310138
     boolean vibrate([Clamp] unsigned long pattern);
diff --git a/modules/vibration/testing/InternalsVibration.idl b/modules/vibration/testing/InternalsVibration.idl
index 5da4484..e1cb852 100644
--- a/modules/vibration/testing/InternalsVibration.idl
+++ b/modules/vibration/testing/InternalsVibration.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface Internals {
-    boolean isVibrating(Document document);
-    sequence<unsigned long> pendingVibrationPattern(Document document);
+[
+    ImplementedAs=InternalsVibration
+] partial interface Internals {
+    boolean isVibrating(Navigator navigator);
+    sequence<unsigned long> pendingVibrationPattern(Navigator navigator);
 };
diff --git a/modules/vr/HMDVRDevice.idl b/modules/vr/HMDVRDevice.idl
deleted file mode 100644
index 2737c66..0000000
--- a/modules/vr/HMDVRDevice.idl
+++ /dev/null
@@ -1,19 +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 VREye {
-    "left",
-    "right"
-};
-
-// An HMDVRDevice represents a Head Mounted Display. The interface provides all
-// the information necessary to correctly render a stereo 3D scene for a given
-// headset.
-// http://mozvr.github.io/webvr-spec/webvr.html#hmdvrdevice
-[
-    RuntimeEnabled=WebVR,
-] interface HMDVRDevice : VRDevice {
-    VREyeParameters getEyeParameters(VREye whichEye);
-    void setFieldOfView(optional VRFieldOfView leftFov, optional VRFieldOfView rightFov);
-};
diff --git a/modules/vr/NavigatorVR.idl b/modules/vr/NavigatorVR.idl
new file mode 100644
index 0000000..e4ba710
--- /dev/null
+++ b/modules/vr/NavigatorVR.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/webvr/#interface-navigator
+[
+    ImplementedAs=NavigatorVR,
+    OriginTrialEnabled=WebVR
+] partial interface Navigator {
+    // Latest API
+    [SecureContext] readonly attribute VR vr;
+
+    // Legacy API
+    [CallWith=ScriptState] Promise getVRDisplays();
+};
diff --git a/modules/vr/NavigatorVRDevice.idl b/modules/vr/NavigatorVRDevice.idl
deleted file mode 100644
index 89c4c82..0000000
--- a/modules/vr/NavigatorVRDevice.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.
-
-[
-    RuntimeEnabled=WebVR,
-] partial interface Navigator {
-    [CallWith=ScriptState] Promise getVRDevices();
-};
diff --git a/modules/vr/PositionSensorVRDevice.idl b/modules/vr/PositionSensorVRDevice.idl
deleted file mode 100644
index ecd70d3..0000000
--- a/modules/vr/PositionSensorVRDevice.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.
-
-// An PositionSensorVRDevice represents a user interface that provides an
-// orientation and position in space. This may be a Head Mounted Display or
-// any number of other six-degree-of-freedom devices that provide, for example,
-// hand tracking.
-// http://mozvr.github.io/webvr-spec/webvr.html#positionsensorvrdevice
-[
-    RuntimeEnabled=WebVR,
-] interface PositionSensorVRDevice : VRDevice {
-    VRPositionState getState();
-    VRPositionState getImmediateState();
-    void resetSensor();
-};
diff --git a/modules/vr/VRDevice.idl b/modules/vr/VRDevice.idl
deleted file mode 100644
index 9bb4610..0000000
--- a/modules/vr/VRDevice.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.
-
-// http://mozvr.github.io/webvr-spec/webvr.html#vrdevice
-[
-    RuntimeEnabled=WebVR,
-    GarbageCollected,
-] interface VRDevice {
-    // An identifier for the distinct hardware unit that this
-    // VR Device is a part of.  All VRDevice/Sensors that come
-    // from the same hardware will have the same hardwareId.
-    readonly attribute DOMString hardwareUnitId;
-
-    // An identifier for this distinct sensor/device on a physical
-    // hardware device.  This shouldn't change across browser
-    // restrats, allowing configuration data to be saved based on it.
-    readonly attribute DOMString deviceId;
-
-    // A user-readable name identifying the device.
-    readonly attribute DOMString deviceName;
-};
diff --git a/modules/vr/VRDisplay.idl b/modules/vr/VRDisplay.idl
new file mode 100644
index 0000000..121ac6f
--- /dev/null
+++ b/modules/vr/VRDisplay.idl
@@ -0,0 +1,55 @@
+// 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.
+
+enum VREye {
+    "left",
+    "right"
+};
+
+// https://w3c.github.io/webvr/#interface-vrdisplay
+[
+    ActiveScriptWrappable,
+    DependentLifetime,
+    OriginTrialEnabled=WebVR
+] interface VRDisplay : EventTarget {
+    // An identifier for this device unique across VRDisplays.
+    readonly attribute unsigned long displayId;
+
+    // A user-readable name identifying the device.
+    [MeasureAs=VRDisplayDisplayName] readonly attribute DOMString displayName;
+
+    readonly attribute boolean isPresenting;
+
+    // [Constant]?
+    readonly attribute VRDisplayCapabilities capabilities;
+
+    readonly attribute VRStageParameters stageParameters;
+
+    boolean getFrameData(VRFrameData frameData);
+
+    attribute double depthNear;
+    attribute double depthFar;
+
+    VREyeParameters getEyeParameters(VREye whichEye);
+
+    long requestAnimationFrame(FrameRequestCallback callback);
+    void cancelAnimationFrame(long handle);
+
+    // Begin presenting to the VRDisplay. Must be called in response to a user
+    // gesture. Repeat calls while already presenting will update the layer
+    // being displayed.
+    [CallWith=ScriptState] Promise requestPresent(sequence<VRLayerInit> layers);
+
+    // Stops presenting to the VRDisplay.
+    [CallWith=ScriptState] Promise exitPresent();
+
+    // Get the sources currently being presented.
+    sequence<VRLayerInit> getLayers();
+
+    // The layer provided to the `VRDisplay` will be captured and presented
+    // in the HMD. Calling this function has the same effect on the source
+    // canvas as any other operation that uses its source image, and canvases
+    // created without preserveDrawingBuffer set to true will be cleared.
+    void submitFrame();
+};
diff --git a/modules/vr/VRDisplayCapabilities.idl b/modules/vr/VRDisplayCapabilities.idl
new file mode 100644
index 0000000..14d8265
--- /dev/null
+++ b/modules/vr/VRDisplayCapabilities.idl
@@ -0,0 +1,28 @@
+// 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/webvr/#interface-vrdisplaycapabilities
+[
+    OriginTrialEnabled=WebVR
+] interface VRDisplayCapabilities {
+  // Whether or not the VR display is capable of reporting user position.
+  // If false position may still be reported using simulated values like
+  // neck modeling.
+  readonly attribute boolean hasPosition;
+
+  // Whether or not the VRDisplay is separate from the device’s primary display.
+  // If presenting VR content will obscure other content on the device, this
+  // should be false. When false VR content should not be mirrored.
+  readonly attribute boolean hasExternalDisplay;
+
+  // Whether or not the VRDisplay is capable of presenting content to an HMD or
+  // similar device. Can be used to indicate “magic window” devices that are
+  // capable of 6DoF tracking but for which requestPresent is not meaningful. If
+  // false then calls to requestPresent should always fail, and getEyeParameters
+  // should return null.
+  readonly attribute boolean canPresent;
+
+  // The maximum length of the array that VRDisplay.requestPresent will accept.
+  readonly attribute unsigned long maxLayers;
+};
diff --git a/modules/vr/VRDisplayEvent.idl b/modules/vr/VRDisplayEvent.idl
new file mode 100644
index 0000000..ae9103a
--- /dev/null
+++ b/modules/vr/VRDisplayEvent.idl
@@ -0,0 +1,20 @@
+// 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.
+
+enum VRDisplayEventReason {
+    "connected",
+    "disconnected",
+    "navigation",
+    "mounted",
+    "unmounted"
+};
+
+// https://w3c.github.io/webvr/#interface-vrdisplayevent
+[
+    OriginTrialEnabled=WebVR,
+    Constructor(DOMString type, optional VRDisplayEventInit eventInitDict)
+] interface VRDisplayEvent : Event {
+    readonly attribute VRDisplay display;
+    readonly attribute VRDisplayEventReason reason;
+};
diff --git a/modules/vr/VRDisplayEventInit.idl b/modules/vr/VRDisplayEventInit.idl
new file mode 100644
index 0000000..2b8695a
--- /dev/null
+++ b/modules/vr/VRDisplayEventInit.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://w3c.github.io/webvr/#interface-vrdisplayeventinit
+
+dictionary VRDisplayEventInit : EventInit {
+    // TODO(foolip): |display| should be required and not nullable.
+    // https://crbug.com/647693
+    // https://github.com/w3c/webvr/issues/83
+    VRDisplay? display;
+    VRDisplayEventReason reason;
+};
diff --git a/modules/vr/VREyeParameters.idl b/modules/vr/VREyeParameters.idl
index 5a83da5..7b5b630 100644
--- a/modules/vr/VREyeParameters.idl
+++ b/modules/vr/VREyeParameters.idl
@@ -2,18 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://mozvr.github.io/webvr-spec/webvr.html#eyeparameters
+// https://w3c.github.io/webvr/#interface-vreyeparameters
 [
-    RuntimeEnabled=WebVR,
-    GarbageCollected
+    OriginTrialEnabled=WebVR
 ] interface VREyeParameters {
-  /* These values are expected to be static per-device/per-user */
-  readonly attribute VRFieldOfView minimumFieldOfView;
-  readonly attribute VRFieldOfView maximumFieldOfView;
-  readonly attribute VRFieldOfView recommendedFieldOfView;
-  readonly attribute DOMPoint eyeTranslation;
-
   /* These values will vary after a FOV has been set */
-  readonly attribute VRFieldOfView currentFieldOfView;
-  readonly attribute DOMRect renderRect;
-};
\ No newline at end of file
+  [DeprecateAs=VREyeParametersOffset] readonly attribute Float32Array offset;
+  readonly attribute unsigned long renderWidth;
+  readonly attribute unsigned long renderHeight;
+};
diff --git a/modules/vr/VRFieldOfView.idl b/modules/vr/VRFieldOfView.idl
deleted file mode 100644
index 23049d2..0000000
--- a/modules/vr/VRFieldOfView.idl
+++ /dev/null
@@ -1,15 +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.
-
-// http://mozvr.github.io/webvr-spec/webvr.html#vrfieldofview
-[
-    RuntimeEnabled=WebVR,
-    GarbageCollected,
-    Constructor(optional VRFieldOfViewInit fov),
-] interface VRFieldOfView {
-    attribute double upDegrees;
-    attribute double downDegrees;
-    attribute double leftDegrees;
-    attribute double rightDegrees;
-};
diff --git a/modules/vr/VRFieldOfViewInit.idl b/modules/vr/VRFieldOfViewInit.idl
deleted file mode 100644
index 75cac9e..0000000
--- a/modules/vr/VRFieldOfViewInit.idl
+++ /dev/null
@@ -1,14 +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.
-
-// http://mozvr.github.io/webvr-spec/webvr.html#vrfieldofview
-[
-    RuntimeEnabled=WebVR,
-    GarbageCollected
-] dictionary VRFieldOfViewInit {
-    double upDegrees = 0.0;
-    double rightDegrees = 0.0;
-    double downDegrees = 0.0;
-    double leftDegrees = 0.0;
-};
diff --git a/modules/vr/VRFrameData.idl b/modules/vr/VRFrameData.idl
new file mode 100644
index 0000000..5d1f348
--- /dev/null
+++ b/modules/vr/VRFrameData.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.
+
+// https://w3c.github.io/webvr/#interface-vrframedata
+[
+    OriginTrialEnabled=WebVR,
+    Constructor
+] interface VRFrameData {
+    readonly attribute Float32Array leftProjectionMatrix;
+    readonly attribute Float32Array leftViewMatrix;
+
+    readonly attribute Float32Array rightProjectionMatrix;
+    readonly attribute Float32Array rightViewMatrix;
+
+    readonly attribute VRPose pose;
+};
diff --git a/modules/vr/VRLayerInit.idl b/modules/vr/VRLayerInit.idl
new file mode 100644
index 0000000..114de35
--- /dev/null
+++ b/modules/vr/VRLayerInit.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.
+
+typedef (HTMLCanvasElement or OffscreenCanvas) VRSource;
+
+// https://w3c.github.io/webvr/#interface-vrlayerinit
+
+dictionary VRLayerInit {
+  // The canvas to be presented to the VRDisplay
+  VRSource? source = null;
+
+  // The left and right bounds contain 4 git statvalues defining the texture bounds
+  // within the canvas to present to the eye in UV space.
+  // [0] left offset of the bounds (0.0 - 1.0)
+  // [1] top offset of the bounds (0.0 - 1.0)
+  // [2] width of the bounds (0.0 - 1.0)
+  // [3] height of the bounds (0.0 - 1.0)
+  sequence<float> leftBounds = []; //= [0.0, 0.0, 0.5, 1.0];
+  sequence<float> rightBounds = []; //= [0.5, 0.0, 0.5, 1.0];
+};
diff --git a/modules/vr/VRPose.idl b/modules/vr/VRPose.idl
new file mode 100644
index 0000000..e935c5f
--- /dev/null
+++ b/modules/vr/VRPose.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/webvr/#interface-vrpose
+[
+    OriginTrialEnabled=WebVR
+] interface VRPose {
+    readonly attribute Float32Array? position;
+    [MeasureAs=VRPoseLinearVelocity] readonly attribute Float32Array? linearVelocity;
+    [MeasureAs=VRPoseLinearAcceleration] readonly attribute Float32Array? linearAcceleration;
+    readonly attribute Float32Array? orientation;
+    [MeasureAs=VRPoseAngularVelocity] readonly attribute Float32Array? angularVelocity;
+    [MeasureAs=VRPoseAngularAcceleration] readonly attribute Float32Array? angularAcceleration;
+};
diff --git a/modules/vr/VRPositionState.idl b/modules/vr/VRPositionState.idl
deleted file mode 100644
index 4a22a02..0000000
--- a/modules/vr/VRPositionState.idl
+++ /dev/null
@@ -1,17 +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.
-
-// http://mozvr.github.io/webvr-spec/webvr.html#vrpositionstate
-[
-    RuntimeEnabled=WebVR,
-    GarbageCollected,
-] interface VRPositionState {
-    readonly attribute double timeStamp;
-    readonly attribute DOMPoint? position;
-    readonly attribute DOMPoint? linearVelocity;
-    readonly attribute DOMPoint? linearAcceleration;
-    readonly attribute DOMPoint? orientation;
-    readonly attribute DOMPoint? angularVelocity;
-    readonly attribute DOMPoint? angularAcceleration;
-};
diff --git a/modules/vr/VRStageParameters.idl b/modules/vr/VRStageParameters.idl
new file mode 100644
index 0000000..458582f
--- /dev/null
+++ b/modules/vr/VRStageParameters.idl
@@ -0,0 +1,25 @@
+// 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/webvr/#interface-vrstageparameters
+[
+    OriginTrialEnabled=WebVR
+] interface VRStageParameters {
+  // A 16 element array containing the components of a 4x4 transform
+  // matrix.  This matrix transforms the sitting space position
+  // returned by get{Immediate}Pose() to a standing space position.
+  readonly attribute Float32Array sittingToStandingTransform;
+
+  // Dimensions of the play area bounds. The bounds are defined
+  // as an axis aligned rectangle on the floor.
+  // The center of the rectangle is at (0,0,0) in standing space
+  // coordinates.
+  // These bounds are defined for safety purposes.
+  // Content should not require the user to move beyond these
+  // bounds; however, it is possible for the user to ignore
+  // the bounds resulting in position values outside of
+  // this rectangle.
+  readonly attribute float sizeX;
+  readonly attribute float sizeZ;
+};
diff --git a/modules/vr/latest/VR.idl b/modules/vr/latest/VR.idl
new file mode 100644
index 0000000..da58f9c
--- /dev/null
+++ b/modules/vr/latest/VR.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vr-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VR : EventTarget {
+  attribute EventHandler ondeviceconnect;
+  attribute EventHandler ondevicedisconnect;
+
+  [CallWith=ScriptState] Promise getDevices();
+};
diff --git a/modules/vr/latest/VRCoordinateSystem.idl b/modules/vr/latest/VRCoordinateSystem.idl
new file mode 100644
index 0000000..fd447f5
--- /dev/null
+++ b/modules/vr/latest/VRCoordinateSystem.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrcoordinatesystem-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VRCoordinateSystem {
+  Float32Array? getTransformTo(VRCoordinateSystem other);
+};
diff --git a/modules/vr/latest/VRDevice.idl b/modules/vr/latest/VRDevice.idl
new file mode 100644
index 0000000..1843d0e
--- /dev/null
+++ b/modules/vr/latest/VRDevice.idl
@@ -0,0 +1,15 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrdevice-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VRDevice : EventTarget {
+  readonly attribute DOMString deviceName;
+  readonly attribute boolean isExternal;
+
+  [CallWith=ScriptState] Promise supportsSession([PermissiveDictionaryConversion] optional VRSessionCreationOptions options);
+  [CallWith=ScriptState] Promise requestSession([PermissiveDictionaryConversion] optional VRSessionCreationOptions options);
+};
diff --git a/modules/vr/latest/VRDeviceEvent.idl b/modules/vr/latest/VRDeviceEvent.idl
new file mode 100644
index 0000000..f6bb7ee
--- /dev/null
+++ b/modules/vr/latest/VRDeviceEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrdeviceevent-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2,
+    Constructor(DOMString type, VRDeviceEventInit eventInitDict)
+] interface VRDeviceEvent : Event {
+  readonly attribute VRDevice device;
+};
\ No newline at end of file
diff --git a/modules/vr/latest/VRDeviceEventInit.idl b/modules/vr/latest/VRDeviceEventInit.idl
new file mode 100644
index 0000000..9d00575
--- /dev/null
+++ b/modules/vr/latest/VRDeviceEventInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrdeviceevent-interface
+[
+    SecureContext
+] dictionary VRDeviceEventInit : EventInit {
+  required VRDevice device;
+};
\ No newline at end of file
diff --git a/modules/vr/latest/VRFrameOfReference.idl b/modules/vr/latest/VRFrameOfReference.idl
new file mode 100644
index 0000000..fd1fbce
--- /dev/null
+++ b/modules/vr/latest/VRFrameOfReference.idl
@@ -0,0 +1,19 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrframeofreference-interface
+
+enum VRFrameOfReferenceType {
+  "headModel",
+  "eyeLevel",
+  "stage",
+};
+
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VRFrameOfReference : VRCoordinateSystem {
+  readonly attribute VRStageBounds? bounds;
+  readonly attribute double emulatedHeight;
+};
diff --git a/modules/vr/latest/VRFrameOfReferenceOptions.idl b/modules/vr/latest/VRFrameOfReferenceOptions.idl
new file mode 100644
index 0000000..66f955f
--- /dev/null
+++ b/modules/vr/latest/VRFrameOfReferenceOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrframeofreference-interface
+[
+    SecureContext
+] dictionary VRFrameOfReferenceOptions {
+  boolean disableStageEmulation = false;
+  [EnforceRange] double stageEmulationHeight = 0.0;
+};
diff --git a/modules/vr/latest/VRSession.idl b/modules/vr/latest/VRSession.idl
new file mode 100644
index 0000000..cfd38e2
--- /dev/null
+++ b/modules/vr/latest/VRSession.idl
@@ -0,0 +1,23 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrsession-interface
+[
+    RuntimeEnabled=WebVR2
+] interface VRSession : EventTarget {
+  readonly attribute VRDevice device;
+  readonly attribute boolean exclusive;
+
+  attribute double depthNear;
+  attribute double depthFar;
+
+  attribute EventHandler onblur;
+  attribute EventHandler onfocus;
+  attribute EventHandler onresetpose;
+  attribute EventHandler onend;
+
+  [CallWith=ScriptState] Promise<VRFrameOfReference> requestFrameOfReference(VRFrameOfReferenceType type, [PermissiveDictionaryConversion] optional VRFrameOfReferenceOptions options);
+
+  [CallWith=ScriptState] Promise<void> end();
+};
diff --git a/modules/vr/latest/VRSessionCreationOptions.idl b/modules/vr/latest/VRSessionCreationOptions.idl
new file mode 100644
index 0000000..786d630
--- /dev/null
+++ b/modules/vr/latest/VRSessionCreationOptions.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrsessioncreationoptions-interface
+[
+    SecureContext
+] dictionary VRSessionCreationOptions {
+  boolean exclusive = false;
+};
diff --git a/modules/vr/latest/VRSessionEvent.idl b/modules/vr/latest/VRSessionEvent.idl
new file mode 100644
index 0000000..68df3b3
--- /dev/null
+++ b/modules/vr/latest/VRSessionEvent.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrsessionevent-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2,
+    Constructor(DOMString type, VRSessionEventInit eventInitDict)
+] interface VRSessionEvent : Event {
+  readonly attribute VRSession session;
+};
\ No newline at end of file
diff --git a/modules/vr/latest/VRSessionEventInit.idl b/modules/vr/latest/VRSessionEventInit.idl
new file mode 100644
index 0000000..fc46fe2
--- /dev/null
+++ b/modules/vr/latest/VRSessionEventInit.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrsessionevent-interface
+[
+    SecureContext
+] dictionary VRSessionEventInit : EventInit {
+  required VRSession session;
+};
\ No newline at end of file
diff --git a/modules/vr/latest/VRStageBounds.idl b/modules/vr/latest/VRStageBounds.idl
new file mode 100644
index 0000000..2831aeb
--- /dev/null
+++ b/modules/vr/latest/VRStageBounds.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrstagebounds-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VRStageBounds {
+  readonly attribute FrozenArray<VRStageBoundsPoint> geometry;
+};
diff --git a/modules/vr/latest/VRStageBoundsPoint.idl b/modules/vr/latest/VRStageBoundsPoint.idl
new file mode 100644
index 0000000..55768fd
--- /dev/null
+++ b/modules/vr/latest/VRStageBoundsPoint.idl
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium 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/webvr/spec/latest/#vrstageboundspoint-interface
+[
+    SecureContext,
+    RuntimeEnabled=WebVR2
+] interface VRStageBoundsPoint {
+  readonly attribute double x;
+  readonly attribute double z;
+};
diff --git a/modules/wake_lock/ScreenWakeLock.idl b/modules/wake_lock/ScreenWakeLock.idl
index 38b8d26..b005ad6 100644
--- a/modules/wake_lock/ScreenWakeLock.idl
+++ b/modules/wake_lock/ScreenWakeLock.idl
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[RuntimeEnabled=WakeLock] partial interface Screen {
+[
+    ImplementedAs=ScreenWakeLock,
+    RuntimeEnabled=WakeLock
+] partial interface Screen {
     attribute boolean keepAwake;
 };
diff --git a/modules/webaudio/AnalyserNode.idl b/modules/webaudio/AnalyserNode.idl
index 854920e..49a80ad 100644
--- a/modules/webaudio/AnalyserNode.idl
+++ b/modules/webaudio/AnalyserNode.idl
@@ -10,18 +10,25 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-analysernode-interface
+[
+    Constructor(BaseAudioContext context, optional AnalyserOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface AnalyserNode : AudioNode {
     [RaisesException=Setter] attribute unsigned long fftSize;
     readonly attribute unsigned long frequencyBinCount;
diff --git a/modules/webaudio/AnalyserOptions.idl b/modules/webaudio/AnalyserOptions.idl
new file mode 100644
index 0000000..8825426
--- /dev/null
+++ b/modules/webaudio/AnalyserOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#analyseroptions
+dictionary AnalyserOptions : AudioNodeOptions {
+    unsigned long fftSize = 2048;
+    float maxDecibels = -30;
+    float minDecibels = -100;
+    float smoothingTimeConstant = 0.8;
+};
\ No newline at end of file
diff --git a/modules/webaudio/AudioBuffer.idl b/modules/webaudio/AudioBuffer.idl
index 155a9c6..08e683e 100644
--- a/modules/webaudio/AudioBuffer.idl
+++ b/modules/webaudio/AudioBuffer.idl
@@ -26,8 +26,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// See https://webaudio.github.io/web-audio-api/#AudioBuffer
 [
-    GarbageCollected,
+    Constructor(AudioBufferOptions options),
+    RaisesException=Constructor,
+    Measure
 ] 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
deleted file mode 100644
index 35241eb..0000000
--- a/modules/webaudio/AudioBufferCallback.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2011, 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.
- */
-
-callback interface AudioBufferCallback {
-    void handleEvent(AudioBuffer audioBuffer);
-    void handleEvent(DOMException exception);
-};
diff --git a/modules/webaudio/AudioBufferOptions.idl b/modules/webaudio/AudioBufferOptions.idl
new file mode 100644
index 0000000..a021652
--- /dev/null
+++ b/modules/webaudio/AudioBufferOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#audiobufferoptions
+dictionary AudioBufferOptions {
+    unsigned long numberOfChannels = 1;
+    required unsigned long length;
+    required float sampleRate;
+};
diff --git a/modules/webaudio/AudioBufferSourceNode.idl b/modules/webaudio/AudioBufferSourceNode.idl
index 3daec8c..1ea55cc 100644
--- a/modules/webaudio/AudioBufferSourceNode.idl
+++ b/modules/webaudio/AudioBufferSourceNode.idl
@@ -10,21 +10,30 @@
  *    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.
+ * 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.
  */
 
 // A cached (non-streamed), memory-resident audio source
-interface AudioBufferSourceNode : AudioSourceNode {
-    [RaisesException=Setter] attribute AudioBuffer buffer;
+// See https://webaudio.github.io/web-audio-api/#AudioBufferSourceNode
+[
+    Constructor(BaseAudioContext context, optional AudioBufferSourceOptions options),
+    RaisesException=Constructor,
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Measure
+]
+interface AudioBufferSourceNode : AudioScheduledSourceNode {
+    [RaisesException=Setter] attribute AudioBuffer? buffer;
 
     readonly attribute AudioParam playbackRate;
     readonly attribute AudioParam detune;
@@ -33,8 +42,6 @@
     attribute double loopStart;
     attribute double loopEnd;
 
-    [RaisesException] void start(optional double when, optional double grainOffset, optional double grainDuration);
-    [RaisesException] void stop(optional double when);
+    [RaisesException] void start(optional double when = 0, optional double grainOffset, optional double grainDuration);
 
-    attribute EventHandler onended;
 };
diff --git a/modules/webaudio/AudioBufferSourceOptions.idl b/modules/webaudio/AudioBufferSourceOptions.idl
new file mode 100644
index 0000000..5dd5e85
--- /dev/null
+++ b/modules/webaudio/AudioBufferSourceOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#audiobuffersourceoptions
+dictionary AudioBufferSourceOptions {
+    AudioBuffer? buffer;
+    float detune = 0;
+    boolean loop = false;
+    double loopEnd = 0;
+    double loopStart = 0;
+    float playbackRate = 1;
+};
\ No newline at end of file
diff --git a/modules/webaudio/AudioContext.idl b/modules/webaudio/AudioContext.idl
index b56876e..c8297b2 100644
--- a/modules/webaudio/AudioContext.idl
+++ b/modules/webaudio/AudioContext.idl
@@ -11,86 +11,48 @@
  *    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.
+ * 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.
  */
 
-enum AudioContextState {
-    "suspended",
-    "running",
-    "closed"
+enum AudioContextLatencyCategory {
+    "balanced",
+    "interactive",
+    "playback"
 };
 
+// See https://webaudio.github.io/web-audio-api/#AudioContext
 [
-    GarbageCollected,
-    DependentLifetime,
-    Constructor,
+    ActiveScriptWrappable,
+    Constructor(optional AudioContextOptions contextOptions),
     ConstructorCallWith=Document,
-    ImplementedAs=AbstractAudioContext,
-    NoInterfaceObject,
+    DependentLifetime,
     RaisesException=Constructor,
-] interface AudioContext : EventTarget {
-    // All rendered audio ultimately connects to destination, which represents the audio hardware.
-    readonly attribute AudioDestinationNode destination;
-
-    // All scheduled times are relative to this time in seconds.
-    readonly attribute double currentTime;
-
-    // All AudioNodes in the context run at this sample-rate (sample-frames per second).
-    readonly attribute float sampleRate;
-
-    // All panning is relative to this listener.
-    readonly attribute AudioListener listener;
-
-    // Current state of the AudioContext
-    readonly attribute AudioContextState state;
-
-    [RaisesException] AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate);
-
-    // Asynchronous audio file data decoding.
-    [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] 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] 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] PeriodicWave createPeriodicWave(Float32Array real, Float32Array imag, optional Dictionary options);
-
-    // Channel splitting and merging
-    [RaisesException, MeasureAs=AudioContextCreateChannelSplitter] ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs);
-    [RaisesException, MeasureAs=AudioContextCreateChannelMerger] ChannelMergerNode createChannelMerger(optional unsigned long numberOfInputs);
-
-    // Close
+    Measure
+] interface AudioContext : BaseAudioContext {
+    [MeasureAs=AudioContextSuspend, CallWith=ScriptState, ImplementedAs=suspendContext] Promise<void> suspend();
     [MeasureAs=AudioContextClose, CallWith=ScriptState, ImplementedAs=closeContext] Promise<void> close();
 
-    // Pause/resume
-    [MeasureAs=AudioContextSuspend, CallWith=ScriptState, ImplementedAs=suspendContext] Promise<void> suspend();
-    [MeasureAs=AudioContextResume, CallWith=ScriptState, ImplementedAs=resumeContext] Promise<void> resume();
+    // Output timestamp
+    [MeasureAs=AudioContextGetOutputTimestamp, CallWith=ScriptState] AudioTimestamp getOutputTimestamp();
 
-    attribute EventHandler onstatechange;
+    // Number of seconds of processing latency incurred by the AudioContext
+    // passing the audio from the AudioDestinationNode to the audio subsystem
+    readonly attribute double baseLatency;
+
+    // Sources
+    // TODO(rtoy): The following methods should be here instead of in BaseAudioContext:
+    //
+    // createMediaElementSource(HTMLMediaElement mediaElement)
+    // createMediaStreamSource(MediaStream mediaStream)
+    // createMediaStreamDestination()
 };
diff --git a/modules/webaudio/AudioContextOptions.idl b/modules/webaudio/AudioContextOptions.idl
new file mode 100644
index 0000000..6fc6a38
--- /dev/null
+++ b/modules/webaudio/AudioContextOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// See https://webaudio.github.io/web-audio-api/#audiocontextoptions
+dictionary AudioContextOptions {
+    // If passed as a double this should be the requested output latency in
+    // seconds, without taking into account double buffering (same as
+    // AudioContext.baseLatency).
+    (AudioContextLatencyCategory or double) latencyHint = "interactive";
+};
diff --git a/modules/webaudio/AudioDestinationNode.idl b/modules/webaudio/AudioDestinationNode.idl
index f638bb2..2991173 100644
--- a/modules/webaudio/AudioDestinationNode.idl
+++ b/modules/webaudio/AudioDestinationNode.idl
@@ -10,18 +10,20 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#AudioDestinationNode
 interface AudioDestinationNode : AudioNode {
     readonly attribute unsigned long maxChannelCount;
 };
diff --git a/modules/webaudio/AudioListener.idl b/modules/webaudio/AudioListener.idl
index 843e290..7cc1cd7 100644
--- a/modules/webaudio/AudioListener.idl
+++ b/modules/webaudio/AudioListener.idl
@@ -26,13 +26,23 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface AudioListener {
-    [DeprecateAs=AudioListenerDopplerFactor] attribute float dopplerFactor;  // same as OpenAL (default 1.0)
-    [DeprecateAs=AudioListenerSpeedOfSound] attribute float speedOfSound;   // in meters / second (default 343.3)
+// See https://webaudio.github.io/web-audio-api/#AudioListener
+interface AudioListener {
+    [MeasureAs=AudioListenerSetPosition] void setPosition(float x, float y, float z);
+    [MeasureAs=AudioListenerSetOrientation] void setOrientation(float x, float y, float z, float xUp, float yUp, float zUp);
 
-    void setPosition(float x, float y, float z);
-    void setOrientation(float x, float y, float z, float xUp, float yUp, float zUp);
-    [DeprecateAs=AudioListenerSetVelocity] void setVelocity(float x, float y, float z);
+    // Location of the listener
+    readonly attribute AudioParam positionX;
+    readonly attribute AudioParam positionY;
+    readonly attribute AudioParam positionZ;
+
+    // Forward direction vector of the listener
+    readonly attribute AudioParam forwardX;
+    readonly attribute AudioParam forwardY;
+    readonly attribute AudioParam forwardZ;
+
+    // Up direction vector for the listener
+    readonly attribute AudioParam upX;
+    readonly attribute AudioParam upY;
+    readonly attribute AudioParam upZ;
 };
diff --git a/modules/webaudio/AudioNode.idl b/modules/webaudio/AudioNode.idl
index 7dbb3a8..516456f 100644
--- a/modules/webaudio/AudioNode.idl
+++ b/modules/webaudio/AudioNode.idl
@@ -10,18 +10,21 @@
  *    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.
+ * 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://webaudio.github.io/web-audio-api/#the-audionode-interface
+
 enum ChannelCountMode {
     "max",
     "clamped-max",
@@ -33,11 +36,7 @@
     "discrete"
 };
 
-// http://webaudio.github.io/web-audio-api/#idl-def-AudioNode
-
-[
-    GarbageCollected,
-] interface AudioNode : EventTarget {
+interface AudioNode : EventTarget {
     [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();
@@ -47,7 +46,7 @@
     [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 BaseAudioContext context;
     readonly attribute unsigned long numberOfInputs;
     readonly attribute unsigned long numberOfOutputs;
     [RaisesException=Setter] attribute unsigned long         channelCount;
diff --git a/modules/webaudio/AudioNodeOptions.idl b/modules/webaudio/AudioNodeOptions.idl
new file mode 100644
index 0000000..48ca7cc
--- /dev/null
+++ b/modules/webaudio/AudioNodeOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#dictionary-audionodeoptions-members
+dictionary AudioNodeOptions {
+    unsigned long channelCount;
+    ChannelCountMode channelCountMode;
+    ChannelInterpretation channelInterpretation;
+};
diff --git a/modules/webaudio/AudioParam.idl b/modules/webaudio/AudioParam.idl
index 02501ec..7be04a6 100644
--- a/modules/webaudio/AudioParam.idl
+++ b/modules/webaudio/AudioParam.idl
@@ -26,12 +26,15 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface AudioParam {
+// See https://webaudio.github.io/web-audio-api/#AudioParam
+interface AudioParam {
     attribute float value;
     readonly attribute float defaultValue;
 
+    // Nominal range for the value.
+    readonly attribute float minValue;
+    readonly attribute float maxValue;
+
     // Parameter automation.
     [RaisesException, MeasureAs=AudioParamSetValueAtTime] AudioParam setValueAtTime(float value, double time);
     [RaisesException, MeasureAs=AudioParamLinearRampToValueAtTime] AudioParam linearRampToValueAtTime(float value, double time);
@@ -42,9 +45,12 @@
 
     // 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, MeasureAs=AudioParamSetValueCurveAtTime] AudioParam setValueCurveAtTime(Float32Array values, double time, double duration);
+    [RaisesException, MeasureAs=AudioParamSetValueCurveAtTime] AudioParam setValueCurveAtTime(sequence<float> values, double time, double duration);
 
     // Cancels all scheduled parameter changes with times greater than or equal to startTime.
     [RaisesException, MeasureAs=AudioParamCancelScheduledValues] AudioParam cancelScheduledValues(double startTime);
 
+    // Cancel scheduled parameter changes and hold the last value
+    [RaisesException, MeasureAs=AudioParamCancelAndHoldAtTime] AudioParam cancelAndHoldAtTime(double startTime);
+
 };
diff --git a/modules/webaudio/AudioParamDescriptor.idl b/modules/webaudio/AudioParamDescriptor.idl
new file mode 100644
index 0000000..70cd045
--- /dev/null
+++ b/modules/webaudio/AudioParamDescriptor.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// See: https://webaudio.github.io/web-audio-api/#idl-def-AudioParamDescriptor
+dictionary AudioParamDescriptor {
+    required DOMString name;
+    float defaultValue = 0;
+
+    // TODO(hongchan): These numbers are minimum/maximum number possible for 
+    // |float| type. Remove this comment when the spec is fixed.
+    float minValue = -3.4028235e38;
+    float maxValue = 3.4028235e38;
+};
diff --git a/modules/webaudio/AudioParamMap.idl b/modules/webaudio/AudioParamMap.idl
new file mode 100644
index 0000000..740c70f
--- /dev/null
+++ b/modules/webaudio/AudioParamMap.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium 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://webaudio.github.io/web-audio-api/#idl-def-AudioParamMap
+[
+  RuntimeEnabled=AudioWorklet
+] interface AudioParamMap {
+    readonly maplike<DOMString, AudioParam>;
+};
diff --git a/modules/webaudio/AudioProcessingEvent.idl b/modules/webaudio/AudioProcessingEvent.idl
index b897a7f..ad82edd 100644
--- a/modules/webaudio/AudioProcessingEvent.idl
+++ b/modules/webaudio/AudioProcessingEvent.idl
@@ -10,18 +10,23 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-audioprocessingevent-interface---deprecated
+[
+    Constructor(DOMString type, AudioProcessingEventInit eventInitDict)
+]
 interface AudioProcessingEvent : Event {
     readonly attribute double playbackTime;
     readonly attribute AudioBuffer inputBuffer;
diff --git a/modules/webaudio/AudioProcessingEventInit.idl b/modules/webaudio/AudioProcessingEventInit.idl
new file mode 100644
index 0000000..eda9d93
--- /dev/null
+++ b/modules/webaudio/AudioProcessingEventInit.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.
+
+// See https://webaudio.github.io/web-audio-api/#audioprocessingeventinit
+dictionary AudioProcessingEventInit : EventInit {
+    required double playbackTime;
+    required AudioBuffer inputBuffer;
+    required AudioBuffer outputBuffer;
+};
diff --git a/modules/webaudio/AudioScheduledSourceNode.idl b/modules/webaudio/AudioScheduledSourceNode.idl
new file mode 100644
index 0000000..adc0ab9
--- /dev/null
+++ b/modules/webaudio/AudioScheduledSourceNode.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.
+
+// See https://webaudio.github.io/web-audio-api/
+[
+    ActiveScriptWrappable,
+    DependentLifetime
+]
+interface AudioScheduledSourceNode : AudioNode {
+    [RaisesException] void start(optional double when);
+    [RaisesException] void stop(optional double when);
+    attribute EventHandler onended;
+};
diff --git a/modules/webaudio/AudioSourceNode.idl b/modules/webaudio/AudioSourceNode.idl
deleted file mode 100644
index 04bc6ee..0000000
--- a/modules/webaudio/AudioSourceNode.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-[
-    NoInterfaceObject,
-    DependentLifetime
-] interface AudioSourceNode : AudioNode {
-};
diff --git a/modules/webaudio/AudioTimestamp.idl b/modules/webaudio/AudioTimestamp.idl
new file mode 100644
index 0000000..e1b738e
--- /dev/null
+++ b/modules/webaudio/AudioTimestamp.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.
+
+// See https://webaudio.github.io/web-audio-api/#audiotimestamp
+dictionary AudioTimestamp {
+    double contextTime;
+    DOMHighResTimeStamp performanceTime;
+};
diff --git a/modules/webaudio/AudioWorkletGlobalScope.idl b/modules/webaudio/AudioWorkletGlobalScope.idl
new file mode 100644
index 0000000..fe9de84
--- /dev/null
+++ b/modules/webaudio/AudioWorkletGlobalScope.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://webaudio.github.io/web-audio-api/#AudioWorkletGlobalScope
+
+[
+    Exposed=AudioWorklet,
+    Global=(Worklet,AudioWorklet),
+    RuntimeEnabled=AudioWorklet
+] interface AudioWorkletGlobalScope : WorkletGlobalScope {
+    [RaisesException] void registerProcessor(DOMString name, Function processorConstructor);
+    readonly attribute double currentTime;
+    readonly attribute float sampleRate;
+};
diff --git a/modules/webaudio/AudioWorkletNode.idl b/modules/webaudio/AudioWorkletNode.idl
new file mode 100644
index 0000000..d2258a6
--- /dev/null
+++ b/modules/webaudio/AudioWorkletNode.idl
@@ -0,0 +1,20 @@
+// Copyright 2017 The Chromium 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://webaudio.github.io/web-audio-api/#AudioWorkletNode
+
+[
+    ActiveScriptWrappable,
+    Constructor(BaseAudioContext context, DOMString name, optional AudioWorkletNodeOptions options),
+    DependentLifetime,
+    Global=(Worklet,AudioWorklet),
+    RaisesException=Constructor,
+    RuntimeEnabled=AudioWorklet
+] interface AudioWorkletNode : AudioNode {
+    readonly attribute AudioParamMap parameters;
+    // TODO(hongchan): Implement the following.
+    // readonly attribute MessagePort port;
+    // readonly attribute AudioWorkletProcessorState processorState;
+    // attribute EventHandler onprocessorstatechange;
+};
diff --git a/modules/webaudio/AudioWorkletNodeOptions.idl b/modules/webaudio/AudioWorkletNodeOptions.idl
new file mode 100644
index 0000000..45458dd
--- /dev/null
+++ b/modules/webaudio/AudioWorkletNodeOptions.idl
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// See: https://webaudio.github.io/web-audio-api/#AudioWorkletNodeOptions
+dictionary AudioWorkletNodeOptions : AudioNodeOptions {
+    unsigned long numberOfInputs = 1;
+    unsigned long numberOfOutputs = 1;
+    sequence<unsigned long> outputChannelCount;
+    record<DOMString, double> parameterData;
+};
diff --git a/modules/webaudio/AudioWorkletProcessor.idl b/modules/webaudio/AudioWorkletProcessor.idl
new file mode 100644
index 0000000..de8a36f
--- /dev/null
+++ b/modules/webaudio/AudioWorkletProcessor.idl
@@ -0,0 +1,14 @@
+// Copyright 2017 The Chromium 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://webaudio.github.io/web-audio-api/#AudioWorkletProcessor
+
+[
+    Exposed=AudioWorklet,
+    Global=(Worklet,AudioWorklet),
+    RuntimeEnabled=AudioWorklet
+] interface AudioWorkletProcessor {
+  // TODO(hongchan): Implement the following.
+  // readonly attribute MessagePort port;
+};
diff --git a/modules/webaudio/BaseAudioContext.idl b/modules/webaudio/BaseAudioContext.idl
new file mode 100644
index 0000000..267005a
--- /dev/null
+++ b/modules/webaudio/BaseAudioContext.idl
@@ -0,0 +1,73 @@
+// 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.
+
+// See https://webaudio.github.io/web-audio-api/#BaseAudioContext
+
+enum AudioContextState {
+    "suspended",
+    "running",
+    "closed"
+};
+
+callback DecodeErrorCallback = void (DOMException error);
+callback DecodeSuccessCallback = void (AudioBuffer decodedData);
+
+[
+    ActiveScriptWrappable,
+    DependentLifetime
+] interface BaseAudioContext : EventTarget {
+    // All rendered audio ultimately connects to destination, which represents the audio hardware.
+    readonly attribute AudioDestinationNode destination;
+
+    // All scheduled times are relative to this time in seconds.
+    readonly attribute double currentTime;
+
+    // All AudioNodes in the context run at this sample-rate (sample-frames per second).
+    readonly attribute float sampleRate;
+
+    // All panning is relative to this listener.
+    readonly attribute AudioListener listener;
+
+    // Current state of the AudioContext
+    readonly attribute AudioContextState state;
+
+    [RaisesException] AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate);
+
+    // Asynchronous audio file data decoding.
+    [RaisesException, MeasureAs=AudioContextDecodeAudioData, CallWith=ScriptState] Promise<AudioBuffer> decodeAudioData(ArrayBuffer audioData, optional DecodeSuccessCallback successCallback, optional DecodeErrorCallback  errorCallback);
+
+    // Sources
+    [RaisesException, MeasureAs=AudioContextCreateBufferSource] AudioBufferSourceNode createBufferSource();
+    [RaisesException, MeasureAs=AudioContextCreateConstantSource] ConstantSourceNode createConstantSource();
+
+    // 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=AudioContextCreatePannerAutomated] PannerNode createPanner();
+    [RaisesException, MeasureAs=AudioContextCreateConvolver] ConvolverNode createConvolver();
+    [RaisesException, MeasureAs=AudioContextCreateDynamicsCompressor] DynamicsCompressorNode createDynamicsCompressor();
+    [RaisesException, MeasureAs=AudioContextCreateAnalyser] AnalyserNode createAnalyser();
+    [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] PeriodicWave createPeriodicWave(sequence<float> real, sequence<float> imag, optional PeriodicWaveConstraints options);
+
+    // Channel splitting and merging
+    [RaisesException, MeasureAs=AudioContextCreateChannelSplitter] ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs);
+    [RaisesException, MeasureAs=AudioContextCreateChannelMerger] ChannelMergerNode createChannelMerger(optional unsigned long numberOfInputs);
+
+    // Pause/resume
+    [MeasureAs=AudioContextResume, CallWith=ScriptState, ImplementedAs=resumeContext] Promise<void> resume();
+
+    // TODO(rtoy): These really belong to the AudioContext, but we need them
+    // here so we can use an offline audio context to test these.
+    [RaisesException, MeasureAs=AudioContextCreateMediaElementSource] MediaElementAudioSourceNode createMediaElementSource(HTMLMediaElement mediaElement);
+    [RaisesException, MeasureAs=AudioContextCreateMediaStreamSource] MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
+    [RaisesException, MeasureAs=AudioContextCreateMediaStreamDestination] MediaStreamAudioDestinationNode createMediaStreamDestination();
+
+    attribute EventHandler onstatechange;
+};
diff --git a/modules/webaudio/BiquadFilterNode.idl b/modules/webaudio/BiquadFilterNode.idl
index 0a16aab..90f76ee 100644
--- a/modules/webaudio/BiquadFilterNode.idl
+++ b/modules/webaudio/BiquadFilterNode.idl
@@ -10,18 +10,20 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface
 enum BiquadFilterType {
     "lowpass",
     "highpass",
@@ -33,6 +35,11 @@
     "allpass"
 };
 
+[
+    Constructor(BaseAudioContext context, optional BiquadFilterOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface BiquadFilterNode : AudioNode {
     attribute BiquadFilterType type;
 
diff --git a/modules/webaudio/BiquadFilterOptions.idl b/modules/webaudio/BiquadFilterOptions.idl
new file mode 100644
index 0000000..3d8c7b8
--- /dev/null
+++ b/modules/webaudio/BiquadFilterOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#biquadfilteroptions
+dictionary BiquadFilterOptions : AudioNodeOptions {
+    BiquadFilterType type = "lowpass";
+    float Q = 1;
+    float detune = 0;
+    float frequency = 350;
+    float gain = 0;
+};
\ No newline at end of file
diff --git a/modules/webaudio/ChannelMergerNode.idl b/modules/webaudio/ChannelMergerNode.idl
index 5d27dde..7573a9f 100644
--- a/modules/webaudio/ChannelMergerNode.idl
+++ b/modules/webaudio/ChannelMergerNode.idl
@@ -26,5 +26,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-channelmergernode-interface
+[
+    Constructor(BaseAudioContext context, optional ChannelMergerOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface ChannelMergerNode : AudioNode {
 };
diff --git a/modules/webaudio/ChannelMergerOptions.idl b/modules/webaudio/ChannelMergerOptions.idl
new file mode 100644
index 0000000..1e9e7d2
--- /dev/null
+++ b/modules/webaudio/ChannelMergerOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#channelmergeroptions
+dictionary ChannelMergerOptions : AudioNodeOptions {
+    unsigned long numberOfInputs = 6;
+};
\ No newline at end of file
diff --git a/modules/webaudio/ChannelSplitterNode.idl b/modules/webaudio/ChannelSplitterNode.idl
index 413ee74..c651a69 100644
--- a/modules/webaudio/ChannelSplitterNode.idl
+++ b/modules/webaudio/ChannelSplitterNode.idl
@@ -10,17 +10,24 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-channelsplitternode-interface
+[
+    Constructor(BaseAudioContext context, optional ChannelSplitterOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface ChannelSplitterNode : AudioNode {
 };
diff --git a/modules/webaudio/ChannelSplitterOptions.idl b/modules/webaudio/ChannelSplitterOptions.idl
new file mode 100644
index 0000000..b97a616
--- /dev/null
+++ b/modules/webaudio/ChannelSplitterOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#channelsplitteroptions
+dictionary ChannelSplitterOptions : AudioNodeOptions {
+    unsigned long numberOfOutputs = 6;
+};
\ No newline at end of file
diff --git a/modules/webaudio/ConstantSourceNode.idl b/modules/webaudio/ConstantSourceNode.idl
new file mode 100644
index 0000000..b281ad2
--- /dev/null
+++ b/modules/webaudio/ConstantSourceNode.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.
+
+// See https://webaudio.github.io/web-audio-api/#ConstantSourceNode
+[
+    Constructor(BaseAudioContext context, optional ConstantSourceOptions options),
+    RaisesException=Constructor,
+    ActiveScriptWrappable,
+    DependentLifetime,
+    Measure
+]
+interface ConstantSourceNode : AudioScheduledSourceNode {
+    readonly attribute AudioParam offset;
+};
diff --git a/modules/webaudio/ConstantSourceOptions.idl b/modules/webaudio/ConstantSourceOptions.idl
new file mode 100644
index 0000000..5cd584c
--- /dev/null
+++ b/modules/webaudio/ConstantSourceOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#constantsourceoptions
+dictionary ConstantSourceOptions {
+    float offset = 1;
+};
\ No newline at end of file
diff --git a/modules/webaudio/ConvolverNode.idl b/modules/webaudio/ConvolverNode.idl
index e797e5c..53559c5 100644
--- a/modules/webaudio/ConvolverNode.idl
+++ b/modules/webaudio/ConvolverNode.idl
@@ -10,19 +10,26 @@
  *    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.
+ * 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.
  */
 
 // A linear convolution effect
+// See https://webaudio.github.io/web-audio-api/#ConvolverNode
+[
+    Constructor(BaseAudioContext context, optional ConvolverOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface ConvolverNode : AudioNode {
     [RaisesException=Setter] attribute AudioBuffer? buffer;
     attribute boolean normalize;
diff --git a/modules/webaudio/ConvolverOptions.idl b/modules/webaudio/ConvolverOptions.idl
new file mode 100644
index 0000000..4db8a86
--- /dev/null
+++ b/modules/webaudio/ConvolverOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#convolveroptions
+dictionary ConvolverOptions : AudioNodeOptions {
+    AudioBuffer? buffer;
+    boolean disableNormalization = false;
+};
diff --git a/modules/webaudio/DelayNode.idl b/modules/webaudio/DelayNode.idl
index a6a0f18..cc9d24c 100644
--- a/modules/webaudio/DelayNode.idl
+++ b/modules/webaudio/DelayNode.idl
@@ -10,18 +10,25 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#DelayNode
+[
+    Constructor(BaseAudioContext context, optional DelayOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface DelayNode : AudioNode {
     readonly attribute AudioParam delayTime;
 };
diff --git a/modules/webaudio/DelayOptions.idl b/modules/webaudio/DelayOptions.idl
new file mode 100644
index 0000000..9ace73f
--- /dev/null
+++ b/modules/webaudio/DelayOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#delayoptions
+dictionary DelayOptions : AudioNodeOptions {
+    double maxDelayTime = 1;
+    double delayTime = 0;
+};
\ No newline at end of file
diff --git a/modules/webaudio/DynamicsCompressorNode.idl b/modules/webaudio/DynamicsCompressorNode.idl
index b6a6633..1aee711 100644
--- a/modules/webaudio/DynamicsCompressorNode.idl
+++ b/modules/webaudio/DynamicsCompressorNode.idl
@@ -10,23 +10,30 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-dynamicscompressornode-interface
+[
+    Constructor(BaseAudioContext context, optional DynamicsCompressorOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface DynamicsCompressorNode : AudioNode {
     readonly attribute AudioParam threshold; // in Decibels
     readonly attribute AudioParam knee; // in Decibels
     readonly attribute AudioParam ratio; // unit-less
-    readonly attribute AudioParam reduction; // in Decibels
+    readonly attribute float reduction; // in Decibels
     readonly attribute AudioParam attack; // in Seconds
     readonly attribute AudioParam release; // in Seconds
 };
diff --git a/modules/webaudio/DynamicsCompressorOptions.idl b/modules/webaudio/DynamicsCompressorOptions.idl
new file mode 100644
index 0000000..d182297
--- /dev/null
+++ b/modules/webaudio/DynamicsCompressorOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#dynamicscompressoroptions
+dictionary DynamicsCompressorOptions : AudioNodeOptions {
+    float attack = 0.003;
+    float knee = 30;
+    float ratio = 12;
+    float release = 0.25;
+    float threshold = -24;
+};
\ No newline at end of file
diff --git a/modules/webaudio/GainNode.idl b/modules/webaudio/GainNode.idl
index 60f5fdd..74eb6c1 100644
--- a/modules/webaudio/GainNode.idl
+++ b/modules/webaudio/GainNode.idl
@@ -10,18 +10,25 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#GainNode
+[
+    Constructor(BaseAudioContext context, optional GainOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 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/GainOptions.idl b/modules/webaudio/GainOptions.idl
new file mode 100644
index 0000000..65fb4fe
--- /dev/null
+++ b/modules/webaudio/GainOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#gainoptions
+dictionary GainOptions : AudioNodeOptions {
+    float gain = 1;
+};
diff --git a/modules/webaudio/IIRFilterNode.idl b/modules/webaudio/IIRFilterNode.idl
index 313e516..1780a79 100644
--- a/modules/webaudio/IIRFilterNode.idl
+++ b/modules/webaudio/IIRFilterNode.idl
@@ -2,8 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// See https://webaudio.github.io/web-audio-api/#the-iirfilternode-interface
+[
+    Constructor(BaseAudioContext context, IIRFilterOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface IIRFilterNode : AudioNode {
     [RaisesException] void getFrequencyResponse(Float32Array frequencyHz,
                                                 Float32Array magResponse,
                                                 Float32Array phaseResponse);
-};
\ No newline at end of file
+};
diff --git a/modules/webaudio/IIRFilterOptions.idl b/modules/webaudio/IIRFilterOptions.idl
new file mode 100644
index 0000000..b42d86d
--- /dev/null
+++ b/modules/webaudio/IIRFilterOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#iirfilteroptions
+dictionary IIRFilterOptions : AudioNodeOptions {
+    required sequence<double> feedforward;
+    required sequence<double> feedback;
+};
diff --git a/modules/webaudio/MediaElementAudioSourceNode.idl b/modules/webaudio/MediaElementAudioSourceNode.idl
index 8f96e41..5d1260f 100644
--- a/modules/webaudio/MediaElementAudioSourceNode.idl
+++ b/modules/webaudio/MediaElementAudioSourceNode.idl
@@ -10,18 +10,26 @@
  *    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.
+ * 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.
  */
 
-interface MediaElementAudioSourceNode : AudioSourceNode {
-    readonly attribute HTMLMediaElement mediaElement;
+// See https://webaudio.github.io/web-audio-api/#MediaElementAudioSourceNode
+[
+    // TODO(rtoy): This should be AudioContext, not BaseAudioContext.
+    Constructor(BaseAudioContext context, MediaElementAudioSourceOptions options),
+    RaisesException=Constructor,
+    Measure
+]
+interface MediaElementAudioSourceNode : AudioNode {
+    [SameObject] readonly attribute HTMLMediaElement mediaElement;
 };
diff --git a/modules/webaudio/MediaElementAudioSourceOptions.idl b/modules/webaudio/MediaElementAudioSourceOptions.idl
new file mode 100644
index 0000000..d5d5641
--- /dev/null
+++ b/modules/webaudio/MediaElementAudioSourceOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#mediaelementaudiosourceoptions
+dictionary MediaElementAudioSourceOptions {
+    required HTMLMediaElement mediaElement;
+};
diff --git a/modules/webaudio/MediaStreamAudioDestinationNode.idl b/modules/webaudio/MediaStreamAudioDestinationNode.idl
index 971e607..dc74efa 100644
--- a/modules/webaudio/MediaStreamAudioDestinationNode.idl
+++ b/modules/webaudio/MediaStreamAudioDestinationNode.idl
@@ -10,18 +10,25 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-mediastreamaudiodestinationnode-interface
+[
+    Constructor(BaseAudioContext context, optional AudioNodeOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface MediaStreamAudioDestinationNode : AudioNode {
     readonly attribute MediaStream stream;
 };
diff --git a/modules/webaudio/MediaStreamAudioSourceNode.idl b/modules/webaudio/MediaStreamAudioSourceNode.idl
index 6da028b..999d6a7 100644
--- a/modules/webaudio/MediaStreamAudioSourceNode.idl
+++ b/modules/webaudio/MediaStreamAudioSourceNode.idl
@@ -10,18 +10,25 @@
  *    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.
+ * 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.
  */
 
-interface MediaStreamAudioSourceNode : AudioSourceNode {
-    readonly attribute MediaStream mediaStream;
+// See https://webaudio.github.io/web-audio-api/#MediaStreamAudioSourceNode
+[
+    Constructor(BaseAudioContext context, MediaStreamAudioSourceOptions options),
+    RaisesException=Constructor,
+    Measure
+]
+interface MediaStreamAudioSourceNode : AudioNode {
+  [SameObject, ImplementedAs=getMediaStream] readonly attribute MediaStream mediaStream;
 };
diff --git a/modules/webaudio/MediaStreamAudioSourceOptions.idl b/modules/webaudio/MediaStreamAudioSourceOptions.idl
new file mode 100644
index 0000000..7d74a79
--- /dev/null
+++ b/modules/webaudio/MediaStreamAudioSourceOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#mediastreamaudiosourceoptions
+dictionary MediaStreamAudioSourceOptions {
+    required MediaStream mediaStream;
+};
diff --git a/modules/webaudio/OfflineAudioCompletionEvent.idl b/modules/webaudio/OfflineAudioCompletionEvent.idl
index 6529fac..4aed122 100644
--- a/modules/webaudio/OfflineAudioCompletionEvent.idl
+++ b/modules/webaudio/OfflineAudioCompletionEvent.idl
@@ -10,18 +10,23 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#OfflineAudioCompletionEvent 
+[
+    Constructor(DOMString type, OfflineAudioCompletionEventInit eventInitDict)
+]
 interface OfflineAudioCompletionEvent : Event {
     readonly attribute AudioBuffer renderedBuffer;
 };
diff --git a/modules/webaudio/OfflineAudioCompletionEventInit.idl b/modules/webaudio/OfflineAudioCompletionEventInit.idl
new file mode 100644
index 0000000..c70ba7c
--- /dev/null
+++ b/modules/webaudio/OfflineAudioCompletionEventInit.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.
+
+// See https://webaudio.github.io/web-audio-api/#offlineaudiocompletioneventinit
+dictionary OfflineAudioCompletionEventInit : EventInit {
+    required AudioBuffer renderedBuffer;
+};
diff --git a/modules/webaudio/OfflineAudioContext.idl b/modules/webaudio/OfflineAudioContext.idl
index 1f91f8f..92d713d 100644
--- a/modules/webaudio/OfflineAudioContext.idl
+++ b/modules/webaudio/OfflineAudioContext.idl
@@ -10,27 +10,30 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#OfflineAudioContext
 [
     Constructor(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate),
+    Constructor(OfflineAudioContextOptions options),
     ConstructorCallWith=ExecutionContext,
     RaisesException=Constructor,
-    NoInterfaceObject,
-] interface OfflineAudioContext : AudioContext {
+    Measure
+] interface OfflineAudioContext : BaseAudioContext {
     // Offline rendering
     attribute EventHandler oncomplete;
+    readonly attribute unsigned long length;
     [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/OfflineAudioContextOptions.idl b/modules/webaudio/OfflineAudioContextOptions.idl
new file mode 100644
index 0000000..99a9383
--- /dev/null
+++ b/modules/webaudio/OfflineAudioContextOptions.idl
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// See https://webaudio.github.io/web-audio-api/#offlineaudiocontextoptions
+dictionary OfflineAudioContextOptions {
+    unsigned long numberOfChannels = 1;
+    required unsigned long length;
+    required float sampleRate;
+};
diff --git a/modules/webaudio/OscillatorNode.idl b/modules/webaudio/OscillatorNode.idl
index 0440252..1f3e305 100644
--- a/modules/webaudio/OscillatorNode.idl
+++ b/modules/webaudio/OscillatorNode.idl
@@ -10,18 +10,20 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-oscillatornode-interface
 enum OscillatorType {
     "sine",
     "square",
@@ -31,17 +33,17 @@
 };
 
 // OscillatorNode is an audio generator of periodic waveforms.
-interface OscillatorNode : AudioSourceNode {
+[
+    Constructor(BaseAudioContext context, optional OscillatorOptions options),
+    RaisesException=Constructor,
+    Measure
+]
+interface OscillatorNode : AudioScheduledSourceNode {
 
     [RaisesException=Setter] attribute OscillatorType type;
 
     readonly attribute AudioParam frequency; // in Hertz
     readonly attribute AudioParam detune; // in Cents
 
-    [RaisesException] void start(optional double when);
-    [RaisesException] void stop(optional double when);
-
     void setPeriodicWave(PeriodicWave periodicWave);
-
-    attribute EventHandler onended;
 };
diff --git a/modules/webaudio/OscillatorOptions.idl b/modules/webaudio/OscillatorOptions.idl
new file mode 100644
index 0000000..689ec4a
--- /dev/null
+++ b/modules/webaudio/OscillatorOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#oscillatoroptions
+dictionary OscillatorOptions : AudioNodeOptions {
+    OscillatorType type = "sine";
+    float detune = 0;
+    float frequency = 440;
+    PeriodicWave? periodicWave;
+};
\ No newline at end of file
diff --git a/modules/webaudio/PannerNode.idl b/modules/webaudio/PannerNode.idl
index d69f4d6..e182b19 100644
--- a/modules/webaudio/PannerNode.idl
+++ b/modules/webaudio/PannerNode.idl
@@ -10,18 +10,20 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-pannernode-interface
 enum PanningModelType {
     "equalpower",
     "HRTF"
@@ -34,21 +36,31 @@
 };
 
 [
-    NoInterfaceObject,
+    Constructor(BaseAudioContext context, optional PannerOptions options),
+    RaisesException=Constructor,
+    Measure
 ] interface PannerNode : AudioNode {
     // Default model for stereo is equalpower.
     attribute PanningModelType panningModel;
 
     // Uses a 3D cartesian coordinate system
-    void setPosition(float x, float y, float z);
-    void setOrientation(float x, float y, float z);
-    void setVelocity(float x, float y, float z);
+    [MeasureAs=PannerNodeSetPosition] void setPosition(float x, float y, float z);
+    [MeasureAs=PannerNodeSetOrientation] void setOrientation(float x, float y, float z);
+
+    // Uses a 3D cartesian coordinate system
+    readonly attribute AudioParam positionX;
+    readonly attribute AudioParam positionY;
+    readonly attribute AudioParam positionZ;
+
+    readonly attribute AudioParam orientationX;
+    readonly attribute AudioParam orientationY;
+    readonly attribute AudioParam orientationZ;
 
     // Distance model
     attribute DistanceModelType distanceModel;
 
-    attribute double refDistance;
-    attribute double maxDistance;
+    [RaisesException=Setter] attribute double refDistance;
+    [RaisesException=Setter] attribute double maxDistance;
     attribute double rolloffFactor;
 
     // Directional sound cone
diff --git a/modules/webaudio/PannerOptions.idl b/modules/webaudio/PannerOptions.idl
new file mode 100644
index 0000000..4cf7042
--- /dev/null
+++ b/modules/webaudio/PannerOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#panneroptions
+dictionary PannerOptions : AudioNodeOptions {
+    PanningModelType panningModel = "equalpower";
+    DistanceModelType distanceModel = "inverse";
+
+    float positionX = 0;
+    float positionY = 0;
+    float positionZ = 0;
+    float orientationX = 1;
+    float orientationY = 0;
+    float orientationZ = 0;
+
+    double refDistance = 1;
+    double maxDistance= 10000;
+    double rolloffFactor = 1;
+    double coneInnerAngle = 360;
+    double coneOuterAngle = 360;
+    double coneOuterGain = 0;
+};
\ No newline at end of file
diff --git a/modules/webaudio/PeriodicWave.idl b/modules/webaudio/PeriodicWave.idl
index bf70cbd..9ae8e25 100644
--- a/modules/webaudio/PeriodicWave.idl
+++ b/modules/webaudio/PeriodicWave.idl
@@ -10,21 +10,25 @@
  *    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.
+ * 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.
  */
 
 // PeriodicWave represents a periodic audio waveform given by its Fourier coefficients.
+// See https://webaudio.github.io/web-audio-api/#the-periodicwave-interface
 [
-    GarbageCollected
-] interface PeriodicWave {
-
+    Constructor(BaseAudioContext context, optional PeriodicWaveOptions options),
+    RaisesException=Constructor,
+    Measure
+]
+interface PeriodicWave {
 };
diff --git a/modules/webaudio/PeriodicWaveConstraints.idl b/modules/webaudio/PeriodicWaveConstraints.idl
new file mode 100644
index 0000000..6c8e689
--- /dev/null
+++ b/modules/webaudio/PeriodicWaveConstraints.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.
+
+// See https://webaudio.github.io/web-audio-api/#periodicwaveconstraints
+dictionary PeriodicWaveConstraints {
+    boolean disableNormalization = false;
+};
diff --git a/modules/webaudio/PeriodicWaveOptions.idl b/modules/webaudio/PeriodicWaveOptions.idl
new file mode 100644
index 0000000..f797ce2
--- /dev/null
+++ b/modules/webaudio/PeriodicWaveOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#periodicwaveoptions
+dictionary PeriodicWaveOptions : PeriodicWaveConstraints {
+    sequence<float> real;
+    sequence<float> imag;
+};
\ No newline at end of file
diff --git a/modules/webaudio/ScriptProcessorNode.idl b/modules/webaudio/ScriptProcessorNode.idl
index 382e384..7dd75e0 100644
--- a/modules/webaudio/ScriptProcessorNode.idl
+++ b/modules/webaudio/ScriptProcessorNode.idl
@@ -10,20 +10,25 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#the-scriptprocessornode-interface---deprecated
 // For real-time audio stream synthesis/processing in JavaScript
-interface ScriptProcessorNode : AudioNode {
+[
+    ActiveScriptWrappable,
+    DependentLifetime
+] interface ScriptProcessorNode : AudioNode {
     // Rendering callback
     attribute EventHandler onaudioprocess;
 
diff --git a/modules/webaudio/StereoPannerNode.idl b/modules/webaudio/StereoPannerNode.idl
index d0a7776..355fb12 100644
--- a/modules/webaudio/StereoPannerNode.idl
+++ b/modules/webaudio/StereoPannerNode.idl
@@ -2,10 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// See https://webaudio.github.io/web-audio-api/#the-stereopannernode-interface
 [
-    NoInterfaceObject,
-] interface StereoPannerNode : AudioNode {
+    Constructor(BaseAudioContext context, optional StereoPannerOptions options),
+    RaisesException=Constructor,
+    Measure
+]
+interface StereoPannerNode : AudioNode {
 
     readonly attribute AudioParam pan;
 
-};
\ No newline at end of file
+};
diff --git a/modules/webaudio/StereoPannerOptions.idl b/modules/webaudio/StereoPannerOptions.idl
new file mode 100644
index 0000000..87713a0
--- /dev/null
+++ b/modules/webaudio/StereoPannerOptions.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.
+
+// See https://webaudio.github.io/web-audio-api/#stereopanneroptions
+dictionary StereoPannerOptions : AudioNodeOptions {
+    float pan = 0;
+};
\ No newline at end of file
diff --git a/modules/webaudio/WaveShaperNode.idl b/modules/webaudio/WaveShaperNode.idl
index aeca5fb..6289d54 100644
--- a/modules/webaudio/WaveShaperNode.idl
+++ b/modules/webaudio/WaveShaperNode.idl
@@ -10,24 +10,31 @@
  *    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.
+ * 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.
  */
 
+// See https://webaudio.github.io/web-audio-api/#WaveShaperNode
 enum OverSampleType {
     "none",
     "2x",
     "4x"
 };
 
+[
+    Constructor(BaseAudioContext context, optional WaveShaperOptions options),
+    RaisesException=Constructor,
+    Measure
+]
 interface WaveShaperNode : AudioNode {
     [RaisesException=Setter] attribute Float32Array? curve;
     attribute OverSampleType oversample;
diff --git a/modules/webaudio/WaveShaperOptions.idl b/modules/webaudio/WaveShaperOptions.idl
new file mode 100644
index 0000000..c004b3f
--- /dev/null
+++ b/modules/webaudio/WaveShaperOptions.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.
+
+// https://webaudio.github.io/web-audio-api/#waveshaperoptions
+dictionary WaveShaperOptions : AudioNodeOptions {
+    sequence<float> curve;
+    OverSampleType oversample = "none";
+};
\ No newline at end of file
diff --git a/modules/webaudio/WindowAudioWorklet.idl b/modules/webaudio/WindowAudioWorklet.idl
new file mode 100644
index 0000000..f21f06b
--- /dev/null
+++ b/modules/webaudio/WindowAudioWorklet.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://webaudio.github.io/web-audio-api/#AudioWorklet
+
+[
+    ImplementedAs=WindowAudioWorklet,
+    RuntimeEnabled=AudioWorklet
+] partial interface Window {
+    readonly attribute Worklet audioWorklet;
+};
diff --git a/modules/webaudio/WindowWebAudio.idl b/modules/webaudio/WindowWebAudio.idl
deleted file mode 100644
index 0a5bb07..0000000
--- a/modules/webaudio/WindowWebAudio.idl
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) 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.
-
-[
-    ImplementedAs=DOMWindowWebAudio,
-] partial interface Window {
-    [MeasureAs=AudioContext] attribute AudioContextConstructor AudioContext;
-    [MeasureAs=OfflineAudioContext] attribute OfflineAudioContextConstructor OfflineAudioContext;
-    [DeprecateAs=PrefixedAudioContext] attribute AudioContextConstructor webkitAudioContext;
-    [DeprecateAs=PrefixedOfflineAudioContext] attribute OfflineAudioContextConstructor webkitOfflineAudioContext;
-};
diff --git a/modules/webaudio/testing/InternalsWebAudio.idl b/modules/webaudio/testing/InternalsWebAudio.idl
index fb3b231..9ee6fc0 100644
--- a/modules/webaudio/testing/InternalsWebAudio.idl
+++ b/modules/webaudio/testing/InternalsWebAudio.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.
 
-partial interface Internals {
+[
+    ImplementedAs=InternalsWebAudio
+] partial interface Internals {
     unsigned long audioHandlerCount();
 };
diff --git a/modules/webdatabase/Database.idl b/modules/webdatabase/Database.idl
index 6062830..9acb71f 100644
--- a/modules/webdatabase/Database.idl
+++ b/modules/webdatabase/Database.idl
@@ -26,8 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#database
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface Database {
     readonly attribute DOMString version;
@@ -35,4 +35,3 @@
     void transaction(SQLTransactionCallback callback, optional SQLTransactionErrorCallback errorCallback, optional VoidCallback successCallback);
     void readTransaction(SQLTransactionCallback callback, optional SQLTransactionErrorCallback errorCallback, optional VoidCallback successCallback);
 };
-
diff --git a/modules/webdatabase/DatabaseCallback.idl b/modules/webdatabase/DatabaseCallback.idl
deleted file mode 100644
index dc1987d..0000000
--- a/modules/webdatabase/DatabaseCallback.idl
+++ /dev/null
@@ -1,31 +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.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
- */
-
-callback interface DatabaseCallback {
-    boolean handleEvent(Database database);
-};
diff --git a/modules/webdatabase/SQLError.idl b/modules/webdatabase/SQLError.idl
index f946d55..287ddad 100644
--- a/modules/webdatabase/SQLError.idl
+++ b/modules/webdatabase/SQLError.idl
@@ -26,8 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqlerror
 [
-    GarbageCollected,
     NoInterfaceObject
 ] interface SQLError {
     readonly attribute unsigned long code;
diff --git a/modules/webdatabase/SQLResultSet.idl b/modules/webdatabase/SQLResultSet.idl
index 24c04c2..84a20be 100644
--- a/modules/webdatabase/SQLResultSet.idl
+++ b/modules/webdatabase/SQLResultSet.idl
@@ -26,9 +26,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqlresultset
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface SQLResultSet {
     readonly attribute SQLResultSetRowList rows;
 
diff --git a/modules/webdatabase/SQLResultSetRowList.idl b/modules/webdatabase/SQLResultSetRowList.idl
index 21f2304..2f7b32e 100644
--- a/modules/webdatabase/SQLResultSetRowList.idl
+++ b/modules/webdatabase/SQLResultSetRowList.idl
@@ -26,9 +26,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqlresultsetrowlist
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface SQLResultSetRowList {
     readonly attribute unsigned long length;
     [RaisesException, CallWith=ScriptState] getter any item(unsigned long index);
diff --git a/modules/webdatabase/SQLStatementCallback.idl b/modules/webdatabase/SQLStatementCallback.idl
index 48078af..77faa0e 100644
--- a/modules/webdatabase/SQLStatementCallback.idl
+++ b/modules/webdatabase/SQLStatementCallback.idl
@@ -26,6 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqlstatementcallback
 callback interface SQLStatementCallback {
     boolean handleEvent(SQLTransaction transaction, SQLResultSet resultSet);
 };
diff --git a/modules/webdatabase/SQLStatementErrorCallback.idl b/modules/webdatabase/SQLStatementErrorCallback.idl
index 117431d..8feb6bd 100644
--- a/modules/webdatabase/SQLStatementErrorCallback.idl
+++ b/modules/webdatabase/SQLStatementErrorCallback.idl
@@ -26,6 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqlstatementerrorcallback
 callback interface SQLStatementErrorCallback {
     [Custom] boolean handleEvent(SQLTransaction transaction, SQLError error);
 };
diff --git a/modules/webdatabase/SQLTransaction.idl b/modules/webdatabase/SQLTransaction.idl
index d1e50fe..7a08559 100644
--- a/modules/webdatabase/SQLTransaction.idl
+++ b/modules/webdatabase/SQLTransaction.idl
@@ -26,13 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/webdatabase/#sqltransaction
-
+// https://www.w3.org/TR/webdatabase/#objectarray
 typedef sequence<any> ObjectArray;
 
+// https://www.w3.org/TR/webdatabase/#sqltransaction
 [
-    GarbageCollected,
-    NoInterfaceObject,
+    NoInterfaceObject
 ] interface SQLTransaction {
     // The spec defines |arguments| to be an "optional ObjectArray" though it defines the
     // behavior when null is being passed.
diff --git a/modules/webdatabase/SQLTransactionCallback.idl b/modules/webdatabase/SQLTransactionCallback.idl
index 41cac85..450267b 100644
--- a/modules/webdatabase/SQLTransactionCallback.idl
+++ b/modules/webdatabase/SQLTransactionCallback.idl
@@ -26,6 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqltransactioncallback
 callback interface SQLTransactionCallback {
     boolean handleEvent(SQLTransaction transaction);
 };
diff --git a/modules/webdatabase/SQLTransactionErrorCallback.idl b/modules/webdatabase/SQLTransactionErrorCallback.idl
index efe64a0..396ada4 100644
--- a/modules/webdatabase/SQLTransactionErrorCallback.idl
+++ b/modules/webdatabase/SQLTransactionErrorCallback.idl
@@ -26,6 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#sqltransactionerrorcallback
 callback interface SQLTransactionErrorCallback {
     boolean handleEvent(SQLError error);
 };
diff --git a/modules/webdatabase/WindowWebDatabase.idl b/modules/webdatabase/WindowWebDatabase.idl
index 0d18b0e..3018a2c 100644
--- a/modules/webdatabase/WindowWebDatabase.idl
+++ b/modules/webdatabase/WindowWebDatabase.idl
@@ -24,9 +24,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.w3.org/TR/webdatabase/#databasecallback
+callback DatabaseCallback = boolean (Database database);
+
+// https://www.w3.org/TR/webdatabase/#databases
 [
     ImplementedAs=DOMWindowWebDatabase,
-    RuntimeEnabled=Database,
+    RuntimeEnabled=Database
 ] partial interface Window {
     [MeasureAs=OpenWebDatabase, LogActivity, RaisesException] Database openDatabase(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
 };
diff --git a/modules/webgl/ANGLEInstancedArrays.idl b/modules/webgl/ANGLEInstancedArrays.idl
index eb8853a..9ae9da7 100644
--- a/modules/webgl/ANGLEInstancedArrays.idl
+++ b/modules/webgl/ANGLEInstancedArrays.idl
@@ -28,11 +28,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/
+
 [
+    DependentLifetime,
     DoNotCheckConstants,
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    NoInterfaceObject
 ] interface ANGLEInstancedArrays {
     const unsigned long VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
 
diff --git a/modules/webgl/CHROMIUMSubscribeUniform.idl b/modules/webgl/CHROMIUMSubscribeUniform.idl
deleted file mode 100644
index 16b6f28..0000000
--- a/modules/webgl/CHROMIUMSubscribeUniform.idl
+++ /dev/null
@@ -1,25 +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.
-
-typedef unsigned long GLenum;
-
-[
-    DoNotCheckConstants,
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
-] interface CHROMIUMSubscribeUniform {
-    const GLenum SUBSCRIBED_VALUES_BUFFER_CHROMIUM =      0x924B;
-
-    const GLenum MOUSE_POSITION_CHROMIUM =                0x924C;
-
-    CHROMIUMValuebuffer createValuebufferCHROMIUM();
-    void deleteValuebufferCHROMIUM(CHROMIUMValuebuffer? buffer);
-    boolean isValuebufferCHROMIUM(CHROMIUMValuebuffer? buffer);
-    void bindValuebufferCHROMIUM(GLenum target, CHROMIUMValuebuffer? buffer);
-
-    void subscribeValueCHROMIUM(GLenum target, GLenum subscriptions);
-    void populateSubscribedValuesCHROMIUM(GLenum target);
-    void uniformValuebufferCHROMIUM(WebGLUniformLocation? location, GLenum target, GLenum subscription);
-};
diff --git a/modules/webgl/CHROMIUMValuebuffer.idl b/modules/webgl/CHROMIUMValuebuffer.idl
deleted file mode 100644
index a7277aa..0000000
--- a/modules/webgl/CHROMIUMValuebuffer.idl
+++ /dev/null
@@ -1,9 +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,
-    GarbageCollected,
-] interface CHROMIUMValuebuffer {
-};
diff --git a/modules/webgl/EXTBlendMinMax.idl b/modules/webgl/EXTBlendMinMax.idl
index 773c314..969fab8 100644
--- a/modules/webgl/EXTBlendMinMax.idl
+++ b/modules/webgl/EXTBlendMinMax.idl
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_blend_minmax/
+
 [
+    DependentLifetime,
     DoNotCheckConstants,
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    NoInterfaceObject
 ] interface EXTBlendMinMax {
     const unsigned long MIN_EXT              = 0x8007;
     const unsigned long MAX_EXT              = 0x8008;
diff --git a/modules/webgl/EXTColorBufferFloat.idl b/modules/webgl/EXTColorBufferFloat.idl
index f528ec7..6fc15a4 100644
--- a/modules/webgl/EXTColorBufferFloat.idl
+++ b/modules/webgl/EXTColorBufferFloat.idl
@@ -2,9 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface EXTColorBufferFloat {
 };
diff --git a/modules/webgl/EXTColorBufferHalfFloat.idl b/modules/webgl/EXTColorBufferHalfFloat.idl
new file mode 100644
index 0000000..588c4f9
--- /dev/null
+++ b/modules/webgl/EXTColorBufferHalfFloat.idl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 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 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 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://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_half_float
+
+[
+    DependentLifetime,
+    NoInterfaceObject
+] interface EXTColorBufferHalfFloat {
+};
diff --git a/modules/webgl/EXTDisjointTimerQuery.idl b/modules/webgl/EXTDisjointTimerQuery.idl
index 6da8e5b..206e59c 100644
--- a/modules/webgl/EXTDisjointTimerQuery.idl
+++ b/modules/webgl/EXTDisjointTimerQuery.idl
@@ -2,13 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/
+
 typedef unsigned long long GLuint64EXT;
 
 [
+    DependentLifetime,
     DoNotCheckConstants,
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    NoInterfaceObject
 ] interface EXTDisjointTimerQuery {
     const GLenum QUERY_COUNTER_BITS_EXT      = 0x8864;
     const GLenum CURRENT_QUERY_EXT           = 0x8865;
@@ -19,11 +20,11 @@
     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 deleteQueryEXT(WebGLTimerQueryEXT? query);
+    boolean isQueryEXT(WebGLTimerQueryEXT? query);
+    void beginQueryEXT(GLenum target, WebGLTimerQueryEXT query);
     void endQueryEXT(GLenum target);
-    void queryCounterEXT([Default=Undefined] WebGLTimerQueryEXT? query, GLenum target);
+    void queryCounterEXT(WebGLTimerQueryEXT query, GLenum target);
     [CallWith=ScriptState] any getQueryEXT(GLenum target, GLenum pname);
-    [CallWith=ScriptState] any getQueryObjectEXT([Default=Undefined] WebGLTimerQueryEXT? query, GLenum pname);
+    [CallWith=ScriptState] any getQueryObjectEXT(WebGLTimerQueryEXT query, GLenum pname);
 };
diff --git a/modules/webgl/EXTDisjointTimerQueryWebGL2.idl b/modules/webgl/EXTDisjointTimerQueryWebGL2.idl
new file mode 100644
index 0000000..56f7406
--- /dev/null
+++ b/modules/webgl/EXTDisjointTimerQueryWebGL2.idl
@@ -0,0 +1,19 @@
+// 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://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/
+
+typedef unsigned long long GLuint64EXT;
+
+[
+    DependentLifetime,
+    DoNotCheckConstants,
+    NoInterfaceObject
+] interface EXTDisjointTimerQueryWebGL2 {
+    const GLenum QUERY_COUNTER_BITS_EXT      = 0x8864;
+    const GLenum TIME_ELAPSED_EXT            = 0x88BF;
+    const GLenum TIMESTAMP_EXT               = 0x8E28;
+    const GLenum GPU_DISJOINT_EXT            = 0x8FBB;
+    void queryCounterEXT(WebGLQuery query, GLenum target);
+};
diff --git a/modules/webgl/EXTFragDepth.idl b/modules/webgl/EXTFragDepth.idl
index caadf78..571c806 100644
--- a/modules/webgl/EXTFragDepth.idl
+++ b/modules/webgl/EXTFragDepth.idl
@@ -23,9 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface EXTFragDepth {
 };
diff --git a/modules/webgl/EXTShaderTextureLOD.idl b/modules/webgl/EXTShaderTextureLOD.idl
index 5c0b9eb..fd3c742 100644
--- a/modules/webgl/EXTShaderTextureLOD.idl
+++ b/modules/webgl/EXTShaderTextureLOD.idl
@@ -2,9 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_shader_texture_lod/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface EXTShaderTextureLOD {
 };
diff --git a/modules/webgl/EXTTextureFilterAnisotropic.idl b/modules/webgl/EXTTextureFilterAnisotropic.idl
index 5c08b8b..de22a22 100644
--- a/modules/webgl/EXTTextureFilterAnisotropic.idl
+++ b/modules/webgl/EXTTextureFilterAnisotropic.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface EXTTextureFilterAnisotropic {
     const unsigned long TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
     const unsigned long MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
diff --git a/modules/webgl/EXTsRGB.idl b/modules/webgl/EXTsRGB.idl
index b8af673..0b447ed 100644
--- a/modules/webgl/EXTsRGB.idl
+++ b/modules/webgl/EXTsRGB.idl
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_sRGB/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface EXTsRGB {
     const unsigned long SRGB_EXT                                     = 0x8C40;
     const unsigned long SRGB_ALPHA_EXT                               = 0x8C42;
diff --git a/modules/webgl/OESElementIndexUint.idl b/modules/webgl/OESElementIndexUint.idl
index 6c8f5c6..ce50a63 100644
--- a/modules/webgl/OESElementIndexUint.idl
+++ b/modules/webgl/OESElementIndexUint.idl
@@ -23,9 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface OESElementIndexUint {
 };
diff --git a/modules/webgl/OESStandardDerivatives.idl b/modules/webgl/OESStandardDerivatives.idl
index bb64a4c..a2a7dda 100644
--- a/modules/webgl/OESStandardDerivatives.idl
+++ b/modules/webgl/OESStandardDerivatives.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface OESStandardDerivatives {
     const unsigned long FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
 };
diff --git a/modules/webgl/OESTextureFloat.idl b/modules/webgl/OESTextureFloat.idl
index fe24758..9c54e3d 100644
--- a/modules/webgl/OESTextureFloat.idl
+++ b/modules/webgl/OESTextureFloat.idl
@@ -23,9 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_texture_float/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface OESTextureFloat {
 };
diff --git a/modules/webgl/OESTextureFloatLinear.idl b/modules/webgl/OESTextureFloatLinear.idl
index 0c305b7..80110e2 100644
--- a/modules/webgl/OESTextureFloatLinear.idl
+++ b/modules/webgl/OESTextureFloatLinear.idl
@@ -23,9 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_texture_float_linear/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface OESTextureFloatLinear {
 };
diff --git a/modules/webgl/OESTextureHalfFloat.idl b/modules/webgl/OESTextureHalfFloat.idl
index 1a9ebf3..6ed00bb 100644
--- a/modules/webgl/OESTextureHalfFloat.idl
+++ b/modules/webgl/OESTextureHalfFloat.idl
@@ -23,13 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-typedef unsigned long GLenum;
+// https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/
 
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface OESTextureHalfFloat {
     const GLenum HALF_FLOAT_OES                 = 0x8D61;
 };
diff --git a/modules/webgl/OESTextureHalfFloatLinear.idl b/modules/webgl/OESTextureHalfFloatLinear.idl
index 7c147d9..c762c52 100644
--- a/modules/webgl/OESTextureHalfFloatLinear.idl
+++ b/modules/webgl/OESTextureHalfFloatLinear.idl
@@ -23,9 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_texture_half_float_linear/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface OESTextureHalfFloatLinear {
 };
diff --git a/modules/webgl/OESVertexArrayObject.idl b/modules/webgl/OESVertexArrayObject.idl
index ebe9285..5de5f89 100644
--- a/modules/webgl/OESVertexArrayObject.idl
+++ b/modules/webgl/OESVertexArrayObject.idl
@@ -23,16 +23,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
+
 [
+    DependentLifetime,
     DoNotCheckConstants,
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    NoInterfaceObject
 ] interface OESVertexArrayObject {
     const unsigned long VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
     WebGLVertexArrayObjectOES createVertexArrayOES();
-    [CallWith=ScriptState] void deleteVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
+    void deleteVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
     boolean isVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
-    [CallWith=ScriptState] void bindVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
+    void bindVertexArrayOES([Default=Undefined] optional WebGLVertexArrayObjectOES? arrayObject);
 };
diff --git a/modules/webgl/PRESUBMIT.py b/modules/webgl/PRESUBMIT.py
index 923a26b..492a16f 100644
--- a/modules/webgl/PRESUBMIT.py
+++ b/modules/webgl/PRESUBMIT.py
@@ -2,40 +2,25 @@
 # 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.
+"""Top-level presubmit script for Source/modules/webgl.
 
 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.
+    This hook modifies the CL description in order to run extra GPU
+    tests (in particular, the WebGL 2.0 conformance tests) in addition
+    to the regular CQ try bots. This test suite is too large to run
+    against all Chromium commits, but should be run against changes
+    likely to affect these tests.
     """
-    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
+    return output_api.EnsureCQIncludeTrybotsAreAdded(
+        cl,
+        ['master.tryserver.chromium.linux:linux_optional_gpu_tests_rel',
+         'master.tryserver.chromium.mac:mac_optional_gpu_tests_rel',
+         'master.tryserver.chromium.win:win_optional_gpu_tests_rel',
+         'master.tryserver.chromium.android:android_optional_gpu_tests_rel'],
+        'Automatically added optional GPU tests to run on CQ.')
diff --git a/modules/webgl/WebGL2RenderingContext.idl b/modules/webgl/WebGL2RenderingContext.idl
index a3387bf..7732235 100644
--- a/modules/webgl/WebGL2RenderingContext.idl
+++ b/modules/webgl/WebGL2RenderingContext.idl
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7
+
 [
-    RuntimeEnabled=UnsafeES3APIs,
     DoNotCheckConstants,
-    SetWrapperReferenceFrom=canvas,
-    WillBeGarbageCollected,
+    Exposed(Worker ExperimentalCanvasFeatures, Window StableBlinkFeatures),
+    DependentLifetime
 ] interface WebGL2RenderingContext { };
 WebGL2RenderingContext implements WebGLRenderingContextBase;
 WebGL2RenderingContext implements WebGL2RenderingContextBase;
diff --git a/modules/webgl/WebGL2RenderingContextBase.idl b/modules/webgl/WebGL2RenderingContextBase.idl
index cb2eaf0..0952630 100644
--- a/modules/webgl/WebGL2RenderingContextBase.idl
+++ b/modules/webgl/WebGL2RenderingContextBase.idl
@@ -2,26 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-typedef unsigned long  GLenum;
-typedef boolean        GLboolean;
-typedef unsigned long  GLbitfield;
-typedef byte           GLbyte; // 'byte' should be a signed 8 bit type.
-typedef short          GLshort;
-typedef long           GLint;
-typedef long           GLsizei;
-typedef long long      GLintptr;
-typedef long long      GLsizeiptr;
-typedef octet          GLubyte; // 'octet' should be an unsigned 8 bit type.
-typedef unsigned short GLushort;
-typedef unsigned long  GLuint;
-typedef unrestricted float GLfloat;
-typedef unrestricted float GLclampf;
-typedef long long      GLint64;
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7
+
+typedef long long GLint64;
+typedef unsigned long long GLuint64;
 
 [
-    RuntimeEnabled=UnsafeES3APIs,
-    NoInterfaceObject,
-    WillBeGarbageCollected,
+    NoInterfaceObject
 ] interface WebGL2RenderingContextBase {
     const GLenum READ_BUFFER                                   = 0x0C02;
     const GLenum UNPACK_ROW_LENGTH                             = 0x0CF2;
@@ -276,26 +263,13 @@
     const GLenum ANY_SAMPLES_PASSED_CONSERVATIVE               = 0x8D6A;
     const GLenum SAMPLER_BINDING                               = 0x8919;
     const GLenum RGB10_A2UI                                    = 0x906F;
-    const GLenum GREEN                                         = 0x1904;
-    const GLenum BLUE                                          = 0x1905;
     const GLenum INT_2_10_10_10_REV                            = 0x8D9F;
     const GLenum TRANSFORM_FEEDBACK                            = 0x8E22;
     const GLenum TRANSFORM_FEEDBACK_PAUSED                     = 0x8E23;
     const GLenum TRANSFORM_FEEDBACK_ACTIVE                     = 0x8E24;
     const GLenum TRANSFORM_FEEDBACK_BINDING                    = 0x8E25;
-    const GLenum COMPRESSED_R11_EAC                            = 0x9270;
-    const GLenum COMPRESSED_SIGNED_R11_EAC                     = 0x9271;
-    const GLenum COMPRESSED_RG11_EAC                           = 0x9272;
-    const GLenum COMPRESSED_SIGNED_RG11_EAC                    = 0x9273;
-    const GLenum COMPRESSED_RGB8_ETC2                          = 0x9274;
-    const GLenum COMPRESSED_SRGB8_ETC2                         = 0x9275;
-    const GLenum COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2      = 0x9276;
-    const GLenum COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2     = 0x9277;
-    const GLenum COMPRESSED_RGBA8_ETC2_EAC                     = 0x9278;
-    const GLenum COMPRESSED_SRGB8_ALPHA8_ETC2_EAC              = 0x9279;
     const GLenum TEXTURE_IMMUTABLE_FORMAT                      = 0x912F;
     const GLenum MAX_ELEMENT_INDEX                             = 0x8D6B;
-    const GLenum NUM_SAMPLE_COUNTS                             = 0x9380;
     const GLenum TEXTURE_IMMUTABLE_LEVELS                      = 0x82DF;
     const GLint TIMEOUT_IGNORED                                = -1;
 
@@ -303,15 +277,17 @@
     const GLenum MAX_CLIENT_WAIT_TIMEOUT_WEBGL                 = 0x9247;
 
     /* Buffer objects */
+    void bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset, optional GLuint length = 0);
+    void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, GLuint srcOffset, optional GLuint length = 0);
     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 srcByteOffset, [AllowShared] ArrayBufferView dstData, optional GLuint dstOffset = 0, optional GLuint length = 0);
 
     /* Framebuffer objects */
     void blitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-    [CallWith=ScriptState] void framebufferTextureLayer(GLenum target, GLenum attachment, WebGLTexture? texture, GLint level, GLint layer);
+    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);
+    void invalidateSubFramebuffer(GLenum target, sequence<GLenum> attachments, GLint x, GLint y, GLsizei width, GLsizei height);
     void readBuffer(GLenum mode);
 
     /* Renderbuffer objects */
@@ -319,54 +295,165 @@
 
     /* Texture objects */
     void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLintptr offset);
+    void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ImageData data);
+    [CallWith=ExecutionContext, RaisesException] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLImageElement image);
+    [CallWith=ExecutionContext, RaisesException] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [CallWith=ExecutionContext,RaisesException] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ImageBitmap bitmap);
+    void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, GLuint srcOffset);
+    void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset);
+    void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ImageData data);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLImageElement image);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ImageBitmap bitmap);
+    void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, GLuint srcOffset);
     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);
     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 texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, ImageData data);
+    [CallWith=ExecutionContext, RaisesException] void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, HTMLImageElement image);
+    [CallWith=ExecutionContext, RaisesException] void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [CallWith=ExecutionContext, RaisesException] void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, ImageBitmap bitmap);
+    void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
+    void texImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView pixels, GLuint srcOffset);
+    void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, 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, ImageData data);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, HTMLImageElement image);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, HTMLVideoElement video);
+    [RaisesException] void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, ImageBitmap bitmap);
+    void texSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, [AllowShared] ArrayBufferView pixels, optional GLuint srcOffset = 0);
+
     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);
+
+    void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLint border,
+                              [AllowShared] ArrayBufferView data, GLuint srcOffset,
+                              optional GLuint srcLengthOverride = 0);
+    void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+                                 GLsizei width, GLsizei height, GLenum format,
+                                 [AllowShared] ArrayBufferView data, GLuint srcOffset,
+                                 optional GLuint srcLengthOverride = 0);
+    void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, [AllowShared] ArrayBufferView data, optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
+    void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, [AllowShared] ArrayBufferView data, optional GLuint srcOffset = 0, optional GLuint srcLengthOverride = 0);
+
+    void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLint border,
+                              GLsizei imageSize, GLintptr offset);
+    void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+                                 GLsizei width, GLsizei height, GLenum format,
+                                 GLsizei imageSize, GLintptr offset);
+    void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLsizei depth, GLint border,
+                              GLsizei imageSize, GLintptr offset);
+    void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
+                                 GLsizei width, GLsizei height, GLsizei depth, GLenum format,
+                                 GLsizei imageSize, GLintptr offset);
 
     /* Programs and shaders */
-    GLint getFragDataLocation(WebGLProgram? program, DOMString name);
+    GLint getFragDataLocation(WebGLProgram program, DOMString name);
 
     /* Uniforms and attributes */
     void uniform1ui(WebGLUniformLocation? location, GLuint v0);
     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, [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);
-    void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
-    void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
-    void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
-    void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
-    void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
-    void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
-    void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
-    void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array value);
-    void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value);
+    // The WebGL1 uniform*v signatures are visible here, so srcOffset has to be non-optional
+    // to avoid conflicts. The effect is the same: if uniform*v is called with only two arguments,
+    // it goes to the WebGL1 signatures; if it's called with three or four arguments, it goes to
+    // the WebGL2 specific signatures.
+    void uniform1fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform1fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform2fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform2fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform3fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform3fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform4fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform4fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform1iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform1iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform2iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform2iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform3iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform3iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform4iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform4iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniform1uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform1uiv(WebGLUniformLocation? location, sequence<GLuint> v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform2uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform2uiv(WebGLUniformLocation? location, sequence<GLuint> v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform3uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform3uiv(WebGLUniformLocation? location, sequence<GLuint> v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform4uiv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Uint32Array v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniform4uiv(WebGLUniformLocation? location, sequence<GLuint> v,
+                     optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix2x3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix3x2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix2x4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix4x2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix3x4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
+    void uniformMatrix4x3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> value,
+                            optional GLuint srcOffset = 0, optional GLuint srcLength = 0);
 
     void vertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w);
-    void vertexAttribI4iv(GLuint index, Int32Array v);
+    void vertexAttribI4iv(GLuint index, [AllowShared] 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, [AllowShared] Uint32Array v);
     void vertexAttribI4uiv(GLuint index, sequence<GLuint> v);
     void vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
 
@@ -378,50 +465,50 @@
 
     /* Multiple Render Targets */
     void drawBuffers(sequence<GLenum> buffers);
-    void clearBufferiv(GLenum buffer, GLint drawbuffer, Int32Array value);
-    void clearBufferiv(GLenum buffer, GLint drawbuffer, sequence<GLint> value);
-    void clearBufferuiv(GLenum buffer, GLint drawbuffer, Uint32Array value);
-    void clearBufferuiv(GLenum buffer, GLint drawbuffer, sequence<GLuint> value);
-    void clearBufferfv(GLenum buffer, GLint drawbuffer, Float32Array value);
-    void clearBufferfv(GLenum buffer, GLint drawbuffer, sequence<GLfloat> value);
+    void clearBufferiv(GLenum buffer, GLint drawbuffer, [AllowShared] Int32Array value, optional GLuint srcOffset = 0);
+    void clearBufferiv(GLenum buffer, GLint drawbuffer, sequence<GLint> value, optional GLuint srcOffset = 0);
+    void clearBufferuiv(GLenum buffer, GLint drawbuffer, [AllowShared] Uint32Array value, optional GLuint srcOffset = 0);
+    void clearBufferuiv(GLenum buffer, GLint drawbuffer, sequence<GLuint> value, optional GLuint srcOffset = 0);
+    void clearBufferfv(GLenum buffer, GLint drawbuffer, [AllowShared] Float32Array value, optional GLuint srcOffset = 0);
+    void clearBufferfv(GLenum buffer, GLint drawbuffer, sequence<GLfloat> value, optional GLuint srcOffset = 0);
     void clearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
 
     /* Query Objects */
-    WebGLQuery createQuery();
+    WebGLQuery? createQuery();
     void deleteQuery(WebGLQuery? query);
     GLboolean isQuery(WebGLQuery? query);
-    void beginQuery(GLenum target, WebGLQuery? query);
+    void beginQuery(GLenum target, WebGLQuery query);
     void endQuery(GLenum target);
-    WebGLQuery getQuery(GLenum target, GLenum pname);
-    [CallWith=ScriptState] any getQueryParameter(WebGLQuery? query, GLenum pname);
+    [CallWith=ScriptState] any getQuery(GLenum target, GLenum pname);
+    [CallWith=ScriptState] any getQueryParameter(WebGLQuery query, GLenum pname);
 
     /* Sampler Objects */
-    WebGLSampler createSampler();
+    WebGLSampler? createSampler();
     void deleteSampler(WebGLSampler? sampler);
     GLboolean isSampler(WebGLSampler? sampler);
     void bindSampler(GLuint unit, WebGLSampler? sampler);
-    void samplerParameteri(WebGLSampler? sampler, GLenum pname, GLint param);
-    void samplerParameterf(WebGLSampler? sampler, GLenum pname, GLfloat param);
-    [CallWith=ScriptState] any getSamplerParameter(WebGLSampler? sampler, GLenum pname);
+    void samplerParameteri(WebGLSampler sampler, GLenum pname, GLint param);
+    void samplerParameterf(WebGLSampler sampler, GLenum pname, GLfloat param);
+    [CallWith=ScriptState] any getSamplerParameter(WebGLSampler sampler, GLenum pname);
 
     /* Sync objects */
-    WebGLSync fenceSync(GLenum condition, GLbitfield flags);
+    WebGLSync? fenceSync(GLenum condition, GLbitfield flags);
     GLboolean isSync(WebGLSync? sync);
     void deleteSync(WebGLSync? sync);
-    GLenum clientWaitSync(WebGLSync? sync, GLbitfield flags, GLint64 timeout);
-    void waitSync(WebGLSync? sync, GLbitfield flags, GLint64 timeout);
+    GLenum clientWaitSync(WebGLSync sync, GLbitfield flags, GLuint64 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();
+    WebGLTransformFeedback? createTransformFeedback();
     void deleteTransformFeedback(WebGLTransformFeedback? feedback);
     GLboolean isTransformFeedback(WebGLTransformFeedback? feedback);
-    void bindTransformFeedback (GLenum target, WebGLTransformFeedback? feedback);
+    void bindTransformFeedback(GLenum target, WebGLTransformFeedback? feedback);
     void beginTransformFeedback(GLenum primitiveMode);
     void endTransformFeedback();
-    void transformFeedbackVaryings(WebGLProgram? program, sequence<DOMString> varyings, GLenum bufferMode);
-    WebGLActiveInfo getTransformFeedbackVarying(WebGLProgram? program, GLuint index);
+    void transformFeedbackVaryings(WebGLProgram program, sequence<DOMString> varyings, GLenum bufferMode);
+    WebGLActiveInfo? getTransformFeedbackVarying(WebGLProgram program, GLuint index);
     void pauseTransformFeedback();
     void resumeTransformFeedback();
 
@@ -429,20 +516,21 @@
     void bindBufferBase(GLenum target, GLuint index, WebGLBuffer? buffer);
     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);
-    [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);
-    void uniformBlockBinding(WebGLProgram? program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+    sequence<GLuint>? getUniformIndices(WebGLProgram program, sequence<DOMString> uniformNames);
+    [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);
+    void uniformBlockBinding(WebGLProgram program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
 
     /* Vertex Array Objects */
-    WebGLVertexArrayObject createVertexArray();
-    [CallWith=ScriptState] void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
+    WebGLVertexArrayObject? createVertexArray();
+    void deleteVertexArray(WebGLVertexArrayObject? vertexArray);
     GLboolean isVertexArray(WebGLVertexArrayObject? vertexArray);
-    [CallWith=ScriptState] void bindVertexArray(WebGLVertexArrayObject? vertexArray);
+    void bindVertexArray(WebGLVertexArrayObject? vertexArray);
 
     /* Reading */
+    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView dstData, GLintptr offset);
     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 e22a5bd..6e9eda9 100644
--- a/modules/webgl/WebGLActiveInfo.idl
+++ b/modules/webgl/WebGLActiveInfo.idl
@@ -23,9 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface WebGLActiveInfo {
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.11
+
+interface WebGLActiveInfo {
     readonly attribute long size;
     readonly attribute unsigned long type;
     readonly attribute DOMString name;
diff --git a/modules/webgl/WebGLBuffer.idl b/modules/webgl/WebGLBuffer.idl
index 826f3a0..d155504 100644
--- a/modules/webgl/WebGLBuffer.idl
+++ b/modules/webgl/WebGLBuffer.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.4
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLBuffer {
 };
diff --git a/modules/webgl/WebGLColorBufferFloat.idl b/modules/webgl/WebGLColorBufferFloat.idl
new file mode 100644
index 0000000..9ee7c1e
--- /dev/null
+++ b/modules/webgl/WebGLColorBufferFloat.idl
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2017 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 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 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://www.khronos.org/registry/webgl/extensions/WebGL_color_buffer_float/
+
+[
+    DependentLifetime,
+    NoInterfaceObject
+] interface WebGLColorBufferFloat {
+};
diff --git a/modules/webgl/WebGLCompressedTextureASTC.idl b/modules/webgl/WebGLCompressedTextureASTC.idl
index 43db7d6..943a1ff 100644
--- a/modules/webgl/WebGLCompressedTextureASTC.idl
+++ b/modules/webgl/WebGLCompressedTextureASTC.idl
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLCompressedTextureASTC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGBA_ASTC_4x4_KHR           = 0x93B0;
diff --git a/modules/webgl/WebGLCompressedTextureATC.idl b/modules/webgl/WebGLCompressedTextureATC.idl
index 1bb3fe7..888d29f 100644
--- a/modules/webgl/WebGLCompressedTextureATC.idl
+++ b/modules/webgl/WebGLCompressedTextureATC.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_atc/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLCompressedTextureATC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_ATC_WEBGL                     = 0x8C92;
diff --git a/modules/webgl/WebGLCompressedTextureETC.idl b/modules/webgl/WebGLCompressedTextureETC.idl
new file mode 100644
index 0000000..eadd961
--- /dev/null
+++ b/modules/webgl/WebGLCompressedTextureETC.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.
+
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/
+
+[
+    DependentLifetime,
+    NoInterfaceObject,
+    DoNotCheckConstants
+] interface WebGLCompressedTextureETC {
+    /* Compressed Texture Format */
+    const unsigned long COMPRESSED_R11_EAC                        = 0x9270;
+    const unsigned long COMPRESSED_SIGNED_R11_EAC                 = 0x9271;
+    const unsigned long COMPRESSED_RG11_EAC                       = 0x9272;
+    const unsigned long COMPRESSED_SIGNED_RG11_EAC                = 0x9273;
+    const unsigned long COMPRESSED_RGB8_ETC2                      = 0x9274;
+    const unsigned long COMPRESSED_SRGB8_ETC2                     = 0x9275;
+    const unsigned long COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2  = 0x9276;
+    const unsigned long COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
+    const unsigned long COMPRESSED_RGBA8_ETC2_EAC                 = 0x9278;
+    const unsigned long COMPRESSED_SRGB8_ALPHA8_ETC2_EAC          = 0x9279;
+};
diff --git a/modules/webgl/WebGLCompressedTextureETC1.idl b/modules/webgl/WebGLCompressedTextureETC1.idl
index 65f8321..331d47d 100644
--- a/modules/webgl/WebGLCompressedTextureETC1.idl
+++ b/modules/webgl/WebGLCompressedTextureETC1.idl
@@ -2,11 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc1/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLCompressedTextureETC1 {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_ETC1_WEBGL = 0x8D64;
diff --git a/modules/webgl/WebGLCompressedTexturePVRTC.idl b/modules/webgl/WebGLCompressedTexturePVRTC.idl
index 29c09ff..eb7102b 100644
--- a/modules/webgl/WebGLCompressedTexturePVRTC.idl
+++ b/modules/webgl/WebGLCompressedTexturePVRTC.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLCompressedTexturePVRTC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_PVRTC_4BPPV1_IMG  = 0x8C00;
diff --git a/modules/webgl/WebGLCompressedTextureS3TC.idl b/modules/webgl/WebGLCompressedTextureS3TC.idl
index 36f76b7..d79212f 100644
--- a/modules/webgl/WebGLCompressedTextureS3TC.idl
+++ b/modules/webgl/WebGLCompressedTextureS3TC.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLCompressedTextureS3TC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_S3TC_DXT1_EXT        = 0x83F0;
diff --git a/modules/webgl/WebGLCompressedTextureS3TCsRGB.idl b/modules/webgl/WebGLCompressedTextureS3TCsRGB.idl
new file mode 100644
index 0000000..3e7dc7f
--- /dev/null
+++ b/modules/webgl/WebGLCompressedTextureS3TCsRGB.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.
+
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/
+
+[
+    DependentLifetime,
+    NoInterfaceObject,
+    DoNotCheckConstants
+] interface WebGLCompressedTextureS3TCsRGB {
+    /* Compressed Texture Formats */
+    const unsigned long COMPRESSED_SRGB_S3TC_DXT1_EXT        = 0x8C4C;
+    const unsigned long COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT  = 0x8C4D;
+    const unsigned long COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT  = 0x8C4E;
+    const unsigned long COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT  = 0x8C4F;
+};
diff --git a/modules/webgl/WebGLContextEvent.idl b/modules/webgl/WebGLContextEvent.idl
index 484b8bc..f08c814 100644
--- a/modules/webgl/WebGLContextEvent.idl
+++ b/modules/webgl/WebGLContextEvent.idl
@@ -23,11 +23,10 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// https://www.khronos.org/registry/webgl/specs/1.0/#5.15
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15
 
 [
-    Constructor(DOMString type, optional WebGLContextEventInit eventInit),
+    Constructor(DOMString type, optional WebGLContextEventInit eventInit)
 ] interface WebGLContextEvent : Event {
     readonly attribute DOMString statusMessage;
 };
-
diff --git a/modules/webgl/WebGLContextEventInit.idl b/modules/webgl/WebGLContextEventInit.idl
index 7a7ced8..9b6e106 100644
--- a/modules/webgl/WebGLContextEventInit.idl
+++ b/modules/webgl/WebGLContextEventInit.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://www.khronos.org/registry/webgl/specs/1.0/#5.15
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15
 
 dictionary WebGLContextEventInit : EventInit {
     DOMString statusMessage;
diff --git a/modules/webgl/WebGLDebugRendererInfo.idl b/modules/webgl/WebGLDebugRendererInfo.idl
index 635f2ec..ba96811 100644
--- a/modules/webgl/WebGLDebugRendererInfo.idl
+++ b/modules/webgl/WebGLDebugRendererInfo.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLDebugRendererInfo {
     const unsigned long UNMASKED_VENDOR_WEBGL = 0x9245;
     const unsigned long UNMASKED_RENDERER_WEBGL = 0x9246;
diff --git a/modules/webgl/WebGLDebugShaders.idl b/modules/webgl/WebGLDebugShaders.idl
index 9196da9..0003a14 100644
--- a/modules/webgl/WebGLDebugShaders.idl
+++ b/modules/webgl/WebGLDebugShaders.idl
@@ -23,10 +23,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface WebGLDebugShaders {
-    DOMString? getTranslatedShaderSource(WebGLShader? shader);
+    DOMString? getTranslatedShaderSource(WebGLShader shader);
 };
diff --git a/modules/webgl/WebGLDepthTexture.idl b/modules/webgl/WebGLDepthTexture.idl
index d1b2ca9..09d1f10 100644
--- a/modules/webgl/WebGLDepthTexture.idl
+++ b/modules/webgl/WebGLDepthTexture.idl
@@ -23,11 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/
+
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLDepthTexture {
     const unsigned long UNSIGNED_INT_24_8_WEBGL = 0x84FA;
 };
diff --git a/modules/webgl/WebGLDrawBuffers.idl b/modules/webgl/WebGLDrawBuffers.idl
index b39138b..c45a880 100644
--- a/modules/webgl/WebGLDrawBuffers.idl
+++ b/modules/webgl/WebGLDrawBuffers.idl
@@ -23,13 +23,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-typedef unsigned long GLenum;
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/
 
 [
+    DependentLifetime,
     NoInterfaceObject,
-    DoNotCheckConstants,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DoNotCheckConstants
 ] interface WebGLDrawBuffers {
     const GLenum COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
     const GLenum COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
diff --git a/modules/webgl/WebGLFramebuffer.idl b/modules/webgl/WebGLFramebuffer.idl
index b41a0d2..04cdaaf 100644
--- a/modules/webgl/WebGLFramebuffer.idl
+++ b/modules/webgl/WebGLFramebuffer.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.5
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLFramebuffer {
 };
diff --git a/modules/webgl/WebGLGetBufferSubDataAsync.idl b/modules/webgl/WebGLGetBufferSubDataAsync.idl
new file mode 100644
index 0000000..ac54d2d
--- /dev/null
+++ b/modules/webgl/WebGLGetBufferSubDataAsync.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://www.khronos.org/registry/webgl/extensions/WEBGL_get_buffer_sub_data_async/
+
+[
+    DependentLifetime,
+    NoInterfaceObject,
+    DoNotCheckConstants
+] interface WebGLGetBufferSubDataAsync {
+    [CallWith=ScriptState] Promise<ArrayBufferView> getBufferSubDataAsync(GLenum target, GLintptr srcByteOffset, ArrayBufferView dstData, optional GLuint dstOffset = 0, optional GLuint length = 0);
+};
diff --git a/modules/webgl/WebGLLoseContext.idl b/modules/webgl/WebGLLoseContext.idl
index bfcc898..09b5b37 100644
--- a/modules/webgl/WebGLLoseContext.idl
+++ b/modules/webgl/WebGLLoseContext.idl
@@ -23,10 +23,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
-    SetWrapperReferenceFrom=canvas,
+    DependentLifetime,
+    NoInterfaceObject
 ] interface WebGLLoseContext {
     void loseContext();
     void restoreContext();
diff --git a/modules/webgl/WebGLProgram.idl b/modules/webgl/WebGLProgram.idl
index 10042da..9d2d714 100644
--- a/modules/webgl/WebGLProgram.idl
+++ b/modules/webgl/WebGLProgram.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.6
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLProgram {
 };
diff --git a/modules/webgl/WebGLQuery.idl b/modules/webgl/WebGLQuery.idl
index 725f0b9..90f03ba 100644
--- a/modules/webgl/WebGLQuery.idl
+++ b/modules/webgl/WebGLQuery.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.2
+
 [
-    RuntimeEnabled=UnsafeES3APIs,
-    GarbageCollected
+    DependentLifetime
 ] interface WebGLQuery {
 };
diff --git a/modules/webgl/WebGLRenderbuffer.idl b/modules/webgl/WebGLRenderbuffer.idl
index 98fa819..9a799f4 100644
--- a/modules/webgl/WebGLRenderbuffer.idl
+++ b/modules/webgl/WebGLRenderbuffer.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.7
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLRenderbuffer {
 };
diff --git a/modules/webgl/WebGLRenderingContext.idl b/modules/webgl/WebGLRenderingContext.idl
index 20922a2..6e3b334 100644
--- a/modules/webgl/WebGLRenderingContext.idl
+++ b/modules/webgl/WebGLRenderingContext.idl
@@ -23,11 +23,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.khronos.org/registry/webgl/specs/latest/1.0/#WebGLRenderingContext
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#WebGLRenderingContext
 
 [
     DoNotCheckConstants,
-    SetWrapperReferenceFrom=canvas,
-    WillBeGarbageCollected,
+    Exposed(Worker ExperimentalCanvasFeatures, Window StableBlinkFeatures),
+    DependentLifetime
 ] interface WebGLRenderingContext { };
 WebGLRenderingContext implements WebGLRenderingContextBase;
diff --git a/modules/webgl/WebGLRenderingContextBase.idl b/modules/webgl/WebGLRenderingContextBase.idl
index 2bad45c..fbac5cd 100644
--- a/modules/webgl/WebGLRenderingContextBase.idl
+++ b/modules/webgl/WebGLRenderingContextBase.idl
@@ -23,7 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.khronos.org/registry/webgl/specs/latest/1.0/#WebGLRenderingContextBase
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#WebGLRenderingContextBase
 
 typedef unsigned long  GLenum;
 typedef boolean        GLboolean;
@@ -44,11 +44,10 @@
     // 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'
-    WillBeGarbageCollected,
+    NoInterfaceObject // Always used on target of 'implements'
 ] interface WebGLRenderingContextBase {
 
-    readonly attribute HTMLCanvasElement canvas;
+    [ImplementedAs=getHTMLOrOffscreenCanvas] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
 
     /* ClearBufferMask */
     const GLenum DEPTH_BUFFER_BIT               = 0x00000100;
@@ -424,7 +423,6 @@
     const GLenum RGB5_A1                        = 0x8057;
     const GLenum RGB565                         = 0x8D62;
     const GLenum DEPTH_COMPONENT16              = 0x81A5;
-    const GLenum STENCIL_INDEX                  = 0x1901;
     const GLenum STENCIL_INDEX8                 = 0x8D48;
     const GLenum DEPTH_STENCIL                  = 0x84F9;
 
@@ -473,12 +471,12 @@
     readonly attribute GLsizei drawingBufferHeight;
 
     void activeTexture(GLenum texture);
-    [CallWith=ScriptState] void attachShader(WebGLProgram? program, WebGLShader? shader);
-    void bindAttribLocation(WebGLProgram? program, GLuint index, DOMString name);
-    [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 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);
     void blendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
     void blendEquation(GLenum mode);
     void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
@@ -487,10 +485,10 @@
     // FIXME: should be union type
     // https://www.khronos.org/bugzilla/show_bug.cgi?id=1172
     void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
-    void bufferData(GLenum target, ArrayBufferView data, GLenum usage);
+    void bufferData(GLenum target, [AllowShared] ArrayBufferView data, GLenum usage);
     void bufferData(GLenum target, ArrayBuffer? data, GLenum usage);
     void bufferSubData(GLenum target, GLintptr offset, [FlexibleArrayBufferView] ArrayBufferView data);
-    void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer? data);
+    void bufferSubData(GLenum target, GLintptr offset, ArrayBuffer data);
 
     GLenum checkFramebufferStatus(GLenum target);
     void clear(GLbitfield mask);
@@ -498,12 +496,12 @@
     void clearDepth(GLclampf depth);
     void clearStencil(GLint s);
     void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
-    void compileShader(WebGLShader? shader);
+    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, [AllowShared] 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, [AllowShared] 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);
@@ -527,7 +525,7 @@
     void depthFunc(GLenum func);
     void depthMask(GLboolean flag);
     void depthRange(GLclampf zNear, GLclampf zFar);
-    [CallWith=ScriptState] void detachShader(WebGLProgram? program, WebGLShader? shader);
+    void detachShader(WebGLProgram program, WebGLShader shader);
     void disable(GLenum cap);
     void disableVertexAttribArray(GLuint index);
     void drawArrays(GLenum mode, GLint first, GLsizei count);
@@ -537,17 +535,17 @@
     void enableVertexAttribArray(GLuint index);
     void finish();
     void flush();
-    [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 framebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, WebGLRenderbuffer? renderbuffer);
+    void framebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, WebGLTexture? texture, GLint level);
     void frontFace(GLenum mode);
     void generateMipmap(GLenum target);
 
-    WebGLActiveInfo getActiveAttrib(WebGLProgram? program, GLuint index);
-    WebGLActiveInfo getActiveUniform(WebGLProgram? program, GLuint index);
+    WebGLActiveInfo getActiveAttrib(WebGLProgram program, GLuint index);
+    WebGLActiveInfo getActiveUniform(WebGLProgram program, GLuint index);
 
-    sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);
+    sequence<WebGLShader>? getAttachedShaders(WebGLProgram program);
 
-    GLint getAttribLocation(WebGLProgram? program, DOMString name);
+    GLint getAttribLocation(WebGLProgram program, DOMString name);
 
     [CallWith=ScriptState] any getBufferParameter(GLenum target, GLenum pname);
 
@@ -559,24 +557,24 @@
 
     [CallWith=ScriptState] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
     [CallWith=ScriptState] any getParameter(GLenum pname);
-    [CallWith=ScriptState] any getProgramParameter(WebGLProgram? program, GLenum pname);
-    DOMString? getProgramInfoLog(WebGLProgram? program);
+    [CallWith=ScriptState] any getProgramParameter(WebGLProgram program, GLenum pname);
+    DOMString? getProgramInfoLog(WebGLProgram program);
     [CallWith=ScriptState] any getRenderbufferParameter(GLenum target, GLenum pname);
-    [CallWith=ScriptState] any getShaderParameter(WebGLShader? shader, GLenum pname);
+    [CallWith=ScriptState] any getShaderParameter(WebGLShader shader, GLenum pname);
 
-    DOMString?   getShaderInfoLog(WebGLShader? shader);
+    DOMString?   getShaderInfoLog(WebGLShader shader);
 
     WebGLShaderPrecisionFormat getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
 
-    DOMString?   getShaderSource(WebGLShader? shader);
+    DOMString?   getShaderSource(WebGLShader shader);
 
     sequence<DOMString>? getSupportedExtensions();
 
     [CallWith=ScriptState] any getTexParameter(GLenum target, GLenum pname);
 
-    [CallWith=ScriptState] any getUniform(WebGLProgram? program, WebGLUniformLocation? location);
+    [CallWith=ScriptState] any getUniform(WebGLProgram program, WebGLUniformLocation location);
 
-    WebGLUniformLocation getUniformLocation(WebGLProgram? program, DOMString name);
+    WebGLUniformLocation getUniformLocation(WebGLProgram program, DOMString name);
 
     [CallWith=ScriptState] any getVertexAttrib(GLuint index, GLenum pname);
 
@@ -592,16 +590,16 @@
     GLboolean isShader(WebGLShader? shader);
     GLboolean isTexture(WebGLTexture? texture);
     void lineWidth(GLfloat width);
-    void linkProgram(WebGLProgram? program);
+    void linkProgram(WebGLProgram program);
     void pixelStorei(GLenum pname, GLint param);
     void polygonOffset(GLfloat factor, GLfloat units);
 
-    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView? pixels);
+    void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
 
     void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
     void sampleCoverage(GLclampf value, GLboolean invert);
     void scissor(GLint x, GLint y, GLsizei width, GLsizei height);
-    void shaderSource(WebGLShader? shader, DOMString string);
+    void shaderSource(WebGLShader shader, DOMString string);
     void stencilFunc(GLenum func, GLint ref, GLuint mask);
     void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
     void stencilMask(GLuint mask);
@@ -618,17 +616,17 @@
     void texImage2D(
         GLenum target, GLint level, GLint internalformat,
         GLsizei width, GLsizei height, GLint border,
-        GLenum format, GLenum type, ArrayBufferView? pixels);
+        GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
     void texImage2D(
         GLenum target, GLint level, GLint internalformat,
-        GLenum format, GLenum type, ImageData? pixels);
-    [RaisesException] void texImage2D(
+        GLenum format, GLenum type, ImageData pixels);
+    [CallWith=ExecutionContext, RaisesException] void texImage2D(
         GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLImageElement image);
-    [RaisesException] void texImage2D(
+    [CallWith=ExecutionContext, RaisesException] void texImage2D(
         GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLCanvasElement canvas);
-    [RaisesException] void texImage2D(
+    [CallWith=ExecutionContext, RaisesException] void texImage2D(
         GLenum target, GLint level, GLint internalformat,
         GLenum format, GLenum type, HTMLVideoElement video);
     [RaisesException] void texImage2D(
@@ -638,17 +636,17 @@
     void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLsizei width, GLsizei height,
-        GLenum format, GLenum type, ArrayBufferView? pixels);
+        GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
     void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
-        GLenum format, GLenum type, ImageData? pixels);
-    [RaisesException] void texSubImage2D(
+        GLenum format, GLenum type, ImageData pixels);
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLenum format, GLenum type, HTMLImageElement image);
-    [RaisesException] void texSubImage2D(
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLenum format, GLenum type, HTMLCanvasElement canvas);
-    [RaisesException] void texSubImage2D(
+    [CallWith=ExecutionContext, RaisesException] void texSubImage2D(
         GLenum target, GLint level, GLint xoffset, GLint yoffset,
         GLenum format, GLenum type, HTMLVideoElement video);
     [RaisesException] void texSubImage2D(
@@ -680,30 +678,32 @@
     void uniform4iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v);
     void uniform4iv(WebGLUniformLocation? location, sequence<GLint> v);
 
-    void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+    void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array);
     void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array);
-    void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+    void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array);
     void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array);
-    void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, Float32Array array);
+    void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array);
     void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array);
 
-    [CallWith=ScriptState] void useProgram(WebGLProgram? program);
-    void validateProgram(WebGLProgram? program);
+    void useProgram(WebGLProgram? program);
+    void validateProgram(WebGLProgram program);
 
     void vertexAttrib1f(GLuint indx, GLfloat x);
-    void vertexAttrib1fv(GLuint indx, Float32Array values);
+    void vertexAttrib1fv(GLuint indx, [AllowShared] Float32Array values);
     void vertexAttrib1fv(GLuint indx, sequence<GLfloat> values);
     void vertexAttrib2f(GLuint indx, GLfloat x, GLfloat y);
-    void vertexAttrib2fv(GLuint indx, Float32Array values);
+    void vertexAttrib2fv(GLuint indx, [AllowShared] Float32Array values);
     void vertexAttrib2fv(GLuint indx, sequence<GLfloat> values);
     void vertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z);
-    void vertexAttrib3fv(GLuint indx, Float32Array values);
+    void vertexAttrib3fv(GLuint indx, [AllowShared] Float32Array values);
     void vertexAttrib3fv(GLuint indx, sequence<GLfloat> values);
     void vertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-    void vertexAttrib4fv(GLuint indx, Float32Array values);
+    void vertexAttrib4fv(GLuint indx, [AllowShared] Float32Array values);
     void vertexAttrib4fv(GLuint indx, sequence<GLfloat> values);
-    [CallWith=ScriptState] void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized,
+    void vertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized,
                                                     GLsizei stride, GLintptr offset);
 
     void viewport(GLint x, GLint y, GLsizei width, GLsizei height);
+
+    [RuntimeEnabled=ExperimentalCanvasFeatures, CallWith=ScriptState, RaisesException] Promise commit();
 };
diff --git a/modules/webgl/WebGLSampler.idl b/modules/webgl/WebGLSampler.idl
index 30e10e2..4ade792 100644
--- a/modules/webgl/WebGLSampler.idl
+++ b/modules/webgl/WebGLSampler.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.3
+
 [
-    RuntimeEnabled=UnsafeES3APIs,
-    GarbageCollected
+    DependentLifetime
 ] interface WebGLSampler {
 };
diff --git a/modules/webgl/WebGLShader.idl b/modules/webgl/WebGLShader.idl
index 2d17020..c40b939 100644
--- a/modules/webgl/WebGLShader.idl
+++ b/modules/webgl/WebGLShader.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.8
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLShader {
 };
diff --git a/modules/webgl/WebGLShaderPrecisionFormat.idl b/modules/webgl/WebGLShaderPrecisionFormat.idl
index 20364ed..e80b1e4 100644
--- a/modules/webgl/WebGLShaderPrecisionFormat.idl
+++ b/modules/webgl/WebGLShaderPrecisionFormat.idl
@@ -24,9 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface WebGLShaderPrecisionFormat {
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.12
+
+interface WebGLShaderPrecisionFormat {
     readonly attribute long rangeMin;
     readonly attribute long rangeMax;
     readonly attribute long precision;
diff --git a/modules/webgl/WebGLSync.idl b/modules/webgl/WebGLSync.idl
index 1ba4a8e..bf464c2 100644
--- a/modules/webgl/WebGLSync.idl
+++ b/modules/webgl/WebGLSync.idl
@@ -2,8 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-[
-    RuntimeEnabled=UnsafeES3APIs,
-    GarbageCollected
-] interface WebGLSync {
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.4
+
+interface WebGLSync {
 };
diff --git a/modules/webgl/WebGLTexture.idl b/modules/webgl/WebGLTexture.idl
index 850e448..f08f1c4 100644
--- a/modules/webgl/WebGLTexture.idl
+++ b/modules/webgl/WebGLTexture.idl
@@ -23,7 +23,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.9
+
 [
-    GarbageCollected,
+    DependentLifetime
 ] interface WebGLTexture {
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute unsigned long lastUploadedVideoWidth;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute unsigned long lastUploadedVideoHeight;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute double lastUploadedVideoTimestamp;
+    [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute boolean lastUploadedVideoFrameWasSkipped;
 };
diff --git a/modules/webgl/WebGLTimerQueryEXT.idl b/modules/webgl/WebGLTimerQueryEXT.idl
index d6223da..f73eac5 100644
--- a/modules/webgl/WebGLTimerQueryEXT.idl
+++ b/modules/webgl/WebGLTimerQueryEXT.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface WebGLTimerQueryEXT {
 };
diff --git a/modules/webgl/WebGLTransformFeedback.idl b/modules/webgl/WebGLTransformFeedback.idl
index 88f4617..7cf7126 100644
--- a/modules/webgl/WebGLTransformFeedback.idl
+++ b/modules/webgl/WebGLTransformFeedback.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.5
+
 [
-    RuntimeEnabled=UnsafeES3APIs,
-    GarbageCollected
+    DependentLifetime
 ] interface WebGLTransformFeedback {
 };
diff --git a/modules/webgl/WebGLUniformLocation.idl b/modules/webgl/WebGLUniformLocation.idl
index dd6a43e..5d273d3 100644
--- a/modules/webgl/WebGLUniformLocation.idl
+++ b/modules/webgl/WebGLUniformLocation.idl
@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    GarbageCollected,
-] interface WebGLUniformLocation {
+// https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.10
+
+interface WebGLUniformLocation {
 };
diff --git a/modules/webgl/WebGLVertexArrayObject.idl b/modules/webgl/WebGLVertexArrayObject.idl
index 4a29ca9..ec3f3ad 100644
--- a/modules/webgl/WebGLVertexArrayObject.idl
+++ b/modules/webgl/WebGLVertexArrayObject.idl
@@ -2,8 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.6
+
 [
-    RuntimeEnabled=UnsafeES3APIs,
-    GarbageCollected
+    DependentLifetime
 ] interface WebGLVertexArrayObject {
 };
diff --git a/modules/webgl/WebGLVertexArrayObjectOES.idl b/modules/webgl/WebGLVertexArrayObjectOES.idl
index e1a533f..fb85de4 100644
--- a/modules/webgl/WebGLVertexArrayObjectOES.idl
+++ b/modules/webgl/WebGLVertexArrayObjectOES.idl
@@ -23,8 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/
+
 [
-    NoInterfaceObject,
-    GarbageCollected,
+    NoInterfaceObject
 ] interface WebGLVertexArrayObjectOES {
 };
diff --git a/modules/webmidi/MIDIAccess.idl b/modules/webmidi/MIDIAccess.idl
index 7cebf53..0216c51 100644
--- a/modules/webmidi/MIDIAccess.idl
+++ b/modules/webmidi/MIDIAccess.idl
@@ -28,8 +28,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://webaudio.github.io/web-midi-api/#MIDIAccess
+
 [
-    DependentLifetime,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface MIDIAccess : EventTarget {
     readonly attribute MIDIInputMap inputs;
     readonly attribute MIDIOutputMap outputs;
diff --git a/modules/webmidi/MIDIConnectionEvent.idl b/modules/webmidi/MIDIConnectionEvent.idl
index 73a77a3..a63c289 100644
--- a/modules/webmidi/MIDIConnectionEvent.idl
+++ b/modules/webmidi/MIDIConnectionEvent.idl
@@ -28,10 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIConnectionEvent
+// https://webaudio.github.io/web-midi-api/#MIDIConnectionEvent
 
 [
-    Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict),
+    Constructor(DOMString type, optional MIDIConnectionEventInit eventInitDict)
 ] interface MIDIConnectionEvent : Event {
     readonly attribute MIDIPort port;
 };
diff --git a/modules/webmidi/MIDIConnectionEventInit.idl b/modules/webmidi/MIDIConnectionEventInit.idl
index 3e539ce..a91d4f5 100644
--- a/modules/webmidi/MIDIConnectionEventInit.idl
+++ b/modules/webmidi/MIDIConnectionEventInit.idl
@@ -2,8 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIConnectionEventInit
+// https://webaudio.github.io/web-midi-api/#MIDIConnectionEventInit
 
 dictionary MIDIConnectionEventInit : EventInit {
-    MIDIPort port;
+    // TODO(foolip): |port| should be required and not nullable.
+    // https://crbug.com/647693
+    // https://github.com/WebAudio/web-midi-api/issues/168
+    MIDIPort? port;
 };
diff --git a/modules/webmidi/MIDIInput.idl b/modules/webmidi/MIDIInput.idl
index 31a0627..51e4d3e 100644
--- a/modules/webmidi/MIDIInput.idl
+++ b/modules/webmidi/MIDIInput.idl
@@ -28,8 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://webaudio.github.io/web-midi-api/#MIDIInput
+
 [
-    SetWrapperReferenceTo(MIDIAccess midiAccess),
+    DependentLifetime
 ] interface MIDIInput : MIDIPort {
     attribute EventHandler onmidimessage;
 };
diff --git a/modules/webmidi/MIDIInputMap.idl b/modules/webmidi/MIDIInputMap.idl
index 86ff124..6c0f263 100644
--- a/modules/webmidi/MIDIInputMap.idl
+++ b/modules/webmidi/MIDIInputMap.idl
@@ -2,12 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// FIXME: Implement forEach.
-// callback ForEachCallback = void(DOMString id, MIDIInput port);
+// https://webaudio.github.io/web-midi-api/#MIDIInput
 
-[
-    GarbageCollected,
-] interface MIDIInputMap {
-    readonly attribute unsigned long size;
+interface MIDIInputMap {
     readonly maplike<DOMString, MIDIInput>;
 };
diff --git a/modules/webmidi/MIDIMessageEvent.idl b/modules/webmidi/MIDIMessageEvent.idl
index bf252c0..e2f3fb2 100644
--- a/modules/webmidi/MIDIMessageEvent.idl
+++ b/modules/webmidi/MIDIMessageEvent.idl
@@ -28,11 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIMessageEvent
+// https://webaudio.github.io/web-midi-api/#MIDIMessageEvent
 
 [
-    Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict),
+    Constructor(DOMString type, optional MIDIMessageEventInit eventInitDict)
 ] interface MIDIMessageEvent : Event {
-    readonly attribute double receivedTime;
     readonly attribute Uint8Array data;
 };
diff --git a/modules/webmidi/MIDIMessageEventInit.idl b/modules/webmidi/MIDIMessageEventInit.idl
index 4c9e046..2e2ecc8 100644
--- a/modules/webmidi/MIDIMessageEventInit.idl
+++ b/modules/webmidi/MIDIMessageEventInit.idl
@@ -2,9 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://webaudio.github.io/web-midi-api/#idl-def-MIDIMessageEventInit
+// https://webaudio.github.io/web-midi-api/#MIDIMessageEventInit
 
 dictionary MIDIMessageEventInit : EventInit {
-    double receivedTime;
-    Uint8Array data;
+    // TODO(foolip): |data| should be required and not nullable.
+    // https://crbug.com/647693
+    // https://github.com/WebAudio/web-midi-api/issues/168
+    Uint8Array? data;
 };
diff --git a/modules/webmidi/MIDIOptions.idl b/modules/webmidi/MIDIOptions.idl
index 9df8a96..3136fc6 100644
--- a/modules/webmidi/MIDIOptions.idl
+++ b/modules/webmidi/MIDIOptions.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://www.w3.org/TR/webmidi/#midioptions-dictionary
+// https://webaudio.github.io/web-midi-api/#MIDIOptions
 
 dictionary MIDIOptions {
     boolean sysex;
diff --git a/modules/webmidi/MIDIOutput.idl b/modules/webmidi/MIDIOutput.idl
index 58a8635..4289366 100644
--- a/modules/webmidi/MIDIOutput.idl
+++ b/modules/webmidi/MIDIOutput.idl
@@ -28,11 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/webmidi/#idl-def-MIDIOutput
-// http://cwilso.github.io/web-midi-api/#idl-def-MIDIOutput
+// https://webaudio.github.io/web-midi-api/#MIDIOutput
 
 [
-    SetWrapperReferenceTo(MIDIAccess midiAccess),
+    DependentLifetime
 ] interface MIDIOutput : MIDIPort {
     // TODO(toyoshim): implement void clear()
     [RaisesException] void send(Uint8Array data, optional double timestamp);
diff --git a/modules/webmidi/MIDIOutputMap.idl b/modules/webmidi/MIDIOutputMap.idl
index 546f074..63edbaf 100644
--- a/modules/webmidi/MIDIOutputMap.idl
+++ b/modules/webmidi/MIDIOutputMap.idl
@@ -2,12 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// FIXME: Implement forEach.
-// callback ForEachCallback = void(DOMString id, MIDIOutput port);
+// https://webaudio.github.io/web-midi-api/#MIDIOutputMap
 
-[
-    GarbageCollected,
-] interface MIDIOutputMap {
-    readonly attribute unsigned long size;
+interface MIDIOutputMap {
     readonly maplike<DOMString, MIDIOutput>;
 };
diff --git a/modules/webmidi/MIDIPort.idl b/modules/webmidi/MIDIPort.idl
index 0f44867..c0e1fc4 100644
--- a/modules/webmidi/MIDIPort.idl
+++ b/modules/webmidi/MIDIPort.idl
@@ -28,25 +28,33 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// https://webaudio.github.io/web-midi-api/#idl-def-MIDIPortConnectionState
+
 enum MIDIPortConnectionState {
     "open",
     "closed",
     "pending"
 };
 
+// https://webaudio.github.io/web-midi-api/#idl-def-MIDIPortDeviceState
+
 enum MIDIPortDeviceState {
     "disconnected",
     "connected"
 };
 
+// https://webaudio.github.io/web-midi-api/#idl-def-MIDIPortType
+
 enum MIDIPortType {
     "input",
     "output"
 };
 
+// https://webaudio.github.io/web-midi-api/#MIDIPort
+
 [
-    DependentLifetime,
-    GarbageCollected,
+    ActiveScriptWrappable,
+    DependentLifetime
 ] interface MIDIPort : EventTarget {
     readonly attribute MIDIPortConnectionState connection;
     readonly attribute DOMString id;
diff --git a/modules/webmidi/NavigatorWebMIDI.idl b/modules/webmidi/NavigatorWebMIDI.idl
index 6f4f7b5..da51aec 100644
--- a/modules/webmidi/NavigatorWebMIDI.idl
+++ b/modules/webmidi/NavigatorWebMIDI.idl
@@ -28,6 +28,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-partial interface Navigator {
-    [CallWith=ScriptState, MeasureAs=RequestMIDIAccess] Promise requestMIDIAccess(optional MIDIOptions options);
+// https://webaudio.github.io/web-midi-api/#requestMIDIAccess
+
+[
+  ImplementedAs=NavigatorWebMIDI
+] partial interface Navigator {
+  [
+    CallWith = ScriptState, MeasureAs = RequestMIDIAccess_ObscuredByFootprinting
+  ] Promise
+  requestMIDIAccess(optional MIDIOptions options);
 };
diff --git a/modules/webshare/NavigatorShare.idl b/modules/webshare/NavigatorShare.idl
new file mode 100644
index 0000000..75f5b90
--- /dev/null
+++ b/modules/webshare/NavigatorShare.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/web-share/
+
+[
+  ImplementedAs=NavigatorShare,
+  RuntimeEnabled=WebShare
+] partial interface Navigator {
+  [SecureContext, CallWith=ScriptState, MeasureAs=WebShareShare]
+  Promise<void> share(optional ShareData data);
+};
diff --git a/modules/webshare/ShareData.idl b/modules/webshare/ShareData.idl
new file mode 100644
index 0000000..3911fe7
--- /dev/null
+++ b/modules/webshare/ShareData.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://wicg.github.io/web-share/
+
+dictionary ShareData {
+  USVString title;
+  USVString text;
+  USVString url;
+};
diff --git a/modules/websockets/CloseEvent.idl b/modules/websockets/CloseEvent.idl
index 7371ad9..a9d727d 100644
--- a/modules/websockets/CloseEvent.idl
+++ b/modules/websockets/CloseEvent.idl
@@ -32,7 +32,7 @@
 
 [
     Constructor(DOMString type, optional CloseEventInit eventInitDict),
-    Exposed=(Window,Worker),
+    Exposed=(Window,Worker)
 ] interface CloseEvent : Event {
     readonly attribute boolean wasClean;
     readonly attribute unsigned short code;
diff --git a/modules/websockets/WebSocket.idl b/modules/websockets/WebSocket.idl
index ee12816..852894e 100644
--- a/modules/websockets/WebSocket.idl
+++ b/modules/websockets/WebSocket.idl
@@ -34,13 +34,13 @@
 enum BinaryType { "blob", "arraybuffer" };
 
 [
-    DependentLifetime,
+    ActiveScriptWrappable,
     Constructor(DOMString url, optional (DOMString or sequence<DOMString>) protocols),
     ConstructorCallWith=ExecutionContext,
+    DependentLifetime,
     Exposed=(Window,Worker),
-    RaisesException=Constructor,
-    GarbageCollected,
     ImplementedAs=DOMWebSocket,
+    RaisesException=Constructor
 ] interface WebSocket : EventTarget {
     readonly attribute DOMString url;
 
@@ -58,7 +58,7 @@
     attribute EventHandler onclose;
     readonly attribute DOMString extensions;
     readonly attribute DOMString protocol;
-    [RaisesException] void close([Clamp] optional unsigned short code, optional USVString reason);
+    [RaisesException] void close(optional [Clamp] unsigned short code, optional USVString reason);
 
     // messaging
     attribute EventHandler onmessage;
diff --git a/modules/webusb/NavigatorUSB.idl b/modules/webusb/NavigatorUSB.idl
index d916a0e..02febf2 100644
--- a/modules/webusb/NavigatorUSB.idl
+++ b/modules/webusb/NavigatorUSB.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://wicg.github.io/webusb/#device-enumeration
+// https://wicg.github.io/webusb/#enumeration
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    ImplementedAs=NavigatorUSB
 ] partial interface Navigator {
-    readonly attribute USB usb;
+    [SecureContext, RuntimeEnabled=WebUSB] readonly attribute USB usb;
 };
diff --git a/modules/webusb/USB.idl b/modules/webusb/USB.idl
index 2c7489c..81f8af5 100644
--- a/modules/webusb/USB.idl
+++ b/modules/webusb/USB.idl
@@ -2,15 +2,13 @@
 // 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
+// https://wicg.github.io/webusb/#usb
 
 [
-    GarbageCollected,
-    NoInterfaceObject,
-    RuntimeEnabled=WebUSB,
+    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);
+    [CallWith=ScriptState, MeasureAs=UsbGetDevices] Promise<sequence<USBDevice>> getDevices();
+    [CallWith=ScriptState, MeasureAs=UsbRequestDevice] Promise<sequence<USBDevice>> requestDevice(USBDeviceRequestOptions options);
 };
diff --git a/modules/webusb/USBAlternateInterface.idl b/modules/webusb/USBAlternateInterface.idl
index cbf37fa..d951461 100644
--- a/modules/webusb/USBAlternateInterface.idl
+++ b/modules/webusb/USBAlternateInterface.idl
@@ -2,18 +2,17 @@
 // 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
+// https://wicg.github.io/webusb/#interfaces
 
 [
     Constructor(USBInterface deviceInterface, octet alternateSetting),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    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;
+    readonly attribute FrozenArray<USBEndpoint> endpoints;
 };
diff --git a/modules/webusb/USBConfiguration.idl b/modules/webusb/USBConfiguration.idl
index 3cd0ec9..48b7c33 100644
--- a/modules/webusb/USBConfiguration.idl
+++ b/modules/webusb/USBConfiguration.idl
@@ -2,15 +2,14 @@
 // 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
+// https://wicg.github.io/webusb/#configurations
 
 [
     Constructor(USBDevice device, octet configurationValue),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    RuntimeEnabled=WebUSB
 ] interface USBConfiguration {
     readonly attribute octet configurationValue;
     readonly attribute DOMString? configurationName;
-    readonly attribute sequence<USBInterface> interfaces;
+    readonly attribute FrozenArray<USBInterface> interfaces;
 };
diff --git a/modules/webusb/USBConnectionEvent.idl b/modules/webusb/USBConnectionEvent.idl
index beaba0e..b0865a7 100644
--- a/modules/webusb/USBConnectionEvent.idl
+++ b/modules/webusb/USBConnectionEvent.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://wicg.github.io/webusb/#events
+// https://wicg.github.io/webusb/#events
 
 [
-    Constructor(DOMString type, optional USBConnectionEventInit eventInitDict),
-    RuntimeEnabled=WebUSB,
+    Constructor(DOMString type, USBConnectionEventInit eventInitDict),
+    RuntimeEnabled=WebUSB
 ] interface USBConnectionEvent : Event {
-    readonly attribute USBDevice device;
+    [SameObject] readonly attribute USBDevice device;
 };
diff --git a/modules/webusb/USBConnectionEventInit.idl b/modules/webusb/USBConnectionEventInit.idl
index 797cf73..abb2b85 100644
--- a/modules/webusb/USBConnectionEventInit.idl
+++ b/modules/webusb/USBConnectionEventInit.idl
@@ -2,8 +2,8 @@
 // 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
+// https://wicg.github.io/webusb/#events
 
 dictionary USBConnectionEventInit : EventInit {
-    USBDevice device;
+    required USBDevice device;
 };
diff --git a/modules/webusb/USBDevice.idl b/modules/webusb/USBDevice.idl
index 6d38461..def29e3 100644
--- a/modules/webusb/USBDevice.idl
+++ b/modules/webusb/USBDevice.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://wicg.github.io/webusb/#idl-def-usbtransferstatus
+// https://wicg.github.io/webusb/#transfers
 
 enum USBTransferStatus {
     "ok",
@@ -10,13 +10,11 @@
     "babble"
 };
 
-// http://wicg.github.io/webusb/#device-usage
+// https://wicg.github.io/webusb/#device-usage
 
 [
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    RuntimeEnabled=WebUSB
 ] interface USBDevice {
-    readonly attribute DOMString guid;
     readonly attribute octet usbVersionMajor;
     readonly attribute octet usbVersionMinor;
     readonly attribute octet usbVersionSubminor;
@@ -31,21 +29,22 @@
     readonly attribute DOMString? manufacturerName;
     readonly attribute DOMString? productName;
     readonly attribute DOMString? serialNumber;
-    readonly attribute sequence<USBConfiguration> configurations;
+    readonly attribute USBConfiguration? configuration;
+    readonly attribute FrozenArray<USBConfiguration> configurations;
+    readonly attribute boolean opened;
 
-    [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();
+    [CallWith=ScriptState, MeasureAs=UsbDeviceOpen] Promise<void> open();
+    [CallWith=ScriptState, MeasureAs=UsbDeviceClose] Promise<void> close();
+    [CallWith=ScriptState, MeasureAs=UsbDeviceSelectConfiguration] Promise<void> selectConfiguration(octet configurationValue);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceClaimInterface] Promise<void> claimInterface(octet interfaceNumber);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceReleaseInterface] Promise<void> releaseInterface(octet interfaceNumber);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceSelectAlternateInterface] Promise<void> selectAlternateInterface(octet interfaceNumber, octet alternateSetting);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceControlTransferIn] Promise<USBInTransferResult> controlTransferIn(USBControlTransferParameters setup, unsigned short length);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceControlTransferOut] Promise<USBOutTransferResult> controlTransferOut(USBControlTransferParameters setup, optional BufferSource data);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceClearHalt] Promise<void> clearHalt(USBDirection direction, octet endpointNumber);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceTransferIn] Promise<USBInTransferResult> transferIn(octet endpointNumber, unsigned long length);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceTransferOut] Promise<USBOutTransferResult> transferOut(octet endpointNumber, BufferSource data);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceIsochronousTransferIn] Promise<USBIsochronousInTransferResult>  isochronousTransferIn(octet endpointNumber, sequence<unsigned long> packetLengths);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceIsochronousTransferOut] Promise<UsbIsochronousOutTransferResult> isochronousTransferOut(octet endpointNumber, BufferSource data, sequence<unsigned long> packetLengths);
+    [CallWith=ScriptState, MeasureAs=UsbDeviceReset] Promise<void> reset();
 };
diff --git a/modules/webusb/USBDeviceFilter.idl b/modules/webusb/USBDeviceFilter.idl
index 5d59379..9b4c641 100644
--- a/modules/webusb/USBDeviceFilter.idl
+++ b/modules/webusb/USBDeviceFilter.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://wicg.github.io/webusb/#device-enumeration
+// https://wicg.github.io/webusb/#enumeration
 
 dictionary USBDeviceFilter {
     unsigned short vendorId;
@@ -10,4 +10,5 @@
     octet classCode;
     octet subclassCode;
     octet protocolCode;
+    DOMString serialNumber;
 };
diff --git a/modules/webusb/USBDeviceRequestOptions.idl b/modules/webusb/USBDeviceRequestOptions.idl
index eea3c39..d0ddda7 100644
--- a/modules/webusb/USBDeviceRequestOptions.idl
+++ b/modules/webusb/USBDeviceRequestOptions.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://wicg.github.io/webusb/#device-enumeration
+// https://wicg.github.io/webusb/#enumeration
 
 dictionary USBDeviceRequestOptions {
     required sequence<USBDeviceFilter> filters;
diff --git a/modules/webusb/USBEndpoint.idl b/modules/webusb/USBEndpoint.idl
index 9124e6d..07b815b 100644
--- a/modules/webusb/USBEndpoint.idl
+++ b/modules/webusb/USBEndpoint.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://wicg.github.io/webusb/#endpoints
+// https://wicg.github.io/webusb/#endpoints
 
 enum USBDirection {
     "in",
@@ -18,8 +18,7 @@
 [
     Constructor(USBAlternateInterface alternate, octet endpointNumber, USBDirection direction),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    RuntimeEnabled=WebUSB
 ] interface USBEndpoint {
     readonly attribute octet endpointNumber;
     readonly attribute USBDirection direction;
diff --git a/modules/webusb/USBInTransferResult.idl b/modules/webusb/USBInTransferResult.idl
index 2251b1d..e8b950b 100644
--- a/modules/webusb/USBInTransferResult.idl
+++ b/modules/webusb/USBInTransferResult.idl
@@ -2,12 +2,12 @@
 // 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
+// https://wicg.github.io/webusb/#usbintransferresult
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(USBTransferStatus status, optional DataView? data)
 ] interface USBInTransferResult {
-    readonly attribute DataView data;
+    readonly attribute DataView? data;
     readonly attribute USBTransferStatus status;
 };
diff --git a/modules/webusb/USBInterface.idl b/modules/webusb/USBInterface.idl
index 54e3734..3768cd5 100644
--- a/modules/webusb/USBInterface.idl
+++ b/modules/webusb/USBInterface.idl
@@ -2,14 +2,15 @@
 // 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
+// https://wicg.github.io/webusb/#interfaces
 
 [
     Constructor(USBConfiguration configuration, octet interfaceNumber),
     RaisesException=Constructor,
-    GarbageCollected,
-    RuntimeEnabled=WebUSB,
+    RuntimeEnabled=WebUSB
 ] interface USBInterface {
     readonly attribute octet interfaceNumber;
-    readonly attribute sequence<USBAlternateInterface> alternates;
+    readonly attribute USBAlternateInterface? alternate;
+    readonly attribute FrozenArray<USBAlternateInterface> alternates;
+    readonly attribute boolean claimed;
 };
diff --git a/modules/webusb/USBIsochronousInTransferPacket.idl b/modules/webusb/USBIsochronousInTransferPacket.idl
index 3129bde..7bca63a 100644
--- a/modules/webusb/USBIsochronousInTransferPacket.idl
+++ b/modules/webusb/USBIsochronousInTransferPacket.idl
@@ -2,12 +2,12 @@
 // 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
+// https://wicg.github.io/webusb/#usbisochronousintransferpacket
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(USBTransferStatus status, optional DataView? data)
 ] interface USBIsochronousInTransferPacket {
     readonly attribute USBTransferStatus status;
-    readonly attribute DataView data;
+    readonly attribute DataView? data;
 };
diff --git a/modules/webusb/USBIsochronousInTransferResult.idl b/modules/webusb/USBIsochronousInTransferResult.idl
index 139856f..e0120ee 100644
--- a/modules/webusb/USBIsochronousInTransferResult.idl
+++ b/modules/webusb/USBIsochronousInTransferResult.idl
@@ -2,12 +2,13 @@
 // 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
+// https://wicg.github.io/webusb/#usbisochronousintransferresult
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(sequence<USBIsochronousInTransferPacket> packets,
+                optional DataView? data)
 ] interface USBIsochronousInTransferResult {
-    readonly attribute DataView data;
-    readonly attribute sequence<USBIsochronousInTransferPacket> packets;
+    readonly attribute DataView? data;
+    readonly attribute FrozenArray<USBIsochronousInTransferPacket> packets;
 };
diff --git a/modules/webusb/USBIsochronousOutTransferPacket.idl b/modules/webusb/USBIsochronousOutTransferPacket.idl
index c6789c3..5c9da5f 100644
--- a/modules/webusb/USBIsochronousOutTransferPacket.idl
+++ b/modules/webusb/USBIsochronousOutTransferPacket.idl
@@ -2,12 +2,12 @@
 // 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
+// https://wicg.github.io/webusb/#usbisochronousouttransferpacket
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0)
 ] interface USBIsochronousOutTransferPacket {
-    readonly attribute USBTransferStatus status;
     readonly attribute unsigned long bytesWritten;
+    readonly attribute USBTransferStatus status;
 };
diff --git a/modules/webusb/USBIsochronousOutTransferResult.idl b/modules/webusb/USBIsochronousOutTransferResult.idl
index aebd8e1..2acee95 100644
--- a/modules/webusb/USBIsochronousOutTransferResult.idl
+++ b/modules/webusb/USBIsochronousOutTransferResult.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// https://wicg.github.io/webusb/#idl-def-usbisochronousouttransferresult
+// https://wicg.github.io/webusb/#usbisochronousouttransferresult
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(sequence<USBIsochronousOutTransferPacket> packets)
 ] interface USBIsochronousOutTransferResult {
-    readonly attribute sequence<USBIsochronousOutTransferPacket> packets;
+    readonly attribute FrozenArray<USBIsochronousOutTransferPacket> packets;
 };
diff --git a/modules/webusb/USBOutTransferResult.idl b/modules/webusb/USBOutTransferResult.idl
index b43587a..52caf05 100644
--- a/modules/webusb/USBOutTransferResult.idl
+++ b/modules/webusb/USBOutTransferResult.idl
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// http://wicg.github.io/webusb/#idl-def-usbouttransferresult
+// https://wicg.github.io/webusb/#usbouttransferresult
 
 [
-    GarbageCollected,
     RuntimeEnabled=WebUSB,
+    Constructor(USBTransferStatus status, optional unsigned long bytesWritten = 0)
 ] interface USBOutTransferResult {
     readonly attribute unsigned long bytesWritten;
     readonly attribute USBTransferStatus status;
diff --git a/modules/worklet/WindowWorklet.idl b/modules/worklet/WindowWorklet.idl
deleted file mode 100644
index 8b98be2..0000000
--- a/modules/worklet/WindowWorklet.idl
+++ /dev/null
@@ -1,10 +0,0 @@
-// 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
deleted file mode 100644
index 0744c69..0000000
--- a/modules/worklet/Worklet.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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
deleted file mode 100644
index f3ceb1e..0000000
--- a/modules/worklet/WorkletGlobalScope.idl
+++ /dev/null
@@ -1,13 +0,0 @@
-// 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 {
-};
