IDL roll to multivm 1266

TBR=blois

Review URL: https://codereview.appspot.com/9889044

git-svn-id: http://dart.googlecode.com/svn/third_party/WebCore@23517 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/core/README b/core/README
index 3929bfb..8d6d9a3 100644
--- a/core/README
+++ b/core/README
@@ -6,4 +6,4 @@
 
 The current version corresponds to:
 URL: http://src.chromium.org/multivm/trunk/webkit
-Current revision: 1246
+Current revision: 1266
diff --git a/core/core.gyp/scripts/action_csspropertynames.py b/core/core.gyp/scripts/action_csspropertynames.py
deleted file mode 100644
index b95540d..0000000
--- a/core/core.gyp/scripts/action_csspropertynames.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2009 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.
-#
-# action_csspropertynames.py is a harness script to connect actions sections of
-# gyp-based builds to makeprop.pl.
-#
-# usage: action_csspropertynames.py OUTPUTS -- [--defines ENABLE_FLAG1 ENABLE_FLAG2 ...] -- INPUTS
-#
-# Exactly two outputs must be specified: a path to each of CSSPropertyNames.cpp
-# and CSSPropertyNames.h.
-#
-# Multiple inputs may be specified. One input must have a basename of
-# makeprop.pl; this is taken as the path to makeprop.pl. All other inputs are
-# paths to .in files that are used as input to makeprop.pl; at least one,
-# CSSPropertyNames.in, is required.
-
-
-import os
-import posixpath
-import shlex
-import shutil
-import subprocess
-import sys
-
-
-def SplitArgsIntoSections(args):
-    sections = []
-    while len(args) > 0:
-        if not '--' in args:
-            # If there is no '--' left, everything remaining is an entire section.
-            dashes = len(args)
-        else:
-            dashes = args.index('--')
-
-        sections.append(args[:dashes])
-
-        # Next time through the loop, look at everything after this '--'.
-        if dashes + 1 == len(args):
-            # If the '--' is at the end of the list, we won't come back through the
-            # loop again. Add an empty section now corresponding to the nothingness
-            # following the final '--'.
-            args = []
-            sections.append(args)
-        else:
-            args = args[dashes + 1:]
-
-    return sections
-
-
-def SplitDefines(options):
-    # The defines come in as one flat string. Split it up into distinct arguments.
-    if '--defines' in options:
-        definesIndex = options.index('--defines')
-        if definesIndex + 1 < len(options):
-            splitOptions = shlex.split(options[definesIndex + 1])
-            if splitOptions:
-                options[definesIndex + 1] = ' '.join(splitOptions)
-
-def main(args):
-    outputs, options, inputs = SplitArgsIntoSections(args[1:])
-
-    SplitDefines(options)
-
-    # Make all output pathnames absolute so that they can be accessed after
-    # changing directory.
-    for index in xrange(0, len(outputs)):
-        outputs[index] = os.path.abspath(outputs[index])
-
-    outputDir = os.path.dirname(outputs[0])
-
-    # Look at the inputs and figure out which one is makeprop.pl and which are
-    # inputs to that script.
-    makepropInput = None
-    inFiles = []
-    for input in inputs:
-        # Make input pathnames absolute so they can be accessed after changing
-        # directory. On Windows, convert \ to / for inputs to the perl script to
-        # work around the intermix of activepython + cygwin perl.
-        inputAbs = os.path.abspath(input)
-        inputAbsPosix = inputAbs.replace(os.path.sep, posixpath.sep)
-        inputBasename = os.path.basename(input)
-        if inputBasename == 'makeprop.pl':
-            assert makepropInput == None
-            makepropInput = inputAbs
-        elif inputBasename.endswith('.in'):
-            inFiles.append(inputAbsPosix)
-        else:
-            assert False
-
-    assert makepropInput != None
-    assert len(inFiles) >= 1
-
-    # Change to the output directory because makeprop.pl puts output in its
-    # working directory.
-    os.chdir(outputDir)
-
-    # Merge all inFiles into a single file whose name will be the same as the
-    # first listed inFile, but in the output directory.
-    mergedPath = os.path.basename(inFiles[0])
-    merged = open(mergedPath, 'wb')    # 'wb' to get \n only on windows
-
-    # Concatenate all the input files.
-    for inFilePath in inFiles:
-        inFile = open(inFilePath)
-        shutil.copyfileobj(inFile, merged)
-        inFile.close()
-
-    merged.close()
-
-    # scriptsPath is a Perl include directory, located relative to
-    # makepropInput.
-    scriptsPath = os.path.normpath(
-        os.path.join(os.path.dirname(makepropInput), os.pardir, 'scripts'))
-
-    # Build up the command.
-    command = ['perl', '-I', scriptsPath, makepropInput]
-    command.extend(options)
-
-    # Do it. checkCall is new in 2.5, so simulate its behavior with call and
-    # assert.
-    returnCode = subprocess.call(command)
-    assert returnCode == 0
-
-    # Don't leave behind the merged file or the .gperf file created by
-    # makeprop.
-    (root, ext) = os.path.splitext(mergedPath)
-    gperfPath = root + '.gperf'
-    os.unlink(gperfPath)
-    os.unlink(mergedPath)
-
-    # Go through the outputs. Any output that belongs in a different directory
-    # is moved. Do a copy and delete instead of rename for maximum portability.
-    # Note that all paths used in this section are still absolute.
-    for output in outputs:
-        thisOutputDir = os.path.dirname(output)
-        if thisOutputDir != outputDir:
-            outputBasename = os.path.basename(output)
-            src = os.path.join(outputDir, outputBasename)
-            dst = os.path.join(thisOutputDir, outputBasename)
-            shutil.copyfile(src, dst)
-            os.unlink(src)
-
-    return returnCode
-
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/core/core.gyp/scripts/action_cssvaluekeywords.py b/core/core.gyp/scripts/action_cssvaluekeywords.py
deleted file mode 100644
index 8232fb4..0000000
--- a/core/core.gyp/scripts/action_cssvaluekeywords.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2009 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) 2009 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# action_cssvaluekeywords.py is a harness script to connect actions sections of
-# gyp-based builds to makevalues.pl.
-#
-# usage: action_cssvaluekeywords.py OUTPUTS -- [--defines ENABLE_FLAG1 ENABLE_FLAG2 ...] -- INPUTS
-#
-# Exactly two outputs must be specified: a path to each of CSSValueKeywords.c
-# and CSSValueKeywords.h.
-#
-# Multiple inputs may be specified. One input must have a basename of
-# makevalues.pl; this is taken as the path to makevalues.pl. All other inputs
-# are paths to .in files that are used as input to makevalues.pl; at least
-# one, CSSValueKeywords.in, is required.
-
-
-import os
-import posixpath
-import shlex
-import shutil
-import subprocess
-import sys
-
-
-def SplitArgsIntoSections(args):
-    sections = []
-    while len(args) > 0:
-        if not '--' in args:
-            # If there is no '--' left, everything remaining is an entire section.
-            dashes = len(args)
-        else:
-            dashes = args.index('--')
-
-        sections.append(args[:dashes])
-
-        # Next time through the loop, look at everything after this '--'.
-        if dashes + 1 == len(args):
-            # If the '--' is at the end of the list, we won't come back through the
-            # loop again. Add an empty section now corresponding to the nothingness
-            # following the final '--'.
-            args = []
-            sections.append(args)
-        else:
-            args = args[dashes + 1:]
-
-    return sections
-
-
-def SplitDefines(options):
-    # The defines come in as one flat string. Split it up into distinct arguments.
-    if '--defines' in options:
-        definesIndex = options.index('--defines')
-        if definesIndex + 1 < len(options):
-            splitOptions = shlex.split(options[definesIndex + 1])
-            if splitOptions:
-                options[definesIndex + 1] = ' '.join(splitOptions)
-
-def main(args):
-    outputs, options, inputs = SplitArgsIntoSections(args[1:])
-
-    SplitDefines(options)
-
-    # Make all output pathnames absolute so that they can be accessed after
-    # changing directory.
-    for index in xrange(0, len(outputs)):
-        outputs[index] = os.path.abspath(outputs[index])
-
-    outputDir = os.path.dirname(outputs[0])
-
-    # Look at the inputs and figure out which one is makevalues.pl and which are
-    # inputs to that script.
-    makevaluesInput = None
-    inFiles = []
-    for input in inputs:
-        # Make input pathnames absolute so they can be accessed after changing
-        # directory. On Windows, convert \ to / for inputs to the perl script to
-        # work around the intermix of activepython + cygwin perl.
-        inputAbs = os.path.abspath(input)
-        inputAbsPosix = inputAbs.replace(os.path.sep, posixpath.sep)
-        inputBasename = os.path.basename(input)
-        if inputBasename == 'makevalues.pl':
-            assert makevaluesInput == None
-            makevaluesInput = inputAbs
-        elif inputBasename.endswith('.in'):
-            inFiles.append(inputAbsPosix)
-        else:
-            assert False
-
-    assert makevaluesInput != None
-    assert len(inFiles) >= 1
-
-    # Change to the output directory because makevalues.pl puts output in its
-    # working directory.
-    os.chdir(outputDir)
-
-    # Merge all inFiles into a single file whose name will be the same as the
-    # first listed inFile, but in the output directory.
-    mergedPath = os.path.basename(inFiles[0])
-    merged = open(mergedPath, 'wb')    # 'wb' to get \n only on windows
-
-    # Concatenate all the input files.
-    for inFilePath in inFiles:
-        inFile = open(inFilePath)
-        shutil.copyfileobj(inFile, merged)
-        inFile.close()
-
-    merged.close()
-
-    # scriptsPath is a Perl include directory, located relative to
-    # makevaluesInput.
-    scriptsPath = os.path.normpath(
-        os.path.join(os.path.dirname(makevaluesInput), os.pardir, 'scripts'))
-
-    # Build up the command.
-    command = ['perl', '-I', scriptsPath, makevaluesInput]
-    command.extend(options)
-
-    # Do it. checkCall is new in 2.5, so simulate its behavior with call and
-    # assert.
-    returnCode = subprocess.call(command)
-    assert returnCode == 0
-
-    # Don't leave behind the merged file or the .gperf file created by
-    # makevalues.
-    (root, ext) = os.path.splitext(mergedPath)
-    gperfPath = root + '.gperf'
-    os.unlink(gperfPath)
-    os.unlink(mergedPath)
-
-    # Go through the outputs. Any output that belongs in a different directory
-    # is moved. Do a copy and delete instead of rename for maximum portability.
-    # Note that all paths used in this section are still absolute.
-    for output in outputs:
-        thisOutputDir = os.path.dirname(output)
-        if thisOutputDir != outputDir:
-            outputBasename = os.path.basename(output)
-            src = os.path.join(outputDir, outputBasename)
-            dst = os.path.join(thisOutputDir, outputBasename)
-            shutil.copyfile(src, dst)
-            os.unlink(src)
-
-    return returnCode
-
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/core/css/DOMWindowCSS.idl b/core/css/CSS.idl
similarity index 95%
rename from core/css/DOMWindowCSS.idl
rename to core/css/CSS.idl
index 742a152..4ba9ba7 100644
--- a/core/css/DOMWindowCSS.idl
+++ b/core/css/CSS.idl
@@ -28,11 +28,9 @@
  */
 
 [
-    InterfaceName=CSS,
-    ImplementationLacksVTable
-] interface DOMWindowCSS {
-
+    NoInterfaceObject,
+    ImplementedAs=DOMWindowCSS
+] interface CSS {
     boolean supports(DOMString property, DOMString value);
     boolean supports(DOMString conditionText);
-
 };
diff --git a/core/css/CSSFontFaceLoadEvent.idl b/core/css/CSSFontFaceLoadEvent.idl
index c4bd55e..d89e765 100644
--- a/core/css/CSSFontFaceLoadEvent.idl
+++ b/core/css/CSSFontFaceLoadEvent.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     EnabledAtRuntime=fontLoadEvents,
     ConstructorTemplate=Event
 ] interface CSSFontFaceLoadEvent : Event {
diff --git a/core/css/CSSPrimitiveValue.idl b/core/css/CSSPrimitiveValue.idl
index 8581cdb..ff49620 100644
--- a/core/css/CSSPrimitiveValue.idl
+++ b/core/css/CSSPrimitiveValue.idl
@@ -18,7 +18,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface CSSPrimitiveValue : CSSValue {
 
     // UnitTypes
diff --git a/core/css/CSSRule.idl b/core/css/CSSRule.idl
index 593305c..983a464 100644
--- a/core/css/CSSRule.idl
+++ b/core/css/CSSRule.idl
@@ -22,8 +22,7 @@
 [
     CustomToV8,
 
-    DependentLifetime,
-    SkipVTableValidation
+    DependentLifetime
 ] interface CSSRule {
 
     // RuleType
diff --git a/core/css/CSSRuleList.idl b/core/css/CSSRuleList.idl
index 0cbc656..e89a820 100644
--- a/core/css/CSSRuleList.idl
+++ b/core/css/CSSRuleList.idl
@@ -25,8 +25,7 @@
 
 // Introduced in DOM Level 2:
 [
-    DependentLifetime,
-    SkipVTableValidation
+    DependentLifetime
 ] interface CSSRuleList {
     readonly attribute unsigned long    length;
     getter CSSRule           item([Default=Undefined] optional unsigned long index);
diff --git a/core/css/CSSStyleDeclaration.idl b/core/css/CSSStyleDeclaration.idl
index be7b708..252ddcb 100644
--- a/core/css/CSSStyleDeclaration.idl
+++ b/core/css/CSSStyleDeclaration.idl
@@ -23,8 +23,7 @@
     CustomNamedSetter,
     CustomNamedGetter,
     CustomEnumerateProperty,
-    DependentLifetime,
-    SkipVTableValidation
+    DependentLifetime
 ] interface CSSStyleDeclaration {
              [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString        cssText;
 
@@ -39,9 +38,5 @@
     readonly attribute unsigned long    length;
     getter DOMString          item([Default=Undefined] optional unsigned long index);
     readonly attribute CSSRule          parentRule;
-
-    // Extensions
-    [TreatReturnedNullStringAs=Null] DOMString          getPropertyShorthand([Default=Undefined] optional DOMString propertyName);
-    boolean            isPropertyImplicit([Default=Undefined] optional DOMString propertyName);
 };
 
diff --git a/core/css/CSSStyleSheet.idl b/core/css/CSSStyleSheet.idl
index 7ab434f..62350f5 100644
--- a/core/css/CSSStyleSheet.idl
+++ b/core/css/CSSStyleSheet.idl
@@ -20,7 +20,7 @@
 
 // Introduced in DOM Level 2:
 [
-    GenerateIsReachable=ImplOwnerNodeRoot
+    GenerateIsReachable=ownerNode
 ] interface CSSStyleSheet : StyleSheet {
     readonly attribute CSSRule          ownerRule;
     readonly attribute CSSRuleList      cssRules;
diff --git a/core/css/CSSSupportsRule.idl b/core/css/CSSSupportsRule.idl
index 13e0efd..b2aa0cc 100644
--- a/core/css/CSSSupportsRule.idl
+++ b/core/css/CSSSupportsRule.idl
@@ -26,7 +26,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface CSSSupportsRule : CSSRule {
+[
+    NoInterfaceObject
+] interface CSSSupportsRule : CSSRule {
     readonly attribute CSSRuleList cssRules;
     readonly attribute DOMString conditionText;
 
diff --git a/core/css/CSSValue.idl b/core/css/CSSValue.idl
index 5440b74..e8a4a13 100644
--- a/core/css/CSSValue.idl
+++ b/core/css/CSSValue.idl
@@ -21,8 +21,7 @@
 [
     CustomToV8,
     
-    DependentLifetime,
-    ImplementationLacksVTable
+    DependentLifetime
 ] interface CSSValue {
 
     // UnitTypes
diff --git a/core/css/CSSValueList.idl b/core/css/CSSValueList.idl
index ca51d6c..7d0b63e 100644
--- a/core/css/CSSValueList.idl
+++ b/core/css/CSSValueList.idl
@@ -25,7 +25,6 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
 ] interface CSSValueList : CSSValue {
     readonly attribute unsigned long    length;
     getter CSSValue           item([Default=Undefined] optional unsigned long index);
diff --git a/core/css/Counter.idl b/core/css/Counter.idl
index aff8b56..7006aa5 100644
--- a/core/css/Counter.idl
+++ b/core/css/Counter.idl
@@ -19,7 +19,6 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
 ] interface Counter {
     readonly attribute DOMString identifier;
     readonly attribute DOMString listStyle;
diff --git a/core/css/FontLoader.idl b/core/css/FontLoader.idl
index ae6fbf1..7e7842a 100644
--- a/core/css/FontLoader.idl
+++ b/core/css/FontLoader.idl
@@ -29,10 +29,11 @@
  */
 
 [
+    NoInterfaceObject,
     EnabledAtRuntime=fontLoadEvents,
     ActiveDOMObject,
     EventTarget,
-    GenerateIsReachable=ImplDocument,
+    GenerateIsReachable=document
 ] interface FontLoader {
 
     attribute EventListener onloading;
diff --git a/core/css/MediaList.idl b/core/css/MediaList.idl
index 248a092..29cc41a 100644
--- a/core/css/MediaList.idl
+++ b/core/css/MediaList.idl
@@ -25,7 +25,6 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
 ] interface MediaList {
 
              [TreatNullAs=NullString, TreatReturnedNullStringAs=Null, SetterRaisesException] attribute DOMString mediaText;
diff --git a/core/css/MediaQueryList.idl b/core/css/MediaQueryList.idl
index 7fb2bca..7785d8d 100644
--- a/core/css/MediaQueryList.idl
+++ b/core/css/MediaQueryList.idl
@@ -17,7 +17,7 @@
  *  Boston, MA 02110-1301, USA.
  */
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface MediaQueryList {
     readonly attribute DOMString media;
     readonly attribute boolean matches;
diff --git a/core/css/MediaQueryListListener.idl b/core/css/MediaQueryListListener.idl
index 91f97f1..d8ff09e 100644
--- a/core/css/MediaQueryListListener.idl
+++ b/core/css/MediaQueryListListener.idl
@@ -19,7 +19,7 @@
 
 [
     
-    CPPPureInterface,
+    CPPPureInterface
 ] interface MediaQueryListListener {
     void queryChanged([Default=Undefined] optional MediaQueryList list);
 };
diff --git a/core/css/RGBColor.idl b/core/css/RGBColor.idl
index 6afcfac..09fa76e 100644
--- a/core/css/RGBColor.idl
+++ b/core/css/RGBColor.idl
@@ -19,7 +19,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface RGBColor {
     readonly attribute CSSPrimitiveValue  red;
     readonly attribute CSSPrimitiveValue  green;
diff --git a/core/css/Rect.idl b/core/css/Rect.idl
index 5013285..3eac82f 100644
--- a/core/css/Rect.idl
+++ b/core/css/Rect.idl
@@ -18,7 +18,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface Rect {
     readonly attribute CSSPrimitiveValue  top;
     readonly attribute CSSPrimitiveValue  right;
diff --git a/core/css/StyleMedia.idl b/core/css/StyleMedia.idl
index cd87599..27424f3 100644
--- a/core/css/StyleMedia.idl
+++ b/core/css/StyleMedia.idl
@@ -24,7 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-interface StyleMedia {
+[
+    NoInterfaceObject
+] interface StyleMedia {
     readonly attribute DOMString type;
     boolean matchMedium([Default=Undefined] optional DOMString mediaquery);
 };
diff --git a/core/css/StyleSheet.idl b/core/css/StyleSheet.idl
index 842174a..2c179ac 100644
--- a/core/css/StyleSheet.idl
+++ b/core/css/StyleSheet.idl
@@ -21,7 +21,7 @@
 // Introduced in DOM Level 2:
 [
     CustomToV8,
-    GenerateIsReachable=ImplOwnerNodeRoot
+    GenerateIsReachable=ownerNode
 ] interface StyleSheet {
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString        type;
              attribute boolean          disabled;
diff --git a/core/css/StyleSheetList.idl b/core/css/StyleSheetList.idl
index fce41cf..84224df 100644
--- a/core/css/StyleSheetList.idl
+++ b/core/css/StyleSheetList.idl
@@ -20,9 +20,8 @@
 
 // Introduced in DOM Level 2:
 [
-    GenerateIsReachable=ImplDocument,
-    CustomNamedGetter,
-    ImplementationLacksVTable
+    GenerateIsReachable=document,
+    CustomNamedGetter
 ] interface StyleSheetList {
     readonly attribute unsigned long    length;
     getter StyleSheet         item([Default=Undefined] optional unsigned long index);
diff --git a/core/css/WebKitCSSFilterValue.idl b/core/css/WebKitCSSFilterValue.idl
index 2547661..4f5e23c 100644
--- a/core/css/WebKitCSSFilterValue.idl
+++ b/core/css/WebKitCSSFilterValue.idl
@@ -24,8 +24,7 @@
  */
 
 [
-        DoNotCheckConstants,
-    ImplementationLacksVTable
+        DoNotCheckConstants
 ] interface WebKitCSSFilterValue : CSSValueList {
 
     // OperationTypes
@@ -44,4 +43,5 @@
     const unsigned short CSS_FILTER_CUSTOM = 12;
 
     readonly attribute unsigned short operationType;
+    [ImplementedAs=item] getter CSSValue([Default=Undefined] optional unsigned long index);
 };
diff --git a/core/css/WebKitCSSKeyframesRule.idl b/core/css/WebKitCSSKeyframesRule.idl
index 826413f..895d34e 100644
--- a/core/css/WebKitCSSKeyframesRule.idl
+++ b/core/css/WebKitCSSKeyframesRule.idl
@@ -33,6 +33,7 @@
     [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString name;
     readonly attribute CSSRuleList cssRules;
     
+    [ImplementedAs=item] getter WebKitCSSKeyframeRule(unsigned long index);
     void insertRule([Default=Undefined] optional DOMString rule);
     void deleteRule([Default=Undefined] optional DOMString key);
     WebKitCSSKeyframeRule findRule([Default=Undefined] optional DOMString key);
diff --git a/core/css/WebKitCSSMixFunctionValue.idl b/core/css/WebKitCSSMixFunctionValue.idl
index 1ce921e..c4a2abd 100644
--- a/core/css/WebKitCSSMixFunctionValue.idl
+++ b/core/css/WebKitCSSMixFunctionValue.idl
@@ -28,7 +28,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface WebKitCSSMixFunctionValue : CSSValueList {
 };
 
diff --git a/core/css/WebKitCSSRegionRule.idl b/core/css/WebKitCSSRegionRule.idl
index 7549b75..2dfbf39 100644
--- a/core/css/WebKitCSSRegionRule.idl
+++ b/core/css/WebKitCSSRegionRule.idl
@@ -28,7 +28,7 @@
  */
 
 [
-    EnabledAtRuntime=cssRegions,
+    EnabledAtRuntime=cssRegions
 ] interface WebKitCSSRegionRule : CSSRule {
     readonly attribute CSSRuleList cssRules;
 };
diff --git a/core/css/WebKitCSSTransformValue.idl b/core/css/WebKitCSSTransformValue.idl
index ddbb799..97a5430 100644
--- a/core/css/WebKitCSSTransformValue.idl
+++ b/core/css/WebKitCSSTransformValue.idl
@@ -27,8 +27,7 @@
  */
 
 [
-        DoNotCheckConstants,
-    ImplementationLacksVTable
+        DoNotCheckConstants
 ] interface WebKitCSSTransformValue : CSSValueList {
 
     // OperationTypes
@@ -56,5 +55,6 @@
     const unsigned short CSS_MATRIX3D    = 21;
 
     readonly attribute unsigned short operationType;
+    [ImplementedAs=item] getter CSSValue([Default=Undefined] optional unsigned long index);
 };
 
diff --git a/core/css/WebKitCSSViewportRule.idl b/core/css/WebKitCSSViewportRule.idl
index a194922..f2cc09f 100644
--- a/core/css/WebKitCSSViewportRule.idl
+++ b/core/css/WebKitCSSViewportRule.idl
@@ -28,7 +28,7 @@
  */
 
 [
-    Conditional=CSS_DEVICE_ADAPTATION,
+    Conditional=CSS_DEVICE_ADAPTATION
 ] interface WebKitCSSViewportRule : CSSRule {
     readonly attribute CSSStyleDeclaration style;
 };
diff --git a/core/dom/CharacterData.idl b/core/dom/CharacterData.idl
index 4b45308..6491b8e 100644
--- a/core/dom/CharacterData.idl
+++ b/core/dom/CharacterData.idl
@@ -37,7 +37,9 @@
                                     [IsIndex,Default=Undefined] optional unsigned long length,
                                     [Default=Undefined] optional DOMString data);
 
-    // DOM 4
+    // ChildNode interface API
+    readonly attribute Element previousElementSibling;
+    readonly attribute Element nextElementSibling;
     [RaisesException] void remove();
 };
 
diff --git a/core/dom/ClientRect.idl b/core/dom/ClientRect.idl
index 3dc5b03..2d96ed0 100644
--- a/core/dom/ClientRect.idl
+++ b/core/dom/ClientRect.idl
@@ -25,7 +25,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface ClientRect {
     readonly attribute float top;
     readonly attribute float right;
diff --git a/core/dom/ClientRectList.idl b/core/dom/ClientRectList.idl
index 8017c6b..2d35d67 100644
--- a/core/dom/ClientRectList.idl
+++ b/core/dom/ClientRectList.idl
@@ -25,7 +25,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface ClientRectList {
     readonly attribute unsigned long length;
     getter ClientRect item([IsIndex,Default=Undefined] optional unsigned long index);
diff --git a/core/dom/Clipboard.idl b/core/dom/Clipboard.idl
index da58a66..82453c7 100644
--- a/core/dom/Clipboard.idl
+++ b/core/dom/Clipboard.idl
@@ -27,7 +27,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface Clipboard {
              [TreatReturnedNullStringAs=Undefined] attribute DOMString dropEffect;
              [TreatReturnedNullStringAs=Undefined] attribute DOMString effectAllowed;
diff --git a/core/dom/Comment.idl b/core/dom/Comment.idl
index 5c07e2f..3a46dd7 100644
--- a/core/dom/Comment.idl
+++ b/core/dom/Comment.idl
@@ -17,6 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-interface Comment : CharacterData {
+[
+    Constructor([Default=NullString] optional DOMString data),
+    CallWith=ScriptExecutionContext
+] interface Comment : CharacterData {
 };
 
diff --git a/core/dom/CustomElementConstructor.idl b/core/dom/CustomElementConstructor.idl
index 0460874..4b6d84f 100644
--- a/core/dom/CustomElementConstructor.idl
+++ b/core/dom/CustomElementConstructor.idl
@@ -23,8 +23,9 @@
  */
 
 [
+    NoInterfaceObject,
     EnabledAtRuntime=customDOMElements,
     WrapAsFunction,
-    CustomCall
+    CustomLegacyCall
 ] interface CustomElementConstructor {
 };
diff --git a/core/dom/DOMCoreException.idl b/core/dom/DOMCoreException.idl
index 2b6f16e..3df6046 100644
--- a/core/dom/DOMCoreException.idl
+++ b/core/dom/DOMCoreException.idl
@@ -28,8 +28,7 @@
 
 [
     DoNotCheckConstants,
-    InterfaceName=DOMException,
-    ImplementationLacksVTable
+    InterfaceName=DOMException
 ] exception DOMCoreException {
 
     readonly attribute unsigned short   code;
diff --git a/core/dom/DOMError.idl b/core/dom/DOMError.idl
index 79a5881..5cded18 100644
--- a/core/dom/DOMError.idl
+++ b/core/dom/DOMError.idl
@@ -26,7 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface  DOMError {
     readonly attribute DOMString name;
   };
diff --git a/core/dom/DOMImplementation.idl b/core/dom/DOMImplementation.idl
index 960e2df..0040c11 100644
--- a/core/dom/DOMImplementation.idl
+++ b/core/dom/DOMImplementation.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    GenerateIsReachable=ImplDocument,
-    ImplementationLacksVTable
+    GenerateIsReachable=document
 ] interface DOMImplementation {
 
     // DOM Level 1
@@ -39,8 +38,8 @@
 
     // DOMImplementationCSS interface from DOM Level 2 CSS
 
-     [RaisesException] CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
-                                                     [Default=Undefined] optional DOMString media);
+     CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
+                                       [Default=Undefined] optional DOMString media);
 
     // HTMLDOMImplementation interface from DOM Level 2 HTML
 
diff --git a/core/dom/DOMNamedFlowCollection.idl b/core/dom/DOMNamedFlowCollection.idl
index 6225e98..90d2a44 100644
--- a/core/dom/DOMNamedFlowCollection.idl
+++ b/core/dom/DOMNamedFlowCollection.idl
@@ -28,9 +28,9 @@
  */
 
 [
+    NoInterfaceObject,
     EnabledAtRuntime=cssRegions,
-    InterfaceName=WebKitNamedFlowCollection,
-    ImplementationLacksVTable
+    InterfaceName=WebKitNamedFlowCollection
 ] interface DOMNamedFlowCollection {
     readonly attribute unsigned long length;
     getter NamedFlow item(unsigned long index);
diff --git a/core/dom/DOMStringList.idl b/core/dom/DOMStringList.idl
index 5109dc6..1c75bcb 100644
--- a/core/dom/DOMStringList.idl
+++ b/core/dom/DOMStringList.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface DOMStringList {
     readonly attribute unsigned long length;
     [TreatReturnedNullStringAs=Null] getter DOMString item([Default=Undefined] optional unsigned long index);
diff --git a/core/dom/DOMStringMap.idl b/core/dom/DOMStringMap.idl
index e200cc8..d3e48ab 100644
--- a/core/dom/DOMStringMap.idl
+++ b/core/dom/DOMStringMap.idl
@@ -24,12 +24,11 @@
  */
 
 [
-    GenerateIsReachable=ImplElementRoot,
-    CustomNamedGetter,
+    GenerateIsReachable=element,
     CustomDeleteProperty,
     CustomEnumerateProperty,
-    CustomNamedSetter,
-    SkipVTableValidation
+    CustomNamedSetter
 ] interface DOMStringMap {
+    [ImplementedAs=item, OverrideBuiltins] getter DOMString (DOMString name);
 };
 
diff --git a/core/dom/DataTransferItem.idl b/core/dom/DataTransferItem.idl
index 227e5a5..4ce2992 100644
--- a/core/dom/DataTransferItem.idl
+++ b/core/dom/DataTransferItem.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DataTransferItem {
     readonly attribute DOMString kind;
     readonly attribute DOMString type;
diff --git a/core/dom/DataTransferItemList.idl b/core/dom/DataTransferItemList.idl
index 0217784..07e9e2a 100644
--- a/core/dom/DataTransferItemList.idl
+++ b/core/dom/DataTransferItemList.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DataTransferItemList {
     readonly attribute long length;
     getter DataTransferItem item([Default=Undefined] optional unsigned long index);
diff --git a/core/dom/Document.idl b/core/dom/Document.idl
index 985097c..abee356 100644
--- a/core/dom/Document.idl
+++ b/core/dom/Document.idl
@@ -35,7 +35,6 @@
     [RaisesException] ProcessingInstruction createProcessingInstruction([Default=Undefined] optional DOMString target,
                                                                                  [Default=Undefined] optional DOMString data);
     [RaisesException] Attr createAttribute([Default=Undefined] optional DOMString name);
-    [RaisesException] EntityReference createEntityReference([Default=Undefined] optional DOMString name);
     [PerWorldBindings] NodeList           getElementsByTagName([Default=Undefined] optional DOMString tagname);
 
     // Introduced in DOM Level 2:
@@ -137,7 +136,7 @@
 
     [PerWorldBindings] NodeList getElementsByName([Default=Undefined] optional DOMString elementName);
 
-    [Custom, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] attribute Location location;
+    [Custom, Replaceable, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] readonly attribute Location location;
 
     // IE extensions
 
@@ -151,7 +150,7 @@
                                            [Default=Undefined] optional long y);
 
     // Mozilla extensions
-    DOMSelection       getSelection();
+    Selection          getSelection();
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString characterSet;
 
     // WebKit extensions
@@ -264,17 +263,17 @@
     [NotEnumerable] attribute EventListener onwebkitpointerlockerror;
     [NotEnumerable, EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] attribute EventListener onsecuritypolicyviolation;
 
-    [EnabledAtRuntime=touch, RaisesException] Touch createTouch([Default=Undefined] optional DOMWindow window,
-                                                     [Default=Undefined] optional EventTarget target,
-                                                     [Default=Undefined] optional long identifier,
-                                                     [Default=Undefined] optional long pageX,
-                                                     [Default=Undefined] optional long pageY,
-                                                     [Default=Undefined] optional long screenX,
-                                                     [Default=Undefined] optional long screenY,
-                                                     [Default=Undefined] optional long webkitRadiusX,
-                                                     [Default=Undefined] optional long webkitRadiusY,
-                                                     [Default=Undefined] optional float webkitRotationAngle,
-                                                     [Default=Undefined] optional float webkitForce);
+    [EnabledAtRuntime=touch] Touch createTouch([Default=Undefined] optional DOMWindow window,
+                                               [Default=Undefined] optional EventTarget target,
+                                               [Default=Undefined] optional long identifier,
+                                               [Default=Undefined] optional long pageX,
+                                               [Default=Undefined] optional long pageY,
+                                               [Default=Undefined] optional long screenX,
+                                               [Default=Undefined] optional long screenY,
+                                               [Default=Undefined] optional long webkitRadiusX,
+                                               [Default=Undefined] optional long webkitRadiusY,
+                                               [Default=Undefined] optional float webkitRotationAngle,
+                                               [Default=Undefined] optional float webkitForce);
     [EnabledAtRuntime=touch, Custom, RaisesException] TouchList createTouchList();
 
     [EnabledAtRuntime=customDOMElements, ImplementedAs=registerElement, CallWith=ScriptState, DeliverCustomElementCallbacks, RaisesException] CustomElementConstructor webkitRegister(DOMString name, optional Dictionary options);
@@ -287,7 +286,12 @@
     readonly attribute boolean webkitHidden;
 
     // Security Policy API: http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#script-interfaces
-    [EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] readonly attribute DOMSecurityPolicy securityPolicy;
+    [EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] readonly attribute SecurityPolicy securityPolicy;
 
+    // ParentNode interface API
+    readonly attribute HTMLCollection children;
+    readonly attribute Element firstElementChild;
+    readonly attribute Element lastElementChild;
+    readonly attribute unsigned long childElementCount;
 };
 
diff --git a/core/dom/DocumentFragment.idl b/core/dom/DocumentFragment.idl
index e8cd287..f02cf18 100644
--- a/core/dom/DocumentFragment.idl
+++ b/core/dom/DocumentFragment.idl
@@ -18,10 +18,17 @@
  */
 
 [
-    SkipVTableValidation
+    Constructor,
+    CallWith=ScriptExecutionContext
 ] interface DocumentFragment : Node {
     // NodeSelector - Selector API
     [RaisesException] Element querySelector(DOMString selectors);
     [RaisesException] NodeList querySelectorAll(DOMString selectors);
+
+    // ParentNode interface API
+    readonly attribute HTMLCollection children;
+    readonly attribute Element firstElementChild;
+    readonly attribute Element lastElementChild;
+    readonly attribute unsigned long childElementCount;
 };
 
diff --git a/core/dom/DocumentType.idl b/core/dom/DocumentType.idl
index 5cd61a9..352da12 100644
--- a/core/dom/DocumentType.idl
+++ b/core/dom/DocumentType.idl
@@ -31,7 +31,9 @@
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString systemId;
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString internalSubset;        
 
-    // DOM 4
+    // ChildNode interface API
+    readonly attribute Element previousElementSibling;
+    readonly attribute Element nextElementSibling;
     [RaisesException] void remove();
 };
 
diff --git a/core/dom/Element.idl b/core/dom/Element.idl
index 76136bc..831e32c 100644
--- a/core/dom/Element.idl
+++ b/core/dom/Element.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    CustomToV8,
-    SkipVTableValidation
+    CustomToV8
 ] interface Element : Node {
 
     // DOM Level 1 Core
@@ -28,12 +27,12 @@
     [TreatReturnedNullStringAs=Null, PerWorldBindings] readonly attribute DOMString tagName;
 
     [TreatReturnedNullStringAs=Null] DOMString getAttribute([Default=Undefined] optional DOMString name);
-     [RaisesException] void setAttribute([Default=Undefined] optional DOMString name,
+    [RaisesException] void setAttribute([Default=Undefined] optional DOMString name,
                                      [Default=Undefined] optional DOMString value);
     void removeAttribute([Default=Undefined] optional DOMString name);
     Attr getAttributeNode([Default=Undefined] optional DOMString name);
-    [RaisesException] Attr setAttributeNode([Default=Undefined] optional Attr newAttr);
-    [RaisesException] Attr removeAttributeNode([Default=Undefined] optional Attr oldAttr);
+    [RaisesException] Attr setAttributeNode([Default=Undefined, StrictTypeChecking] optional Attr newAttr);
+    [RaisesException] Attr removeAttributeNode([Default=Undefined, StrictTypeChecking] optional Attr oldAttr);
     [PerWorldBindings] NodeList getElementsByTagName([Default=Undefined] optional DOMString name);
 
     // For ObjC this is defined on Node for legacy support.
@@ -53,7 +52,7 @@
                                                    [Default=Undefined] optional DOMString localName);
      Attr getAttributeNodeNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
                                            [Default=Undefined] optional DOMString localName);
-    [RaisesException] Attr setAttributeNodeNS([Default=Undefined] optional Attr newAttr);
+    [RaisesException] Attr setAttributeNodeNS([Default=Undefined, StrictTypeChecking] optional Attr newAttr);
     boolean hasAttribute(DOMString name);
      boolean hasAttributeNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
                                           [Default=Undefined] optional DOMString localName);
@@ -101,11 +100,10 @@
     // WebKit extension, pending specification.
     [RaisesException] boolean webkitMatchesSelector([Default=Undefined] optional DOMString selectors);
 
-    // ElementTraversal API
+    // ParentNode interface API
+    [PerWorldBindings] readonly attribute HTMLCollection children;
     [PerWorldBindings] readonly attribute Element firstElementChild;
     [PerWorldBindings] readonly attribute Element lastElementChild;
-    [PerWorldBindings] readonly attribute Element previousElementSibling;
-    [PerWorldBindings] readonly attribute Element nextElementSibling;
     [PerWorldBindings] readonly attribute unsigned long childElementCount;
 
     // ShadowAware API
@@ -114,7 +112,9 @@
     [ImplementedAs=shadowRoot, PerWorldBindings] readonly attribute ShadowRoot webkitShadowRoot;
     [ImplementedAs=insertionParentForBinding, PerWorldBindings] readonly attribute Node webkitInsertionParent;
 
-    // DOM 4
+    // ChildNode interface API
+    [PerWorldBindings] readonly attribute Element previousElementSibling;
+    [PerWorldBindings] readonly attribute Element nextElementSibling;
     [RaisesException] void remove();
 
     // CSSOM View Module API
diff --git a/core/dom/Entity.idl b/core/dom/Entity.idl
index 7f5bf4b..12b9234 100644
--- a/core/dom/Entity.idl
+++ b/core/dom/Entity.idl
@@ -17,7 +17,6 @@
  * Boston, MA 02110-1301, USA.
  */
 [
-    ImplementationLacksVTable
 ] interface Entity : Node {
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString publicId;
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString systemId;
diff --git a/core/dom/EntityReference.idl b/core/dom/EntityReference.idl
deleted file mode 100644
index 363554a..0000000
--- a/core/dom/EntityReference.idl
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * 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.
- */
-
-interface EntityReference : Node {
-};
-
diff --git a/core/dom/Event.idl b/core/dom/Event.idl
index 82b8e28..c38db7d 100644
--- a/core/dom/Event.idl
+++ b/core/dom/Event.idl
@@ -21,9 +21,8 @@
 // Introduced in DOM Level 2:
 [
     CustomToV8,
-    ConstructorTemplate=Event,
+    ConstructorTemplate=Event
     
-    SkipVTableValidation
 ] interface Event {
 
     // DOM PhaseType
@@ -73,6 +72,8 @@
              attribute boolean          returnValue;
              attribute boolean          cancelBubble;
 
+    [EnabledAtRuntime=experimentalShadowDOM] NodeList path();
+
     [Custom] readonly attribute Clipboard        clipboardData;
 };
 
diff --git a/core/dom/EventException.idl b/core/dom/EventException.idl
index cde7100..7d05830 100644
--- a/core/dom/EventException.idl
+++ b/core/dom/EventException.idl
@@ -28,8 +28,7 @@
 
 // Introduced in DOM Level 2:
 [
-    DoNotCheckConstants,
-    ImplementationLacksVTable,
+    DoNotCheckConstants
 ] exception EventException {
 
     readonly attribute unsigned short   code;
diff --git a/core/dom/EventTarget.idl b/core/dom/EventTarget.idl
index 8647c27..32af401 100644
--- a/core/dom/EventTarget.idl
+++ b/core/dom/EventTarget.idl
@@ -19,6 +19,7 @@
  */
 
 [
+    NoInterfaceObject,
     CustomToV8,
     DoNotGenerateWrap,
     EventTarget
diff --git a/core/dom/MessageChannel.idl b/core/dom/MessageChannel.idl
index c81bd4c..07b1a10 100644
--- a/core/dom/MessageChannel.idl
+++ b/core/dom/MessageChannel.idl
@@ -27,8 +27,7 @@
 [
     Constructor,
     CallWith=ScriptExecutionContext,
-    CustomConstructor,
-    ImplementationLacksVTable
+    CustomConstructor
 ] interface MessageChannel {
 
     readonly attribute MessagePort port1;
diff --git a/core/dom/MessageEvent.idl b/core/dom/MessageEvent.idl
index 928f2d7..a279331 100644
--- a/core/dom/MessageEvent.idl
+++ b/core/dom/MessageEvent.idl
@@ -31,8 +31,8 @@
     [InitializedByEventConstructor] readonly attribute DOMString origin;
     [InitializedByEventConstructor] readonly attribute DOMString lastEventId;
     [InitializedByEventConstructor] readonly attribute DOMWindow source;
-    [InitializedByEventConstructor, CachedAttribute, CustomGetter] readonly attribute any data;
-    [InitializedByEventConstructor, CustomGetter] readonly attribute Array ports;
+    [InitializedByEventConstructor, CustomGetter] readonly attribute any data;
+    [InitializedByEventConstructor] readonly attribute MessagePort[] ports;
 
     [Custom] void initMessageEvent([Default=Undefined] optional DOMString typeArg, 
                                    [Default=Undefined] optional boolean canBubbleArg, 
diff --git a/core/dom/MouseEvent.idl b/core/dom/MouseEvent.idl
index 888ac71..5465735 100644
--- a/core/dom/MouseEvent.idl
+++ b/core/dom/MouseEvent.idl
@@ -18,8 +18,7 @@
  */
 
 [
-    ConstructorTemplate=Event,
-    SkipVTableValidation
+    ConstructorTemplate=Event
 ] interface MouseEvent : UIEvent {
     [InitializedByEventConstructor] readonly attribute long             screenX;
     [InitializedByEventConstructor] readonly attribute long             screenY;
diff --git a/core/dom/MutationObserver.idl b/core/dom/MutationObserver.idl
index 6df62b7..e87fa44 100644
--- a/core/dom/MutationObserver.idl
+++ b/core/dom/MutationObserver.idl
@@ -29,8 +29,7 @@
  */
 
 [
-    CustomConstructor(MutationCallback callback),
-    ImplementationLacksVTable
+    CustomConstructor(MutationCallback callback)
 ] interface MutationObserver {
     [RaisesException] void observe(Node target, Dictionary options);
     sequence<MutationRecord> takeRecords();
diff --git a/core/dom/MutationRecord.idl b/core/dom/MutationRecord.idl
index 2002d1d..c3ef616 100644
--- a/core/dom/MutationRecord.idl
+++ b/core/dom/MutationRecord.idl
@@ -29,7 +29,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface MutationRecord {
     readonly attribute DOMString type;
     readonly attribute Node target;
diff --git a/core/dom/NamedFlow.idl b/core/dom/NamedFlow.idl
index b7e09e5..ae2cfeb 100644
--- a/core/dom/NamedFlow.idl
+++ b/core/dom/NamedFlow.idl
@@ -28,10 +28,11 @@
  */
 
 [
+    NoInterfaceObject,
     EnabledAtRuntime=cssRegions,
     EventTarget,
     InterfaceName=WebKitNamedFlow,
-    GenerateIsReachable=ImplOwnerNodeRoot
+    GenerateIsReachable=ownerNode
 ] interface NamedFlow {
     readonly attribute DOMString name;
     readonly attribute boolean overset;
diff --git a/core/dom/NamedNodeMap.idl b/core/dom/NamedNodeMap.idl
index 17e7736..0613357 100644
--- a/core/dom/NamedNodeMap.idl
+++ b/core/dom/NamedNodeMap.idl
@@ -19,12 +19,10 @@
  */
 
 [
-    GenerateIsReachable=ImplElementRoot,
-    CustomNamedGetter,
-    ImplementationLacksVTable
+    GenerateIsReachable=element
 ] interface NamedNodeMap {
 
-    Node getNamedItem([Default=Undefined] optional DOMString name);
+    getter Node getNamedItem([Default=Undefined] optional DOMString name);
 
     [RaisesException] Node setNamedItem([Default=Undefined] optional Node node);
 
diff --git a/core/dom/Node.idl b/core/dom/Node.idl
index 28d760e..ba0eb17 100644
--- a/core/dom/Node.idl
+++ b/core/dom/Node.idl
@@ -29,7 +29,7 @@
     const unsigned short      ATTRIBUTE_NODE                 = 2;
     const unsigned short      TEXT_NODE                      = 3;
     const unsigned short      CDATA_SECTION_NODE             = 4;
-    const unsigned short      ENTITY_REFERENCE_NODE          = 5;
+    const unsigned short      ENTITY_REFERENCE_NODE          = 5; // EntityReference nodes are impossible to create in WebKit.
     const unsigned short      ENTITY_NODE                    = 6;
     const unsigned short      PROCESSING_INSTRUCTION_NODE    = 7;
     const unsigned short      COMMENT_NODE                   = 8;
diff --git a/core/dom/NodeFilter.idl b/core/dom/NodeFilter.idl
index b42757c..989099f 100644
--- a/core/dom/NodeFilter.idl
+++ b/core/dom/NodeFilter.idl
@@ -19,7 +19,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface NodeFilter {
     // Constants returned by acceptNode
     const short               FILTER_ACCEPT                  = 1;
diff --git a/core/dom/NodeIterator.idl b/core/dom/NodeIterator.idl
index 3101322..b019d76 100644
--- a/core/dom/NodeIterator.idl
+++ b/core/dom/NodeIterator.idl
@@ -20,7 +20,7 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface NodeIterator {
     readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
diff --git a/core/dom/NodeList.idl b/core/dom/NodeList.idl
index 02bf971..cc30450 100644
--- a/core/dom/NodeList.idl
+++ b/core/dom/NodeList.idl
@@ -20,12 +20,11 @@
 
 [
     CustomIsReachable,
-    CustomNamedGetter,
-    DependentLifetime,
-    SkipVTableValidation
+    DependentLifetime
 ] interface NodeList {
 
     getter Node item([IsIndex,Default=Undefined] optional unsigned long index);
+    [ImplementedAs=anonymousNamedGetter, OverrideBuiltins] getter (Node or unsigned long) (DOMString name);
 
     readonly attribute unsigned long length;
 
diff --git a/core/dom/PopStateEvent.idl b/core/dom/PopStateEvent.idl
index c4153f6..709777f 100644
--- a/core/dom/PopStateEvent.idl
+++ b/core/dom/PopStateEvent.idl
@@ -27,5 +27,5 @@
 [
     ConstructorTemplate=Event
 ] interface PopStateEvent : Event {
-    [InitializedByEventConstructor, CachedAttribute, CustomGetter] readonly attribute any state;
+    [InitializedByEventConstructor, CustomGetter] readonly attribute any state;
 };
diff --git a/core/dom/ProcessingInstruction.idl b/core/dom/ProcessingInstruction.idl
index 03530e2..1767ee5 100644
--- a/core/dom/ProcessingInstruction.idl
+++ b/core/dom/ProcessingInstruction.idl
@@ -23,7 +23,7 @@
     // DOM Level 1
 
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString target;
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString data;
+             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString data;
 
     // interface LinkStyle from DOM Level 2 Style Sheets
     readonly attribute StyleSheet sheet;
diff --git a/core/dom/Range.idl b/core/dom/Range.idl
index 3504bad..f816069 100644
--- a/core/dom/Range.idl
+++ b/core/dom/Range.idl
@@ -20,7 +20,8 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
+    Constructor,
+    CallWith=ScriptExecutionContext
 ] interface Range {
 
     [GetterRaisesException] readonly attribute Node startContainer;
diff --git a/core/dom/SecurityPolicyViolationEvent.idl b/core/dom/SecurityPolicyViolationEvent.idl
index 590d8e6..b214e6f 100644
--- a/core/dom/SecurityPolicyViolationEvent.idl
+++ b/core/dom/SecurityPolicyViolationEvent.idl
@@ -23,7 +23,8 @@
  */
 
 [
-    ConstructorTemplate=Event,
+    NoInterfaceObject,
+    ConstructorTemplate=Event
 ] interface SecurityPolicyViolationEvent : Event {
     [InitializedByEventConstructor] readonly attribute DOMString documentURI;
     [InitializedByEventConstructor] readonly attribute DOMString referrer;
diff --git a/core/dom/Text.idl b/core/dom/Text.idl
index 68e1b8d..9ccd7e0 100644
--- a/core/dom/Text.idl
+++ b/core/dom/Text.idl
@@ -17,8 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 [
-    CustomToV8,
-    SkipVTableValidation,
+    Constructor([Default=NullString] optional DOMString data),
+    CallWith=ScriptExecutionContext,
+    CustomToV8
 ] interface Text : CharacterData {
 
     // DOM Level 1
@@ -27,7 +28,7 @@
 
     // Introduced in DOM Level 3:
     readonly attribute DOMString       wholeText;
-    [RaisesException] Text               replaceWholeText([Default=Undefined] optional DOMString content);
+    Text                               replaceWholeText([Default=Undefined] optional DOMString content);
     // ShadowAware API
     [ImplementedAs=insertionParentForBinding, PerWorldBindings] readonly attribute Node webkitInsertionParent;
 
diff --git a/core/dom/Touch.idl b/core/dom/Touch.idl
index 4625083..2d89c3b 100644
--- a/core/dom/Touch.idl
+++ b/core/dom/Touch.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Touch {
     readonly attribute long             clientX;
     readonly attribute long             clientY;
diff --git a/core/dom/TouchEvent.idl b/core/dom/TouchEvent.idl
index 236aff2..c0838a8 100644
--- a/core/dom/TouchEvent.idl
+++ b/core/dom/TouchEvent.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface TouchEvent : UIEvent {
+[
+    NoInterfaceObject
+] interface TouchEvent : UIEvent {
     readonly attribute TouchList touches;
     readonly attribute TouchList targetTouches;
     readonly attribute TouchList changedTouches;
diff --git a/core/dom/TouchList.idl b/core/dom/TouchList.idl
index 0034249..19900ac 100644
--- a/core/dom/TouchList.idl
+++ b/core/dom/TouchList.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface TouchList {
     readonly attribute unsigned long length;
 
diff --git a/core/dom/TreeWalker.idl b/core/dom/TreeWalker.idl
index 7a81fec..2188bef 100644
--- a/core/dom/TreeWalker.idl
+++ b/core/dom/TreeWalker.idl
@@ -20,7 +20,7 @@
 
 // Introduced in DOM Level 2:
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface TreeWalker {
     readonly attribute Node root;
     readonly attribute unsigned long whatToShow;
diff --git a/core/dom/ShadowRoot.idl b/core/dom/shadow/ShadowRoot.idl
similarity index 95%
rename from core/dom/ShadowRoot.idl
rename to core/dom/shadow/ShadowRoot.idl
index 8d95548..39488df 100644
--- a/core/dom/ShadowRoot.idl
+++ b/core/dom/shadow/ShadowRoot.idl
@@ -24,7 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface ShadowRoot : DocumentFragment {
+[
+    NoInterfaceObject
+] interface ShadowRoot : DocumentFragment {
     readonly attribute Element activeElement;
     attribute boolean applyAuthorStyles;
     attribute boolean resetStyleInheritance;
@@ -32,7 +34,7 @@
     [TreatNullAs=NullString, DeliverCustomElementCallbacks, PerWorldBindings, ActivityLog=SetterForIsolatedWorlds, SetterRaisesException] attribute DOMString innerHTML;
 
     [RaisesException] Node cloneNode([Default=Undefined] optional boolean deep);
-    DOMSelection getSelection();
+    Selection getSelection();
     Element getElementById([Default=Undefined] optional DOMString elementId);
     NodeList getElementsByClassName([Default=Undefined] optional DOMString className);
     NodeList getElementsByTagName([Default=Undefined] optional DOMString tagName);
diff --git a/core/fileapi/FileError.idl b/core/fileapi/FileError.idl
index 7116324..46c910f 100644
--- a/core/fileapi/FileError.idl
+++ b/core/fileapi/FileError.idl
@@ -29,7 +29,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface FileError {
     // FIXME: Some of constant names are already defined in DOMException.h for Objective-C binding and we cannot have the same names here (they are translated into a enum in the same namespace).
     const unsigned short NOT_FOUND_ERR = 1;
diff --git a/core/fileapi/FileException.idl b/core/fileapi/FileException.idl
index b6221df..c64d716 100644
--- a/core/fileapi/FileException.idl
+++ b/core/fileapi/FileException.idl
@@ -29,8 +29,8 @@
  */
 
 [
-    DoNotCheckConstants,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    DoNotCheckConstants
 ] exception FileException {
 
     readonly attribute unsigned short   code;
diff --git a/core/fileapi/FileList.idl b/core/fileapi/FileList.idl
index 4ef8bf6..b0a09ef 100644
--- a/core/fileapi/FileList.idl
+++ b/core/fileapi/FileList.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface FileList {
     readonly attribute unsigned long length;
     getter File item(unsigned long index);
diff --git a/core/fileapi/FileReaderSync.idl b/core/fileapi/FileReaderSync.idl
index a36e4c3..1920a53 100644
--- a/core/fileapi/FileReaderSync.idl
+++ b/core/fileapi/FileReaderSync.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     Constructor
 ] interface FileReaderSync {
     [CallWith=ScriptExecutionContext, RaisesException] ArrayBuffer readAsArrayBuffer(Blob blob);
diff --git a/core/html/DOMSettableTokenList.idl b/core/html/DOMSettableTokenList.idl
index ab242f7..18142d0 100644
--- a/core/html/DOMSettableTokenList.idl
+++ b/core/html/DOMSettableTokenList.idl
@@ -22,9 +22,8 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    SkipVTableValidation
-] interface DOMSettableTokenList : DOMTokenList {
+interface DOMSettableTokenList : DOMTokenList {
+    [TreatReturnedNullStringAs=Null, ImplementedAs=item] getter DOMString(unsigned long index);
     attribute DOMString value;
 };
 
diff --git a/core/html/DOMTokenList.idl b/core/html/DOMTokenList.idl
index 64bc636..bfc142a 100644
--- a/core/html/DOMTokenList.idl
+++ b/core/html/DOMTokenList.idl
@@ -23,8 +23,7 @@
  */
 
 [
-    GenerateIsReachable=ImplElementRoot,
-    SkipVTableValidation
+    GenerateIsReachable=element
 ] interface DOMTokenList {
     readonly attribute unsigned long length;
     [TreatReturnedNullStringAs=Null] getter DOMString item(unsigned long index);
diff --git a/core/html/DOMFormData.idl b/core/html/FormData.idl
similarity index 95%
rename from core/html/DOMFormData.idl
rename to core/html/FormData.idl
index 25d9ed1..3652d4e 100644
--- a/core/html/DOMFormData.idl
+++ b/core/html/FormData.idl
@@ -30,9 +30,8 @@
 
 [
     CustomConstructor(optional HTMLFormElement form),
-    InterfaceName=FormData,
-    ImplementationLacksVTable
-] interface DOMFormData {
+    ImplementedAs=DOMFormData
+] interface FormData {
     // void append(DOMString name, DOMString value);
     // void append(DOMString name, Blob value, optional DOMString filename);
     [Custom] void append([Default=Undefined] optional DOMString name, 
diff --git a/core/html/HTMLAllCollection.idl b/core/html/HTMLAllCollection.idl
index f421caf..e43def6 100644
--- a/core/html/HTMLAllCollection.idl
+++ b/core/html/HTMLAllCollection.idl
@@ -24,14 +24,14 @@
  */
 
 [
-    CustomNamedGetter,
-    CustomCall,
+    CustomLegacyCall,
     MasqueradesAsUndefined,
-    GenerateIsReachable=ImplOwnerNodeRoot,
-    DependentLifetime,
+    GenerateIsReachable=ownerNode,
+    DependentLifetime
 ] interface HTMLAllCollection {
     readonly attribute unsigned long length;
     [Custom] getter Node item([Default=Undefined] optional unsigned long index);
+    [ImplementedAs=anonymousNamedGetter] getter (NodeList or Node)(DOMString name);
     [Custom] Node namedItem(DOMString name);
     // FIXME: This should return an HTMLAllCollection.
     NodeList tags(DOMString name);
diff --git a/core/html/HTMLAppletElement.idl b/core/html/HTMLAppletElement.idl
index e5f8707..b7ae3c2 100644
--- a/core/html/HTMLAppletElement.idl
+++ b/core/html/HTMLAppletElement.idl
@@ -23,7 +23,7 @@
     CustomNamedSetter,
     CustomIndexedGetter,
     CustomIndexedSetter,
-    CustomCall
+    CustomLegacyCall
 ] interface HTMLAppletElement : HTMLElement {
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString alt;
diff --git a/core/html/HTMLAudioElement.idl b/core/html/HTMLAudioElement.idl
index 3be47e5..b4e9004 100644
--- a/core/html/HTMLAudioElement.idl
+++ b/core/html/HTMLAudioElement.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    EnabledAtRuntime=media,
     NamedConstructor=Audio([Default=NullString] optional DOMString src)
 ] interface HTMLAudioElement : HTMLMediaElement {
 };
diff --git a/core/html/HTMLCollection.idl b/core/html/HTMLCollection.idl
index ee1d158..4e32829 100644
--- a/core/html/HTMLCollection.idl
+++ b/core/html/HTMLCollection.idl
@@ -20,10 +20,8 @@
 
 [
     CustomToV8,
-    GenerateIsReachable=ImplOwnerNodeRoot,
-    DependentLifetime,
-    
-    SkipVTableValidation
+    GenerateIsReachable=ownerNode,
+    DependentLifetime
 ] interface HTMLCollection {
     readonly attribute unsigned long length;
     getter Node item([Default=Undefined] optional unsigned long index);
diff --git a/core/html/HTMLDataListElement.idl b/core/html/HTMLDataListElement.idl
index 13fdaa4..f87df9a 100644
--- a/core/html/HTMLDataListElement.idl
+++ b/core/html/HTMLDataListElement.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    Conditional=DATALIST_ELEMENT,
+    EnabledAtRuntime=DataListElement
 ] interface HTMLDataListElement : HTMLElement {
     readonly attribute HTMLCollection options;
 };
diff --git a/core/html/HTMLDetailsElement.idl b/core/html/HTMLDetailsElement.idl
index 8909fc8..363785a 100644
--- a/core/html/HTMLDetailsElement.idl
+++ b/core/html/HTMLDetailsElement.idl
@@ -17,7 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-interface HTMLDetailsElement : HTMLElement {
+[
+    NoInterfaceObject
+] interface HTMLDetailsElement : HTMLElement {
     [Reflect] attribute boolean open;
 };
 
diff --git a/core/html/HTMLDialogElement.idl b/core/html/HTMLDialogElement.idl
index 874cbcf..3fddf94 100644
--- a/core/html/HTMLDialogElement.idl
+++ b/core/html/HTMLDialogElement.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    SkipVTableValidation
+    EnabledPerContext=dialogElement
 ] interface HTMLDialogElement : HTMLElement {
     [Reflect] attribute boolean open;
     [RaisesException] void close();
diff --git a/core/html/HTMLDivElement.idl b/core/html/HTMLDivElement.idl
index dd17326..5793564 100644
--- a/core/html/HTMLDivElement.idl
+++ b/core/html/HTMLDivElement.idl
@@ -18,7 +18,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface HTMLDivElement : HTMLElement {
     [Reflect] attribute DOMString align;
 };
diff --git a/core/html/HTMLDocument.idl b/core/html/HTMLDocument.idl
index 91f2905..889f741 100644
--- a/core/html/HTMLDocument.idl
+++ b/core/html/HTMLDocument.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    CustomToV8,
-    SkipVTableValidation
+    CustomToV8
 ] interface HTMLDocument : Document {
     [Custom] void open();
     void close();
@@ -33,12 +32,9 @@
 
     // Extensions
 
-    [Replaceable] attribute HTMLAllCollection all;
+    [Replaceable] readonly attribute HTMLAllCollection all;
 
-    void clear();
-
-    void captureEvents();
-    void releaseEvents();
+    [DeprecateAs=DocumentClear] void clear();
 
     readonly attribute long width;
     readonly attribute long height;
diff --git a/core/html/HTMLElement.idl b/core/html/HTMLElement.idl
index 78e4a5e..8bcdc4b 100644
--- a/core/html/HTMLElement.idl
+++ b/core/html/HTMLElement.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    CustomToV8,
-    SkipVTableValidation
+    CustomToV8
 ] interface HTMLElement : Element {
              // iht.com relies on id returning the empty string when no id is present. 
              // Other browsers do this as well. So we don't convert null to JS null.
@@ -37,7 +36,7 @@
              [Reflect] attribute DOMString accessKey;
 
     // Extensions
-             [TreatNullAs=NullString, DeliverCustomElementCallbacks, SetterRaisesException] attribute DOMString innerHTML;
+             [TreatNullAs=NullString, DeliverCustomElementCallbacks, PerWorldBindings, ActivityLog=SetterForIsolatedWorlds, SetterRaisesException] attribute DOMString innerHTML;
              [TreatNullAs=NullString, SetterRaisesException] attribute DOMString innerText;
              [TreatNullAs=NullString, DeliverCustomElementCallbacks, SetterRaisesException] attribute DOMString outerHTML;
              [TreatNullAs=NullString, SetterRaisesException] attribute DOMString outerText;
@@ -49,7 +48,7 @@
     [RaisesException] void insertAdjacentText([Default=Undefined] optional DOMString where,
                             [Default=Undefined] optional DOMString text);
 
-    readonly attribute HTMLCollection children;
+    [EnabledAtRuntime=imeAPI] InputMethodContext getInputContext();
 
              [TreatNullAs=NullString, SetterRaisesException] attribute DOMString contentEditable;
     readonly attribute boolean isContentEditable;
diff --git a/core/html/HTMLEmbedElement.idl b/core/html/HTMLEmbedElement.idl
index b702089..d479449 100644
--- a/core/html/HTMLEmbedElement.idl
+++ b/core/html/HTMLEmbedElement.idl
@@ -21,10 +21,9 @@
 [
     CustomNamedGetter,
     CustomNamedSetter,
-    CustomCall,
+    CustomLegacyCall,
     CustomIndexedGetter,
-    CustomIndexedSetter,
-    SkipVTableValidation
+    CustomIndexedSetter
 ] interface HTMLEmbedElement : HTMLElement {
 [Reflect] attribute DOMString align;
 [Reflect] attribute DOMString height;
diff --git a/core/html/HTMLFormControlsCollection.idl b/core/html/HTMLFormControlsCollection.idl
index e590abf..a236e3f 100644
--- a/core/html/HTMLFormControlsCollection.idl
+++ b/core/html/HTMLFormControlsCollection.idl
@@ -19,9 +19,10 @@
  */
 
 [
-    CustomNamedGetter,
-    GenerateIsReachable=ImplOwnerNodeRoot,
-    DependentLifetime,
+    GenerateIsReachable=ownerNode,
+    DependentLifetime
 ] interface HTMLFormControlsCollection : HTMLCollection {
+    [ImplementedAs=item] getter Node([Default=Undefined] optional unsigned long index);
     [Custom] Node namedItem([Default=Undefined] optional DOMString name);
+    [ImplementedAs=namedGetter] getter (RadioNodeList or Node)(DOMString name);
 };
diff --git a/core/html/HTMLFormElement.idl b/core/html/HTMLFormElement.idl
index fdb1468..7ae2104 100644
--- a/core/html/HTMLFormElement.idl
+++ b/core/html/HTMLFormElement.idl
@@ -18,10 +18,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-[
-    CustomIndexedGetter,
-    CustomNamedGetter
-] interface HTMLFormElement : HTMLElement {
+interface HTMLFormElement : HTMLElement {
     [Reflect=accept_charset] attribute DOMString acceptCharset;
     [Reflect, URL] attribute DOMString action;
     [Reflect] attribute DOMString autocomplete;
@@ -34,6 +31,8 @@
 
     readonly attribute HTMLCollection elements;
     readonly attribute long length;
+    [ImplementedAs=item] getter Node(unsigned long index);
+    [ImplementedAs=anonymousNamedGetter, OverrideBuiltins] getter (NodeList or Node)(DOMString name);
 
     [ImplementedAs=submitFromJavaScript] void submit();
     void reset();
diff --git a/core/html/HTMLFrameSetElement.idl b/core/html/HTMLFrameSetElement.idl
index 348251c..a928298 100644
--- a/core/html/HTMLFrameSetElement.idl
+++ b/core/html/HTMLFrameSetElement.idl
@@ -18,9 +18,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-[
-    CustomNamedGetter
-] interface HTMLFrameSetElement : HTMLElement {
+interface HTMLFrameSetElement : HTMLElement {
+    [ImplementedAs=anonymousNamedGetter, OverrideBuiltins] getter DOMWindow (DOMString name);
     [Reflect] attribute DOMString cols;
     [Reflect] attribute DOMString rows;
 
diff --git a/core/html/HTMLImageElement.idl b/core/html/HTMLImageElement.idl
index 3287fd6..360b2b5 100644
--- a/core/html/HTMLImageElement.idl
+++ b/core/html/HTMLImageElement.idl
@@ -19,7 +19,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface HTMLImageElement : HTMLElement {
     [Reflect] attribute DOMString name;
     [Reflect] attribute DOMString align;
diff --git a/core/html/HTMLInputElement.idl b/core/html/HTMLInputElement.idl
index 2a4184c..00e4a1e 100644
--- a/core/html/HTMLInputElement.idl
+++ b/core/html/HTMLInputElement.idl
@@ -20,7 +20,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface HTMLInputElement : HTMLElement {
     [Reflect] attribute DOMString accept;
     [Reflect] attribute DOMString alt;
@@ -39,7 +38,7 @@
     [Reflect] attribute DOMString formTarget;
     attribute unsigned long height;
     attribute boolean indeterminate;
-    [Conditional=DATALIST_ELEMENT] readonly attribute HTMLElement list;
+    [EnabledAtRuntime=DataListElement] readonly attribute HTMLElement list;
     [Reflect] attribute DOMString max;
     [SetterRaisesException] attribute long maxLength;
     [Reflect] attribute DOMString min;
@@ -72,9 +71,9 @@
     readonly attribute NodeList labels;
 
     void select();
-    [Custom] attribute long selectionStart;
-    [Custom] attribute long selectionEnd;
-    [Custom] attribute DOMString selectionDirection;
+    [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,
@@ -82,9 +81,10 @@
                         unsigned long end,
                         [Default=NullString] optional DOMString selectionMode);
 
-    [Custom] void setSelectionRange([Default=Undefined] optional long start,
-                                    [Default=Undefined] optional long end,
-                                    optional DOMString direction);
+    [RaisesException, ImplementedAs=setSelectionRangeForBinding]
+    void setSelectionRange([Default=Undefined] optional long start,
+                           [Default=Undefined] optional long end,
+                           optional DOMString direction);
 
     // Non-standard attributes
     [Reflect] attribute DOMString align;
diff --git a/core/html/HTMLLinkElement.idl b/core/html/HTMLLinkElement.idl
index 35f1e31..e12ff3d 100644
--- a/core/html/HTMLLinkElement.idl
+++ b/core/html/HTMLLinkElement.idl
@@ -27,7 +27,7 @@
     [Reflect] attribute DOMString media;
     [Reflect] attribute DOMString rel;
     [Reflect] attribute DOMString rev;
-    [Custom] attribute DOMSettableTokenList sizes;
+    [CustomSetter] attribute DOMSettableTokenList sizes;
     [Reflect] attribute DOMString target;
     [Reflect] attribute DOMString type;
 
diff --git a/core/html/HTMLMediaElement.idl b/core/html/HTMLMediaElement.idl
index 0dbe3ed..214b391 100644
--- a/core/html/HTMLMediaElement.idl
+++ b/core/html/HTMLMediaElement.idl
@@ -20,10 +20,11 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject
 ] interface HTMLMediaElement : HTMLElement {
 
@@ -43,13 +44,7 @@
 
 readonly attribute TimeRanges buffered;
 void load();
-#if defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA
     DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString keySystem);
-#elif defined(ENABLE_ENCRYPTED_MEDIA_V2) && ENABLE_ENCRYPTED_MEDIA_V2
-    DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString keySystem);
-#else
-DOMString canPlayType([Default=Undefined] optional DOMString type);
-#endif
 
 // ready state
 const unsigned short HAVE_NOTHING = 0;
@@ -92,28 +87,22 @@
 readonly attribute unsigned long webkitAudioDecodedByteCount;
 readonly attribute unsigned long webkitVideoDecodedByteCount;
 
-#if defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA
+// FIXME: add DeprecateAs=PrefixedMediaGenerateKeyRequest when MediaKeys is ready.
+[EnabledAtRuntime=legacyEncryptedMedia, RaisesException] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
+[EnabledAtRuntime=legacyEncryptedMedia, RaisesException] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, [Default=NullString] optional DOMString sessionId);
+[EnabledAtRuntime=legacyEncryptedMedia, RaisesException] void webkitCancelKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, [Default=NullString] optional DOMString sessionId);
+
+[EnabledAtRuntime=legacyEncryptedMedia] attribute EventListener onwebkitkeyadded;
+[EnabledAtRuntime=legacyEncryptedMedia] attribute EventListener onwebkitkeyerror;
+[EnabledAtRuntime=legacyEncryptedMedia] attribute EventListener onwebkitkeymessage;
+[EnabledAtRuntime=legacyEncryptedMedia] attribute EventListener onwebkitneedkey;
 
 #if defined(ENABLE_ENCRYPTED_MEDIA_V2) && ENABLE_ENCRYPTED_MEDIA_V2
-[EnabledAtRuntime=encryptedMedia, RaisesException, DeprecateAs=PrefixedMediaGenerateKeyRequest] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
-[EnabledAtRuntime=encryptedMedia, RaisesException, DeprecateAs=PrefixedMediaAddKey] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, [Default=NullString] optional DOMString sessionId);
-#else
-[EnabledAtRuntime=encryptedMedia, RaisesException] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
-[EnabledAtRuntime=encryptedMedia, RaisesException] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, [Default=NullString] optional DOMString sessionId);
-#endif
-[EnabledAtRuntime=encryptedMedia, RaisesException] void webkitCancelKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, [Default=NullString] optional DOMString sessionId);
-
-    [EnabledAtRuntime=encryptedMedia] attribute EventListener onwebkitkeyadded;
-    [EnabledAtRuntime=encryptedMedia] attribute EventListener onwebkitkeyerror;
-    [EnabledAtRuntime=encryptedMedia] attribute EventListener onwebkitkeymessage;
-#endif
-    [Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2, EnabledAtRuntime=encryptedMedia] attribute EventListener onwebkitneedkey;
-#if defined(ENABLE_ENCRYPTED_MEDIA_V2) && ENABLE_ENCRYPTED_MEDIA_V2
-    [EnabledAtRuntime=encryptedMedia] attribute MediaKeys mediaKeys;
+[EnabledAtRuntime=encryptedMedia] attribute MediaKeys mediaKeys;
 #endif
 
-[EnabledAtRuntime=webkitVideoTrack, RaisesException] TextTrack addTextTrack(DOMString kind, optional DOMString label, optional DOMString language);
-[EnabledAtRuntime=webkitVideoTrack] readonly attribute TextTrackList textTracks;
+[EnabledAtRuntime=videoTrack, RaisesException] TextTrack addTextTrack(DOMString kind, optional DOMString label, optional DOMString language);
+[EnabledAtRuntime=videoTrack] readonly attribute TextTrackList textTracks;
 
 [Reflect, TreatNullAs=NullString] attribute DOMString mediaGroup;
 [CustomSetter] attribute MediaController controller;
diff --git a/core/html/HTMLObjectElement.idl b/core/html/HTMLObjectElement.idl
index 6082baa..a3847f3 100644
--- a/core/html/HTMLObjectElement.idl
+++ b/core/html/HTMLObjectElement.idl
@@ -23,7 +23,7 @@
     CustomNamedSetter,
     CustomIndexedGetter,
     CustomIndexedSetter,
-    CustomCall
+    CustomLegacyCall
 ] interface HTMLObjectElement : HTMLElement {
     readonly attribute HTMLFormElement form;
     [Reflect] attribute DOMString code;
diff --git a/core/html/HTMLOptionsCollection.idl b/core/html/HTMLOptionsCollection.idl
index f5ee73d..84ae0f4 100644
--- a/core/html/HTMLOptionsCollection.idl
+++ b/core/html/HTMLOptionsCollection.idl
@@ -20,13 +20,13 @@
 
 [
     CustomIndexedSetter,
-    CustomNamedGetter,
-    GenerateIsReachable=ImplOwnerNodeRoot,
-    CustomIndexedGetter,
-    DependentLifetime,
+    GenerateIsReachable=ownerNode,
+    DependentLifetime
 ] interface HTMLOptionsCollection : HTMLCollection {
     attribute long selectedIndex;
     [CustomSetter, SetterRaisesException] attribute unsigned long length;
+    [ImplementedAs=item] getter Node(unsigned long index);
+    [ImplementedAs=anonymousNamedGetter] getter (NodeList or Node)(DOMString name);
 
     [Custom] Node namedItem([Default=Undefined] optional DOMString name);
 
diff --git a/core/html/HTMLSelectElement.idl b/core/html/HTMLSelectElement.idl
index 5fd7bb5..858402b 100644
--- a/core/html/HTMLSelectElement.idl
+++ b/core/html/HTMLSelectElement.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    CustomIndexedSetter,
-    SkipVTableValidation
+    CustomIndexedSetter
 ] interface HTMLSelectElement : HTMLElement {
     [Reflect] attribute boolean autofocus;
     [Reflect] attribute boolean disabled;
diff --git a/core/html/HTMLSourceElement.idl b/core/html/HTMLSourceElement.idl
index 67e69f7..763a084 100644
--- a/core/html/HTMLSourceElement.idl
+++ b/core/html/HTMLSourceElement.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-interface HTMLSourceElement : HTMLElement {
+[
+    NoInterfaceObject
+] interface HTMLSourceElement : HTMLElement {
 [Reflect, URL] attribute DOMString src;
     attribute DOMString type;
     attribute DOMString media;
diff --git a/core/html/HTMLSpanElement.idl b/core/html/HTMLSpanElement.idl
index 49eb843..e4f5013 100644
--- a/core/html/HTMLSpanElement.idl
+++ b/core/html/HTMLSpanElement.idl
@@ -25,7 +25,6 @@
 
 // http://www.whatwg.org/specs/web-apps/current-work/#htmlspanelement
 [
-    SkipVTableValidation
 ] interface HTMLSpanElement : HTMLElement {
 };
 
diff --git a/core/html/HTMLTemplateElement.idl b/core/html/HTMLTemplateElement.idl
index 8e91f1c..46c6696 100644
--- a/core/html/HTMLTemplateElement.idl
+++ b/core/html/HTMLTemplateElement.idl
@@ -29,6 +29,6 @@
  */
 
 interface HTMLTemplateElement : HTMLElement {
-    [CacheAttributeForGC] readonly attribute DocumentFragment content;
+    [KeepAttributeAliveForGC] readonly attribute DocumentFragment content;
 };
 
diff --git a/core/html/HTMLTrackElement.idl b/core/html/HTMLTrackElement.idl
index f0d21f6..d27ae46 100644
--- a/core/html/HTMLTrackElement.idl
+++ b/core/html/HTMLTrackElement.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack
+    EnabledAtRuntime=videoTrack
 ] interface HTMLTrackElement : HTMLElement {
     attribute DOMString kind;
     [Reflect, URL] attribute DOMString src;
diff --git a/core/html/HTMLUnknownElement.idl b/core/html/HTMLUnknownElement.idl
index 7d7bbc3..0149113 100644
--- a/core/html/HTMLUnknownElement.idl
+++ b/core/html/HTMLUnknownElement.idl
@@ -27,7 +27,6 @@
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    SkipVTableValidation
 ] interface HTMLUnknownElement : HTMLElement {
 };
 
diff --git a/core/html/HTMLVideoElement.idl b/core/html/HTMLVideoElement.idl
index 5b0cf38..94a0c27 100644
--- a/core/html/HTMLVideoElement.idl
+++ b/core/html/HTMLVideoElement.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-interface HTMLVideoElement : HTMLMediaElement {
+[
+    NoInterfaceObject
+] interface HTMLVideoElement : HTMLMediaElement {
     [Reflect] attribute unsigned long width;
     [Reflect] attribute unsigned long height;
     readonly attribute unsigned long videoWidth;
diff --git a/core/html/ImageData.idl b/core/html/ImageData.idl
index 180eb78..ca7d61c 100644
--- a/core/html/ImageData.idl
+++ b/core/html/ImageData.idl
@@ -27,8 +27,7 @@
  */
 
 [
-    CustomToV8,
-    ImplementationLacksVTable
+    CustomToV8
 ] interface ImageData {
     readonly attribute long width;
     readonly attribute long height;
diff --git a/core/html/MediaController.idl b/core/html/MediaController.idl
index 675cc4d..cedb4c3 100644
--- a/core/html/MediaController.idl
+++ b/core/html/MediaController.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Constructor,
     CallWith=ScriptExecutionContext,
     EventTarget
diff --git a/core/html/MediaError.idl b/core/html/MediaError.idl
index cbc4eb2..0e12164 100644
--- a/core/html/MediaError.idl
+++ b/core/html/MediaError.idl
@@ -24,14 +24,12 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] 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;
-#if (defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA) || (defined(ENABLE_ENCRYPTED_MEDIA_V2) && ENABLE_ENCRYPTED_MEDIA_V2)
       const unsigned short MEDIA_ERR_ENCRYPTED = 5;
-#endif
       readonly attribute unsigned short code;
 };
diff --git a/core/html/MediaKeyError.idl b/core/html/MediaKeyError.idl
index 597bfea..03188d0 100644
--- a/core/html/MediaKeyError.idl
+++ b/core/html/MediaKeyError.idl
@@ -24,9 +24,7 @@
  */
 
 [
-    Conditional=ENCRYPTED_MEDIA|ENCRYPTED_MEDIA_V2,
-    EnabledAtRuntime=encryptedMedia, 
-    ImplementationLacksVTable
+    EnabledAtRuntime=encryptedMediaAnyVersion
 ] interface MediaKeyError {
     const unsigned short MEDIA_KEYERR_UNKNOWN = 1;
     const unsigned short MEDIA_KEYERR_CLIENT = 2;
@@ -35,5 +33,5 @@
     const unsigned short MEDIA_KEYERR_HARDWARECHANGE = 5;
     const unsigned short MEDIA_KEYERR_DOMAIN = 6;
     readonly attribute unsigned short code;
-    [Conditional=ENCRYPTED_MEDIA_V2] readonly attribute unsigned long systemCode;
+    [Conditional=ENCRYPTED_MEDIA_V2, EnabledAtRuntime=encryptedMedia] readonly attribute unsigned long systemCode;
 };
diff --git a/core/html/MediaKeyEvent.idl b/core/html/MediaKeyEvent.idl
index 546a93b..8a5adc3 100644
--- a/core/html/MediaKeyEvent.idl
+++ b/core/html/MediaKeyEvent.idl
@@ -24,9 +24,8 @@
  */
 
 [
-    Conditional=ENCRYPTED_MEDIA,
-    EnabledAtRuntime=encryptedMedia,
-    ConstructorTemplate=Event 
+    EnabledAtRuntime=legacyEncryptedMedia,
+    ConstructorTemplate=Event
 ] interface MediaKeyEvent : Event {
     [InitializedByEventConstructor] readonly attribute DOMString keySystem;
     [InitializedByEventConstructor] readonly attribute DOMString sessionId;
diff --git a/core/html/RadioNodeList.idl b/core/html/RadioNodeList.idl
index d3132f0..498c7a7 100644
--- a/core/html/RadioNodeList.idl
+++ b/core/html/RadioNodeList.idl
@@ -24,6 +24,8 @@
  */
 
 [
+    NoInterfaceObject
 ] interface RadioNodeList : NodeList {
     attribute DOMString value;
+    [ImplementedAs=item] getter Node([IsIndex,Default=Undefined] optional unsigned long index);
 };
diff --git a/core/html/TextMetrics.idl b/core/html/TextMetrics.idl
index 7677784..5f217b8 100644
--- a/core/html/TextMetrics.idl
+++ b/core/html/TextMetrics.idl
@@ -23,7 +23,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 [
-    ImplementationLacksVTable,
 ] interface TextMetrics {
     readonly attribute float width;
 };
diff --git a/core/html/TimeRanges.idl b/core/html/TimeRanges.idl
index 3847b7a..eba7735 100644
--- a/core/html/TimeRanges.idl
+++ b/core/html/TimeRanges.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface TimeRanges {
     readonly attribute unsigned long length;
     [RaisesException] double start(unsigned long index);
diff --git a/core/html/DOMURL.idl b/core/html/URL.idl
similarity index 92%
rename from core/html/DOMURL.idl
rename to core/html/URL.idl
index c9fdd0a..96e7060 100644
--- a/core/html/DOMURL.idl
+++ b/core/html/URL.idl
@@ -26,10 +26,9 @@
 
 [
     Constructor,
-    InterfaceName=URL,
-    ImplementationLacksVTable
-] interface DOMURL {
-    [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(MediaSource? source);
+    ImplementedAs=DOMURL
+] interface URL {
+    [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(WebKitMediaSource? source);
     [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(MediaStream? stream);
     [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(Blob? blob);
     [CallWith=ScriptExecutionContext] static void revokeObjectURL(DOMString url);
diff --git a/core/html/ValidityState.idl b/core/html/ValidityState.idl
index 963c830..582baf9 100644
--- a/core/html/ValidityState.idl
+++ b/core/html/ValidityState.idl
@@ -21,7 +21,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface ValidityState {
     readonly attribute boolean         valueMissing;
     readonly attribute boolean         typeMismatch;
diff --git a/core/html/canvas/ArrayBuffer.idl b/core/html/canvas/ArrayBuffer.idl
index b56950f..5aa02b3 100644
--- a/core/html/canvas/ArrayBuffer.idl
+++ b/core/html/canvas/ArrayBuffer.idl
@@ -24,9 +24,7 @@
  */
 
 [
-    CustomConstructor(unsigned long length),
-    ImplementationNamespace=WTF,
-    ImplementationLacksVTable
+    CustomConstructor(unsigned long length)
 ] interface ArrayBuffer {
     readonly attribute unsigned long byteLength;
     ArrayBuffer slice(long begin, optional long end);
diff --git a/core/html/canvas/ArrayBufferView.idl b/core/html/canvas/ArrayBufferView.idl
index 1ed4f9f..9626c46 100644
--- a/core/html/canvas/ArrayBufferView.idl
+++ b/core/html/canvas/ArrayBufferView.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    CustomToV8,
-    ImplementationNamespace=WTF
+    CustomToV8
 ] interface ArrayBufferView {
     readonly attribute ArrayBuffer buffer;
     readonly attribute unsigned long byteOffset;
diff --git a/core/html/canvas/Canvas2DContextAttributes.idl b/core/html/canvas/Canvas2DContextAttributes.idl
index f266a57..d6178d4 100644
--- a/core/html/canvas/Canvas2DContextAttributes.idl
+++ b/core/html/canvas/Canvas2DContextAttributes.idl
@@ -24,6 +24,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[EnabledAtRuntime=experimentalCanvasFeatures] interface Canvas2DContextAttributes {
+[
+    NoInterfaceObject,
+    EnabledAtRuntime=experimentalCanvasFeatures
+] interface Canvas2DContextAttributes {
     attribute boolean alpha;
 };
diff --git a/core/html/canvas/CanvasGradient.idl b/core/html/canvas/CanvasGradient.idl
index 6ecd51b..0e07d5e 100644
--- a/core/html/canvas/CanvasGradient.idl
+++ b/core/html/canvas/CanvasGradient.idl
@@ -23,7 +23,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 [
-    ImplementationLacksVTable
 ] interface CanvasGradient {
 
     [RaisesException] void addColorStop([Default=Undefined] optional float offset, 
diff --git a/core/html/canvas/CanvasPattern.idl b/core/html/canvas/CanvasPattern.idl
index 4ded936..68003c7 100644
--- a/core/html/canvas/CanvasPattern.idl
+++ b/core/html/canvas/CanvasPattern.idl
@@ -23,7 +23,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 [
-    ImplementationLacksVTable
 ] interface CanvasPattern {
 };
 
diff --git a/core/html/canvas/CanvasRenderingContext.idl b/core/html/canvas/CanvasRenderingContext.idl
index 819ae77..56363a2 100644
--- a/core/html/canvas/CanvasRenderingContext.idl
+++ b/core/html/canvas/CanvasRenderingContext.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     CustomToV8
 ] interface CanvasRenderingContext {
     readonly attribute HTMLCanvasElement canvas;
diff --git a/core/html/canvas/CanvasRenderingContext2D.idl b/core/html/canvas/CanvasRenderingContext2D.idl
index 98df7fa..7e3d07f 100644
--- a/core/html/canvas/CanvasRenderingContext2D.idl
+++ b/core/html/canvas/CanvasRenderingContext2D.idl
@@ -30,37 +30,17 @@
     void save();
     void restore();
 
-    void scale([Default=Undefined] optional float sx,
-               [Default=Undefined] optional float sy);
-    void rotate([Default=Undefined] optional float angle);
-    void translate([Default=Undefined] optional float tx,
-                   [Default=Undefined] optional float ty);
-    void transform([Default=Undefined] optional float m11,
-                   [Default=Undefined] optional float m12,
-                   [Default=Undefined] optional float m21,
-                   [Default=Undefined] optional float m22,
-                   [Default=Undefined] optional float dx,
-                   [Default=Undefined] optional float dy);
-    void setTransform([Default=Undefined] optional float m11,
-                      [Default=Undefined] optional float m12,
-                      [Default=Undefined] optional float m21,
-                      [Default=Undefined] optional float m22,
-                      [Default=Undefined] optional float dx,
-                      [Default=Undefined] optional float dy);
+    void scale(float sx, float sy);
+    void rotate(float angle);
+    void translate(float tx, float ty);
+    void transform(float m11, float m12, float m21, float m22, float dx, float dy);
+    void setTransform(float m11, float m12, float m21, float m22, float dx, float dy);
 
     attribute float globalAlpha;
     [TreatNullAs=NullString] attribute DOMString globalCompositeOperation;
 
-    [RaisesException] CanvasGradient createLinearGradient([Default=Undefined] optional float x0,
-                                        [Default=Undefined] optional float y0,
-                                        [Default=Undefined] optional float x1,
-                                        [Default=Undefined] optional float y1);
-    [RaisesException] CanvasGradient createRadialGradient([Default=Undefined] optional float x0,
-                                        [Default=Undefined] optional float y0,
-                                        [Default=Undefined] optional float r0,
-                                        [Default=Undefined] optional float x1,
-                                        [Default=Undefined] optional float y1,
-                                        [Default=Undefined] optional float r1);
+    [RaisesException] CanvasGradient createLinearGradient(float x0, float y0, float x1, float y1);
+    [RaisesException] CanvasGradient createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1);
 
     attribute float lineWidth;
     [TreatNullAs=NullString] attribute DOMString lineCap;
@@ -80,76 +60,45 @@
     // [Custom] attribute Array webkitLineDash;
     // attribute float webkitLineDashOffset;
 
-    void clearRect([Default=Undefined] optional float x,
-                   [Default=Undefined] optional float y,
-                   [Default=Undefined] optional float width,
-                   [Default=Undefined] optional float height);
-    void fillRect([Default=Undefined] optional float x,
-                  [Default=Undefined] optional float y,
-                  [Default=Undefined] optional float width,
-                  [Default=Undefined] optional float height);
+    void clearRect(float x, float y, float width, float height);
+    void fillRect(float x, float y, float width, float height);
 
     void beginPath();
 
-    attribute DOMPath currentPath;
+    attribute Path currentPath;
 
     // FIXME: These methods should be shared with CanvasRenderingContext2D in the CanvasPathMethods interface.
     void closePath();
-    void moveTo([Default=Undefined] optional float x,
-                [Default=Undefined] optional float y);
-    void lineTo([Default=Undefined] optional float x,
-                [Default=Undefined] optional float y);
-    void quadraticCurveTo([Default=Undefined] optional float cpx,
-                          [Default=Undefined] optional float cpy,
-                          [Default=Undefined] optional float x,
-                          [Default=Undefined] optional float y);
-    void bezierCurveTo([Default=Undefined] optional float cp1x,
-                       [Default=Undefined] optional float cp1y,
-                       [Default=Undefined] optional float cp2x,
-                       [Default=Undefined] optional float cp2y,
-                       [Default=Undefined] optional float x,
-                       [Default=Undefined] optional float y);
-    [RaisesException] void arcTo([Default=Undefined] optional float x1,
-               [Default=Undefined] optional float y1,
-               [Default=Undefined] optional float x2,
-               [Default=Undefined] optional float y2,
-               [Default=Undefined] optional float radius);
-    void rect([Default=Undefined] optional float x,
-              [Default=Undefined] optional float y,
-              [Default=Undefined] optional float width,
-              [Default=Undefined] optional float height);
-    [RaisesException] void arc([Default=Undefined] optional float x,
-             [Default=Undefined] optional float y,
-             [Default=Undefined] optional float radius,
-             [Default=Undefined] optional float startAngle,
-             [Default=Undefined] optional float endAngle,
-             [Default=Undefined] optional boolean anticlockwise);
+    void moveTo(float x, float y);
+    void lineTo(float x, float y);
+    void quadraticCurveTo(float cpx, float cpy, float x, float y);
+    void bezierCurveTo(float cp1x, float cp1y, float cp2x, float cp2y, float x, float y);
+    [RaisesException] void arcTo(float x1, float y1, float x2, float y2, float radius);
+    void rect(float x, float y, float width, float height);
+    [RaisesException] void arc(float x, float y, float radius, float startAngle, float endAngle, [Default=Undefined] optional boolean anticlockwise);
 
     void fill(optional CanvasWindingRule winding);
     void stroke();
     void clip(optional CanvasWindingRule winding);
-    boolean isPointInPath([Default=Undefined] optional float x,
-                          [Default=Undefined] optional float y,
-                          optional CanvasWindingRule winding);
-    boolean isPointInStroke([Default=Undefined] optional float x,
-                            [Default=Undefined] optional float y);
+    boolean isPointInPath(float x, float y, optional CanvasWindingRule winding);
+    boolean isPointInStroke(float x, float y);
 
     // text
     attribute DOMString font;
     attribute DOMString textAlign;
     attribute DOMString textBaseline;
 
-    TextMetrics measureText([Default=Undefined] optional DOMString text);
+    TextMetrics measureText(DOMString text);
 
     // other
 
-    void setAlpha([Default=Undefined] optional float alpha);
-    void setCompositeOperation([Default=Undefined] optional DOMString compositeOperation);
+    void setAlpha(float alpha);
+    void setCompositeOperation(DOMString compositeOperation);
 
-    void setLineWidth([Default=Undefined] optional float width);
-    void setLineCap([Default=Undefined] optional DOMString cap);
-    void setLineJoin([Default=Undefined] optional DOMString join);
-    void setMiterLimit([Default=Undefined] optional float limit);
+    void setLineWidth(float width);
+    void setLineCap(DOMString cap);
+    void setLineJoin(DOMString join);
+    void setMiterLimit(float limit);
 
     void clearShadow();
 
@@ -166,11 +115,7 @@
     void setFillColor(float r, float g, float b, float a);
     void setFillColor(float c, float m, float y, float k, float a);
 
-    void strokeRect([Default=Undefined] optional float x,
-                    [Default=Undefined] optional float y,
-                    [Default=Undefined] optional float width,
-                    [Default=Undefined] optional float height,
-                    optional float lineWidth);
+    void strokeRect(float x, float y, float width, float height);
 
     [RaisesException] void drawImage(HTMLImageElement? image, float x, float y);
     [RaisesException] void drawImage(HTMLImageElement? image, float x, float y, float width, float height);
@@ -207,11 +152,9 @@
     [Custom] attribute custom fillStyle;
 
     // pixel manipulation
-    [RaisesException] ImageData getImageData([Default=Undefined] optional float sx, [Default=Undefined] optional float sy,
-                           [Default=Undefined] optional float sw, [Default=Undefined] optional float sh);
+    [RaisesException] ImageData getImageData(float sx, float sy, float sw, float sh);
 
-    [RaisesException] ImageData webkitGetImageDataHD([Default=Undefined] optional float sx, [Default=Undefined] optional float sy,
-                                   [Default=Undefined] optional float sw, [Default=Undefined] optional float sh);
+    [RaisesException] ImageData webkitGetImageDataHD(float sx, float sy, float sw, float sh);
 
     readonly attribute float webkitBackingStorePixelRatio;
 
diff --git a/core/html/canvas/EXTDrawBuffers.idl b/core/html/canvas/EXTDrawBuffers.idl
index f348e15..e48a70b 100644
--- a/core/html/canvas/EXTDrawBuffers.idl
+++ b/core/html/canvas/EXTDrawBuffers.idl
@@ -26,6 +26,7 @@
 typedef unsigned long GLenum;
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface EXTDrawBuffers {
diff --git a/core/html/canvas/EXTTextureFilterAnisotropic.idl b/core/html/canvas/EXTTextureFilterAnisotropic.idl
index d454a9b..46bd9dd 100644
--- a/core/html/canvas/EXTTextureFilterAnisotropic.idl
+++ b/core/html/canvas/EXTTextureFilterAnisotropic.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface EXTTextureFilterAnisotropic {
diff --git a/core/html/canvas/Float32Array.idl b/core/html/canvas/Float32Array.idl
index 306b7e3..4b872c5 100644
--- a/core/html/canvas/Float32Array.idl
+++ b/core/html/canvas/Float32Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=float,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Float32Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 4;
 
diff --git a/core/html/canvas/Float64Array.idl b/core/html/canvas/Float64Array.idl
index 51870fa..5e67f41 100644
--- a/core/html/canvas/Float64Array.idl
+++ b/core/html/canvas/Float64Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=double,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Float64Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 8;
 
diff --git a/core/html/canvas/Int16Array.idl b/core/html/canvas/Int16Array.idl
index ffa5682..f7fa0cb 100644
--- a/core/html/canvas/Int16Array.idl
+++ b/core/html/canvas/Int16Array.idl
@@ -26,9 +26,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=short,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Int16Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 2;
 
diff --git a/core/html/canvas/Int32Array.idl b/core/html/canvas/Int32Array.idl
index c46242b..b0a42b2 100644
--- a/core/html/canvas/Int32Array.idl
+++ b/core/html/canvas/Int32Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=int,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Int32Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 4;
 
diff --git a/core/html/canvas/Int8Array.idl b/core/html/canvas/Int8Array.idl
index 5cb46ab..299db9b 100644
--- a/core/html/canvas/Int8Array.idl
+++ b/core/html/canvas/Int8Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=signed char,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Int8Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 1;
 
diff --git a/core/html/canvas/OESElementIndexUint.idl b/core/html/canvas/OESElementIndexUint.idl
index 6e76baa..0eb77f8 100644
--- a/core/html/canvas/OESElementIndexUint.idl
+++ b/core/html/canvas/OESElementIndexUint.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    Conditional=WEBGL,
+    NoInterfaceObject,
+    Conditional=WEBGL
 ] interface OESElementIndexUint {
 };
diff --git a/core/html/canvas/OESStandardDerivatives.idl b/core/html/canvas/OESStandardDerivatives.idl
index 6dbfd5d..6ac0e43 100644
--- a/core/html/canvas/OESStandardDerivatives.idl
+++ b/core/html/canvas/OESStandardDerivatives.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface OESStandardDerivatives {
diff --git a/core/html/canvas/OESTextureFloat.idl b/core/html/canvas/OESTextureFloat.idl
index e58a7a3..b926f73 100644
--- a/core/html/canvas/OESTextureFloat.idl
+++ b/core/html/canvas/OESTextureFloat.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    Conditional=WEBGL,
+    NoInterfaceObject,
+    Conditional=WEBGL
 ] interface OESTextureFloat {
 };
diff --git a/core/page/BarInfo.idl b/core/html/canvas/OESTextureFloatLinear.idl
similarity index 77%
copy from core/page/BarInfo.idl
copy to core/html/canvas/OESTextureFloatLinear.idl
index 41a6f5a..fc65a9f 100644
--- a/core/page/BarInfo.idl
+++ b/core/html/canvas/OESTextureFloatLinear.idl
@@ -1,18 +1,15 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * 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. 
+ *     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. 
+ *     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
@@ -27,7 +24,7 @@
  */
 
 [
-] interface BarInfo {
-    readonly attribute boolean visible;
+    NoInterfaceObject,
+    Conditional=WEBGL
+] interface OESTextureFloatLinear {
 };
-
diff --git a/core/html/canvas/OESTextureHalfFloat.idl b/core/html/canvas/OESTextureHalfFloat.idl
index d95898c..597ecf8 100644
--- a/core/html/canvas/OESTextureHalfFloat.idl
+++ b/core/html/canvas/OESTextureHalfFloat.idl
@@ -26,6 +26,7 @@
 typedef unsigned long GLenum;
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface OESTextureHalfFloat {
diff --git a/core/page/BarInfo.idl b/core/html/canvas/OESTextureHalfFloatLinear.idl
similarity index 77%
copy from core/page/BarInfo.idl
copy to core/html/canvas/OESTextureHalfFloatLinear.idl
index 41a6f5a..44ee4b5 100644
--- a/core/page/BarInfo.idl
+++ b/core/html/canvas/OESTextureHalfFloatLinear.idl
@@ -1,18 +1,15 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * 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. 
+ *     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. 
+ *     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
@@ -27,7 +24,7 @@
  */
 
 [
-] interface BarInfo {
-    readonly attribute boolean visible;
+    NoInterfaceObject,
+    Conditional=WEBGL
+] interface OESTextureHalfFloatLinear {
 };
-
diff --git a/core/html/canvas/OESVertexArrayObject.idl b/core/html/canvas/OESVertexArrayObject.idl
index 5de854f..9fcf9ab 100644
--- a/core/html/canvas/OESVertexArrayObject.idl
+++ b/core/html/canvas/OESVertexArrayObject.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL, 
     DoNotCheckConstants
 ] interface OESVertexArrayObject {
diff --git a/core/html/canvas/DOMPath.idl b/core/html/canvas/Path.idl
similarity index 97%
rename from core/html/canvas/DOMPath.idl
rename to core/html/canvas/Path.idl
index 9a68c72..14ed146 100644
--- a/core/html/canvas/DOMPath.idl
+++ b/core/html/canvas/Path.idl
@@ -29,12 +29,12 @@
 [
     EnabledAtRuntime=canvasPath,
     Constructor,
-    Constructor(DOMPath path),
+    Constructor(Path path),
 #if defined(ENABLE_SVG) && ENABLE_SVG
     Constructor(DOMString text),
 #endif
-    InterfaceName=Path
-] interface DOMPath {
+    ImplementedAs=DOMPath
+] interface Path {
 
     // FIXME: These methods should be shared with CanvasRenderingContext2D in the CanvasPathMethods interface.
     void closePath();
diff --git a/core/html/canvas/Uint16Array.idl b/core/html/canvas/Uint16Array.idl
index 4268ef6..555fe86 100644
--- a/core/html/canvas/Uint16Array.idl
+++ b/core/html/canvas/Uint16Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=unsigned short,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Uint16Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 2;
 
diff --git a/core/html/canvas/Uint32Array.idl b/core/html/canvas/Uint32Array.idl
index 76936df..069a8d9 100644
--- a/core/html/canvas/Uint32Array.idl
+++ b/core/html/canvas/Uint32Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=unsigned int,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Uint32Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 4;
 
diff --git a/core/html/canvas/Uint8Array.idl b/core/html/canvas/Uint8Array.idl
index b6e3917..d2f80a3 100644
--- a/core/html/canvas/Uint8Array.idl
+++ b/core/html/canvas/Uint8Array.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=unsigned char,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Uint8Array : ArrayBufferView {
     const unsigned long BYTES_PER_ELEMENT = 1;
 
diff --git a/core/html/canvas/Uint8ClampedArray.idl b/core/html/canvas/Uint8ClampedArray.idl
index cd15b26..2d9273e 100644
--- a/core/html/canvas/Uint8ClampedArray.idl
+++ b/core/html/canvas/Uint8ClampedArray.idl
@@ -27,9 +27,7 @@
 [
     ConstructorTemplate=TypedArray,
     CustomToV8,
-    DoNotCheckConstants,
-    TypedArray=unsigned char,
-    ImplementationNamespace=WTF
+    DoNotCheckConstants
 ] interface Uint8ClampedArray : Uint8Array {
     const unsigned long BYTES_PER_ELEMENT = 1;
 
diff --git a/core/html/canvas/WebGLActiveInfo.idl b/core/html/canvas/WebGLActiveInfo.idl
index 32ff970..5baf934 100644
--- a/core/html/canvas/WebGLActiveInfo.idl
+++ b/core/html/canvas/WebGLActiveInfo.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=WEBGL,
-    ImplementationLacksVTable
+    Conditional=WEBGL
 ] interface WebGLActiveInfo {
     readonly attribute long size;
     readonly attribute unsigned long type;
diff --git a/core/html/canvas/WebGLBuffer.idl b/core/html/canvas/WebGLBuffer.idl
index f43cd63..564c543 100644
--- a/core/html/canvas/WebGLBuffer.idl
+++ b/core/html/canvas/WebGLBuffer.idl
@@ -24,6 +24,6 @@
  */
 
 [
-    Conditional=WEBGL,
+    Conditional=WEBGL
 ] interface WebGLBuffer {
 };
diff --git a/core/html/canvas/WebGLCompressedTextureATC.idl b/core/html/canvas/WebGLCompressedTextureATC.idl
index 10db90e..b94f2c5 100644
--- a/core/html/canvas/WebGLCompressedTextureATC.idl
+++ b/core/html/canvas/WebGLCompressedTextureATC.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface WebGLCompressedTextureATC {
diff --git a/core/html/canvas/WebGLCompressedTexturePVRTC.idl b/core/html/canvas/WebGLCompressedTexturePVRTC.idl
index 36e73dc..20e24a1 100644
--- a/core/html/canvas/WebGLCompressedTexturePVRTC.idl
+++ b/core/html/canvas/WebGLCompressedTexturePVRTC.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface WebGLCompressedTexturePVRTC {
diff --git a/core/html/canvas/WebGLCompressedTextureS3TC.idl b/core/html/canvas/WebGLCompressedTextureS3TC.idl
index 4e96637..d60f29f 100644
--- a/core/html/canvas/WebGLCompressedTextureS3TC.idl
+++ b/core/html/canvas/WebGLCompressedTextureS3TC.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface WebGLCompressedTextureS3TC {
diff --git a/core/html/canvas/WebGLContextAttributes.idl b/core/html/canvas/WebGLContextAttributes.idl
index df45175..c29355b 100644
--- a/core/html/canvas/WebGLContextAttributes.idl
+++ b/core/html/canvas/WebGLContextAttributes.idl
@@ -25,7 +25,8 @@
  */
 
 [
-    Conditional=WEBGL,
+    NoInterfaceObject,
+    Conditional=WEBGL
 ] interface WebGLContextAttributes {
     attribute boolean alpha;
     attribute boolean depth;
diff --git a/core/html/canvas/WebGLDebugRendererInfo.idl b/core/html/canvas/WebGLDebugRendererInfo.idl
index bd37ddb..8846e4e 100644
--- a/core/html/canvas/WebGLDebugRendererInfo.idl
+++ b/core/html/canvas/WebGLDebugRendererInfo.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface WebGLDebugRendererInfo {
diff --git a/core/html/canvas/WebGLDebugShaders.idl b/core/html/canvas/WebGLDebugShaders.idl
index 59e0cdd..b269ca2 100644
--- a/core/html/canvas/WebGLDebugShaders.idl
+++ b/core/html/canvas/WebGLDebugShaders.idl
@@ -24,7 +24,8 @@
  */
 
 [
-    Conditional=WEBGL,
+    NoInterfaceObject,
+    Conditional=WEBGL
 ] interface WebGLDebugShaders {
     [StrictTypeChecking, TreatReturnedNullStringAs=Null, RaisesException] DOMString getTranslatedShaderSource(WebGLShader shader);
 };
diff --git a/core/html/canvas/WebGLDepthTexture.idl b/core/html/canvas/WebGLDepthTexture.idl
index 84f3acd..9740cfe 100644
--- a/core/html/canvas/WebGLDepthTexture.idl
+++ b/core/html/canvas/WebGLDepthTexture.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL,
     DoNotCheckConstants
 ] interface WebGLDepthTexture {
diff --git a/core/html/canvas/WebGLLoseContext.idl b/core/html/canvas/WebGLLoseContext.idl
index ee07a4f..310f84d 100644
--- a/core/html/canvas/WebGLLoseContext.idl
+++ b/core/html/canvas/WebGLLoseContext.idl
@@ -24,7 +24,8 @@
  */
 
 [
-    Conditional=WEBGL,
+    NoInterfaceObject,
+    Conditional=WEBGL
 ] interface WebGLLoseContext {
     [StrictTypeChecking] void loseContext();
     [StrictTypeChecking] void restoreContext();
diff --git a/core/html/canvas/WebGLShaderPrecisionFormat.idl b/core/html/canvas/WebGLShaderPrecisionFormat.idl
index b31a58d..1b34f65 100644
--- a/core/html/canvas/WebGLShaderPrecisionFormat.idl
+++ b/core/html/canvas/WebGLShaderPrecisionFormat.idl
@@ -25,8 +25,7 @@
  */
 
 [
-    Conditional=WEBGL,
-    ImplementationLacksVTable
+    Conditional=WEBGL
 ] interface WebGLShaderPrecisionFormat {
     readonly attribute long rangeMin;
     readonly attribute long rangeMax;
diff --git a/core/html/canvas/WebGLVertexArrayObjectOES.idl b/core/html/canvas/WebGLVertexArrayObjectOES.idl
index 1e78ddd..ce9f18d 100644
--- a/core/html/canvas/WebGLVertexArrayObjectOES.idl
+++ b/core/html/canvas/WebGLVertexArrayObjectOES.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBGL
 ] interface WebGLVertexArrayObjectOES {
 };
diff --git a/modules/inputmethod/Composition.idl b/core/html/ime/Composition.idl
similarity index 97%
rename from modules/inputmethod/Composition.idl
rename to core/html/ime/Composition.idl
index 155d74b..43ead5c 100644
--- a/modules/inputmethod/Composition.idl
+++ b/core/html/ime/Composition.idl
@@ -30,7 +30,7 @@
 
 // http://www.w3.org/TR/ime-api/
 [
-  ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Composition {
     readonly attribute Node text;
     readonly attribute Range caret;
diff --git a/modules/inputmethod/InputMethodContext.idl b/core/html/ime/InputMethodContext.idl
similarity index 98%
rename from modules/inputmethod/InputMethodContext.idl
rename to core/html/ime/InputMethodContext.idl
index 0a6a23a..b86a1cd 100644
--- a/modules/inputmethod/InputMethodContext.idl
+++ b/core/html/ime/InputMethodContext.idl
@@ -30,7 +30,6 @@
 
 // http://www.w3.org/TR/ime-api/
 [
-    ImplementationLacksVTable
 ] interface InputMethodContext {
     readonly attribute Composition composition;
     attribute boolean enabled;
diff --git a/core/html/shadow/HTMLContentElement.idl b/core/html/shadow/HTMLContentElement.idl
index e5c20d8..77095c2 100644
--- a/core/html/shadow/HTMLContentElement.idl
+++ b/core/html/shadow/HTMLContentElement.idl
@@ -25,7 +25,6 @@
  */
 
 [
-    SkipVTableValidation
 ] interface HTMLContentElement : HTMLElement {
     [Reflect] attribute DOMString select;
     attribute boolean resetStyleInheritance;
diff --git a/core/html/track/TextTrack.idl b/core/html/track/TextTrack.idl
index a2ad6d1..00a44a8 100644
--- a/core/html/track/TextTrack.idl
+++ b/core/html/track/TextTrack.idl
@@ -20,13 +20,12 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack,
-    EventTarget,
-    SkipVTableValidation
+    EnabledAtRuntime=videoTrack,
+    EventTarget
 ] interface TextTrack {
     readonly attribute DOMString kind;
     readonly attribute DOMString label;
@@ -48,11 +47,11 @@
 #endif
 
     // EventTarget interface
-    void addEventListener(DOMString type, 
-                          EventListener listener, 
+    void addEventListener(DOMString type,
+                          EventListener listener,
                           optional boolean useCapture);
-    void removeEventListener(DOMString type, 
-                             EventListener listener, 
+    void removeEventListener(DOMString type,
+                             EventListener listener,
                              optional boolean useCapture);
     [RaisesException] boolean dispatchEvent(Event evt);
 };
diff --git a/core/html/track/TextTrackCue.idl b/core/html/track/TextTrackCue.idl
index ea2ca4c..88725a4 100644
--- a/core/html/track/TextTrackCue.idl
+++ b/core/html/track/TextTrackCue.idl
@@ -20,15 +20,14 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack,
+    EnabledAtRuntime=videoTrack,
     Constructor(double startTime, double endTime, DOMString text),
     CallWith=ScriptExecutionContext,
-    EventTarget,
-    ImplementationLacksVTable
+    EventTarget
 ] interface TextTrackCue {
     readonly attribute TextTrack track;
 
@@ -51,11 +50,11 @@
     attribute EventListener onexit;
 
     // EventTarget interface
-    void addEventListener(DOMString type, 
-                          EventListener listener, 
+    void addEventListener(DOMString type,
+                          EventListener listener,
                           optional boolean useCapture);
-    void removeEventListener(DOMString type, 
-                             EventListener listener, 
+    void removeEventListener(DOMString type,
+                             EventListener listener,
                              optional boolean useCapture);
     [RaisesException] boolean dispatchEvent(Event evt);
 
diff --git a/core/html/track/TextTrackCueList.idl b/core/html/track/TextTrackCueList.idl
index a77ede9..155d419 100644
--- a/core/html/track/TextTrackCueList.idl
+++ b/core/html/track/TextTrackCueList.idl
@@ -20,12 +20,11 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack,
-    ImplementationLacksVTable
+    EnabledAtRuntime=videoTrack
 ] interface TextTrackCueList {
     readonly attribute unsigned long length;
     getter TextTrackCue item(unsigned long index);
diff --git a/core/html/track/TextTrackList.idl b/core/html/track/TextTrackList.idl
index 7fcbacd..905efc3 100644
--- a/core/html/track/TextTrackList.idl
+++ b/core/html/track/TextTrackList.idl
@@ -20,13 +20,13 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack,
+    EnabledAtRuntime=videoTrack,
     EventTarget,
-    GenerateIsReachable=ImplOwnerRoot
+    GenerateIsReachable=owner
 ] interface TextTrackList {
     readonly attribute unsigned long length;
     getter TextTrack item(unsigned long index);
diff --git a/core/html/track/TextTrackRegion.idl b/core/html/track/TextTrackRegion.idl
index 2e80ca3..236d903 100644
--- a/core/html/track/TextTrackRegion.idl
+++ b/core/html/track/TextTrackRegion.idl
@@ -20,12 +20,12 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
     Conditional=WEBVTT_REGIONS,
-    EnabledAtRuntime=webkitVideoTrack,
+    EnabledAtRuntime=videoTrack,
     Constructor()
 ] interface TextTrackRegion {
     readonly attribute TextTrack track;
diff --git a/core/html/track/TextTrackRegionList.idl b/core/html/track/TextTrackRegionList.idl
index c6274cb..ad5611f 100644
--- a/core/html/track/TextTrackRegionList.idl
+++ b/core/html/track/TextTrackRegionList.idl
@@ -20,13 +20,13 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEBVTT_REGIONS,
-    EnabledAtRuntime=webkitVideoTrack,
-    ImplementationLacksVTable
+    EnabledAtRuntime=videoTrack
 ] interface TextTrackRegionList {
     readonly attribute unsigned long length;
     getter TextTrackRegion item(unsigned long index);
diff --git a/core/html/track/TrackEvent.idl b/core/html/track/TrackEvent.idl
index 1ebb29a..0b1a0e9 100644
--- a/core/html/track/TrackEvent.idl
+++ b/core/html/track/TrackEvent.idl
@@ -20,11 +20,11 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 [
-    EnabledAtRuntime=webkitVideoTrack,
+    EnabledAtRuntime=videoTrack,
     ConstructorTemplate=Event
 ] interface TrackEvent : Event {
     [InitializedByEventConstructor, CustomGetter] readonly attribute object track;
diff --git a/core/inspector/InjectedScriptHost.idl b/core/inspector/InjectedScriptHost.idl
index b285d67..4d9f484 100644
--- a/core/inspector/InjectedScriptHost.idl
+++ b/core/inspector/InjectedScriptHost.idl
@@ -31,7 +31,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface InjectedScriptHost {
     void clearConsoleMessages();
 
diff --git a/core/inspector/InspectorFrontendHost.idl b/core/inspector/InspectorFrontendHost.idl
index 2ebcf0a..d3ca499 100644
--- a/core/inspector/InspectorFrontendHost.idl
+++ b/core/inspector/InspectorFrontendHost.idl
@@ -31,7 +31,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface InspectorFrontendHost {
     void closeWindow();
     void bringToFront();
diff --git a/core/inspector/JavaScriptCallFrame.idl b/core/inspector/JavaScriptCallFrame.idl
index ebd87d4..86ae41d 100644
--- a/core/inspector/JavaScriptCallFrame.idl
+++ b/core/inspector/JavaScriptCallFrame.idl
@@ -24,8 +24,8 @@
  */
 
 [
-    DoNotCheckConstants,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    DoNotCheckConstants
 ] interface JavaScriptCallFrame {
 
     // Scope type
diff --git a/core/inspector/ScriptProfile.idl b/core/inspector/ScriptProfile.idl
deleted file mode 100644
index 8569aae..0000000
--- a/core/inspector/ScriptProfile.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- * 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 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.
- */
-
-[
-] interface ScriptProfile {
-    readonly attribute DOMString title;
-    readonly attribute unsigned long uid;
-    readonly attribute ScriptProfileNode head;
-    readonly attribute double idleTime;
-};
-
diff --git a/core/inspector/ScriptProfileNode.idl b/core/inspector/ScriptProfileNode.idl
deleted file mode 100644
index de7bc62..0000000
--- a/core/inspector/ScriptProfileNode.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- * 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 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.
- */
-
-[
-] interface ScriptProfileNode {
-    readonly attribute DOMString functionName;
-    readonly attribute DOMString url;
-    readonly attribute unsigned long lineNumber;
-    readonly attribute double totalTime;
-    readonly attribute double selfTime;
-    readonly attribute unsigned long numberOfCalls;
-    sequence<ScriptProfileNode> children();
-    readonly attribute boolean visible;
-    readonly attribute unsigned long callUID;
-};
-
diff --git a/core/loader/appcache/DOMApplicationCache.idl b/core/loader/appcache/DOMApplicationCache.idl
index ac54056..c58f5e3 100644
--- a/core/loader/appcache/DOMApplicationCache.idl
+++ b/core/loader/appcache/DOMApplicationCache.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     EventTarget,
     DoNotCheckConstants
 ] interface DOMApplicationCache {
diff --git a/core/page/BarInfo.idl b/core/page/BarProp.idl
similarity index 98%
rename from core/page/BarInfo.idl
rename to core/page/BarProp.idl
index 41a6f5a..8f91d38 100644
--- a/core/page/BarInfo.idl
+++ b/core/page/BarProp.idl
@@ -26,8 +26,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-] interface BarInfo {
+interface BarProp {
     readonly attribute boolean visible;
 };
 
diff --git a/core/page/Console.idl b/core/page/Console.idl
index a826d59..e536e49 100644
--- a/core/page/Console.idl
+++ b/core/page/Console.idl
@@ -27,6 +27,7 @@
  */
 
 [
+    NoInterfaceObject
 ] interface Console {
 
     [CallWith=ScriptArguments|ScriptState] void debug();
@@ -37,17 +38,13 @@
     [CallWith=ScriptArguments|ScriptState] void dir();
     [CallWith=ScriptArguments|ScriptState] void dirxml();
     [CallWith=ScriptArguments|ScriptState] void table();
-    [Custom, CallWith=ScriptArguments|ScriptState] void trace();
-    [Custom, CallWith=ScriptArguments|ScriptState, ImplementedAs=assertCondition] void assert(boolean condition);
+    [CallWith=ScriptArguments|ScriptState] void trace();
+    [CallWith=ScriptArguments|ScriptState, ImplementedAs=assertCondition] void assert([Default=Undefined] optional boolean condition);
     [CallWith=ScriptArguments|ScriptState] void count();
     [CallWith=ScriptArguments] void markTimeline();
 
-    // As per spec: http://www.w3.org/TR/WebIDL/#idl-sequence
-    // "Sequences must not be used as the type of an attribute, constant or exception field."
-    // FIXME: this will lead to BUG console.profiles !== console.profiles as profile will always returns new array.
-    readonly attribute ScriptProfile[] profiles;
-    [Custom] void profile(DOMString title);
-    [Custom] void profileEnd(DOMString title);
+    [CallWith=ScriptState] void profile([Default=NullString] optional DOMString title);
+    [CallWith=ScriptState] void profileEnd([Default=NullString] optional DOMString title);
 
     void time([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString title);
     [CallWith=ScriptState] void timeEnd([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString title);
diff --git a/core/page/Crypto.idl b/core/page/Crypto.idl
index 9e632ef..0cabce2 100644
--- a/core/page/Crypto.idl
+++ b/core/page/Crypto.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Crypto {
     [Custom, RaisesException] ArrayBufferView getRandomValues(ArrayBufferView array);
 };
diff --git a/core/page/DOMPoint.idl b/core/page/DOMPoint.idl
index f131917..b5fb534 100644
--- a/core/page/DOMPoint.idl
+++ b/core/page/DOMPoint.idl
@@ -26,8 +26,7 @@
 [
     CustomConstructor,
     CustomConstructor(float x, float y),
-    InterfaceName=WebKitPoint,
-    ImplementationLacksVTable
+    InterfaceName=WebKitPoint
 ] interface DOMPoint {
     attribute float x;
     attribute float y;
diff --git a/core/page/DOMWindow.idl b/core/page/DOMWindow.idl
index f68dd94..c256b05 100644
--- a/core/page/DOMWindow.idl
+++ b/core/page/DOMWindow.idl
@@ -30,25 +30,24 @@
     CustomToV8,
     CustomNamedGetter,
     DoNotGenerateWrap,
-    CustomIndexedGetter,
     InterfaceName=Window
 ] interface DOMWindow {
     // DOM Level 0
     [Replaceable] readonly attribute Screen screen;
-    [Replaceable, DoNotCheckSecurityOnGetter] readonly attribute History history;
-    [Replaceable] readonly attribute BarInfo locationbar;
-    [Replaceable] readonly attribute BarInfo menubar;
-    [Replaceable] readonly attribute BarInfo personalbar;
-    [Replaceable] readonly attribute BarInfo scrollbars;
-    [Replaceable] readonly attribute BarInfo statusbar;
-    [Replaceable] readonly attribute BarInfo toolbar;
+    [Replaceable] readonly attribute History history;
+    [Replaceable] readonly attribute BarProp locationbar;
+    [Replaceable] readonly attribute BarProp menubar;
+    [Replaceable] readonly attribute BarProp personalbar;
+    [Replaceable] readonly attribute BarProp scrollbars;
+    [Replaceable] readonly attribute BarProp statusbar;
+    [Replaceable] readonly attribute BarProp toolbar;
     [Replaceable, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds] readonly attribute Navigator navigator;
     [Replaceable] readonly attribute Navigator clientInformation;
     readonly attribute Crypto crypto;
-    [DoNotCheckSecurity, CustomSetter, Unforgeable] attribute Location location;
+    [DoNotCheckSecurity, CustomSetter, Unforgeable, Replaceable, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] readonly attribute Location location;
     [MeasureAs=WindowEvent, NotEnumerable, Replaceable, CustomGetter, CustomSetter] readonly attribute Event event;
 
-    DOMSelection getSelection();
+    Selection getSelection();
 
     [CheckSecurityForNode] readonly attribute Element frameElement;
 
@@ -182,7 +181,7 @@
     [RaisesException] DOMString atob([TreatNullAs=NullString,Default=Undefined] optional DOMString string);
     [RaisesException] DOMString btoa([TreatNullAs=NullString,Default=Undefined] optional DOMString string);
 
-    [Replaceable] attribute DOMWindowCSS CSS;
+    [Replaceable] readonly attribute CSS CSS;
 
     // Events
     attribute EventListener onabort;
@@ -283,471 +282,58 @@
                                       optional boolean useCapture);
     [RaisesException] boolean dispatchEvent(Event evt);
 
-    [Custom] void captureEvents(/*in long eventFlags*/);
-    [Custom] void releaseEvents(/*in long eventFlags*/);
-
-    // Global constructors
-    attribute StyleSheetConstructor StyleSheet;
-    attribute CSSStyleSheetConstructor CSSStyleSheet;
-
-    attribute CSSValueConstructor CSSValue;
-    attribute CSSPrimitiveValueConstructor CSSPrimitiveValue;
-    attribute CSSValueListConstructor CSSValueList;
-    attribute WebKitCSSTransformValueConstructor WebKitCSSTransformValue;
-
-    attribute WebKitCSSFilterRuleConstructor WebKitCSSFilterRule;
-    attribute WebKitCSSMixFunctionValueConstructor WebKitCSSMixFunctionValue;
-
-    attribute WebKitCSSFilterValueConstructor WebKitCSSFilterValue;
-
-#if defined(ENABLE_CSS_DEVICE_ADAPTATION) && ENABLE_CSS_DEVICE_ADAPTATION
-    attribute WebKitCSSViewportRuleConstructor WebKitCSSViewportRule;
-#endif
-
-    attribute CSSRuleConstructor CSSRule;
-    attribute CSSCharsetRuleConstructor CSSCharsetRule;
-    attribute CSSFontFaceRuleConstructor CSSFontFaceRule;
-    attribute CSSHostRuleConstructor CSSHostRule;
-    attribute CSSImportRuleConstructor CSSImportRule;
-    attribute CSSMediaRuleConstructor CSSMediaRule;
-    attribute CSSPageRuleConstructor CSSPageRule;
-    attribute CSSStyleRuleConstructor CSSStyleRule;
-
-    attribute CSSStyleDeclarationConstructor CSSStyleDeclaration;
-    attribute MediaListConstructor MediaList;
-    attribute CounterConstructor Counter;
-    attribute CSSRuleListConstructor CSSRuleList;
-    attribute RectConstructor Rect;
-    attribute RGBColorConstructor RGBColor;
-    attribute StyleSheetListConstructor StyleSheetList;
-
-    // FIXME: Implement the commented-out global constructors for interfaces listed in DOM Level 3 Core specification.
-    attribute DOMCoreExceptionConstructor DOMException;
-    attribute DOMStringListConstructor DOMStringList;
-//        attribute NameListConstructor NameList;
-//        attribute DOMImplementationListConstructor DOMImplementationList;
-//        attribute DOMImplementationSourceConstructor DOMImplementationSource;
-    attribute DOMImplementationConstructor DOMImplementation;
-    attribute DOMSettableTokenListConstructor DOMSettableTokenList;
-    attribute DOMTokenListConstructor DOMTokenList;
-    attribute DocumentFragmentConstructor DocumentFragment;
-    attribute DocumentConstructor Document;
-    attribute NodeConstructor Node;
-    attribute NodeListConstructor NodeList;
-    attribute NamedNodeMapConstructor NamedNodeMap;
-    attribute CharacterDataConstructor CharacterData;
-    attribute AttrConstructor Attr;
-    attribute ElementConstructor Element;
-    attribute TextConstructor Text;
-    attribute CommentConstructor Comment;
-//        attribute TypeInfoConstructor TypeInfo;
-//        attribute UserDataHandlerConstructor UserDataHandler;
-//        attribute DOMErrorConstructor DOMError;
-//        attribute DOMErrorHandlerConstructor DOMErrorHandler
-//        attribute DOMLocatorConstructor DOMLocator;
-//        attribute DOMConfigurationConstructor DOMConfiguration;
-    attribute CDATASectionConstructor CDATASection;
-    attribute DocumentTypeConstructor DocumentType;
-    attribute NotationConstructor Notation;
-    attribute EntityConstructor Entity;
-    attribute EntityReferenceConstructor EntityReference;
-    [EnabledAtRuntime=canvasPath] attribute DOMPathConstructor Path;
-    attribute ProcessingInstructionConstructor ProcessingInstruction;
-    attribute ShadowRootConstructor WebKitShadowRoot;
-    attribute HTMLContentElementConstructor HTMLContentElement;
-    attribute HTMLShadowElementConstructor HTMLShadowElement;
-
-    attribute DOMSelectionConstructor Selection;
-    attribute DOMWindowConstructor Window;
-
-    attribute HTMLDocumentConstructor HTMLDocument;
-    attribute HTMLElementConstructor HTMLElement;
-    attribute HTMLAnchorElementConstructor HTMLAnchorElement;
-    attribute HTMLAppletElementConstructor HTMLAppletElement;
-    attribute HTMLAreaElementConstructor HTMLAreaElement;
-    attribute HTMLBRElementConstructor HTMLBRElement;
-    attribute HTMLBaseElementConstructor HTMLBaseElement;
-    attribute HTMLBodyElementConstructor HTMLBodyElement;
-    attribute HTMLButtonElementConstructor HTMLButtonElement;
-    attribute HTMLCanvasElementConstructor HTMLCanvasElement;
-    attribute HTMLDListElementConstructor HTMLDListElement;
-    [Conditional=DATALIST_ELEMENT] attribute HTMLDataListElementConstructor HTMLDataListElement;
-    [EnabledPerContext=dialogElement] attribute HTMLDialogElementConstructor HTMLDialogElement;
-    attribute HTMLDirectoryElementConstructor HTMLDirectoryElement;
-    attribute HTMLDivElementConstructor HTMLDivElement;
-    attribute HTMLEmbedElementConstructor HTMLEmbedElement;
-    attribute HTMLFieldSetElementConstructor HTMLFieldSetElement;
-    attribute HTMLFontElementConstructor HTMLFontElement;
-    attribute HTMLFormElementConstructor HTMLFormElement;
-    attribute HTMLFrameElementConstructor HTMLFrameElement;
-    attribute HTMLFrameSetElementConstructor HTMLFrameSetElement;
-    attribute HTMLHRElementConstructor HTMLHRElement;
-    attribute HTMLHeadElementConstructor HTMLHeadElement;
-    attribute HTMLHeadingElementConstructor HTMLHeadingElement;
-    attribute HTMLHtmlElementConstructor HTMLHtmlElement;
-    attribute HTMLIFrameElementConstructor HTMLIFrameElement;
-    attribute HTMLImageElementConstructor HTMLImageElement;
-    attribute HTMLInputElementConstructor HTMLInputElement;
-    attribute HTMLKeygenElementConstructor HTMLKeygenElement;
-    attribute HTMLLIElementConstructor HTMLLIElement;
-    attribute HTMLLabelElementConstructor HTMLLabelElement;
-    attribute HTMLLegendElementConstructor HTMLLegendElement;
-    attribute HTMLLinkElementConstructor HTMLLinkElement;
-    attribute HTMLMapElementConstructor HTMLMapElement;
-    attribute HTMLMarqueeElementConstructor HTMLMarqueeElement;
-    attribute HTMLMenuElementConstructor HTMLMenuElement;
-    attribute HTMLMetaElementConstructor HTMLMetaElement;
-    attribute HTMLMeterElementConstructor HTMLMeterElement;
-    attribute HTMLModElementConstructor HTMLModElement;
-    attribute HTMLOListElementConstructor HTMLOListElement;
-    attribute HTMLObjectElementConstructor HTMLObjectElement;
-    attribute HTMLOptGroupElementConstructor HTMLOptGroupElement;
-    attribute HTMLOptionElementConstructor HTMLOptionElement;
-    attribute HTMLOutputElementConstructor HTMLOutputElement;
-    attribute HTMLParagraphElementConstructor HTMLParagraphElement;
-    attribute HTMLParamElementConstructor HTMLParamElement;
-    attribute HTMLPreElementConstructor HTMLPreElement;
-    attribute HTMLProgressElementConstructor HTMLProgressElement;
-    attribute HTMLQuoteElementConstructor HTMLQuoteElement;
-    attribute HTMLScriptElementConstructor HTMLScriptElement;
-    attribute HTMLSelectElementConstructor HTMLSelectElement;
-    attribute HTMLSpanElementConstructor HTMLSpanElement;
-    attribute HTMLStyleElementConstructor HTMLStyleElement;
-    attribute HTMLTableCaptionElementConstructor HTMLTableCaptionElement;
-    attribute HTMLTableCellElementConstructor HTMLTableCellElement;
-    attribute HTMLTableColElementConstructor HTMLTableColElement;
-    attribute HTMLTableElementConstructor HTMLTableElement;
-    attribute HTMLTableRowElementConstructor HTMLTableRowElement;
-    attribute HTMLTableSectionElementConstructor HTMLTableSectionElement;
-    attribute HTMLTemplateElementConstructor HTMLTemplateElement;
-    attribute HTMLTextAreaElementConstructor HTMLTextAreaElement;
-    attribute HTMLTitleElementConstructor HTMLTitleElement;
-    attribute HTMLUListElementConstructor HTMLUListElement;
-
-    attribute HTMLCollectionConstructor HTMLCollection;
-    attribute HTMLAllCollectionConstructor HTMLAllCollection;
-    attribute HTMLFormControlsCollectionConstructor HTMLFormControlsCollection;
-    attribute HTMLOptionsCollectionConstructor HTMLOptionsCollection;
-    attribute HTMLUnknownElementConstructor HTMLUnknownElement;
-
+    // Additional constructors.
+    attribute TransitionEventConstructor WebKitTransitionEvent;
     [CustomConstructor] attribute HTMLImageElementConstructorConstructor Image; // Usable with new operator
-    attribute HTMLOptionElementConstructorConstructor Option; // Usable with new operator
+    // Mozilla has a separate XMLDocument object for XML documents.
+    // We just use Document for this.
+    attribute DocumentConstructor XMLDocument;
+    attribute URLConstructor webkitURL; // FIXME: deprecate this.
+    attribute MutationObserverConstructor WebKitMutationObserver; // FIXME: Add metrics to determine when we can remove this.
+    attribute IDBCursorConstructor webkitIDBCursor;
+    attribute IDBDatabaseConstructor webkitIDBDatabase;
+    attribute IDBFactoryConstructor webkitIDBFactory;
+    attribute IDBIndexConstructor webkitIDBIndex;
+    attribute IDBKeyRangeConstructor webkitIDBKeyRange;
+    attribute IDBObjectStoreConstructor webkitIDBObjectStore;
+    attribute IDBRequestConstructor webkitIDBRequest;
+    attribute IDBTransactionConstructor webkitIDBTransaction;
 
-    [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=encryptedMedia] attribute MediaKeyEventConstructor MediaKeyEvent;
-    [Conditional=ENCRYPTED_MEDIA_V2, EnabledAtRuntime=encryptedMedia] attribute MediaKeysConstructor MediaKeys;
-    [Conditional=ENCRYPTED_MEDIA_V2|ENCRYPTED_MEDIA, EnabledAtRuntime=encryptedMedia] attribute MediaKeyErrorConstructor MediaKeyError;
-    [Conditional=ENCRYPTED_MEDIA_V2, EnabledAtRuntime=encryptedMedia] attribute MediaKeyMessageEventConstructor MediaKeyMessageEvent;
-    [Conditional=ENCRYPTED_MEDIA_V2, EnabledAtRuntime=encryptedMedia] attribute MediaKeyNeededEventConstructor MediaKeyNeededEvent;
-
-    [EnabledAtRuntime=webkitVideoTrack] attribute HTMLTrackElementConstructor HTMLTrackElement;
-    [EnabledAtRuntime=webkitVideoTrack] attribute TextTrackConstructor TextTrack;
-    [EnabledAtRuntime=webkitVideoTrack] attribute TextTrackCueConstructor TextTrackCue; // Usable with the new operator
-    [EnabledAtRuntime=webkitVideoTrack] attribute TextTrackCueListConstructor TextTrackCueList;
-    [EnabledAtRuntime=webkitVideoTrack] attribute TextTrackListConstructor TextTrackList;
-    [Conditional=WEBVTT_REGIONS, EnabledAtRuntime=webkitVideoTrack] attribute TextTrackRegionConstructor TextTrackRegion; // Usable with the new operator
-    [EnabledAtRuntime=webkitVideoTrack] attribute TrackEventConstructor TrackEvent;
-
-    [EnabledAtRuntime=media] attribute HTMLAudioElementConstructorConstructor Audio; // Usable with the new operator
-    [EnabledAtRuntime=media] attribute HTMLAudioElementConstructor HTMLAudioElement;
+    // Constructors enabled at runtime but whose interface does not have EnabledAtRuntime
+    // extended attribute.
+    // FIXME: Remove these.
     [EnabledAtRuntime=media] attribute HTMLMediaElementConstructor HTMLMediaElement;
     [EnabledAtRuntime=media] attribute HTMLVideoElementConstructor HTMLVideoElement;
     [EnabledAtRuntime=media] attribute MediaErrorConstructor MediaError;
     [EnabledAtRuntime=media] attribute TimeRangesConstructor TimeRanges;
     [EnabledAtRuntime=media] attribute HTMLSourceElementConstructor HTMLSourceElement;
     [EnabledAtRuntime=media] attribute MediaControllerConstructor MediaController;
-
-    attribute CanvasPatternConstructor CanvasPattern;
-    attribute CanvasGradientConstructor CanvasGradient;
-    attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;
-
-    attribute ImageDataConstructor ImageData;
-    attribute TextMetricsConstructor TextMetrics;
-
-    [Conditional=WEBGL] attribute WebGLActiveInfoConstructor WebGLActiveInfo;
-    [Conditional=WEBGL] attribute WebGLBufferConstructor WebGLBuffer;
-    [Conditional=WEBGL] attribute WebGLFramebufferConstructor WebGLFramebuffer;
-    [Conditional=WEBGL] attribute WebGLProgramConstructor WebGLProgram;
-    [Conditional=WEBGL] attribute WebGLRenderbufferConstructor WebGLRenderbuffer;
-    [Conditional=WEBGL] attribute WebGLRenderingContextConstructor WebGLRenderingContext;
-    [Conditional=WEBGL] attribute WebGLShaderConstructor WebGLShader;
-    [Conditional=WEBGL] attribute WebGLShaderPrecisionFormatConstructor WebGLShaderPrecisionFormat;
-    [Conditional=WEBGL] attribute WebGLTextureConstructor WebGLTexture;
-    [Conditional=WEBGL] attribute WebGLUniformLocationConstructor WebGLUniformLocation;
-
-    attribute DOMStringMapConstructor DOMStringMap;
-
-    attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
-    attribute ArrayBufferViewConstructor ArrayBufferView;
-    attribute Int8ArrayConstructor Int8Array; // Usable with new operator
-    attribute Uint8ArrayConstructor Uint8Array; // Usable with new operator
-    attribute Uint8ClampedArrayConstructor Uint8ClampedArray; // Usable with new operator
-    attribute Int16ArrayConstructor Int16Array; // Usable with new operator
-    attribute Uint16ArrayConstructor Uint16Array; // Usable with new operator
-    attribute Int32ArrayConstructor Int32Array; // Usable with new operator
-    attribute Uint32ArrayConstructor Uint32Array; // Usable with new operator
-    attribute Float32ArrayConstructor Float32Array; // Usable with new operator
-    attribute Float64ArrayConstructor Float64Array; // Usable with new operator
-    attribute DataViewConstructor DataView; // Usable with new operator
-
-    // Event Constructors
-    attribute EventConstructor Event;
-    attribute BeforeLoadEventConstructor BeforeLoadEvent;
-    attribute CompositionEventConstructor CompositionEvent;
-    attribute CustomEventConstructor CustomEvent;
-    attribute ErrorEventConstructor ErrorEvent;
-    attribute FocusEventConstructor FocusEvent;
-    attribute HashChangeEventConstructor HashChangeEvent;
-    attribute KeyboardEventConstructor KeyboardEvent;
-    attribute MessageEventConstructor MessageEvent;
-    attribute MouseEventConstructor MouseEvent;
-    attribute MutationEventConstructor MutationEvent;
-    attribute OverflowEventConstructor OverflowEvent;
-    attribute PopStateEventConstructor PopStateEvent;
-    attribute PageTransitionEventConstructor PageTransitionEvent;
-    attribute ProgressEventConstructor ProgressEvent;
-    attribute TextEventConstructor TextEvent;
-    attribute TransitionEventConstructor TransitionEvent;
-    attribute UIEventConstructor UIEvent;
-    attribute AnimationEventConstructor WebKitAnimationEvent;
-    attribute TransitionEventConstructor WebKitTransitionEvent;
-    attribute WheelEventConstructor WheelEvent;
-    attribute XMLHttpRequestProgressEventConstructor XMLHttpRequestProgressEvent;
     [EnabledAtRuntime=deviceMotion] attribute DeviceMotionEventConstructor DeviceMotionEvent;
-    [EnabledAtRuntime=deviceOrientation] attribute DeviceOrientationEventConstructor DeviceOrientationEvent;
     [EnabledAtRuntime=touch] attribute TouchConstructor Touch;
     [EnabledAtRuntime=touch] attribute TouchEventConstructor TouchEvent;
     [EnabledAtRuntime=touch] attribute TouchListConstructor TouchList;
-    attribute StorageEventConstructor StorageEvent;
-    [Conditional=INPUT_SPEECH] attribute SpeechInputEventConstructor SpeechInputEvent;
-    [Conditional=WEBGL] attribute WebGLContextEventConstructor WebGLContextEvent;
-    [EnabledAtRuntime=requestAutocomplete] attribute AutocompleteErrorEventConstructor AutocompleteErrorEvent;
+    [EnabledAtRuntime=webMIDI] attribute MIDIConnectionEventConstructor MIDIConnectionEvent;
+    [EnabledAtRuntime=webMIDI] attribute MIDIMessageEventConstructor MIDIMessageEvent;
+    [EnabledAtRuntime=mediaStream] attribute MediaStreamConstructor webkitMediaStream;
+    [Conditional=WEB_AUDIO, EnabledAtRuntime=WebAudio] attribute AudioContextConstructor webkitAudioContext;
+    [Conditional=WEB_AUDIO, EnabledAtRuntime=WebAudio] attribute OfflineAudioContextConstructor webkitOfflineAudioContext;
+    [EnabledAtRuntime=peerConnection] attribute RTCPeerConnectionConstructor webkitRTCPeerConnection;
     [EnabledAtRuntime=experimentalContentSecurityPolicyFeatures] attribute SecurityPolicyViolationEventConstructor SecurityPolicyViolationEvent;
-
-    attribute EventExceptionConstructor EventException;
-
-    attribute WebKitCSSKeyframeRuleConstructor WebKitCSSKeyframeRule;
-    attribute WebKitCSSKeyframesRuleConstructor WebKitCSSKeyframesRule;
-    [EnabledAtRuntime=cssRegions] attribute WebKitCSSRegionRuleConstructor WebKitCSSRegionRule;
-
-    attribute WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator
-
-    attribute DOMPointConstructor WebKitPoint; // Usable with new the operator
-
-    attribute ClipboardConstructor Clipboard;
-
-    attribute WorkerConstructor Worker; // Usable with the new operator
     [EnabledAtRuntime] attribute SharedWorkerConstructor SharedWorker; // Usable with the new operator
+    [EnabledAtRuntime=scriptedSpeech] attribute SpeechGrammarConstructor webkitSpeechGrammar;
+    [EnabledAtRuntime=scriptedSpeech] attribute SpeechGrammarListConstructor webkitSpeechGrammarList;
+    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionConstructor webkitSpeechRecognition;
+    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
+    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
 
-    attribute FileConstructor File;
-    attribute FileListConstructor FileList;
-    attribute BlobConstructor Blob;
-
-    attribute NodeFilterConstructor NodeFilter;
-    attribute RangeConstructor Range;
-
-    attribute EventSourceConstructor EventSource; // Usable with new the operator
-
-    // Mozilla has a separate XMLDocument object for XML documents.
-    // We just use Document for this.
-    attribute DocumentConstructor XMLDocument;
-    attribute DOMParserConstructor DOMParser;
-    attribute XMLSerializerConstructor XMLSerializer;
-    attribute XMLHttpRequestConstructor XMLHttpRequest; // Usable with the new operator
-    attribute XMLHttpRequestUploadConstructor XMLHttpRequestUpload;
-    attribute XSLTProcessorConstructor XSLTProcessor; // Usable with the new operator
-
-    attribute MessagePortConstructor MessagePort;
-    attribute MessageChannelConstructor MessageChannel; // Usable with the new operator
-
-    attribute DOMPluginConstructor Plugin;
-    attribute DOMPluginArrayConstructor PluginArray;
-
-    attribute DOMMimeTypeConstructor MimeType;
-    attribute DOMMimeTypeArrayConstructor MimeTypeArray;
-
-    attribute ClientRectConstructor ClientRect;
-    attribute ClientRectListConstructor ClientRectList;
-
-    attribute StorageConstructor Storage;
-
-    attribute XPathEvaluatorConstructor XPathEvaluator;
-    attribute XPathResultConstructor XPathResult;
-    attribute XPathExceptionConstructor XPathException;
-
-    [Conditional=SVG] attribute SVGZoomEventConstructor SVGZoomEvent;
-
-#if defined(ENABLE_SVG) && ENABLE_SVG
-    // Expose all implemented SVG 1.1 interfaces, excluding the SVG MI interfaces:
-    // SVGAnimatedPathData, SVGAnimatedPoints, SVGExternalResourcesRequired,
-    // SVGFilterPrimitiveStandardAttributes, SVGFitToViewBox, SVGLangSpace, SVGLocatable
-    // SVGTests, SVGTransformable, SVGURIReference, SVGZoomAndPan
-    attribute SVGAElementConstructor SVGAElement;
-    attribute SVGAngleConstructor SVGAngle;
-    attribute SVGAnimatedAngleConstructor SVGAnimatedAngle;
-    attribute SVGAnimatedBooleanConstructor SVGAnimatedBoolean;
-    attribute SVGAnimatedEnumerationConstructor SVGAnimatedEnumeration;
-    attribute SVGAnimatedIntegerConstructor SVGAnimatedInteger;
-    attribute SVGAnimatedLengthConstructor SVGAnimatedLength;
-    attribute SVGAnimatedLengthListConstructor SVGAnimatedLengthList;
-    attribute SVGAnimatedNumberConstructor SVGAnimatedNumber;
-    attribute SVGAnimatedNumberListConstructor SVGAnimatedNumberList;
-    attribute SVGAnimatedPreserveAspectRatioConstructor SVGAnimatedPreserveAspectRatio;
-    attribute SVGAnimatedRectConstructor SVGAnimatedRect;
-    attribute SVGAnimatedStringConstructor SVGAnimatedString;
-    attribute SVGAnimatedTransformListConstructor SVGAnimatedTransformList;
-    attribute SVGCircleElementConstructor SVGCircleElement;
-    attribute SVGClipPathElementConstructor SVGClipPathElement;
-    attribute SVGColorConstructor SVGColor;
-    attribute SVGCursorElementConstructor SVGCursorElement;
-//      attribute SVGCSSRuleConstructor SVGCSSRule;
-    attribute SVGDefsElementConstructor SVGDefsElement;
-    attribute SVGDescElementConstructor SVGDescElement;
-    attribute SVGDocumentConstructor SVGDocument;
-    attribute SVGElementConstructor SVGElement;
-    attribute SVGElementInstanceConstructor SVGElementInstance;
-    attribute SVGElementInstanceListConstructor SVGElementInstanceList;
-    attribute SVGEllipseElementConstructor SVGEllipseElement;
-    attribute SVGForeignObjectElementConstructor SVGForeignObjectElement;
-    attribute SVGExceptionConstructor SVGException;
-    attribute SVGGElementConstructor SVGGElement;
-    attribute SVGGradientElementConstructor SVGGradientElement;
-    attribute SVGImageElementConstructor SVGImageElement;
-    attribute SVGLengthConstructor SVGLength;
-    attribute SVGLengthListConstructor SVGLengthList;
-    attribute SVGLinearGradientElementConstructor SVGLinearGradientElement;
-    attribute SVGLineElementConstructor SVGLineElement;
-    attribute SVGMarkerElementConstructor SVGMarkerElement;
-    attribute SVGMaskElementConstructor SVGMaskElement;
-    attribute SVGMatrixConstructor SVGMatrix;
-    attribute SVGMetadataElementConstructor SVGMetadataElement;
-    attribute SVGNumberConstructor SVGNumber;
-    attribute SVGNumberListConstructor SVGNumberList;
-    attribute SVGPaintConstructor SVGPaint;
-    attribute SVGPathElementConstructor SVGPathElement;
-    attribute SVGPathSegConstructor SVGPathSeg;
-    attribute SVGPathSegArcAbsConstructor SVGPathSegArcAbs;
-    attribute SVGPathSegArcRelConstructor SVGPathSegArcRel;
-    attribute SVGPathSegClosePathConstructor SVGPathSegClosePath;
-    attribute SVGPathSegCurvetoCubicAbsConstructor SVGPathSegCurvetoCubicAbs;
-    attribute SVGPathSegCurvetoCubicRelConstructor SVGPathSegCurvetoCubicRel;
-    attribute SVGPathSegCurvetoCubicSmoothAbsConstructor SVGPathSegCurvetoCubicSmoothAbs;
-    attribute SVGPathSegCurvetoCubicSmoothRelConstructor SVGPathSegCurvetoCubicSmoothRel;
-    attribute SVGPathSegCurvetoQuadraticAbsConstructor SVGPathSegCurvetoQuadraticAbs;
-    attribute SVGPathSegCurvetoQuadraticRelConstructor SVGPathSegCurvetoQuadraticRel;
-    attribute SVGPathSegCurvetoQuadraticSmoothAbsConstructor SVGPathSegCurvetoQuadraticSmoothAbs;
-    attribute SVGPathSegCurvetoQuadraticSmoothRelConstructor SVGPathSegCurvetoQuadraticSmoothRel;
-    attribute SVGPathSegLinetoAbsConstructor SVGPathSegLinetoAbs;
-    attribute SVGPathSegLinetoHorizontalAbsConstructor SVGPathSegLinetoHorizontalAbs;
-    attribute SVGPathSegLinetoHorizontalRelConstructor SVGPathSegLinetoHorizontalRel;
-    attribute SVGPathSegLinetoRelConstructor SVGPathSegLinetoRel;
-    attribute SVGPathSegLinetoVerticalAbsConstructor SVGPathSegLinetoVerticalAbs;
-    attribute SVGPathSegLinetoVerticalRelConstructor SVGPathSegLinetoVerticalRel;
-    attribute SVGPathSegListConstructor SVGPathSegList;
-    attribute SVGPathSegMovetoAbsConstructor SVGPathSegMovetoAbs;
-    attribute SVGPathSegMovetoRelConstructor SVGPathSegMovetoRel;
-    attribute SVGPatternElementConstructor SVGPatternElement;
-    attribute SVGPointConstructor SVGPoint;
-    attribute SVGPointListConstructor SVGPointList;
-    attribute SVGPolygonElementConstructor SVGPolygonElement;
-    attribute SVGPolylineElementConstructor SVGPolylineElement;
-    attribute SVGPreserveAspectRatioConstructor SVGPreserveAspectRatio;
-    attribute SVGRadialGradientElementConstructor SVGRadialGradientElement;
-    attribute SVGRectConstructor SVGRect;
-    attribute SVGRectElementConstructor SVGRectElement;
-    attribute SVGRenderingIntentConstructor SVGRenderingIntent;
-    attribute SVGScriptElementConstructor SVGScriptElement;
-    attribute SVGStopElementConstructor SVGStopElement;
-    attribute SVGStringListConstructor SVGStringList;
-    attribute SVGStyleElementConstructor SVGStyleElement;
-    attribute SVGSVGElementConstructor SVGSVGElement;
-    attribute SVGSwitchElementConstructor SVGSwitchElement;
-    attribute SVGSymbolElementConstructor SVGSymbolElement;
-    attribute SVGTextContentElementConstructor SVGTextContentElement;
-    attribute SVGTextElementConstructor SVGTextElement;
-    attribute SVGTextPathElementConstructor SVGTextPathElement;
-    attribute SVGTextPositioningElementConstructor SVGTextPositioningElement;
-    attribute SVGTitleElementConstructor SVGTitleElement;
-    attribute SVGTransformConstructor SVGTransform;
-    attribute SVGTransformListConstructor SVGTransformList;
-    attribute SVGTRefElementConstructor SVGTRefElement;
-    attribute SVGTSpanElementConstructor SVGTSpanElement;
-    attribute SVGUnitTypesConstructor SVGUnitTypes;
-    attribute SVGUseElementConstructor SVGUseElement;
-    attribute SVGViewElementConstructor SVGViewElement;
-    attribute SVGViewSpecConstructor SVGViewSpec;
-    attribute SVGZoomAndPanConstructor SVGZoomAndPan;
-
-    attribute SVGAnimateColorElementConstructor SVGAnimateColorElement;
-    attribute SVGAnimateElementConstructor SVGAnimateElement;
-    attribute SVGAnimateMotionElementConstructor SVGAnimateMotionElement;
-    attribute SVGAnimateTransformElementConstructor SVGAnimateTransformElement;
-    attribute SVGMPathElementConstructor SVGMPathElement;
-    attribute SVGSetElementConstructor SVGSetElement;
-
-#if defined(ENABLE_SVG_FONTS) && ENABLE_SVG_FONTS
-    attribute SVGAltGlyphDefElementConstructor SVGAltGlyphDefElement;
-    attribute SVGAltGlyphElementConstructor SVGAltGlyphElement;
-    attribute SVGAltGlyphItemElementConstructor SVGAltGlyphItemElement;
-//      attribute SVGDefinitionSrcElementConstructor SVGDefinitionSrcElement;
-    attribute SVGFontElementConstructor SVGFontElement;
-    attribute SVGFontFaceElementConstructor SVGFontFaceElement;
-    attribute SVGFontFaceFormatElementConstructor SVGFontFaceFormatElement;
-    attribute SVGFontFaceNameElementConstructor SVGFontFaceNameElement;
-    attribute SVGFontFaceSrcElementConstructor SVGFontFaceSrcElement;
-    attribute SVGFontFaceUriElementConstructor SVGFontFaceUriElement;
-    attribute SVGGlyphElementConstructor SVGGlyphElement;
-    attribute SVGGlyphRefElementConstructor SVGGlyphRefElement;
-    attribute SVGHKernElementConstructor SVGHKernElement;
-    attribute SVGMissingGlyphElementConstructor SVGMissingGlyphElement;
-    attribute SVGVKernElementConstructor SVGVKernElement;
-#endif
-
-    attribute SVGComponentTransferFunctionElementConstructor SVGComponentTransferFunctionElement;
-    attribute SVGFEBlendElementConstructor SVGFEBlendElement;
-    attribute SVGFEColorMatrixElementConstructor SVGFEColorMatrixElement;
-    attribute SVGFEComponentTransferElementConstructor SVGFEComponentTransferElement;
-    attribute SVGFECompositeElementConstructor SVGFECompositeElement;
-    attribute SVGFEConvolveMatrixElementConstructor SVGFEConvolveMatrixElement;
-    attribute SVGFEDiffuseLightingElementConstructor SVGFEDiffuseLightingElement;
-    attribute SVGFEDisplacementMapElementConstructor SVGFEDisplacementMapElement;
-    attribute SVGFEDistantLightElementConstructor SVGFEDistantLightElement;
-    attribute SVGFEDropShadowElementConstructor SVGFEDropShadowElement;
-    attribute SVGFEFloodElementConstructor SVGFEFloodElement;
-    attribute SVGFEFuncAElementConstructor SVGFEFuncAElement;
-    attribute SVGFEFuncBElementConstructor SVGFEFuncBElement;
-    attribute SVGFEFuncGElementConstructor SVGFEFuncGElement;
-    attribute SVGFEFuncRElementConstructor SVGFEFuncRElement;
-    attribute SVGFEGaussianBlurElementConstructor SVGFEGaussianBlurElement;
-    attribute SVGFEImageElementConstructor SVGFEImageElement;
-    attribute SVGFEMergeElementConstructor SVGFEMergeElement;
-    attribute SVGFEMergeNodeElementConstructor SVGFEMergeNodeElement;
-    attribute SVGFEMorphologyElementConstructor SVGFEMorphologyElement;
-    attribute SVGFEOffsetElementConstructor SVGFEOffsetElement;
-    attribute SVGFEPointLightElementConstructor SVGFEPointLightElement;
-    attribute SVGFESpecularLightingElementConstructor SVGFESpecularLightingElement;
-    attribute SVGFESpotLightElementConstructor SVGFESpotLightElement;
-    attribute SVGFETileElementConstructor SVGFETileElement;
-    attribute SVGFETurbulenceElementConstructor SVGFETurbulenceElement;
-    attribute SVGFilterElementConstructor SVGFilterElement;
-#endif
-
-    attribute DOMFormDataConstructor FormData;
-
-    attribute FileErrorConstructor FileError;
-    attribute FileReaderConstructor FileReader;
-
-    attribute DOMURLConstructor URL;
-    attribute DOMURLConstructor webkitURL; // FIXME: deprecate this.
-
-    attribute MutationObserverConstructor WebKitMutationObserver; // FIXME: Add metrics to determine when we can remove this.
-    attribute MutationObserverConstructor MutationObserver;
-    attribute MutationRecordConstructor MutationRecord;
-
-    [EnabledAtRuntime=mediaSource] attribute MediaSourceConstructor WebKitMediaSource;
-    [EnabledAtRuntime=mediaSource] attribute SourceBufferConstructor WebKitSourceBuffer;
-    [EnabledAtRuntime=mediaSource] attribute SourceBufferListConstructor WebKitSourceBufferList;
+    // Constructors whose name does not match the interface name.
+    // FIXME: Remove these once [ImplementedAs] is used and once constructor names match interface names.
+    attribute ShadowRootConstructor WebKitShadowRoot;
+    [Conditional=WEB_AUDIO] attribute PannerNodeConstructor webkitAudioPannerNode;
 
     // window.toString() requires special handling in V8
     [DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] DOMString toString();
+
+    [ImplementedAs=anonymousIndexedGetter] getter DOMWindow(unsigned long index);
 };
 
diff --git a/core/page/DOMWindowPagePopup.idl b/core/page/DOMWindowPagePopup.idl
index b942747..2ce0bec 100644
--- a/core/page/DOMWindowPagePopup.idl
+++ b/core/page/DOMWindowPagePopup.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    Conditional=PAGE_POPUP,
+    EnabledAtRuntime=pagePopup
 ] partial interface DOMWindow {
     [EnabledPerContext=pagePopup] readonly attribute PagePopupController pagePopupController;
 };
diff --git a/core/page/History.idl b/core/page/History.idl
index 92d889a..40e6648 100644
--- a/core/page/History.idl
+++ b/core/page/History.idl
@@ -23,18 +23,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-[
-    CheckSecurity,
-    CustomNamedSetter,
-    CustomDeleteProperty,
-    CustomEnumerateProperty,
-] interface History {
+interface History {
     readonly attribute unsigned long length;
     [CachedAttribute, Custom] readonly attribute SerializedScriptValue state;
 
-    [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void back();
-    [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void forward();
-    [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void go([Default=Undefined] optional long distance);
+    [CallWith=ScriptExecutionContext] void back();
+    [CallWith=ScriptExecutionContext] void forward();
+    [CallWith=ScriptExecutionContext] void go([Default=Undefined] optional long distance);
 
     [Custom, EnabledPerContext=pushState, RaisesException] void pushState(any data, DOMString title, optional DOMString url);
     [Custom, EnabledPerContext=pushState, RaisesException] void replaceState(any data, DOMString title, optional DOMString url);
diff --git a/core/page/Location.idl b/core/page/Location.idl
index 9bcae96..96b211a 100644
--- a/core/page/Location.idl
+++ b/core/page/Location.idl
@@ -27,31 +27,28 @@
  */
 
 [
-    CheckSecurity,
-    CustomNamedSetter,
-    CustomDeleteProperty,
-    CustomEnumerateProperty,
+    CheckSecurity
 ] interface Location {
-    [DoNotCheckSecurityOnSetter, CustomSetter, Unforgeable] attribute DOMString href;
+    [SetterCallWith=ActiveWindow|FirstWindow, DoNotCheckSecurityOnSetter, Unforgeable] attribute DOMString href;
 
-    [Custom, Unforgeable, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] void assign([Default=Undefined] optional DOMString url);
-    [Custom, Unforgeable, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] void replace([Default=Undefined] optional DOMString url);
-    [Custom, Unforgeable] void reload();
+    [CallWith=ActiveWindow|FirstWindow, DoNotCheckSecurity, Unforgeable, ReadOnly, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] void assign([Default=Undefined] optional DOMString url);
+    [CallWith=ActiveWindow|FirstWindow, DoNotCheckSecurity, Unforgeable, ReadOnly, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] void replace([Default=Undefined] optional DOMString url);
+    [CallWith=ActiveWindow, DoNotCheckSecurity, Unforgeable, ReadOnly] void reload();
 
     // URI decomposition attributes
-    [CustomSetter] attribute DOMString protocol;
-    [CustomSetter] attribute DOMString host;
-    [CustomSetter] attribute DOMString hostname;
-    [CustomSetter] attribute DOMString port;
-    [CustomSetter] attribute DOMString pathname;
-    [CustomSetter] attribute DOMString search;
-    [CustomSetter] attribute DOMString hash;
+    [SetterCallWith=ActiveWindow|FirstWindow, SetterRaisesException] 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;
 
     readonly attribute DOMString origin;
 
     readonly attribute DOMStringList ancestorOrigins;
 
-    [NotEnumerable, Custom, Unforgeable, ReadOnly, ImplementedAs=toStringFunction] DOMString toString();
+    [NotEnumerable, Unforgeable, ReadOnly, ImplementedAs=href] DOMString toString();
     [NotEnumerable, Custom, Unforgeable, ReadOnly] any valueOf();
 };
 
diff --git a/core/page/MemoryInfo.idl b/core/page/MemoryInfo.idl
index d3d331b..30ac718 100644
--- a/core/page/MemoryInfo.idl
+++ b/core/page/MemoryInfo.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface MemoryInfo {
 
     readonly attribute unsigned long totalJSHeapSize;
diff --git a/core/page/Navigator.idl b/core/page/Navigator.idl
index cd723a1..0c3e09d 100644
--- a/core/page/Navigator.idl
+++ b/core/page/Navigator.idl
@@ -17,16 +17,15 @@
     Boston, MA 02110-1301, USA.
 */
 
-[
-] interface Navigator {
+interface Navigator {
     readonly attribute DOMString appCodeName;
     readonly attribute DOMString appName;
     readonly attribute DOMString appVersion;
     readonly attribute DOMString language;
     readonly attribute DOMString userAgent;
     readonly attribute DOMString platform;
-    readonly attribute DOMPluginArray plugins;
-    readonly attribute DOMMimeTypeArray mimeTypes;
+    readonly attribute PluginArray plugins;
+    readonly attribute MimeTypeArray mimeTypes;
     readonly attribute DOMString product;
     readonly attribute DOMString productSub;
     readonly attribute DOMString vendor;
diff --git a/core/page/PagePopupController.idl b/core/page/PagePopupController.idl
index eb67bc8..c7f545f 100644
--- a/core/page/PagePopupController.idl
+++ b/core/page/PagePopupController.idl
@@ -29,8 +29,8 @@
  */
 
 [
-    Conditional=PAGE_POPUP,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    EnabledAtRuntime=pagePopup
 ] interface PagePopupController {
     void setValueAndClosePopup(long numberValue, DOMString stringValue);
     void setValue(DOMString value);
diff --git a/core/page/Performance.idl b/core/page/Performance.idl
index cb9d805..87a5b06 100644
--- a/core/page/Performance.idl
+++ b/core/page/Performance.idl
@@ -31,7 +31,7 @@
 
 // See: http://dev.w3.org/2006/webapi/WebTiming/
 [
-    EventTarget,
+    EventTarget
 ] interface Performance {
     readonly attribute PerformanceNavigation navigation;
     readonly attribute PerformanceTiming timing;
diff --git a/core/page/PerformanceEntry.idl b/core/page/PerformanceEntry.idl
index 94638f8..6199cce 100644
--- a/core/page/PerformanceEntry.idl
+++ b/core/page/PerformanceEntry.idl
@@ -30,7 +30,7 @@
 
 // See: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html
 [
-    CustomToV8,
+    CustomToV8
 ] interface PerformanceEntry {
     readonly attribute DOMString name;
     readonly attribute DOMString entryType;
diff --git a/core/page/PerformanceNavigation.idl b/core/page/PerformanceNavigation.idl
index c48ef41..cde7a72 100644
--- a/core/page/PerformanceNavigation.idl
+++ b/core/page/PerformanceNavigation.idl
@@ -29,8 +29,7 @@
  */
 
 // See: http://www.w3.org/TR/navigation-timing/
-[
-] interface PerformanceNavigation {
+interface PerformanceNavigation {
     const unsigned short TYPE_NAVIGATE = 0;
     const unsigned short TYPE_RELOAD = 1;
     const unsigned short TYPE_BACK_FORWARD = 2;
diff --git a/core/page/PerformanceTiming.idl b/core/page/PerformanceTiming.idl
index 874dead..160e5cc 100644
--- a/core/page/PerformanceTiming.idl
+++ b/core/page/PerformanceTiming.idl
@@ -29,8 +29,7 @@
  */
 
 // See: http://dev.w3.org/2006/webapi/WebTiming/
-[
-] interface PerformanceTiming {
+interface PerformanceTiming {
     readonly attribute unsigned long long navigationStart;
     readonly attribute unsigned long long unloadEventStart;
     readonly attribute unsigned long long unloadEventEnd;
diff --git a/core/page/Screen.idl b/core/page/Screen.idl
index 69f5dc1..e3df7b0 100644
--- a/core/page/Screen.idl
+++ b/core/page/Screen.idl
@@ -27,8 +27,7 @@
  */
 
 
-[
-] interface Screen {
+interface Screen {
     readonly attribute unsigned long height;
     readonly attribute unsigned long width;
     readonly attribute unsigned long colorDepth;
diff --git a/core/page/DOMSecurityPolicy.idl b/core/page/SecurityPolicy.idl
similarity index 96%
rename from core/page/DOMSecurityPolicy.idl
rename to core/page/SecurityPolicy.idl
index a765698..f5651da 100644
--- a/core/page/DOMSecurityPolicy.idl
+++ b/core/page/SecurityPolicy.idl
@@ -23,8 +23,8 @@
  */
 
 [
-    InterfaceName=SecurityPolicy
-] interface DOMSecurityPolicy {
+    ImplementedAs=DOMSecurityPolicy
+] interface SecurityPolicy {
     readonly attribute boolean allowsEval;
     readonly attribute boolean allowsInlineScript;
     readonly attribute boolean allowsInlineStyle;
diff --git a/core/page/DOMSelection.idl b/core/page/Selection.idl
similarity index 98%
rename from core/page/DOMSelection.idl
rename to core/page/Selection.idl
index f5a6828..1c93773 100644
--- a/core/page/DOMSelection.idl
+++ b/core/page/Selection.idl
@@ -30,8 +30,8 @@
 // This is based off of Mozilla's Selection interface
 // https://developer.mozilla.org/En/DOM/Selection
 [
-    InterfaceName=Selection
-] interface DOMSelection {
+    ImplementedAs=DOMSelection
+] interface Selection {
     readonly attribute Node anchorNode;
     readonly attribute long anchorOffset;
     readonly attribute Node focusNode;
diff --git a/core/page/SpeechInputEvent.idl b/core/page/SpeechInputEvent.idl
index be82107..4fe740b 100644
--- a/core/page/SpeechInputEvent.idl
+++ b/core/page/SpeechInputEvent.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    Conditional=INPUT_SPEECH,
+    Conditional=INPUT_SPEECH
 ] interface SpeechInputEvent : Event {
     readonly attribute SpeechInputResultList results;
 };
diff --git a/core/page/SpeechInputResult.idl b/core/page/SpeechInputResult.idl
index 2f09cb0..bc2d409 100644
--- a/core/page/SpeechInputResult.idl
+++ b/core/page/SpeechInputResult.idl
@@ -24,8 +24,8 @@
  */
 
 [
-    Conditional=INPUT_SPEECH,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    Conditional=INPUT_SPEECH
 ] interface SpeechInputResult {
     readonly attribute DOMString utterance;
     readonly attribute float confidence;
diff --git a/core/page/SpeechInputResultList.idl b/core/page/SpeechInputResultList.idl
index 0e2bf56..0976ec3 100644
--- a/core/page/SpeechInputResultList.idl
+++ b/core/page/SpeechInputResultList.idl
@@ -24,8 +24,8 @@
  */
 
 [
-    Conditional=INPUT_SPEECH,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    Conditional=INPUT_SPEECH
 ] interface SpeechInputResultList {
     readonly attribute unsigned long length;
     getter SpeechInputResult item([IsIndex] unsigned long index);
diff --git a/core/page/WorkerNavigator.idl b/core/page/WorkerNavigator.idl
index 353aadd..5304e83 100644
--- a/core/page/WorkerNavigator.idl
+++ b/core/page/WorkerNavigator.idl
@@ -27,6 +27,7 @@
  */
 
 [
+    NoInterfaceObject
 ] interface WorkerNavigator {
     readonly attribute DOMString appName;
     readonly attribute DOMString appVersion;
diff --git a/core/plugins/DOMMimeType.idl b/core/plugins/MimeType.idl
similarity index 91%
rename from core/plugins/DOMMimeType.idl
rename to core/plugins/MimeType.idl
index 0e3bd43..7af6fc1 100644
--- a/core/plugins/DOMMimeType.idl
+++ b/core/plugins/MimeType.idl
@@ -19,11 +19,11 @@
 */
 
 [
-    InterfaceName=MimeType
-] interface DOMMimeType {
+    ImplementedAs=DOMMimeType
+] interface MimeType {
     readonly attribute DOMString type;
     readonly attribute DOMString suffixes;
     readonly attribute DOMString description;
-    readonly attribute DOMPlugin enabledPlugin;
+    readonly attribute Plugin enabledPlugin;
 };
 
diff --git a/core/plugins/DOMMimeTypeArray.idl b/core/plugins/MimeTypeArray.idl
similarity index 81%
rename from core/plugins/DOMMimeTypeArray.idl
rename to core/plugins/MimeTypeArray.idl
index fd5fe9e..435e22f 100644
--- a/core/plugins/DOMMimeTypeArray.idl
+++ b/core/plugins/MimeTypeArray.idl
@@ -19,10 +19,10 @@
 */
 
 [
-    InterfaceName=MimeTypeArray
-] interface DOMMimeTypeArray {
+    ImplementedAs=DOMMimeTypeArray
+] interface MimeTypeArray {
     readonly attribute unsigned long length;
-    getter DOMMimeType item([Default=Undefined] optional unsigned long index);
-    getter DOMMimeType namedItem([Default=Undefined] optional DOMString name);
+    getter MimeType item([Default=Undefined] optional unsigned long index);
+    getter MimeType namedItem([Default=Undefined] optional DOMString name);
 };
 
diff --git a/core/plugins/DOMPlugin.idl b/core/plugins/Plugin.idl
similarity index 84%
rename from core/plugins/DOMPlugin.idl
rename to core/plugins/Plugin.idl
index 08e4a84..095dc49 100644
--- a/core/plugins/DOMPlugin.idl
+++ b/core/plugins/Plugin.idl
@@ -19,13 +19,13 @@
 */
 
 [
-    InterfaceName=Plugin
-] interface DOMPlugin {
+    ImplementedAs=DOMPlugin
+] interface Plugin {
     readonly attribute DOMString name;
     readonly attribute DOMString filename;
     readonly attribute DOMString description;
     readonly attribute unsigned long length;
-    getter DOMMimeType item([Default=Undefined] optional unsigned long index);
-    getter DOMMimeType namedItem([Default=Undefined] optional DOMString name);
+    getter MimeType item([Default=Undefined] optional unsigned long index);
+    getter MimeType namedItem([Default=Undefined] optional DOMString name);
 };
 
diff --git a/core/plugins/DOMPluginArray.idl b/core/plugins/PluginArray.idl
similarity index 82%
rename from core/plugins/DOMPluginArray.idl
rename to core/plugins/PluginArray.idl
index 52430aa..04e18c4 100644
--- a/core/plugins/DOMPluginArray.idl
+++ b/core/plugins/PluginArray.idl
@@ -19,11 +19,11 @@
 */
 
 [
-    InterfaceName=PluginArray
-] interface DOMPluginArray {
+    ImplementedAs=DOMPluginArray
+] interface PluginArray {
     readonly attribute unsigned long length;
-    getter DOMPlugin item([Default=Undefined] optional unsigned long index);
-    getter DOMPlugin namedItem([Default=Undefined] optional DOMString name);
+    getter Plugin item([Default=Undefined] optional unsigned long index);
+    getter Plugin namedItem([Default=Undefined] optional DOMString name);
     void refresh([Default=Undefined] optional boolean reload);
 };
 
diff --git a/core/scripts/in_file.py b/core/scripts/in_file.py
index fa71064..39a016b 100644
--- a/core/scripts/in_file.py
+++ b/core/scripts/in_file.py
@@ -44,7 +44,7 @@
 # Bare arguments (no '=') are treated as names with value True.
 # The first field will always be labeled 'name'.
 #
-# InFile.load_from_path('file.in', {'arg': None, 'arg2': []})
+# InFile.load_from_files(['file.in'], {'arg': None, 'arg2': []})
 #
 # Parsing produces an array of dictionaries:
 # [ { 'name' : 'name1', 'arg' :' value', arg2=['value2', 'value3'] }
@@ -53,16 +53,20 @@
     return line.startswith("//") or line.startswith("#")
 
 class InFile(object):
-    def __init__(self, lines, defaults, default_parameters):
+    def __init__(self, lines, defaults, valid_values=None, default_parameters=None):
         self.name_dictionaries = []
         self.parameters = copy.deepcopy(default_parameters if default_parameters else {})
         self._defaults = defaults
+        self._valid_values = copy.deepcopy(valid_values if valid_values else {})
         self._parse(map(str.strip, lines))
 
     @classmethod
-    def load_from_path(self, path, defaults, default_parameters):
-        with open(os.path.abspath(path)) as in_file:
-            return InFile(in_file.readlines(), defaults, default_parameters)
+    def load_from_files(self, file_paths, defaults, valid_values, default_parameters):
+        lines = []
+        for path in file_paths:
+            with open(os.path.abspath(path)) as in_file:
+                lines += in_file.readlines()
+        return InFile(lines, defaults, valid_values, default_parameters)
 
     def _is_sequence(self, arg):
         return (not hasattr(arg, "strip")
@@ -107,6 +111,9 @@
                 arg_name, arg_value = arg_string, True
             if arg_name not in self._defaults:
                 self._fatal("Unknown argument: '%s' in line:\n%s\nKnown arguments: %s" % (arg_name, line, self._defaults.keys()))
+            valid_values = self._valid_values.get(arg_name)
+            if valid_values and arg_value not in valid_values:
+                self._fatal("Unknown value: '%s' in line:\n%s\nKnown values: %s" % (arg_value, line, valid_values))
             if self._is_sequence(args[arg_name]):
                 args[arg_name].append(arg_value)
             else:
diff --git a/core/scripts/in_generator.py b/core/scripts/in_generator.py
index 47b85f5..6cffaa9 100644
--- a/core/scripts/in_generator.py
+++ b/core/scripts/in_generator.py
@@ -27,27 +27,46 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os.path
+import shlex
 import shutil
+import optparse
 
 from in_file import InFile
+import template_expander
 
 
 class Writer(object):
     # Subclasses should override.
     class_name = None
     defaults = None
+    valid_values = None
     default_parameters = None
 
-    def __init__(self, in_file_path):
-        self.in_file = InFile.load_from_path(in_file_path, self.defaults, self.default_parameters)
+    def __init__(self, in_files, enabled_conditions):
+        if isinstance(in_files, basestring):
+            in_files = [in_files]
+        self.in_file = InFile.load_from_files(in_files, self.defaults, self.valid_values, self.default_parameters)
+        self._enabled_conditions = enabled_conditions
 
     # Subclasses should override.
     def generate_header(self):
-        raise NotImplementedError
+        return ''
+
+    # Subclasses should override.
+    def generate_interfaces_header(self):
+        return ''
+
+    # Subclasses should override.
+    def generate_headers_header(self):
+        return ''
 
     # Subclasses should override.
     def generate_implementation(self):
-        raise NotImplementedError
+        return ''
+
+    # Subclasses should override.
+    def generate_idl(self):
+        return ''
 
     def wrap_with_condition(self, string, condition):
         if not condition:
@@ -69,33 +88,72 @@
         with open(file_path, "w") as file_to_write:
             file_to_write.write(contents)
 
-    def write_header(self, output_dir):
-        contents = self.generate_header()
+    def _write_file(self, output_dir, generator, file_name):
+        contents = generator()
+        if type(contents) is dict:
+            contents = template_expander.apply_template(file_name + ".tmpl", contents)
         if not contents:
             return
-        path = os.path.join(output_dir, self.class_name + ".h")
+        path = os.path.join(output_dir, file_name)
         self._forcibly_create_text_file_at_path_with_contents(path, contents)
 
+    def write_header(self, output_dir):
+        self._write_file(output_dir, self.generate_header, self.class_name + '.h')
+
+    def write_headers_header(self, output_dir):
+        self._write_file(output_dir, self.generate_headers_header, self.class_name + 'Headers.h')
+
+    def write_interfaces_header(self, output_dir):
+        self._write_file(output_dir, self.generate_interfaces_header, self.class_name + 'Interfaces.h')
+
     def write_implmentation(self, output_dir):
-        contents = self.generate_implementation()
-        if not contents:
-            return
-        path = os.path.join(output_dir, self.class_name + ".cpp")
-        self._forcibly_create_text_file_at_path_with_contents(path, contents)
+        self._write_file(output_dir, self.generate_implementation, self.class_name + '.cpp')
+
+    def write_idl(self, output_dir):
+        self._write_file(output_dir, self.generate_idl, self.class_name + '.idl')
 
 
 class Maker(object):
     def __init__(self, writer_class):
         self._writer_class = writer_class
 
+    def _enabled_conditions_from_defines(self, defines_arg_string):
+        if not defines_arg_string:
+            return []
+
+        defines_strings = shlex.split(defines_arg_string)
+
+        # We only care about feature defines.
+        enable_prefix = 'ENABLE_'
+
+        enabled_conditions = []
+        for define_string in defines_strings:
+            split_define = define_string.split('=')
+            if split_define[1] != '1':
+                continue
+            define = split_define[0]
+            if not define.startswith(enable_prefix):
+                continue
+            enabled_conditions.append(define[len(enable_prefix):])
+        return enabled_conditions
+
     def main(self, argv):
         script_name = os.path.basename(argv[0])
         args = argv[1:]
         if len(args) < 1:
-            print "USAGE: %i INPUT_FILE [OUTPUT_DIRECTORY]" % script_name
+            print "USAGE: %i INPUT_FILES" % script_name
             exit(1)
-        output_dir = args[1] if len(args) > 1 else os.getcwd()
 
-        writer = self._writer_class(args[0])
-        writer.write_header(output_dir)
-        writer.write_implmentation(output_dir)
+        parser = optparse.OptionParser()
+        parser.add_option("--defines")
+        parser.add_option("--output_dir", default=os.getcwd())
+        (options, args) = parser.parse_args()
+
+        enabled_conditions = self._enabled_conditions_from_defines(options.defines)
+
+        writer = self._writer_class(args, enabled_conditions)
+        writer.write_header(options.output_dir)
+        writer.write_headers_header(options.output_dir)
+        writer.write_interfaces_header(options.output_dir)
+        writer.write_implmentation(options.output_dir)
+        writer.write_idl(options.output_dir)
diff --git a/core/scripts/make_css_property_names.py b/core/scripts/make_css_property_names.py
new file mode 100755
index 0000000..1c5756d
--- /dev/null
+++ b/core/scripts/make_css_property_names.py
@@ -0,0 +1,220 @@
+#!/usr/bin/env python
+
+import os.path
+import re
+import subprocess
+import sys
+
+from in_file import InFile
+import in_generator
+import license
+
+
+HEADER_TEMPLATE = """
+%(license)s
+
+#ifndef %(class_name)s_h
+#define %(class_name)s_h
+
+#include <string.h>
+#include "wtf/HashFunctions.h"
+#include "wtf/HashTraits.h"
+
+namespace WTF {
+class AtomicString;
+class String;
+}
+
+namespace WebCore {
+
+enum CSSPropertyID {
+    CSSPropertyInvalid = 0,
+    CSSPropertyVariable = 1,
+%(property_enums)s
+};
+
+const int firstCSSProperty = %(first_property_id)s;
+const int numCSSProperties = %(properties_count)s;
+const int lastCSSProperty = %(last_property_id)d;
+const size_t maxCSSPropertyNameLength = %(max_name_length)d;
+
+const char* getPropertyName(CSSPropertyID);
+const WTF::AtomicString& getPropertyNameAtomicString(CSSPropertyID);
+WTF::String getPropertyNameString(CSSPropertyID);
+WTF::String getJSPropertyName(CSSPropertyID);
+
+inline CSSPropertyID convertToCSSPropertyID(int value)
+{
+    ASSERT((value >= firstCSSProperty && value <= lastCSSProperty) || value == CSSPropertyInvalid);
+    return static_cast<CSSPropertyID>(value);
+}
+
+} // namespace WebCore
+
+namespace WTF {
+template<> struct DefaultHash<WebCore::CSSPropertyID> { typedef IntHash<unsigned> Hash; };
+template<> struct HashTraits<WebCore::CSSPropertyID> : GenericHashTraits<WebCore::CSSPropertyID> {
+    static const bool emptyValueIsZero = true;
+    static const bool needsDestruction = false;
+    static void constructDeletedValue(WebCore::CSSPropertyID& slot) { slot = static_cast<WebCore::CSSPropertyID>(WebCore::lastCSSProperty + 1); }
+    static bool isDeletedValue(WebCore::CSSPropertyID value) { return value == (WebCore::lastCSSProperty + 1); }
+};
+}
+
+#endif // %(class_name)s_h
+"""
+
+GPERF_TEMPLATE = """
+%%{
+%(license)s
+
+#include "config.h"
+#include "%(class_name)s.h"
+#include "core/platform/HashTools.h"
+#include <string.h>
+
+#include "wtf/ASCIICType.h"
+#include "wtf/text/AtomicString.h"
+#include "wtf/text/WTFString.h"
+
+namespace WebCore {
+const char* const propertyNameStrings[numCSSProperties] = {
+%(property_name_strings)s
+};
+
+%%}
+%%struct-type
+struct Property;
+%%omit-struct-type
+%%language=C++
+%%readonly-tables
+%%global-table
+%%compare-strncmp
+%%define class-name %(class_name)sHash
+%%define lookup-function-name findPropertyImpl
+%%define hash-function-name propery_hash_function
+%%define word-array-name property_wordlist
+%%enum
+%%%%
+%(property_to_enum_map)s
+%%%%
+const Property* findProperty(register const char* str, register unsigned int len)
+{
+    return %(class_name)sHash::findPropertyImpl(str, len);
+}
+
+const char* getPropertyName(CSSPropertyID id)
+{
+    if (id < firstCSSProperty)
+        return 0;
+    int index = id - firstCSSProperty;
+    if (index >= numCSSProperties)
+        return 0;
+    return propertyNameStrings[index];
+}
+
+const AtomicString& getPropertyNameAtomicString(CSSPropertyID id)
+{
+    if (id < firstCSSProperty)
+        return nullAtom;
+    int index = id - firstCSSProperty;
+    if (index >= numCSSProperties)
+        return nullAtom;
+
+    static AtomicString* propertyStrings = new AtomicString[numCSSProperties]; // Intentionally never destroyed.
+    AtomicString& propertyString = propertyStrings[index];
+    if (propertyString.isNull()) {
+        const char* propertyName = propertyNameStrings[index];
+        propertyString = AtomicString(propertyName, strlen(propertyName), AtomicString::ConstructFromLiteral);
+    }
+    return propertyString;
+}
+
+String getPropertyNameString(CSSPropertyID id)
+{
+    // We share the StringImpl with the AtomicStrings.
+    return getPropertyNameAtomicString(id).string();
+}
+
+String getJSPropertyName(CSSPropertyID id)
+{
+    char result[maxCSSPropertyNameLength + 1];
+    const char* cssPropertyName = getPropertyName(id);
+    const char* propertyNamePointer = cssPropertyName;
+    if (!propertyNamePointer)
+        return emptyString();
+
+    char* resultPointer = result;
+    while (char character = *propertyNamePointer++) {
+        if (character == '-') {
+            char nextCharacter = *propertyNamePointer++;
+            if (!nextCharacter)
+                break;
+            character = (propertyNamePointer - 2 != cssPropertyName) ? toASCIIUpper(nextCharacter) : nextCharacter;
+        }
+        *resultPointer++ = character;
+    }
+    *resultPointer = '\\0';
+    return String(result);
+}
+
+} // namespace WebCore
+"""
+
+
+class CSSPropertiesWriter(in_generator.Writer):
+    class_name = "CSSPropertyNames"
+    defaults = {
+        'alias_for': None,
+        'condition': None,
+    }
+
+    def __init__(self, file_paths, enabled_conditions):
+        in_generator.Writer.__init__(self, file_paths, enabled_conditions)
+
+        all_properties = self.in_file.name_dictionaries
+        self._aliases = filter(lambda property: property['alias_for'], all_properties)
+        for offset, property in enumerate(self._aliases):
+            # Aliases use the enum_name that they are an alias for.
+            property['enum_name'] = self._enum_name_from_property_name(property['alias_for'])
+            # Aliases do not get an enum_value.
+
+        self._properties = filter(lambda property: not property['alias_for'] and not property['condition'] or property['condition'] in self._enabled_conditions, all_properties)
+        self._first_property_id = 1001  # Historical, unclear why.
+        property_id = self._first_property_id
+        for offset, property in enumerate(self._properties):
+            property['enum_name'] = self._enum_name_from_property_name(property['name'])
+            property['enum_value'] = self._first_property_id + offset
+
+    def _enum_name_from_property_name(self, property_name):
+        return "CSSProperty" + re.sub(r'(^[^-])|-(.)', lambda match: (match.group(1) or match.group(2)).upper(), property_name)
+
+    def _enum_declaration(self, property):
+        return "    %(enum_name)s = %(enum_value)s," % property
+
+    def generate_header(self):
+        return HEADER_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'property_enums': "\n".join(map(self._enum_declaration, self._properties)),
+            'first_property_id': self._first_property_id,
+            'properties_count': len(self._properties),
+            'last_property_id': self._first_property_id + len(self._properties) - 1,
+            'max_name_length': reduce(max, map(len, map(lambda property: property['name'], self._properties))),
+        }
+
+    def generate_implementation(self):
+        gperf_input = GPERF_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'property_name_strings': '\n'.join(map(lambda property: '    "%(name)s",' % property, self._properties)),
+            'property_to_enum_map': '\n'.join(map(lambda property: '%(name)s, %(enum_name)s' % property, self._properties + self._aliases)),
+        }
+        # FIXME: If we could depend on Python 2.7, we would use subprocess.check_output
+        gperf_args = ['gperf', '--key-positions=*', '-D', '-n', '-s', '2']
+        gperf = subprocess.Popen(gperf_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+        return gperf.communicate(gperf_input)[0]
+
+
+if __name__ == "__main__":
+    in_generator.Maker(CSSPropertiesWriter).main(sys.argv)
diff --git a/core/scripts/make_css_value_keywords.py b/core/scripts/make_css_value_keywords.py
new file mode 100755
index 0000000..5cbd038
--- /dev/null
+++ b/core/scripts/make_css_value_keywords.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python
+
+import os.path
+import re
+import subprocess
+import sys
+
+from in_file import InFile
+import in_generator
+import license
+
+
+HEADER_TEMPLATE = """
+%(license)s
+
+#ifndef %(class_name)s_h
+#define %(class_name)s_h
+
+#include <string.h>
+
+namespace WebCore {
+
+enum CSSValueID {
+    CSSValueInvalid = 0,
+%(value_keyword_enums)s
+};
+
+const int numCSSValueKeywords = %(value_keywords_count)d;
+const size_t maxCSSValueKeywordLength = %(max_value_keyword_length)d;
+
+const char* getValueName(unsigned short id);
+
+} // namespace WebCore
+
+#endif // %(class_name)s_h
+"""
+
+GPERF_TEMPLATE = """
+%%{
+%(license)s
+
+#include "config.h"
+#include "%(class_name)s.h"
+#include "core/platform/HashTools.h"
+#include <string.h>
+
+namespace WebCore {
+const char* const valueList[] = {
+"",
+%(value_keyword_strings)s
+0
+};
+
+%%}
+%%struct-type
+struct Value;
+%%omit-struct-type
+%%language=C++
+%%readonly-tables
+%%compare-strncmp
+%%define class-name %(class_name)sHash
+%%define lookup-function-name findValueImpl
+%%define hash-function-name value_hash_function
+%%define word-array-name value_word_list
+%%enum
+%%%%
+%(value_keyword_to_enum_map)s
+%%%%
+const Value* findValue(register const char* str, register unsigned int len)
+{
+    return CSSValueKeywordsHash::findValueImpl(str, len);
+}
+
+const char* getValueName(unsigned short id)
+{
+    if (id >= numCSSValueKeywords || id <= 0)
+        return 0;
+    return valueList[id];
+}
+
+} // namespace WebCore
+"""
+
+
+class CSSValueKeywordsWriter(in_generator.Writer):
+    class_name = "CSSValueKeywords"
+    defaults = {
+        'condition': None,
+    }
+
+    def __init__(self, file_paths, enabled_conditions):
+        in_generator.Writer.__init__(self, file_paths, enabled_conditions)
+
+        all_properties = self.in_file.name_dictionaries
+        self._value_keywords = filter(lambda property: not property['condition'] or property['condition'] in self._enabled_conditions, all_properties)
+        first_property_id = 1
+        for offset, property in enumerate(self._value_keywords):
+            property['name'] = property['name'].lower()
+            property['enum_name'] = self._enum_name_from_value_keyword(property['name'])
+            property['enum_value'] = first_property_id + offset
+
+    def _enum_name_from_value_keyword(self, value_keyword):
+        return "CSSValue" + "".join(w.capitalize() for w in value_keyword.split("-"))
+
+    def _enum_declaration(self, property):
+        return "    %(enum_name)s = %(enum_value)s," % property
+
+    def generate_header(self):
+        return HEADER_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'value_keyword_enums': "\n".join(map(self._enum_declaration, self._value_keywords)),
+            'value_keywords_count': len(self._value_keywords),
+            'max_value_keyword_length': reduce(max, map(len, map(lambda property: property['name'], self._value_keywords))),
+        }
+
+    def generate_implementation(self):
+        gperf_input = GPERF_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'value_keyword_strings': '\n'.join(map(lambda property: '    "%(name)s",' % property, self._value_keywords)),
+            'value_keyword_to_enum_map': '\n'.join(map(lambda property: '%(name)s, %(enum_name)s' % property, self._value_keywords)),
+        }
+        # FIXME: If we could depend on Python 2.7, we would use subprocess.check_output
+        gperf_args = ['gperf', '--key-positions=*', '-D', '-n', '-s', '2']
+        gperf = subprocess.Popen(gperf_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+        return gperf.communicate(gperf_input)[0]
+
+
+if __name__ == "__main__":
+    in_generator.Maker(CSSValueKeywordsWriter).main(sys.argv)
diff --git a/core/scripts/make_dom_exceptions.py b/core/scripts/make_dom_exceptions.py
new file mode 100755
index 0000000..e945262
--- /dev/null
+++ b/core/scripts/make_dom_exceptions.py
@@ -0,0 +1,161 @@
+#!/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 os.path
+import sys
+import shutil
+
+from in_file import InFile
+import name_macros
+import license
+
+
+HEADER_TEMPLATE = """%(license)s
+
+#ifndef %(class_name)s_h
+#define %(class_name)s_h
+
+namespace WebCore {
+
+typedef int ExceptionCode;
+
+enum ExceptionType {
+%(exception_types)s
+};
+
+struct ExceptionCodeDescription {
+    explicit ExceptionCodeDescription(ExceptionCode);
+
+    // |typeName| has spaces and is suitable for use in exception
+    // description strings; maximum length is 10 characters.
+    const char* typeName;
+
+    // |name| is the exception name, also intended for use in exception
+    // description strings; 0 if name not known; maximum length is 27
+    // characters.
+    const char* name;
+
+    // |description| is the exception description, intended for use in
+    // exception strings. It is a more readable explanation of error.
+    const char* description;
+
+    // |code| is the numeric value of the exception within a particular type.
+    int code;
+
+    ExceptionType type;
+};
+
+} // namespace WebCore
+
+#endif // %(class_name)s_h
+"""
+
+
+IMPLEMENTATION_TEMPLATE = """%(license)s
+
+#include "config.h"
+#include "%(class_name)s.h"
+
+#include "ExceptionCode.h"
+
+%(includes)s
+
+#include "modules/indexeddb/IDBDatabaseException.h"
+
+namespace WebCore {
+
+ExceptionCodeDescription::ExceptionCodeDescription(ExceptionCode ec)
+{
+    ASSERT(ec);
+
+%(description_initalizations)s
+
+    // FIXME: This special case for IDB is undesirable. It is the first usage
+    // of "new style" DOMExceptions where there is no IDL type, but there are
+    // API-specific exception names and/or messages. Consider refactoring back
+    // into the code generator when a common pattern emerges.
+    if (IDBDatabaseException::initializeDescription(ec, this))
+        return;
+
+    if (DOMCoreException::initializeDescription(ec, this))
+        return;
+
+    ASSERT_NOT_REACHED();
+}
+
+} // namespace WebCore
+"""
+
+
+class ExceptionCodeDescriptionWriter(name_macros.Writer):
+    defaults = {
+        'interfaceName': None,
+        'conditional': None,
+    }
+    default_parameters = {
+        'namespace': '',
+    }
+
+    def _exceptions(self):
+        return self.in_file.name_dictionaries
+
+    def _exception_type(self, exception):
+        name = os.path.basename(exception['name'])
+        return self.wrap_with_condition('    ' + name + 'Type,', exception['conditional'])
+
+    def generate_header(self):
+        return HEADER_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'exception_types': '\n'.join(map(self._exception_type, self._exceptions())),
+        }
+
+    def _include(self, exception):
+        include = '#include "' + exception['name'] + '.h"'
+        return self.wrap_with_condition(include, exception['conditional'])
+
+    def _description_initalization(self, exception):
+        name = os.path.basename(exception['name'])
+        if name == 'DOMCoreException':
+            return ''  # DOMCoreException needs to be last because it's a catch-all.
+        description_initalization = """    if (%(name)s::initializeDescription(ec, this))
+        return;""" % {'name': name}
+        return self.wrap_with_condition(description_initalization, exception['conditional'])
+
+    def generate_implementation(self):
+        return IMPLEMENTATION_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'includes': '\n'.join(map(self._include, self._exceptions())),
+            'description_initalizations': '\n'.join(map(self._description_initalization, self._exceptions())),
+        }
+
+
+if __name__ == "__main__":
+    name_macros.Maker(ExceptionCodeDescriptionWriter).main(sys.argv)
diff --git a/core/scripts/make_event_factory.py b/core/scripts/make_event_factory.py
index c5a5f0b..5a6653c 100644
--- a/core/scripts/make_event_factory.py
+++ b/core/scripts/make_event_factory.py
@@ -32,20 +32,20 @@
 import shutil
 
 from in_file import InFile
-import in_generator
+import name_macros
 import license
 
 
 IMPLEMENTATION_TEMPLATE = """%(license)s
 #include "config.h"
-#include "%(namespace)sFactory.h"
+#include "%(class_name)sFactory.h"
 
-#include "%(namespace)sHeaders.h"
+#include "%(class_name)sHeaders.h"
 #include "RuntimeEnabledFeatures.h"
 
 namespace WebCore {
 
-PassRefPtr<%(namespace)s> %(namespace)sFactory::create(const String& type)
+PassRefPtr<%(class_name)s> %(class_name)sFactory::create(const String& type)
 {
 %(factory_implementation)s
     return 0;
@@ -55,7 +55,7 @@
 """
 
 
-class EventFactoryWriter(in_generator.Writer):
+class EventFactoryWriter(name_macros.Writer):
     defaults = {
         'interfaceName' : None,
         'conditional' : None,
@@ -64,10 +64,6 @@
     default_parameters = {
         'namespace': '',
     }
-    class_name = 'EventFactory'
-
-    def _namespace(self):
-        return self.in_file.parameters['namespace']
 
     def _events(self):
         return self.in_file.name_dictionaries
@@ -86,16 +82,13 @@
         }
         return self.wrap_with_condition(implementation, event['conditional'])
 
-    def generate_header(self):
-        pass
-
     def generate_implementation(self):
         return IMPLEMENTATION_TEMPLATE % {
-            'namespace': self._namespace().strip('"'),
+            'class_name': self.class_name,
             'license': license.license_for_generated_cpp(),
             'factory_implementation': "\n".join(map(self._factory_implementation, self._events())),
         }
 
 
 if __name__ == "__main__":
-    in_generator.Maker(EventFactoryWriter).main(sys.argv)
+    name_macros.Maker(EventFactoryWriter).main(sys.argv)
diff --git a/core/scripts/make_internal_runtime_flags.py b/core/scripts/make_internal_runtime_flags.py
new file mode 100755
index 0000000..dc33323
--- /dev/null
+++ b/core/scripts/make_internal_runtime_flags.py
@@ -0,0 +1,58 @@
+#!/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 os.path
+import sys
+
+import in_generator
+import make_runtime_features
+
+
+# We want exactly the same parsing as RuntimeFeatureWriter
+# but generate different files.
+class InternalRuntimeFlagsWriter(make_runtime_features.RuntimeFeatureWriter):
+    class_name = "InternalRuntimeFlags"
+
+    def generate_idl(self):
+        return {
+            'features': self._features,
+        }
+
+    def generate_header(self):
+        return {
+            'features': self._features,
+            'feature_sets': self._feature_sets(),
+        }
+
+    def generate_implementation(self):
+        return None
+
+
+if __name__ == "__main__":
+    in_generator.Maker(InternalRuntimeFlagsWriter).main(sys.argv)
diff --git a/core/scripts/make_runtime_features.py b/core/scripts/make_runtime_features.py
index 13e1f9b..d0f9b96 100755
--- a/core/scripts/make_runtime_features.py
+++ b/core/scripts/make_runtime_features.py
@@ -32,56 +32,27 @@
 
 from in_file import InFile
 import in_generator
-import license
 
 
-HEADER_TEMPLATE = """%(license)s
-#ifndef %(class_name)s_h
-#define %(class_name)s_h
-
-namespace WebCore {
-
-// A class that stores static enablers for all experimental features.
-
-class %(class_name)s {
-public:
-%(method_declarations)s
-private:
-    %(class_name)s() { }
-
-%(storage_declarations)s
-};
-
-} // namespace WebCore
-
-#endif // %(class_name)s_h
-"""
-
-IMPLEMENTATION_TEMPLATE = """%(license)s
-#include "config.h"
-#include "%(class_name)s.h"
-
-namespace WebCore {
-
-%(storage_definitions)s
-
-} // namespace WebCore
-"""
-
 class RuntimeFeatureWriter(in_generator.Writer):
-    class_name = "RuntimeEnabledFeatures"
+    class_name = 'RuntimeEnabledFeatures'
+
+    # FIXME: valid_values and defaults should probably roll into one object.
+    valid_values = {
+        'status': ['stable', 'experimental', 'test'],
+    }
     defaults = {
         'condition' : None,
         'depends_on' : [],
-        'default': 'false',
         'custom': False,
+        'status': None,
     }
 
-    def __init__(self, in_file_path):
-        super(RuntimeFeatureWriter, self).__init__(in_file_path)
-        self._all_features = self.in_file.name_dictionaries
+    def __init__(self, in_file_path, enabled_conditions):
+        super(RuntimeFeatureWriter, self).__init__(in_file_path, enabled_conditions)
+        self._features = self.in_file.name_dictionaries
         # Make sure the resulting dictionaries have all the keys we expect.
-        for feature in self._all_features:
+        for feature in self._features:
             feature['first_lowered_name'] = self._lower_first(feature['name'])
             # Most features just check their isFooEnabled bool
             # but some depend on more than one bool.
@@ -89,49 +60,30 @@
             for dependant_name in feature['depends_on']:
                 enabled_condition += " && is%sEnabled" % dependant_name
             feature['enabled_condition'] = enabled_condition
-        self._non_custom_features = filter(lambda feature: not feature['custom'], self._all_features)
+        self._non_custom_features = filter(lambda feature: not feature['custom'], self._features)
 
     def _lower_first(self, string):
         lowered = string[0].lower() + string[1:]
         lowered = lowered.replace("cSS", "css")
         lowered = lowered.replace("iME", "ime")
+        lowered = lowered.replace("hTML", "html")
         return lowered
 
-    def _method_declaration(self, feature):
-        if feature['custom']:
-            return "    static bool %(first_lowered_name)sEnabled();\n" % feature
-        unconditional = """    static void set%(name)sEnabled(bool isEnabled) { is%(name)sEnabled = isEnabled; }
-    static bool %(first_lowered_name)sEnabled() { return %(enabled_condition)s; }
-"""
-        conditional = "#if ENABLE(%(condition)s)\n" + unconditional + """#else
-    static void set%(name)sEnabled(bool) { }
-    static bool %(first_lowered_name)sEnabled() { return false; }
-#endif
-"""
-        template = conditional if feature['condition'] else unconditional
-        return template % feature
-
-    def _storage_declarations(self, feature):
-        declaration = "    static bool is%(name)sEnabled;" % feature
-        return self.wrap_with_condition(declaration, feature['condition'])
+    def _feature_sets(self):
+        # Another way to think of the status levels is as "sets of features"
+        # which is how we're referring to them in this generator.
+        return self.valid_values['status']
 
     def generate_header(self):
-        return HEADER_TEMPLATE % {
-            'class_name' : self.class_name,
-            'license' : license.license_for_generated_cpp(),
-            'method_declarations' : "\n".join(map(self._method_declaration, self._all_features)),
-            'storage_declarations' : "\n".join(map(self._storage_declarations, self._non_custom_features)),
+        return {
+            'features': self._features,
+            'feature_sets': self._feature_sets(),
         }
 
-    def _storage_definition(self, feature):
-        definition = "bool RuntimeEnabledFeatures::is%(name)sEnabled = %(default)s;" % feature
-        return self.wrap_with_condition(definition, feature['condition'])
-
     def generate_implementation(self):
-        return IMPLEMENTATION_TEMPLATE % {
-            'class_name' : self.class_name,
-            'license' : license.license_for_generated_cpp(),
-            'storage_definitions' : "\n".join(map(self._storage_definition, self._non_custom_features)),
+        return {
+            'features': self._features,
+            'feature_sets': self._feature_sets(),
         }
 
 
diff --git a/core/scripts/make_style_builder.py b/core/scripts/make_style_builder.py
new file mode 100755
index 0000000..88c358f
--- /dev/null
+++ b/core/scripts/make_style_builder.py
@@ -0,0 +1,97 @@
+#!/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 re
+import sys
+
+import in_generator
+
+
+class StyleBuilderWriter(in_generator.Writer):
+    class_name = 'StyleBuilder'
+
+    valid_values = {
+        'apply_type': ['default', 'length'],
+        'use_none': [True, False],
+        'use_intrinsic': [True, False],
+        'use_auto': [True, False],
+    }
+    defaults = {
+        'condition': None,
+        'apply_type': 'default',
+        'name_for_methods': None,
+# These depend on property name by default
+        'type_name': None,
+        'getter': None,
+        'setter': None,
+        'initial': None,
+# For the length apply type
+        'use_none': False,
+        'use_intrinsic': False,
+        'use_auto': False,
+    }
+
+    def __init__(self, in_files, enabled_conditions):
+        super(StyleBuilderWriter, self).__init__(in_files, enabled_conditions)
+        self._properties = self.in_file.name_dictionaries
+
+        def set_if_none(property, key, value):
+            if property[key] is None:
+                property[key] = value
+
+        for property in self._properties:
+            cc = self._camelcase_property_name(property["name"])
+            property["property_id"] = "CSSProperty" + cc
+            cc = property["name_for_methods"] or cc.replace("Webkit", "")
+            set_if_none(property, "type_name", "E" + cc)
+            set_if_none(property, "getter", self._lower_first(cc))
+            set_if_none(property, "setter", "set" + cc)
+            set_if_none(property, "initial", "initial" + cc)
+
+# FIXME: some of these might be better in a utils file
+    @staticmethod
+    def _camelcase_property_name(property_name):
+        return re.sub(r'(^[^-])|-(.)', lambda match: (match.group(1) or match.group(2)).upper(), property_name)
+
+    @staticmethod
+    def _lower_first(s):
+        return s[0].lower() + s[1:]
+
+    @staticmethod
+    def _upper_first(s):
+        return s[0].upper() + s[1:]
+
+    def generate_implementation(self):
+        return {
+            "properties": self._properties,
+        }
+
+
+if __name__ == "__main__":
+    in_generator.Maker(StyleBuilderWriter).main(sys.argv)
diff --git a/core/scripts/name_macros.py b/core/scripts/name_macros.py
new file mode 100644
index 0000000..d7928c3
--- /dev/null
+++ b/core/scripts/name_macros.py
@@ -0,0 +1,159 @@
+# 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 os.path
+import re
+
+import in_generator
+from in_generator import Maker
+import license
+
+
+HEADER_TEMPLATE = """%(license)s
+
+#ifndef %(class_name)sHeaders_h
+#define %(class_name)sHeaders_h
+
+%(includes)s
+
+#endif // %(class_name)sHeaders_h
+"""
+
+
+INTERFACES_HEADER_TEMPLATE = """%(license)s
+
+#ifndef %(class_name)sInterfaces_h
+#define %(class_name)sInterfaces_h
+
+%(declare_conditional_macros)s
+
+#define %(macro_style_name)s_INTERFACES_FOR_EACH(macro) \\
+    \\
+%(unconditional_macros)s
+    \\
+%(conditional_macros)s
+
+#endif // %(class_name)sInterfaces_h
+"""
+
+
+def _to_macro_style(name):
+    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
+    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).upper()
+
+
+def _name_for_entry(entry):
+    if entry['interfaceName']:
+        return entry['interfaceName']
+    return os.path.basename(entry['name'])
+
+class Writer(in_generator.Writer):
+    def __init__(self, in_file_path, enabled_conditions):
+        super(Writer, self).__init__(in_file_path, enabled_conditions)
+        self.class_name = self.in_file.parameters['namespace'].strip('"')
+        self._entries_by_conditional = {}
+        self._unconditional_entries = []
+        self._sort_entries_by_conditional()
+
+    def _sort_entries_by_conditional(self):
+        unconditional_names = set()
+        for entry in self.in_file.name_dictionaries:
+            conditional = entry['conditional']
+            if not conditional:
+                name = _name_for_entry(entry)
+                if name in unconditional_names:
+                    continue
+                unconditional_names.add(name)
+                self._unconditional_entries.append(entry)
+                continue
+        for entry in self.in_file.name_dictionaries:
+            name = _name_for_entry(entry)
+            if name in unconditional_names:
+                continue
+            conditional = entry['conditional']
+            if not conditional in self._entries_by_conditional:
+                self._entries_by_conditional[conditional] = []
+            self._entries_by_conditional[conditional].append(entry)
+
+    def _headers_header_include(self, entry):
+        path = entry['name']
+        name = _name_for_entry(entry)
+        if entry['interfaceName']:
+            path = entry['interfaceName']  # FIXME: This seems wrong
+        include = '#include "%(path)s.h"\n#include "V8%(name)s.h"' % {
+            'path': path,
+            'name': name,
+        }
+        return self.wrap_with_condition(include, entry['conditional'])
+
+    def generate_headers_header(self):
+        return HEADER_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'includes': '\n'.join(map(self._headers_header_include, self.in_file.name_dictionaries)),
+        }
+
+    def _declare_one_conditional_macro(self, conditional, entries):
+        macro_name = '%(macro_style_name)s_INTERFACES_FOR_EACH_%(conditional)s' % {
+            'macro_style_name': _to_macro_style(self.class_name),
+            'conditional': conditional,
+        }
+        return self.wrap_with_condition("""#define %(macro_name)s(macro) \\
+%(declarations)s
+
+#else
+#define %(macro_name)s(macro)""" % {
+            'macro_name': macro_name,
+            'declarations': '\n'.join(sorted(set([
+                '    macro(%(name)s) \\' % {'name': _name_for_entry(entry)}
+                for entry in entries]))),
+        }, conditional)
+
+    def _declare_conditional_macros(self):
+        return '\n'.join([
+            self._declare_one_conditional_macro(conditional, entries)
+            for conditional, entries in self._entries_by_conditional.items()])
+
+    def _unconditional_macro(self, entry):
+        return '    macro(%(name)s) \\' % {'name': _name_for_entry(entry)}
+
+    def _conditional_macros(self, conditional):
+        return '    %(macro_style_name)s_INTERFACES_FOR_EACH_%(conditional)s(macro) \\' % {
+            'macro_style_name': _to_macro_style(self.class_name),
+            'conditional': conditional,
+        }
+
+    def generate_interfaces_header(self):
+        return INTERFACES_HEADER_TEMPLATE % {
+            'license': license.license_for_generated_cpp(),
+            'class_name': self.class_name,
+            'macro_style_name': _to_macro_style(self.class_name),
+            'declare_conditional_macros': self._declare_conditional_macros(),
+            'unconditional_macros': '\n'.join(sorted(set(map(self._unconditional_macro, self._unconditional_entries)))),
+            'conditional_macros': '\n'.join(map(self._conditional_macros, self._entries_by_conditional.keys())),
+        }
diff --git a/core/scripts/template_expander.py b/core/scripts/template_expander.py
new file mode 100644
index 0000000..60a272c
--- /dev/null
+++ b/core/scripts/template_expander.py
@@ -0,0 +1,43 @@
+# 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 os
+import sys
+
+_current_dir = os.path.dirname(os.path.realpath(__file__))
+# jinja2 is in chromium's third_party directory
+sys.path.append(os.path.join(_current_dir, *([os.pardir] * 4)))
+import jinja2
+
+
+def apply_template(path_to_template, params):
+    dirname, basename = os.path.split(path_to_template)
+    path_to_templates = os.path.join(_current_dir, "templates")
+    jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader([dirname, path_to_templates]))
+    template = jinja_env.get_template(basename)
+    return template.render(params)
diff --git a/core/scripts/templates/InternalRuntimeFlags.idl.tmpl b/core/scripts/templates/InternalRuntimeFlags.idl.tmpl
new file mode 100644
index 0000000..c73ce7a
--- /dev/null
+++ b/core/scripts/templates/InternalRuntimeFlags.idl.tmpl
@@ -0,0 +1,15 @@
+{% from "macros.tmpl" import license -%}
+{{ license() }}
+
+[
+] interface InternalRuntimeFlags {
+{%- for feature in features if not feature.custom %}
+{#-
+    Currently assuming that runtime flags cannot be changed after startup
+    it's possible that some can be and should be conditionally readonly.
+#}
+    {% if feature.condition -%} [Conditional={{feature.condition}}] {% endif -%}
+    readonly attribute boolean {{feature.first_lowered_name}}Enabled;
+{%- endfor %}
+};
+
diff --git a/core/storage/Storage.idl b/core/storage/Storage.idl
index ce94506..d84944d 100644
--- a/core/storage/Storage.idl
+++ b/core/storage/Storage.idl
@@ -24,13 +24,13 @@
  */
 
 [
-    CustomNamedGetter,
     CustomDeleteProperty,
     CustomEnumerateProperty,
-    CustomIndexedGetter,
     CustomIndexedSetter,
-    CustomNamedSetter,
+    CustomNamedSetter
 ] interface Storage {
+    [RaisesException, ImplementedAs=anonymousIndexedGetter] getter DOMString(unsigned long index);
+    [RaisesException, ImplementedAs=anonymousNamedGetter] getter DOMString(DOMString name);
     [NotEnumerable, GetterRaisesException] readonly attribute unsigned long length;
     [NotEnumerable, TreatReturnedNullStringAs=Null, RaisesException] DOMString key(unsigned long index);
     [NotEnumerable, TreatReturnedNullStringAs=Null, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds, RaisesException] DOMString getItem(DOMString key);
diff --git a/core/svg/ElementTimeControl.idl b/core/svg/ElementTimeControl.idl
index 5307596..cad80aa 100644
--- a/core/svg/ElementTimeControl.idl
+++ b/core/svg/ElementTimeControl.idl
@@ -25,7 +25,7 @@
  */
  
 [
-    Conditional=SVG,
+    Conditional=SVG
     
 ] interface ElementTimeControl { 
     void beginElement();
diff --git a/core/svg/SVGAltGlyphElement.idl b/core/svg/SVGAltGlyphElement.idl
index 2e1f4c5..8d8b1f4 100644
--- a/core/svg/SVGAltGlyphElement.idl
+++ b/core/svg/SVGAltGlyphElement.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    Conditional=SVG&SVG_FONTS,
+    Conditional=SVG&SVG_FONTS
 ] interface SVGAltGlyphElement : SVGTextPositioningElement, SVGURIReference {
     [SetterRaisesException] attribute DOMString glyphRef;
     [SetterRaisesException] attribute DOMString format;
diff --git a/core/svg/SVGAnimatedAngle.idl b/core/svg/SVGAnimatedAngle.idl
index 40dac7f..3e96104 100644
--- a/core/svg/SVGAnimatedAngle.idl
+++ b/core/svg/SVGAnimatedAngle.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedAngle {
     readonly attribute SVGAngle baseVal;
     readonly attribute SVGAngle animVal;
diff --git a/core/svg/SVGAnimatedBoolean.idl b/core/svg/SVGAnimatedBoolean.idl
index c00f475..7ad6bb1 100644
--- a/core/svg/SVGAnimatedBoolean.idl
+++ b/core/svg/SVGAnimatedBoolean.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedBoolean {
     [StrictTypeChecking, SetterRaisesException] attribute boolean baseVal;
     readonly attribute boolean animVal;
diff --git a/core/svg/SVGAnimatedEnumeration.idl b/core/svg/SVGAnimatedEnumeration.idl
index 21f85ba..de96682 100644
--- a/core/svg/SVGAnimatedEnumeration.idl
+++ b/core/svg/SVGAnimatedEnumeration.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedEnumeration {
     [StrictTypeChecking, SetterRaisesException] attribute unsigned short baseVal;
     readonly attribute unsigned short animVal;
diff --git a/core/svg/SVGAnimatedInteger.idl b/core/svg/SVGAnimatedInteger.idl
index d827c4e..5d6b15e 100644
--- a/core/svg/SVGAnimatedInteger.idl
+++ b/core/svg/SVGAnimatedInteger.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedInteger {
     [StrictTypeChecking, SetterRaisesException] attribute long baseVal;
     readonly attribute long animVal;
diff --git a/core/svg/SVGAnimatedLength.idl b/core/svg/SVGAnimatedLength.idl
index 7abba37..241aaad 100644
--- a/core/svg/SVGAnimatedLength.idl
+++ b/core/svg/SVGAnimatedLength.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedLength {
     readonly attribute SVGLength baseVal;
     readonly attribute SVGLength animVal;
diff --git a/core/svg/SVGAnimatedLengthList.idl b/core/svg/SVGAnimatedLengthList.idl
index cfb3c91..934748a 100644
--- a/core/svg/SVGAnimatedLengthList.idl
+++ b/core/svg/SVGAnimatedLengthList.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedLengthList {
     readonly attribute SVGLengthList baseVal;
     readonly attribute SVGLengthList animVal;
diff --git a/core/svg/SVGAnimatedNumber.idl b/core/svg/SVGAnimatedNumber.idl
index 4c5e1f9..2fa7eba 100644
--- a/core/svg/SVGAnimatedNumber.idl
+++ b/core/svg/SVGAnimatedNumber.idl
@@ -25,8 +25,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedNumber {
     [StrictTypeChecking, SetterRaisesException] attribute float baseVal;
     readonly attribute float animVal;
diff --git a/core/svg/SVGAnimatedNumberList.idl b/core/svg/SVGAnimatedNumberList.idl
index f7cbfb7..b912780 100644
--- a/core/svg/SVGAnimatedNumberList.idl
+++ b/core/svg/SVGAnimatedNumberList.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedNumberList {
     readonly attribute SVGNumberList baseVal;
     readonly attribute SVGNumberList animVal;
diff --git a/core/svg/SVGAnimatedPreserveAspectRatio.idl b/core/svg/SVGAnimatedPreserveAspectRatio.idl
index f6b89dd..a84c02d 100644
--- a/core/svg/SVGAnimatedPreserveAspectRatio.idl
+++ b/core/svg/SVGAnimatedPreserveAspectRatio.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedPreserveAspectRatio {
     readonly attribute SVGPreserveAspectRatio baseVal;
     readonly attribute SVGPreserveAspectRatio animVal;
diff --git a/core/svg/SVGAnimatedRect.idl b/core/svg/SVGAnimatedRect.idl
index 6be752e..99e9a62 100644
--- a/core/svg/SVGAnimatedRect.idl
+++ b/core/svg/SVGAnimatedRect.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedRect {
     readonly attribute SVGRect baseVal;
     readonly attribute SVGRect animVal;
diff --git a/core/svg/SVGAnimatedString.idl b/core/svg/SVGAnimatedString.idl
index 62a8dbe..a331bea 100644
--- a/core/svg/SVGAnimatedString.idl
+++ b/core/svg/SVGAnimatedString.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedString {
     [SetterRaisesException] attribute DOMString baseVal;
     readonly attribute DOMString animVal;
diff --git a/core/svg/SVGAnimatedTransformList.idl b/core/svg/SVGAnimatedTransformList.idl
index 0f2f46f..4ce7240 100644
--- a/core/svg/SVGAnimatedTransformList.idl
+++ b/core/svg/SVGAnimatedTransformList.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGAnimatedTransformList {
     readonly attribute SVGTransformList baseVal;
     readonly attribute SVGTransformList animVal;
diff --git a/core/svg/SVGAnimationElement.idl b/core/svg/SVGAnimationElement.idl
index 2f0b912..0507764 100644
--- a/core/svg/SVGAnimationElement.idl
+++ b/core/svg/SVGAnimationElement.idl
@@ -24,7 +24,8 @@
  */
 
 [
-    Conditional=SVG,
+    NoInterfaceObject,
+    Conditional=SVG
 ] interface SVGAnimationElement : SVGElement,
                                                   SVGTests,
                                                   SVGExternalResourcesRequired,
@@ -33,6 +34,6 @@
 
     float getStartTime();
     float getCurrentTime();
-    [RaisesException] float getSimpleDuration();
+    float getSimpleDuration();
 };
 
diff --git a/core/svg/SVGColor.idl b/core/svg/SVGColor.idl
index 31dcd4b..21c669e 100644
--- a/core/svg/SVGColor.idl
+++ b/core/svg/SVGColor.idl
@@ -20,8 +20,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGColor : CSSValue {
     const unsigned short SVG_COLORTYPE_UNKNOWN = 0;
     const unsigned short SVG_COLORTYPE_RGBCOLOR = 1;
diff --git a/core/svg/SVGElement.idl b/core/svg/SVGElement.idl
index 73d0077..96a82e0 100644
--- a/core/svg/SVGElement.idl
+++ b/core/svg/SVGElement.idl
@@ -25,7 +25,7 @@
     CustomToV8
 ] interface SVGElement : Element {
     [Reflect] attribute DOMString id;
-    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString xmlbase;
+    [TreatNullAs=NullString] attribute DOMString xmlbase;
     readonly attribute SVGSVGElement ownerSVGElement;
     readonly attribute SVGElement viewportElement;
 };
diff --git a/core/svg/SVGException.idl b/core/svg/SVGException.idl
index d9872df..ef26a64 100644
--- a/core/svg/SVGException.idl
+++ b/core/svg/SVGException.idl
@@ -20,8 +20,7 @@
 
 [
     Conditional=SVG,
-    DoNotCheckConstants,
-    ImplementationLacksVTable
+    DoNotCheckConstants
 ] exception SVGException {
 
     readonly attribute unsigned short   code;
diff --git a/core/svg/SVGExternalResourcesRequired.idl b/core/svg/SVGExternalResourcesRequired.idl
index 854b268..d7b4d27 100644
--- a/core/svg/SVGExternalResourcesRequired.idl
+++ b/core/svg/SVGExternalResourcesRequired.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGExternalResourcesRequired { 
     readonly attribute SVGAnimatedBoolean externalResourcesRequired;
 };
diff --git a/core/svg/SVGFilterPrimitiveStandardAttributes.idl b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
index 3bfa06a..3bc71e4 100644
--- a/core/svg/SVGFilterPrimitiveStandardAttributes.idl
+++ b/core/svg/SVGFilterPrimitiveStandardAttributes.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    Conditional=SVG,
+    Conditional=SVG
 ] interface SVGFilterPrimitiveStandardAttributes {
     readonly attribute SVGAnimatedLength x;
     readonly attribute SVGAnimatedLength y;
diff --git a/core/svg/SVGFitToViewBox.idl b/core/svg/SVGFitToViewBox.idl
index ccd61c5..625a9d4 100644
--- a/core/svg/SVGFitToViewBox.idl
+++ b/core/svg/SVGFitToViewBox.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGFitToViewBox {
     readonly attribute SVGAnimatedRect                viewBox;
     readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
diff --git a/core/svg/SVGLangSpace.idl b/core/svg/SVGLangSpace.idl
index c5152cc..1b59627 100644
--- a/core/svg/SVGLangSpace.idl
+++ b/core/svg/SVGLangSpace.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGLangSpace {
              attribute DOMString xmllang;
              attribute DOMString xmlspace;
diff --git a/core/svg/SVGLocatable.idl b/core/svg/SVGLocatable.idl
index 7a71bd5..1e8f3fe 100644
--- a/core/svg/SVGLocatable.idl
+++ b/core/svg/SVGLocatable.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGLocatable {
     readonly attribute SVGElement nearestViewportElement;
     readonly attribute SVGElement farthestViewportElement;
diff --git a/core/svg/SVGPaint.idl b/core/svg/SVGPaint.idl
index 8680088..b1cd658 100644
--- a/core/svg/SVGPaint.idl
+++ b/core/svg/SVGPaint.idl
@@ -24,8 +24,7 @@
  */
 
 [
-    Conditional=SVG,
-    ImplementationLacksVTable
+    Conditional=SVG
 ] interface SVGPaint : SVGColor {
     const unsigned short SVG_PAINTTYPE_UNKNOWN = 0;
     const unsigned short SVG_PAINTTYPE_RGBCOLOR = 1;
diff --git a/core/svg/SVGPathSeg.idl b/core/svg/SVGPathSeg.idl
index cda62ad..a0691bb 100644
--- a/core/svg/SVGPathSeg.idl
+++ b/core/svg/SVGPathSeg.idl
@@ -26,9 +26,8 @@
 
 [
     Conditional=SVG,
-    CustomToV8,
+    CustomToV8
     
-    ImplementationLacksVTable
 ] interface SVGPathSeg {
     // Path Segment Types
     const unsigned short PATHSEG_UNKNOWN = 0;
diff --git a/core/svg/SVGRenderingIntent.idl b/core/svg/SVGRenderingIntent.idl
index 9383422..832dd48 100644
--- a/core/svg/SVGRenderingIntent.idl
+++ b/core/svg/SVGRenderingIntent.idl
@@ -25,8 +25,7 @@
 
 [
     Conditional=SVG,
-    DoNotGenerateToV8,
-    ImplementationLacksVTable
+    DoNotGenerateToV8
 ] interface SVGRenderingIntent {
     // Rendering Intent Types
     const unsigned short RENDERING_INTENT_UNKNOWN               = 0;
diff --git a/core/svg/SVGStyleElement.idl b/core/svg/SVGStyleElement.idl
index 6005b2e..858c2c4 100644
--- a/core/svg/SVGStyleElement.idl
+++ b/core/svg/SVGStyleElement.idl
@@ -26,11 +26,10 @@
 
 [
     Conditional=SVG
-] interface SVGStyleElement : SVGElement,
-                                              SVGLangSpace {
-             attribute boolean disabled;
-             [SetterRaisesException] attribute DOMString type;
-             [SetterRaisesException] attribute DOMString media;
-             [SetterRaisesException] attribute DOMString title;
+] interface SVGStyleElement : SVGElement, SVGLangSpace {
+    attribute boolean disabled;
+    attribute DOMString type;
+    attribute DOMString media;
+    attribute DOMString title;
 };
 
diff --git a/core/svg/SVGStyledElement.idl b/core/svg/SVGStyledElement.idl
index 44e61c8..f7f9490 100644
--- a/core/svg/SVGStyledElement.idl
+++ b/core/svg/SVGStyledElement.idl
@@ -26,6 +26,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=SVG
 ] interface SVGStyledElement : SVGElement {
     readonly attribute SVGAnimatedString className;
diff --git a/core/svg/SVGTests.idl b/core/svg/SVGTests.idl
index 3941d6a..3081a64 100644
--- a/core/svg/SVGTests.idl
+++ b/core/svg/SVGTests.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGTests {
     readonly attribute SVGStringList requiredFeatures;
     readonly attribute SVGStringList requiredExtensions;
diff --git a/core/svg/SVGTransformable.idl b/core/svg/SVGTransformable.idl
index e4ab3ce..828fea8 100644
--- a/core/svg/SVGTransformable.idl
+++ b/core/svg/SVGTransformable.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    Conditional=SVG,
+    Conditional=SVG
     
 ] interface SVGTransformable : SVGLocatable {
     readonly attribute SVGAnimatedTransformList transform;
diff --git a/core/svg/SVGURIReference.idl b/core/svg/SVGURIReference.idl
index 7ed40e8..a3f1b55 100644
--- a/core/svg/SVGURIReference.idl
+++ b/core/svg/SVGURIReference.idl
@@ -27,7 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
+    DoNotGenerateToV8
 ] interface SVGURIReference {
     readonly attribute SVGAnimatedString href;
 };
diff --git a/core/svg/SVGUnitTypes.idl b/core/svg/SVGUnitTypes.idl
index b872b3e..b0021d3 100644
--- a/core/svg/SVGUnitTypes.idl
+++ b/core/svg/SVGUnitTypes.idl
@@ -25,8 +25,7 @@
 
 [
     Conditional=SVG,
-    DoNotGenerateToV8,
-    ImplementationLacksVTable
+    DoNotGenerateToV8
 ] interface SVGUnitTypes {
     // Unit Types
     const unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
diff --git a/core/svg/SVGZoomAndPan.idl b/core/svg/SVGZoomAndPan.idl
index 738a916..728f40a 100644
--- a/core/svg/SVGZoomAndPan.idl
+++ b/core/svg/SVGZoomAndPan.idl
@@ -27,8 +27,7 @@
 [
     Conditional=SVG,
     
-    DoNotGenerateToV8,
-    ImplementationLacksVTable
+    DoNotGenerateToV8
 ] interface SVGZoomAndPan {
     const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
     const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
diff --git a/core/testing/InternalSettings.idl b/core/testing/InternalSettings.idl
index 30c0d91..ed5ad0e 100644
--- a/core/testing/InternalSettings.idl
+++ b/core/testing/InternalSettings.idl
@@ -39,7 +39,6 @@
     [RaisesException] void setTextAutosizingEnabled(boolean enabled);
     [RaisesException] void setTextAutosizingWindowSizeOverride(long width, long height);
     [RaisesException] void setTextAutosizingFontScaleFactor(float fontScaleFactor);
-    [RaisesException] void setResolutionOverride(long dotsPerCSSInchHorizontally, long dotsPerCSSInchVertically);
     [RaisesException] void setMediaTypeOverride(DOMString mediaTypeOverride);
     [RaisesException] void setEditingBehavior(DOMString behavior);
 
@@ -60,6 +59,7 @@
     void setCSSExclusionsEnabled(boolean enabled);
     void setDialogElementEnabled(boolean enabled);
     void setExperimentalShadowDOMEnabled(boolean enabled);
+    void setExperimentalWebSocketEnabled(boolean enabled);
     void setLangAttributeAwareFormControlUIEnabled(boolean enabled);
     void setLazyLayoutEnabled(boolean enabled);
     void setStyleScopedEnabled(boolean enabled);
diff --git a/core/testing/Internals.idl b/core/testing/Internals.idl
index 3be4238..23557da 100644
--- a/core/testing/Internals.idl
+++ b/core/testing/Internals.idl
@@ -38,7 +38,6 @@
     [RaisesException] CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
 
     [RaisesException] ShadowRoot ensureShadowRoot(Element host);
-    [RaisesException] ShadowRoot createShadowRoot(Element host);
     [RaisesException] ShadowRoot shadowRoot(Element host);
     [RaisesException] ShadowRoot youngestShadowRoot(Element host);
     [RaisesException] ShadowRoot oldestShadowRoot(Element host);
@@ -61,16 +60,11 @@
     [RaisesException] boolean hasSelectorForAttributeInShadow(Element host, DOMString attributeName);
     [RaisesException] boolean hasSelectorForPseudoClassInShadow(Element host, DOMString pseudoClass);
 
-    // CSS Animation testing.
+    // CSS Animation and Transition testing.
     unsigned long numberOfActiveAnimations();
     [RaisesException] void suspendAnimations(Document document);
     [RaisesException] void resumeAnimations(Document document);
-    [RaisesException] boolean pauseAnimationAtTimeOnElement(DOMString animationName, double pauseTime, Element element);
-    [RaisesException] boolean pauseAnimationAtTimeOnPseudoElement(DOMString animationName, double pauseTime, Element element, DOMString pseudoId);
-
-    // CSS Transition testing.
-    [RaisesException] boolean pauseTransitionAtTimeOnElement(DOMString propertyName, double pauseTime, Element element);
-    [RaisesException] boolean pauseTransitionAtTimeOnPseudoElement(DOMString property, double pauseTime, Element element, DOMString pseudoId);
+    [RaisesException] void pauseAnimations(double pauseTime);
 
     [RaisesException] Node nextSiblingByWalker(Node node);
     [RaisesException] Node firstChildByWalker(Node node);
@@ -87,9 +81,7 @@
     [RaisesException] DOMString[] formControlStateOfPreviousHistoryItem();
     [RaisesException] void setFormControlStateOfPreviousHistoryItem(sequence<DOMString> values);
     [RaisesException] void setEnableMockPagePopup(boolean enabled);
-#if defined(ENABLE_PAGE_POPUP) && ENABLE_PAGE_POPUP
     readonly attribute PagePopupController pagePopupController;
-#endif
 
     [RaisesException] ClientRect absoluteCaretBounds();
 
@@ -154,7 +146,6 @@
 
     [RaisesException] boolean hasSpellingMarker(Document document, long from, long length);
     [RaisesException] boolean hasGrammarMarker(Document document, long from, long length);
-    [RaisesException] boolean hasAutocorrectedMarker(Document document, long from, long length);
     [RaisesException] void setContinuousSpellCheckingEnabled(boolean enabled);
 
     [RaisesException] boolean isOverwriteModeEnabled(Document document);
@@ -165,6 +156,7 @@
     [RaisesException] boolean isPageBoxVisible(Document document, long pageNumber);
 
     readonly attribute InternalSettings settings;
+    readonly attribute InternalRuntimeFlags runtimeFlags;
     readonly attribute unsigned long workerThreadCount;
 
     // Flags for layerTreeAsText.
@@ -210,6 +202,7 @@
     [RaisesException] DOMString pageProperty(DOMString propertyName, long pageNumber);
     [RaisesException] DOMString pageSizeAndMarginsInPixels(long pageIndex, long width, long height, long marginTop, long marginRight, long marginBottom, long marginLeft);
 
+    [RaisesException] void setDeviceScaleFactor(float scaleFactor);
     [RaisesException] void setPageScaleFactor(float scaleFactor, long x, long y);
 
     [RaisesException] void setIsCursorVisible(Document document, boolean isVisible);
@@ -246,7 +239,7 @@
 
     [Conditional=ENCRYPTED_MEDIA_V2] void initializeMockCDM();
 
-    [Conditional=SPEECH_SYNTHESIS] void enableMockSpeechSynthesizer();
+    void enableMockSpeechSynthesizer();
 
     [RaisesException] DOMString getImageSourceURL(Element element);
 
diff --git a/core/testing/MallocStatistics.idl b/core/testing/MallocStatistics.idl
index bf78b4c..dd3459b 100644
--- a/core/testing/MallocStatistics.idl
+++ b/core/testing/MallocStatistics.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface MallocStatistics {
     readonly attribute unsigned long reservedVMBytes;
     readonly attribute unsigned long committedVMBytes;
diff --git a/core/testing/TypeConversions.idl b/core/testing/TypeConversions.idl
index e96c215..b3996ab 100644
--- a/core/testing/TypeConversions.idl
+++ b/core/testing/TypeConversions.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface TypeConversions {
     attribute long testLong;
     [EnforceRange] attribute long testEnforceRangeLong;
diff --git a/core/workers/AbstractWorker.idl b/core/workers/AbstractWorker.idl
index cd06688..4a0da0d 100644
--- a/core/workers/AbstractWorker.idl
+++ b/core/workers/AbstractWorker.idl
@@ -30,6 +30,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     EventTarget
 ] interface AbstractWorker {
diff --git a/core/workers/DedicatedWorkerContext.idl b/core/workers/DedicatedWorkerContext.idl
index d204859..3f4f45c 100644
--- a/core/workers/DedicatedWorkerContext.idl
+++ b/core/workers/DedicatedWorkerContext.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface DedicatedWorkerContext : WorkerContext {
+[
+    NoInterfaceObject
+] interface DedicatedWorkerContext : WorkerContext {
     [Custom, RaisesException] void postMessage(any message, optional Array messagePorts);
     attribute EventListener onmessage;
 };
diff --git a/core/workers/SharedWorker.idl b/core/workers/SharedWorker.idl
index c69690f..d6cae73 100644
--- a/core/workers/SharedWorker.idl
+++ b/core/workers/SharedWorker.idl
@@ -30,6 +30,7 @@
  */
 
 [
+    NoInterfaceObject,
     Constructor(DOMString scriptURL, [Default=NullString] optional DOMString name),
     CallWith=ScriptExecutionContext,
     RaisesException
diff --git a/core/workers/SharedWorkerContext.idl b/core/workers/SharedWorkerContext.idl
index 4f0d991..52fc0a2 100644
--- a/core/workers/SharedWorkerContext.idl
+++ b/core/workers/SharedWorkerContext.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface SharedWorkerContext : WorkerContext {
+[
+    NoInterfaceObject
+] interface SharedWorkerContext : WorkerContext {
     readonly attribute DOMString name;
              attribute EventListener onconnect;
 };
diff --git a/core/workers/WorkerContext.idl b/core/workers/WorkerContext.idl
index ef788ac..188b285 100644
--- a/core/workers/WorkerContext.idl
+++ b/core/workers/WorkerContext.idl
@@ -25,6 +25,7 @@
  */
 
 [
+    NoInterfaceObject,
     EventTarget,
     CustomToV8,
     DoNotGenerateWrap
@@ -68,8 +69,8 @@
     attribute FileReaderConstructor FileReader;
     attribute FileReaderSyncConstructor FileReaderSync;
 
-    attribute DOMURLConstructor URL;
-    attribute DOMURLConstructor webkitURL; // FIXME: deprecate this.
+    attribute URLConstructor URL;
+    attribute URLConstructor webkitURL; // FIXME: deprecate this.
 
     attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
     attribute Int8ArrayConstructor Int8Array; // Usable with new operator
diff --git a/core/workers/WorkerLocation.idl b/core/workers/WorkerLocation.idl
index ac581e3..eac41a3 100644
--- a/core/workers/WorkerLocation.idl
+++ b/core/workers/WorkerLocation.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface WorkerLocation {
     readonly attribute DOMString href;
     readonly attribute DOMString protocol;
diff --git a/core/xml/DOMParser.idl b/core/xml/DOMParser.idl
index c602a59..ca9ee11 100644
--- a/core/xml/DOMParser.idl
+++ b/core/xml/DOMParser.idl
@@ -18,8 +18,7 @@
  */
 
 [
-    Constructor,
-    ImplementationLacksVTable
+    Constructor
 ] interface DOMParser {
     Document parseFromString([Default=Undefined] optional DOMString str, 
                              [Default=Undefined] optional DOMString contentType);
diff --git a/core/xml/XMLSerializer.idl b/core/xml/XMLSerializer.idl
index 5e174e1..88a9171 100644
--- a/core/xml/XMLSerializer.idl
+++ b/core/xml/XMLSerializer.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    Constructor,
-    ImplementationLacksVTable
+    Constructor
 ] interface XMLSerializer {
     [RaisesException] DOMString serializeToString([Default=Undefined] optional Node node);
 };
diff --git a/core/xml/XPathEvaluator.idl b/core/xml/XPathEvaluator.idl
index 457663f..59b45fc 100644
--- a/core/xml/XPathEvaluator.idl
+++ b/core/xml/XPathEvaluator.idl
@@ -18,8 +18,7 @@
  */
 
 [
-    Constructor,
-    ImplementationLacksVTable
+    Constructor
 ] interface XPathEvaluator {
     [RaisesException] XPathExpression createExpression([Default=Undefined] optional DOMString expression,
                                      [Default=Undefined] optional XPathNSResolver resolver);
diff --git a/core/xml/XPathException.idl b/core/xml/XPathException.idl
index 6e63839..2f4ef9f 100644
--- a/core/xml/XPathException.idl
+++ b/core/xml/XPathException.idl
@@ -27,8 +27,7 @@
  */
 
 [
-    DoNotCheckConstants,
-    ImplementationLacksVTable
+    DoNotCheckConstants
 ] exception XPathException {
 
     readonly attribute unsigned short   code;
diff --git a/core/xml/XPathExpression.idl b/core/xml/XPathExpression.idl
index 0ba88c5..3a3b1b2 100644
--- a/core/xml/XPathExpression.idl
+++ b/core/xml/XPathExpression.idl
@@ -18,7 +18,7 @@
  * Boston, MA 02110-1301, USA.
  */
 [
-     ImplementationLacksVTable
+    NoInterfaceObject
 ] interface XPathExpression {
      [RaisesException] XPathResult evaluate([Default=Undefined] optional Node contextNode, 
                                         [Default=Undefined] optional unsigned short type, 
diff --git a/core/xml/XPathNSResolver.idl b/core/xml/XPathNSResolver.idl
index f746891..3210792 100644
--- a/core/xml/XPathNSResolver.idl
+++ b/core/xml/XPathNSResolver.idl
@@ -19,8 +19,7 @@
  */
 
 [
-    
-    SkipVTableValidation
+    NoInterfaceObject
 ] interface XPathNSResolver {
     [TreatReturnedNullStringAs=Null] DOMString lookupNamespaceURI([Default=Undefined] optional DOMString prefix);
 };
diff --git a/core/xml/XPathResult.idl b/core/xml/XPathResult.idl
index 0e21736..99f62af 100644
--- a/core/xml/XPathResult.idl
+++ b/core/xml/XPathResult.idl
@@ -18,7 +18,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface XPathResult {
     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 3dc316d..5cef21e 100644
--- a/core/xml/XSLTProcessor.idl
+++ b/core/xml/XSLTProcessor.idl
@@ -32,9 +32,9 @@
 
 [
     Constructor,
-    ImplementationLacksVTable
+    MeasureAs=XSLTProcessor
 ] interface XSLTProcessor {
-    
+
     void importStylesheet([Default=Undefined] optional Node stylesheet);
     DocumentFragment transformToFragment([Default=Undefined] optional Node source, [Default=Undefined] optional Document docVal);
     Document transformToDocument([Default=Undefined] optional Node source);
diff --git a/modules/README b/modules/README
index 3929bfb..8d6d9a3 100644
--- a/modules/README
+++ b/modules/README
@@ -6,4 +6,4 @@
 
 The current version corresponds to:
 URL: http://src.chromium.org/multivm/trunk/webkit
-Current revision: 1246
+Current revision: 1266
diff --git a/modules/battery/BatteryManager.idl b/modules/battery/BatteryManager.idl
index b8d2b99..c6fb69e 100644
--- a/modules/battery/BatteryManager.idl
+++ b/modules/battery/BatteryManager.idl
@@ -19,6 +19,7 @@
 
 // http://dev.w3.org/2009/dap/system-info/battery-status.html
 [
+    NoInterfaceObject,
     Conditional=BATTERY_STATUS,
     ActiveDOMObject,
     EventTarget
diff --git a/modules/battery/NavigatorBattery.idl b/modules/battery/NavigatorBattery.idl
index 7c02503..d58c82a 100644
--- a/modules/battery/NavigatorBattery.idl
+++ b/modules/battery/NavigatorBattery.idl
@@ -18,7 +18,7 @@
  */
 
 [
-    Conditional=BATTERY_STATUS,
+    Conditional=BATTERY_STATUS
 ] partial interface Navigator {
     readonly attribute BatteryManager webkitBattery;
 };
diff --git a/modules/device_orientation/DeviceAcceleration.idl b/modules/device_orientation/DeviceAcceleration.idl
index ad74f17..c4ff4a6 100644
--- a/modules/device_orientation/DeviceAcceleration.idl
+++ b/modules/device_orientation/DeviceAcceleration.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DeviceAcceleration {
     readonly attribute double? x;
     readonly attribute double? y;
diff --git a/modules/device_orientation/DeviceMotionEvent.idl b/modules/device_orientation/DeviceMotionEvent.idl
index 3e6a6ca..8d8cc79 100644
--- a/modules/device_orientation/DeviceMotionEvent.idl
+++ b/modules/device_orientation/DeviceMotionEvent.idl
@@ -23,7 +23,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-interface DeviceMotionEvent : Event {
+[
+    NoInterfaceObject
+] interface DeviceMotionEvent : Event {
     readonly attribute DeviceAcceleration acceleration;
     readonly attribute DeviceAcceleration accelerationIncludingGravity;
     readonly attribute DeviceRotationRate rotationRate;
diff --git a/modules/device_orientation/DeviceRotationRate.idl b/modules/device_orientation/DeviceRotationRate.idl
index d599c97..2d7600a 100644
--- a/modules/device_orientation/DeviceRotationRate.idl
+++ b/modules/device_orientation/DeviceRotationRate.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DeviceRotationRate {
     readonly attribute double? alpha;
     readonly attribute double? beta;
diff --git a/modules/encryptedmedia/MediaKeySession.idl b/modules/encryptedmedia/MediaKeySession.idl
index ba4d1cb..57b809e 100644
--- a/modules/encryptedmedia/MediaKeySession.idl
+++ b/modules/encryptedmedia/MediaKeySession.idl
@@ -26,7 +26,7 @@
 [
     Conditional=ENCRYPTED_MEDIA_V2,
     EnabledAtRuntime=encryptedMedia,
-    EventTarget,
+    EventTarget
 ] interface MediaKeySession {
     // error state
     readonly attribute MediaKeyError error;
diff --git a/modules/filesystem/DOMFileSystem.idl b/modules/filesystem/DOMFileSystem.idl
index e6ab12f..6e8ab7f 100644
--- a/modules/filesystem/DOMFileSystem.idl
+++ b/modules/filesystem/DOMFileSystem.idl
@@ -30,6 +30,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject
 ] interface DOMFileSystem {
     readonly attribute DOMString name;
diff --git a/modules/filesystem/DOMFileSystemSync.idl b/modules/filesystem/DOMFileSystemSync.idl
index 6583484..5e67ada 100644
--- a/modules/filesystem/DOMFileSystemSync.idl
+++ b/modules/filesystem/DOMFileSystemSync.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface DOMFileSystemSync {
+[
+    NoInterfaceObject
+] interface DOMFileSystemSync {
     readonly attribute DOMString name;
     readonly attribute DirectoryEntrySync root;
 };
diff --git a/modules/filesystem/DirectoryEntry.idl b/modules/filesystem/DirectoryEntry.idl
index f77a4e9..3e51b11 100644
--- a/modules/filesystem/DirectoryEntry.idl
+++ b/modules/filesystem/DirectoryEntry.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface DirectoryEntry : Entry {
+[
+    NoInterfaceObject
+] interface DirectoryEntry : Entry {
     DirectoryReader createReader();
     void getFile([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
     void getDirectory([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
diff --git a/modules/filesystem/DirectoryEntrySync.idl b/modules/filesystem/DirectoryEntrySync.idl
index 2301dfc..b1c93b9 100644
--- a/modules/filesystem/DirectoryEntrySync.idl
+++ b/modules/filesystem/DirectoryEntrySync.idl
@@ -28,8 +28,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface DirectoryEntrySync : EntrySync {
-    [RaisesException] DirectoryReaderSync createReader();
+[
+    NoInterfaceObject
+] interface DirectoryEntrySync : EntrySync {
+    DirectoryReaderSync createReader();
     [RaisesException] FileEntrySync getFile([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, Dictionary flags);
     [RaisesException] DirectoryEntrySync getDirectory([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, Dictionary flags);
     [RaisesException] void removeRecursively();
diff --git a/modules/filesystem/DirectoryReader.idl b/modules/filesystem/DirectoryReader.idl
index b93aa62..7660917 100644
--- a/modules/filesystem/DirectoryReader.idl
+++ b/modules/filesystem/DirectoryReader.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DirectoryReader {
     void readEntries(EntriesCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/DirectoryReaderSync.idl b/modules/filesystem/DirectoryReaderSync.idl
index bc2a9bd..9821f43 100644
--- a/modules/filesystem/DirectoryReaderSync.idl
+++ b/modules/filesystem/DirectoryReaderSync.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface DirectoryReaderSync {
     [RaisesException] EntryArraySync readEntries();
 };
diff --git a/modules/filesystem/Entry.idl b/modules/filesystem/Entry.idl
index ba90dfe..198d3e6 100644
--- a/modules/filesystem/Entry.idl
+++ b/modules/filesystem/Entry.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     CustomToV8
 ] interface Entry {
     readonly attribute boolean isFile;
diff --git a/modules/filesystem/EntryArray.idl b/modules/filesystem/EntryArray.idl
index 6d75100..2e637f4 100644
--- a/modules/filesystem/EntryArray.idl
+++ b/modules/filesystem/EntryArray.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface EntryArray {
     readonly attribute unsigned long length;
     getter Entry item([IsIndex] unsigned long index);
diff --git a/modules/filesystem/EntryArraySync.idl b/modules/filesystem/EntryArraySync.idl
index 52651e4..e456446 100644
--- a/modules/filesystem/EntryArraySync.idl
+++ b/modules/filesystem/EntryArraySync.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface EntryArraySync {
     readonly attribute unsigned long length;
     getter EntrySync item([IsIndex] unsigned long index);
diff --git a/modules/filesystem/EntrySync.idl b/modules/filesystem/EntrySync.idl
index 08021da..c71f2c7 100644
--- a/modules/filesystem/EntrySync.idl
+++ b/modules/filesystem/EntrySync.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     CustomToV8
 ] interface EntrySync {
     readonly attribute boolean isFile;
diff --git a/modules/filesystem/FileEntry.idl b/modules/filesystem/FileEntry.idl
index 63bff0a..818b759 100644
--- a/modules/filesystem/FileEntry.idl
+++ b/modules/filesystem/FileEntry.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface FileEntry : Entry {
+[
+    NoInterfaceObject
+] interface FileEntry : Entry {
     void createWriter(FileWriterCallback successCallback, optional ErrorCallback errorCallback);
     void file(FileCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/FileEntrySync.idl b/modules/filesystem/FileEntrySync.idl
index 67869b2..52b3e2a 100644
--- a/modules/filesystem/FileEntrySync.idl
+++ b/modules/filesystem/FileEntrySync.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface FileEntrySync : EntrySync {
+[
+    NoInterfaceObject
+] interface FileEntrySync : EntrySync {
     [RaisesException] File file();
     [RaisesException] FileWriterSync createWriter();
 };
diff --git a/modules/filesystem/FileWriter.idl b/modules/filesystem/FileWriter.idl
index 843bc2e..6624843 100644
--- a/modules/filesystem/FileWriter.idl
+++ b/modules/filesystem/FileWriter.idl
@@ -30,6 +30,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     CallWith=ScriptExecutionContext,
     EventTarget
diff --git a/modules/filesystem/FileWriterSync.idl b/modules/filesystem/FileWriterSync.idl
index 8266850..9b746bd 100644
--- a/modules/filesystem/FileWriterSync.idl
+++ b/modules/filesystem/FileWriterSync.idl
@@ -28,7 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface FileWriterSync {
+[
+    NoInterfaceObject
+] interface FileWriterSync {
     // synchronous write/modify methods
     [RaisesException] void write(Blob data);
     [RaisesException] void seek(long long position);
diff --git a/modules/filesystem/Metadata.idl b/modules/filesystem/Metadata.idl
index 6816231..ee77c0c 100644
--- a/modules/filesystem/Metadata.idl
+++ b/modules/filesystem/Metadata.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Metadata {
     readonly attribute Date modificationTime;
     readonly attribute unsigned long long size;
diff --git a/modules/gamepad/Gamepad.idl b/modules/gamepad/Gamepad.idl
index 33f5616..b263929 100644
--- a/modules/gamepad/Gamepad.idl
+++ b/modules/gamepad/Gamepad.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Gamepad {
     readonly attribute DOMString id;
     readonly attribute unsigned long index;
diff --git a/modules/gamepad/GamepadList.idl b/modules/gamepad/GamepadList.idl
index 0277a61..396c013 100644
--- a/modules/gamepad/GamepadList.idl
+++ b/modules/gamepad/GamepadList.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface GamepadList {
     readonly attribute unsigned long length;
     getter Gamepad item([Default=Undefined] optional unsigned long index);
diff --git a/modules/gamepad/NavigatorGamepad.idl b/modules/gamepad/NavigatorGamepad.idl
index eea135f..5136454 100644
--- a/modules/gamepad/NavigatorGamepad.idl
+++ b/modules/gamepad/NavigatorGamepad.idl
@@ -18,6 +18,6 @@
  */
 
 partial interface Navigator {
-    [EnabledAtRuntime] GamepadList webkitGetGamepads();
+    [EnabledAtRuntime=gamepad] GamepadList webkitGetGamepads();
 };
 
diff --git a/modules/geolocation/Coordinates.idl b/modules/geolocation/Coordinates.idl
index 38b58e4..b5a07d7 100644
--- a/modules/geolocation/Coordinates.idl
+++ b/modules/geolocation/Coordinates.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Coordinates {
     readonly attribute double latitude;
     readonly attribute double longitude;
diff --git a/modules/geolocation/Geolocation.idl b/modules/geolocation/Geolocation.idl
index c0f7130..03f478a 100644
--- a/modules/geolocation/Geolocation.idl
+++ b/modules/geolocation/Geolocation.idl
@@ -25,6 +25,7 @@
 
 // http://www.w3.org/TR/geolocation-API/#geolocation_interface
 [
+    NoInterfaceObject
 ] interface Geolocation {
     [Custom, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds] void getCurrentPosition(PositionCallback successCallback,
                                      optional PositionErrorCallback errorCallback,
diff --git a/modules/geolocation/Geoposition.idl b/modules/geolocation/Geoposition.idl
index d2d317d..34ef94e 100644
--- a/modules/geolocation/Geoposition.idl
+++ b/modules/geolocation/Geoposition.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface Geoposition {
     readonly attribute Coordinates coords;
     readonly attribute DOMTimeStamp timestamp;
diff --git a/modules/geolocation/PositionError.idl b/modules/geolocation/PositionError.idl
index 2f0b98a..56b4d41 100644
--- a/modules/geolocation/PositionError.idl
+++ b/modules/geolocation/PositionError.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface PositionError {
     readonly attribute unsigned short code;
     readonly attribute DOMString message;
diff --git a/modules/indexeddb/DOMWindowIndexedDatabase.idl b/modules/indexeddb/DOMWindowIndexedDatabase.idl
index 18c3724..bb9982c 100644
--- a/modules/indexeddb/DOMWindowIndexedDatabase.idl
+++ b/modules/indexeddb/DOMWindowIndexedDatabase.idl
@@ -27,26 +27,5 @@
 partial interface DOMWindow {
     [ImplementedAs=indexedDB,MeasureAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
 
-    attribute IDBCursorConstructor webkitIDBCursor;
-    attribute IDBDatabaseConstructor webkitIDBDatabase;
-    attribute IDBFactoryConstructor webkitIDBFactory;
-    attribute IDBIndexConstructor webkitIDBIndex;
-    attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-    attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-    attribute IDBRequestConstructor webkitIDBRequest;
-    attribute IDBTransactionConstructor webkitIDBTransaction;
-
     [MeasureAs=UnprefixedIndexedDB] readonly attribute IDBFactory indexedDB;
-
-    attribute IDBCursorConstructor IDBCursor;
-    attribute IDBCursorWithValueConstructor IDBCursorWithValue;
-    attribute IDBDatabaseConstructor IDBDatabase;
-    attribute IDBFactoryConstructor IDBFactory;
-    attribute IDBIndexConstructor IDBIndex;
-    attribute IDBKeyRangeConstructor IDBKeyRange;
-    attribute IDBObjectStoreConstructor IDBObjectStore;
-    attribute IDBOpenDBRequestConstructor IDBOpenDBRequest;
-    attribute IDBRequestConstructor IDBRequest;
-    attribute IDBTransactionConstructor IDBTransaction;
-    attribute IDBVersionChangeEventConstructor IDBVersionChangeEvent;
 };
diff --git a/modules/indexeddb/IDBAny.idl b/modules/indexeddb/IDBAny.idl
index 485e3db..36f262a 100644
--- a/modules/indexeddb/IDBAny.idl
+++ b/modules/indexeddb/IDBAny.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     CustomToV8,
     DoNotGenerateWrap
 ] interface IDBAny {
diff --git a/modules/indexeddb/IDBFactory.idl b/modules/indexeddb/IDBFactory.idl
index 052c191..dc69602 100644
--- a/modules/indexeddb/IDBFactory.idl
+++ b/modules/indexeddb/IDBFactory.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface IDBFactory {
     [CallWith=ScriptExecutionContext, ImplementedAs=getDatabaseNames, RaisesException] IDBRequest webkitGetDatabaseNames();
 
diff --git a/modules/indexeddb/IDBIndex.idl b/modules/indexeddb/IDBIndex.idl
index 78ef8af..861c673 100644
--- a/modules/indexeddb/IDBIndex.idl
+++ b/modules/indexeddb/IDBIndex.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface IDBIndex {
     readonly attribute DOMString name;
     readonly attribute IDBObjectStore objectStore;
diff --git a/modules/indexeddb/IDBKeyRange.idl b/modules/indexeddb/IDBKeyRange.idl
index cc3900e..235e09e 100644
--- a/modules/indexeddb/IDBKeyRange.idl
+++ b/modules/indexeddb/IDBKeyRange.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface IDBKeyRange {
     [ImplementedAs=lowerValue,CallWith=ScriptExecutionContext] readonly attribute any lower;
     [ImplementedAs=upperValue,CallWith=ScriptExecutionContext] readonly attribute any upper;
diff --git a/modules/indexeddb/IDBObjectStore.idl b/modules/indexeddb/IDBObjectStore.idl
index 941bf99..d3e4616 100644
--- a/modules/indexeddb/IDBObjectStore.idl
+++ b/modules/indexeddb/IDBObjectStore.idl
@@ -24,7 +24,6 @@
  */
 
 [
-    ImplementationLacksVTable
 ] interface IDBObjectStore {
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString name;
     [ImplementedAs=keyPathAny] readonly attribute IDBAny keyPath;
diff --git a/modules/webmidi/DOMWindowWebMIDI.idl b/modules/mediasource/DOMWindowMediaSource.idl
similarity index 83%
rename from modules/webmidi/DOMWindowWebMIDI.idl
rename to modules/mediasource/DOMWindowMediaSource.idl
index 1d07d1e..20a0215 100644
--- a/modules/webmidi/DOMWindowWebMIDI.idl
+++ b/modules/mediasource/DOMWindowMediaSource.idl
@@ -27,8 +27,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.
  */
-
 partial interface DOMWindow {
-    [EnabledAtRuntime=webMIDI] attribute MIDIConnectionEventConstructor MIDIConnectionEvent;
-    [EnabledAtRuntime=webMIDI] attribute MIDIMessageEventConstructor MIDIMessageEvent;
-};
+    [EnabledAtRuntime=webKitMediaSource] attribute WebKitMediaSourceConstructor WebKitMediaSource;
+    [EnabledAtRuntime=webKitMediaSource] attribute WebKitSourceBufferConstructor WebKitSourceBuffer;
+    [EnabledAtRuntime=webKitMediaSource] attribute WebKitSourceBufferListConstructor WebKitSourceBufferList;
+};
\ No newline at end of file
diff --git a/modules/mediasource/MediaSource.idl b/modules/mediasource/WebKitMediaSource.idl
similarity index 86%
rename from modules/mediasource/MediaSource.idl
rename to modules/mediasource/WebKitMediaSource.idl
index 29c6f0d..573548b 100644
--- a/modules/mediasource/MediaSource.idl
+++ b/modules/mediasource/WebKitMediaSource.idl
@@ -29,22 +29,23 @@
  */
  
 [
-    EnabledAtRuntime=mediaSource,
+    NoInterfaceObject,
+    EnabledAtRuntime=webKitMediaSource,
     ActiveDOMObject,
     EventTarget,
     Constructor,
     CallWith=ScriptExecutionContext
-] interface MediaSource {
+] interface WebKitMediaSource {
     // All the source buffers created by this object.
-    readonly attribute SourceBufferList sourceBuffers;
+    readonly attribute WebKitSourceBufferList sourceBuffers;
 
     // Subset of sourceBuffers that provide data for the selected/enabled tracks.
-    readonly attribute SourceBufferList activeSourceBuffers;
+    readonly attribute WebKitSourceBufferList activeSourceBuffers;
 
     [SetterRaisesException] attribute double duration;
 
-    [RaisesException] SourceBuffer addSourceBuffer(DOMString type);
-    [RaisesException] void removeSourceBuffer(SourceBuffer buffer);
+    [RaisesException] WebKitSourceBuffer addSourceBuffer(DOMString type);
+    [RaisesException] void removeSourceBuffer(WebKitSourceBuffer buffer);
 
     readonly attribute DOMString readyState;
     
diff --git a/modules/mediasource/SourceBuffer.idl b/modules/mediasource/WebKitSourceBuffer.idl
similarity index 95%
rename from modules/mediasource/SourceBuffer.idl
rename to modules/mediasource/WebKitSourceBuffer.idl
index fc29be4..4995de8 100644
--- a/modules/mediasource/SourceBuffer.idl
+++ b/modules/mediasource/WebKitSourceBuffer.idl
@@ -29,8 +29,9 @@
  */
  
 [
-    EnabledAtRuntime=mediaSource
-] interface SourceBuffer {
+    NoInterfaceObject,
+    EnabledAtRuntime=webKitMediaSource
+] interface WebKitSourceBuffer {
 
     // Returns the time ranges buffered.
     [GetterRaisesException] readonly attribute TimeRanges buffered;
diff --git a/modules/mediasource/SourceBufferList.idl b/modules/mediasource/WebKitSourceBufferList.idl
similarity index 92%
rename from modules/mediasource/SourceBufferList.idl
rename to modules/mediasource/WebKitSourceBufferList.idl
index 443edb3..7cca041 100644
--- a/modules/mediasource/SourceBufferList.idl
+++ b/modules/mediasource/WebKitSourceBufferList.idl
@@ -29,12 +29,13 @@
  */
  
 [
-    EnabledAtRuntime=mediaSource,
+    NoInterfaceObject,
+    EnabledAtRuntime=webKitMediaSource,
     EventTarget,
     CallWith=ScriptExecutionContext
-] interface SourceBufferList {
+] interface WebKitSourceBufferList {
     readonly attribute unsigned long length;
-    getter SourceBuffer item(unsigned long index);
+    getter WebKitSourceBuffer item(unsigned long index);
 
     // EventTarget interface
     void addEventListener(DOMString type,
diff --git a/modules/mediastream/DOMWindowMediaStream.idl b/modules/mediastream/DOMWindowMediaStream.idl
deleted file mode 100644
index c9cffef..0000000
--- a/modules/mediastream/DOMWindowMediaStream.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-partial interface DOMWindow {
-    [EnabledAtRuntime=mediaStream] attribute MediaStreamConstructor webkitMediaStream;
-    [EnabledAtRuntime=peerConnection] attribute RTCPeerConnectionConstructor webkitRTCPeerConnection;
-    attribute RTCSessionDescriptionConstructor RTCSessionDescription;
-    attribute RTCIceCandidateConstructor RTCIceCandidate;
-    attribute MediaStreamEventConstructor MediaStreamEvent;
-};
-
diff --git a/modules/mediastream/MediaStream.idl b/modules/mediastream/MediaStream.idl
index 45c415d..dbb7392 100644
--- a/modules/mediastream/MediaStream.idl
+++ b/modules/mediastream/MediaStream.idl
@@ -23,11 +23,12 @@
  */
 
 [
+    NoInterfaceObject,
     EventTarget,
     Constructor,
     Constructor(MediaStream stream),
     Constructor(MediaStreamTrack[] tracks),
-    CallWith=ScriptExecutionContext,
+    CallWith=ScriptExecutionContext
 ] interface MediaStream {
     // DEPRECATED
     readonly attribute DOMString label;
diff --git a/modules/mediastream/MediaStreamTrack.idl b/modules/mediastream/MediaStreamTrack.idl
index b58a085..6710c70 100644
--- a/modules/mediastream/MediaStreamTrack.idl
+++ b/modules/mediastream/MediaStreamTrack.idl
@@ -23,6 +23,7 @@
  */
 
 [
+    NoInterfaceObject,
     EventTarget,
     ActiveDOMObject
 ] interface MediaStreamTrack {
diff --git a/modules/mediastream/MediaStreamTrackEvent.idl b/modules/mediastream/MediaStreamTrackEvent.idl
index c7ad507..b3967d4 100644
--- a/modules/mediastream/MediaStreamTrackEvent.idl
+++ b/modules/mediastream/MediaStreamTrackEvent.idl
@@ -22,7 +22,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface MediaStreamTrackEvent : Event {
+[
+    NoInterfaceObject
+] interface MediaStreamTrackEvent : Event {
    readonly attribute MediaStreamTrack track;
 };
 
diff --git a/modules/mediastream/NavigatorUserMediaError.idl b/modules/mediastream/NavigatorUserMediaError.idl
index cdaa5c0..46d0e03 100644
--- a/modules/mediastream/NavigatorUserMediaError.idl
+++ b/modules/mediastream/NavigatorUserMediaError.idl
@@ -22,7 +22,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface NavigatorUserMediaError {
+[
+    NoInterfaceObject
+] interface NavigatorUserMediaError {
     const unsigned short PERMISSION_DENIED = 1;
     readonly attribute unsigned short code;
 };
diff --git a/modules/mediastream/RTCDTMFSender.idl b/modules/mediastream/RTCDTMFSender.idl
index ad97c75..ff3b6da 100644
--- a/modules/mediastream/RTCDTMFSender.idl
+++ b/modules/mediastream/RTCDTMFSender.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     EventTarget
 ] interface RTCDTMFSender {
diff --git a/modules/mediastream/RTCDTMFToneChangeEvent.idl b/modules/mediastream/RTCDTMFToneChangeEvent.idl
index ee1ae8a..de80edf 100644
--- a/modules/mediastream/RTCDTMFToneChangeEvent.idl
+++ b/modules/mediastream/RTCDTMFToneChangeEvent.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     ConstructorTemplate=Event
 ] interface RTCDTMFToneChangeEvent : Event {
     [InitializedByEventConstructor] readonly attribute DOMString tone;
diff --git a/modules/mediastream/RTCDataChannel.idl b/modules/mediastream/RTCDataChannel.idl
index 4532213..b4263df 100644
--- a/modules/mediastream/RTCDataChannel.idl
+++ b/modules/mediastream/RTCDataChannel.idl
@@ -23,6 +23,7 @@
  */
 
 [
+    NoInterfaceObject,
     EventTarget
 ] interface RTCDataChannel {
     readonly attribute DOMString label;
diff --git a/modules/mediastream/RTCDataChannelEvent.idl b/modules/mediastream/RTCDataChannelEvent.idl
index 2a820b8..98f40d6 100644
--- a/modules/mediastream/RTCDataChannelEvent.idl
+++ b/modules/mediastream/RTCDataChannelEvent.idl
@@ -22,6 +22,8 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface RTCDataChannelEvent : Event {
+[
+    NoInterfaceObject
+] interface RTCDataChannelEvent : Event {
     readonly attribute RTCDataChannel channel;
 };
diff --git a/modules/mediastream/RTCIceCandidateEvent.idl b/modules/mediastream/RTCIceCandidateEvent.idl
index 26b5a61..0cd3e43 100644
--- a/modules/mediastream/RTCIceCandidateEvent.idl
+++ b/modules/mediastream/RTCIceCandidateEvent.idl
@@ -22,7 +22,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface RTCIceCandidateEvent : Event {
+[
+    NoInterfaceObject
+] interface RTCIceCandidateEvent : Event {
     readonly attribute RTCIceCandidate candidate;
 };
 
diff --git a/modules/mediastream/RTCPeerConnection.idl b/modules/mediastream/RTCPeerConnection.idl
index ac044ab..04f2bcb 100644
--- a/modules/mediastream/RTCPeerConnection.idl
+++ b/modules/mediastream/RTCPeerConnection.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     Constructor(Dictionary rtcIceServers, optional Dictionary mediaConstraints),
     RaisesException,
diff --git a/modules/mediastream/RTCStatsReport.idl b/modules/mediastream/RTCStatsReport.idl
index 00ae129..15c193b 100644
--- a/modules/mediastream/RTCStatsReport.idl
+++ b/modules/mediastream/RTCStatsReport.idl
@@ -23,7 +23,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface RTCStatsReport {
     readonly attribute Date timestamp;
     readonly attribute DOMString id;
diff --git a/modules/mediastream/RTCStatsResponse.idl b/modules/mediastream/RTCStatsResponse.idl
index 384bd6b..e278398 100644
--- a/modules/mediastream/RTCStatsResponse.idl
+++ b/modules/mediastream/RTCStatsResponse.idl
@@ -22,7 +22,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface RTCStatsResponse {
+[
+    NoInterfaceObject
+] interface RTCStatsResponse {
     sequence<RTCStatsReport> result();
     getter RTCStatsReport namedItem([Default=Undefined] optional DOMString name);
 };
diff --git a/modules/notifications/DOMWindowNotifications.idl b/modules/notifications/DOMWindowNotifications.idl
index ca5e3b9..9fc7865 100644
--- a/modules/notifications/DOMWindowNotifications.idl
+++ b/modules/notifications/DOMWindowNotifications.idl
@@ -25,13 +25,10 @@
  */
 
 [
-    Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS,
+    Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS
 ] partial interface DOMWindow {
 #if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-    [EnabledAtRuntime, MeasureAs=LegacyNotifications, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds] readonly attribute NotificationCenter webkitNotifications;
-#endif
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-    attribute NotificationConstructor Notification;
+    [EnabledAtRuntime=notifications, MeasureAs=LegacyNotifications, PerWorldBindings, ActivityLog=GetterForIsolatedWorlds] readonly attribute NotificationCenter webkitNotifications;
 #endif
 };
 
diff --git a/modules/notifications/NotificationCenter.idl b/modules/notifications/NotificationCenter.idl
index ceddbe3..9dbc0fe 100644
--- a/modules/notifications/NotificationCenter.idl
+++ b/modules/notifications/NotificationCenter.idl
@@ -30,8 +30,9 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=LEGACY_NOTIFICATIONS,
-    ActiveDOMObject,
+    ActiveDOMObject
 ] interface NotificationCenter {
 #if !defined(ENABLE_TEXT_NOTIFICATIONS_ONLY) || !ENABLE_TEXT_NOTIFICATIONS_ONLY
    [EnabledPerContext=htmlNotifications, MeasureAs=LegacyHTMLNotifications, ActivityLog=Access, RaisesException] Notification createHTMLNotification(DOMString url);
diff --git a/modules/notifications/WorkerContextNotifications.idl b/modules/notifications/WorkerContextNotifications.idl
index 4e2aade..aae97b3 100644
--- a/modules/notifications/WorkerContextNotifications.idl
+++ b/modules/notifications/WorkerContextNotifications.idl
@@ -20,15 +20,15 @@
  * 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. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
 
 [
-    Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS,
+    Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS
 ] partial interface WorkerContext {
 #if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-    [EnabledAtRuntime] readonly attribute NotificationCenter webkitNotifications;
+    [EnabledAtRuntime=notifications] readonly attribute NotificationCenter webkitNotifications;
 #endif
 };
 
diff --git a/modules/quota/StorageInfo.idl b/modules/quota/StorageInfo.idl
index 7a0bbcc..87caad2 100644
--- a/modules/quota/StorageInfo.idl
+++ b/modules/quota/StorageInfo.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface StorageInfo {
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
diff --git a/modules/quota/StorageQuota.idl b/modules/quota/StorageQuota.idl
index 74ab50e..bc008dd 100644
--- a/modules/quota/StorageQuota.idl
+++ b/modules/quota/StorageQuota.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface StorageQuota {
     [CallWith=ScriptExecutionContext] void queryUsageAndQuota(StorageUsageCallback usageCallback, optional StorageErrorCallback errorCallback);
     [CallWith=ScriptExecutionContext] void requestQuota(unsigned long long newQuotaInBytes, optional StorageQuotaCallback quotaCallback, optional StorageErrorCallback errorCallback);
diff --git a/modules/speech/DOMWindowSpeech.idl b/modules/speech/DOMWindowSpeech.idl
deleted file mode 100644
index c4d7e64..0000000
--- a/modules/speech/DOMWindowSpeech.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:
- *  * 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.
- */
-
-partial interface DOMWindow {
-    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionConstructor webkitSpeechRecognition;
-    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
-    [EnabledAtRuntime=scriptedSpeech] attribute SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
-    [EnabledAtRuntime=scriptedSpeech] attribute SpeechGrammarConstructor webkitSpeechGrammar;
-    [EnabledAtRuntime=scriptedSpeech] attribute SpeechGrammarListConstructor webkitSpeechGrammarList;
-};
diff --git a/modules/speech/DOMWindowSpeechSynthesis.idl b/modules/speech/DOMWindowSpeechSynthesis.idl
index 5ce418e..7acb4bc 100644
--- a/modules/speech/DOMWindowSpeechSynthesis.idl
+++ b/modules/speech/DOMWindowSpeechSynthesis.idl
@@ -27,6 +27,4 @@
     EnabledAtRuntime=speechSynthesis
 ] partial interface DOMWindow {
     readonly attribute SpeechSynthesis speechSynthesis;
-    attribute SpeechSynthesisEventConstructor SpeechSynthesisEvent;
-    attribute SpeechSynthesisUtteranceConstructor SpeechSynthesisUtterance;
 };
diff --git a/modules/speech/SpeechGrammar.idl b/modules/speech/SpeechGrammar.idl
index d273948..0116770 100644
--- a/modules/speech/SpeechGrammar.idl
+++ b/modules/speech/SpeechGrammar.idl
@@ -24,8 +24,8 @@
  */
 
 [
-    Constructor,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    Constructor
 ] interface SpeechGrammar {
     [URL,CallWith=ScriptExecutionContext] attribute DOMString src;
     attribute float weight;
diff --git a/modules/speech/SpeechGrammarList.idl b/modules/speech/SpeechGrammarList.idl
index 2c6db68..83a06a3 100644
--- a/modules/speech/SpeechGrammarList.idl
+++ b/modules/speech/SpeechGrammarList.idl
@@ -24,8 +24,8 @@
  */
 
 [
-    Constructor,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    Constructor
 ] interface SpeechGrammarList {
     readonly attribute unsigned long length;
     getter SpeechGrammar item([IsIndex] unsigned long index);
diff --git a/modules/speech/SpeechRecognition.idl b/modules/speech/SpeechRecognition.idl
index 9118634..bb4351d 100644
--- a/modules/speech/SpeechRecognition.idl
+++ b/modules/speech/SpeechRecognition.idl
@@ -24,10 +24,11 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     Constructor,
     CallWith=ScriptExecutionContext,
-    EventTarget,
+    EventTarget
 ] interface SpeechRecognition {
     attribute SpeechGrammarList grammars;
     attribute DOMString lang;
diff --git a/modules/speech/SpeechRecognitionAlternative.idl b/modules/speech/SpeechRecognitionAlternative.idl
index fb786dd..3e120ca 100644
--- a/modules/speech/SpeechRecognitionAlternative.idl
+++ b/modules/speech/SpeechRecognitionAlternative.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SpeechRecognitionAlternative {
     readonly attribute DOMString transcript;
     readonly attribute float confidence;
diff --git a/modules/speech/SpeechRecognitionError.idl b/modules/speech/SpeechRecognitionError.idl
index d62ac18..59956d2 100644
--- a/modules/speech/SpeechRecognitionError.idl
+++ b/modules/speech/SpeechRecognitionError.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     ConstructorTemplate=Event
 ] interface SpeechRecognitionError : Event {
     [InitializedByEventConstructor] readonly attribute DOMString error;
diff --git a/modules/speech/SpeechRecognitionEvent.idl b/modules/speech/SpeechRecognitionEvent.idl
index 8027f82..e4ca482 100644
--- a/modules/speech/SpeechRecognitionEvent.idl
+++ b/modules/speech/SpeechRecognitionEvent.idl
@@ -24,7 +24,8 @@
  */
 
 [
-    ConstructorTemplate=Event,
+    NoInterfaceObject,
+    ConstructorTemplate=Event
 ] interface SpeechRecognitionEvent : Event {
     [InitializedByEventConstructor] readonly attribute unsigned long resultIndex;
     [InitializedByEventConstructor] readonly attribute SpeechRecognitionResultList results;
diff --git a/modules/speech/SpeechRecognitionResult.idl b/modules/speech/SpeechRecognitionResult.idl
index 15a7f7d..45f6b51 100644
--- a/modules/speech/SpeechRecognitionResult.idl
+++ b/modules/speech/SpeechRecognitionResult.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SpeechRecognitionResult {
     readonly attribute unsigned long length;
     getter SpeechRecognitionAlternative item([IsIndex] unsigned long index);
diff --git a/modules/speech/SpeechRecognitionResultList.idl b/modules/speech/SpeechRecognitionResultList.idl
index f2ccdeb..6194649 100644
--- a/modules/speech/SpeechRecognitionResultList.idl
+++ b/modules/speech/SpeechRecognitionResultList.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SpeechRecognitionResultList {
     readonly attribute unsigned long length;
     getter SpeechRecognitionResult item([IsIndex] unsigned long index);
diff --git a/modules/speech/SpeechSynthesis.idl b/modules/speech/SpeechSynthesis.idl
index 6fb3fbc..4078c88 100644
--- a/modules/speech/SpeechSynthesis.idl
+++ b/modules/speech/SpeechSynthesis.idl
@@ -24,6 +24,7 @@
  */
  
 [
+    NoInterfaceObject,
     EnabledAtRuntime=speechSynthesis
 ] interface SpeechSynthesis  {
     readonly attribute boolean pending;
diff --git a/modules/speech/SpeechSynthesisVoice.idl b/modules/speech/SpeechSynthesisVoice.idl
index 8886ac1..a377631 100644
--- a/modules/speech/SpeechSynthesisVoice.idl
+++ b/modules/speech/SpeechSynthesisVoice.idl
@@ -24,6 +24,7 @@
  */
  
 [
+    NoInterfaceObject,
     EnabledAtRuntime=speechSynthesis
 ] interface SpeechSynthesisVoice {
     readonly attribute DOMString voiceURI;
diff --git a/modules/vibration/NavigatorVibration.idl b/modules/vibration/NavigatorVibration.idl
index 09ef38e..ba3b258 100644
--- a/modules/vibration/NavigatorVibration.idl
+++ b/modules/vibration/NavigatorVibration.idl
@@ -18,7 +18,7 @@
  */
 
 [
-    Conditional=VIBRATION,
+    Conditional=VIBRATION
 ] partial interface Navigator {
     [RaisesException] void vibrate(sequence<unsigned long> pattern);
     [RaisesException] void vibrate(unsigned long time);
diff --git a/modules/webaudio/AudioBuffer.idl b/modules/webaudio/AudioBuffer.idl
index e208fc3..19f66a5 100644
--- a/modules/webaudio/AudioBuffer.idl
+++ b/modules/webaudio/AudioBuffer.idl
@@ -27,8 +27,7 @@
  */
 
 [
-    Conditional=WEB_AUDIO,
-    ImplementationLacksVTable
+    Conditional=WEB_AUDIO
 ] interface AudioBuffer {
     readonly attribute long length; // in sample-frames
     readonly attribute float duration; // in seconds
diff --git a/modules/webaudio/AudioContext.idl b/modules/webaudio/AudioContext.idl
index 088f684..319a793 100644
--- a/modules/webaudio/AudioContext.idl
+++ b/modules/webaudio/AudioContext.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEB_AUDIO,
     ActiveDOMObject,
     CustomConstructor,
diff --git a/modules/webaudio/AudioDestinationNode.idl b/modules/webaudio/AudioDestinationNode.idl
index 3c63058..e85caef 100644
--- a/modules/webaudio/AudioDestinationNode.idl
+++ b/modules/webaudio/AudioDestinationNode.idl
@@ -23,8 +23,7 @@
  */
 
 [
-    Conditional=WEB_AUDIO,
-    SkipVTableValidation
+    Conditional=WEB_AUDIO
 ] interface AudioDestinationNode : AudioNode {
     readonly attribute unsigned long maxChannelCount;
 };
diff --git a/modules/webaudio/AudioListener.idl b/modules/webaudio/AudioListener.idl
index c98b6d0..0011fe0 100644
--- a/modules/webaudio/AudioListener.idl
+++ b/modules/webaudio/AudioListener.idl
@@ -27,8 +27,7 @@
  */
 
 [
-    Conditional=WEB_AUDIO,
-    ImplementationLacksVTable
+    Conditional=WEB_AUDIO
 ] interface AudioListener {
     attribute float dopplerFactor;  // same as OpenAL (default 1.0)
     attribute float speedOfSound;   // in meters / second (default 343.3)
diff --git a/modules/webaudio/AudioNode.idl b/modules/webaudio/AudioNode.idl
index a2448c0..7221319 100644
--- a/modules/webaudio/AudioNode.idl
+++ b/modules/webaudio/AudioNode.idl
@@ -24,7 +24,7 @@
 
 [
     Conditional=WEB_AUDIO
-] interface AudioNode {
+] interface AudioNode : EventTarget {
     readonly attribute AudioContext context;
     readonly attribute unsigned long numberOfInputs;
     readonly attribute unsigned long numberOfOutputs;
@@ -40,4 +40,14 @@
     [RaisesException] void connect(AudioParam? destination, [Default=Undefined] optional unsigned long output);
 
     [RaisesException] void disconnect([Default=Undefined] optional unsigned long output);
+
+
+    // EventTarget interface
+    void addEventListener(DOMString type,
+                          EventListener listener,
+                          optional boolean useCapture);
+    void removeEventListener(DOMString type,
+                             EventListener listener,
+                             optional boolean useCapture);
+    [RaisesException] boolean dispatchEvent(Event event);
 };
diff --git a/modules/webaudio/AudioSourceNode.idl b/modules/webaudio/AudioSourceNode.idl
index 1981c46..7a69b79 100644
--- a/modules/webaudio/AudioSourceNode.idl
+++ b/modules/webaudio/AudioSourceNode.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    Conditional=WEB_AUDIO,
-    ImplementationLacksVTable
+    NoInterfaceObject,
+    Conditional=WEB_AUDIO
 ] interface AudioSourceNode : AudioNode {
 };
diff --git a/modules/webaudio/DOMWindowWebAudio.idl b/modules/webaudio/DOMWindowWebAudio.idl
deleted file mode 100644
index abdbaa2..0000000
--- a/modules/webaudio/DOMWindowWebAudio.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * 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 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.
- */
-
-[
-    Conditional=WEB_AUDIO,
-] partial interface DOMWindow {
-    [EnabledAtRuntime=audioContext] attribute AudioContextConstructor webkitAudioContext;
-    [EnabledAtRuntime=audioContext] attribute OfflineAudioContextConstructor webkitOfflineAudioContext;
-    attribute PannerNodeConstructor webkitAudioPannerNode;
-    attribute AudioProcessingEventConstructor AudioProcessingEvent;
-    attribute OfflineAudioCompletionEventConstructor OfflineAudioCompletionEvent;
-};
-
diff --git a/modules/webaudio/OfflineAudioContext.idl b/modules/webaudio/OfflineAudioContext.idl
index d68c2ad..cbaa9ca 100644
--- a/modules/webaudio/OfflineAudioContext.idl
+++ b/modules/webaudio/OfflineAudioContext.idl
@@ -23,6 +23,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEB_AUDIO,
     EventTarget,
     Constructor(unsigned long numberOfChannels, unsigned long numberOfFrames, float sampleRate),
diff --git a/modules/webaudio/PannerNode.idl b/modules/webaudio/PannerNode.idl
index cb2691b..d20a2e6 100644
--- a/modules/webaudio/PannerNode.idl
+++ b/modules/webaudio/PannerNode.idl
@@ -23,6 +23,7 @@
  */
 
 [
+    NoInterfaceObject,
     Conditional=WEB_AUDIO
 ] interface PannerNode : AudioNode {
     // Panning model
diff --git a/modules/webaudio/ScriptProcessorNode.idl b/modules/webaudio/ScriptProcessorNode.idl
index b0d6535..4d80d13 100644
--- a/modules/webaudio/ScriptProcessorNode.idl
+++ b/modules/webaudio/ScriptProcessorNode.idl
@@ -22,13 +22,12 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// For real-time audio stream synthesis/processing in JavaScript 
+// For real-time audio stream synthesis/processing in JavaScript
 [
-    Conditional=WEB_AUDIO,
-    EventTarget
+    Conditional=WEB_AUDIO
 ] interface ScriptProcessorNode : AudioNode {
     // Rendering callback
     attribute EventListener onaudioprocess;
-    
+
     readonly attribute long bufferSize;
 };
diff --git a/modules/webaudio/WaveTable.idl b/modules/webaudio/WaveTable.idl
index d153b60..0174b5e 100644
--- a/modules/webaudio/WaveTable.idl
+++ b/modules/webaudio/WaveTable.idl
@@ -24,8 +24,7 @@
 
 // WaveTable represents a periodic audio waveform given by its Fourier coefficients.
 [
-    Conditional=WEB_AUDIO,
-    ImplementationLacksVTable
+    Conditional=WEB_AUDIO
 ] interface WaveTable {
 
 };
diff --git a/modules/webdatabase/DOMWindowWebDatabase.idl b/modules/webdatabase/DOMWindowWebDatabase.idl
index 02c011c..0d525e8 100644
--- a/modules/webdatabase/DOMWindowWebDatabase.idl
+++ b/modules/webdatabase/DOMWindowWebDatabase.idl
@@ -26,6 +26,5 @@
 
 partial interface DOMWindow {
     [EnabledAtRuntime=database, MeasureAs=OpenWebDatabase, PerWorldBindings, ActivityLog=AccessForIsolatedWorlds, RaisesException] Database openDatabase(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
-    attribute SQLExceptionConstructor SQLException;
 };
 
diff --git a/modules/webdatabase/Database.idl b/modules/webdatabase/Database.idl
index 1b516c0..5dcd692 100644
--- a/modules/webdatabase/Database.idl
+++ b/modules/webdatabase/Database.idl
@@ -27,6 +27,7 @@
  */
 
 [
+    NoInterfaceObject
 ] interface Database {
     readonly attribute DOMString version;
     void changeVersion(DOMString oldVersion, DOMString newVersion, optional SQLTransactionCallback callback, optional SQLTransactionErrorCallback errorCallback, optional VoidCallback successCallback);
diff --git a/modules/webdatabase/DatabaseSync.idl b/modules/webdatabase/DatabaseSync.idl
index 5581e48..eaaf30f 100644
--- a/modules/webdatabase/DatabaseSync.idl
+++ b/modules/webdatabase/DatabaseSync.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject
 ] interface DatabaseSync {
     readonly attribute DOMString version;
     readonly attribute DOMString lastErrorMessage;
diff --git a/modules/webdatabase/SQLError.idl b/modules/webdatabase/SQLError.idl
index 875775a..daaed71 100644
--- a/modules/webdatabase/SQLError.idl
+++ b/modules/webdatabase/SQLError.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SQLError {
     readonly attribute unsigned long code;
     readonly attribute DOMString message;
diff --git a/modules/webdatabase/SQLException.idl b/modules/webdatabase/SQLException.idl
index 3dc160a..a71ed0a 100644
--- a/modules/webdatabase/SQLException.idl
+++ b/modules/webdatabase/SQLException.idl
@@ -29,8 +29,7 @@
  */
 
 [
-    DoNotCheckConstants,
-    ImplementationLacksVTable
+    DoNotCheckConstants
 ] exception SQLException {
     readonly attribute unsigned long code;
     readonly attribute DOMString message;
diff --git a/modules/webdatabase/SQLResultSet.idl b/modules/webdatabase/SQLResultSet.idl
index 18ea2af..d3ce314 100644
--- a/modules/webdatabase/SQLResultSet.idl
+++ b/modules/webdatabase/SQLResultSet.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SQLResultSet {
     readonly attribute SQLResultSetRowList rows;
 
diff --git a/modules/webdatabase/SQLResultSetRowList.idl b/modules/webdatabase/SQLResultSetRowList.idl
index 1891c92..05dd04b 100644
--- a/modules/webdatabase/SQLResultSetRowList.idl
+++ b/modules/webdatabase/SQLResultSetRowList.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SQLResultSetRowList {
     readonly attribute unsigned long length;
     [Custom] any item(unsigned long index);
diff --git a/modules/webdatabase/SQLTransaction.idl b/modules/webdatabase/SQLTransaction.idl
index 472e1b9..d506b75 100644
--- a/modules/webdatabase/SQLTransaction.idl
+++ b/modules/webdatabase/SQLTransaction.idl
@@ -27,7 +27,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SQLTransaction {
     [Custom] void executeSql(DOMString sqlStatement,
                              ObjectArray arguments,
diff --git a/modules/webdatabase/SQLTransactionSync.idl b/modules/webdatabase/SQLTransactionSync.idl
index fd37398..732dba3 100644
--- a/modules/webdatabase/SQLTransactionSync.idl
+++ b/modules/webdatabase/SQLTransactionSync.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    ImplementationLacksVTable
+    NoInterfaceObject
 ] interface SQLTransactionSync {
     [Custom] SQLResultSet executeSql(DOMString sqlStatement, ObjectArray arguments);
 };
diff --git a/modules/webmidi/MIDIConnectionEvent.idl b/modules/webmidi/MIDIConnectionEvent.idl
index 3946564..59481a3 100644
--- a/modules/webmidi/MIDIConnectionEvent.idl
+++ b/modules/webmidi/MIDIConnectionEvent.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     ConstructorTemplate=Event
 ] interface MIDIConnectionEvent : Event {
     [InitializedByEventConstructor] readonly attribute MIDIPort port;
diff --git a/modules/webmidi/MIDIInput.idl b/modules/webmidi/MIDIInput.idl
index f4cd4f2..8c0ae3c 100644
--- a/modules/webmidi/MIDIInput.idl
+++ b/modules/webmidi/MIDIInput.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     EventTarget
 ] interface MIDIInput : MIDIPort {
diff --git a/modules/webmidi/MIDIMessageEvent.idl b/modules/webmidi/MIDIMessageEvent.idl
index 9373011..5a9c05f 100644
--- a/modules/webmidi/MIDIMessageEvent.idl
+++ b/modules/webmidi/MIDIMessageEvent.idl
@@ -31,6 +31,7 @@
 // FIXME: The spec doesn't provide details about constructor, yet.
 // See also, https://github.com/WebAudio/web-midi-api/issues/1 .
 [
+    NoInterfaceObject,
     ConstructorTemplate=Event
 ] interface MIDIMessageEvent : Event {
     [InitializedByEventConstructor] readonly attribute double receivedTime;
diff --git a/modules/inputmethod/Composition.idl b/modules/webmidi/MIDIOutput.idl
similarity index 88%
copy from modules/inputmethod/Composition.idl
copy to modules/webmidi/MIDIOutput.idl
index 155d74b..a07ec6f 100644
--- a/modules/inputmethod/Composition.idl
+++ b/modules/webmidi/MIDIOutput.idl
@@ -28,10 +28,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// http://www.w3.org/TR/ime-api/
 [
-  ImplementationLacksVTable
-] interface Composition {
-    readonly attribute Node text;
-    readonly attribute Range caret;
+    NoInterfaceObject
+] interface MIDIOutput : MIDIPort {
+    void send(Uint8Array data, optional double timestamp);
+    void send(sequence<unsigned long> data, optional double timestamp);
 };
diff --git a/modules/webmidi/MIDIPort.idl b/modules/webmidi/MIDIPort.idl
index 226387c..e7e2aa9 100644
--- a/modules/webmidi/MIDIPort.idl
+++ b/modules/webmidi/MIDIPort.idl
@@ -34,6 +34,7 @@
 };
 
 [
+    NoInterfaceObject,
     ActiveDOMObject,
     EventTarget
 ] interface MIDIPort {
diff --git a/modules/websockets/DOMWindowWebSocket.idl b/modules/websockets/DOMWindowWebSocket.idl
deleted file mode 100644
index c8d2d64..0000000
--- a/modules/websockets/DOMWindowWebSocket.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * 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 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.
- */
-
-partial interface DOMWindow {
-    attribute CloseEventConstructor CloseEvent;
-    attribute WebSocketConstructor WebSocket; // Usable with the new operator
-};
-