Forgotten new files.

Review URL: https://codereview.chromium.org//16651002

git-svn-id: http://dart.googlecode.com/svn/third_party/WebCore@23749 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/core/css/CSSFilterRule.idl b/core/css/CSSFilterRule.idl
new file mode 100644
index 0000000..8c87e90
--- /dev/null
+++ b/core/css/CSSFilterRule.idl
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2013 Adobe Systems Incorporated. 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 THE COPYRIGHT HOLDER "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+[
+    InterfaceName=WebKitCSSFilterRule
+] interface CSSFilterRule : CSSRule {
+    readonly attribute CSSStyleDeclaration style;
+
+    // FIXME: We should expose the filter name once the CSSOM for the @filter rule is specified.
+};
diff --git a/core/css/CSSFilterValue.idl b/core/css/CSSFilterValue.idl
new file mode 100644
index 0000000..035b859
--- /dev/null
+++ b/core/css/CSSFilterValue.idl
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+[
+    DoNotCheckConstants,
+    InterfaceName=WebKitCSSFilterValue
+] interface CSSFilterValue : CSSValueList {
+
+    // OperationTypes
+
+    const unsigned short CSS_FILTER_REFERENCE = 1;
+    const unsigned short CSS_FILTER_GRAYSCALE = 2;
+    const unsigned short CSS_FILTER_SEPIA = 3;
+    const unsigned short CSS_FILTER_SATURATE = 4;
+    const unsigned short CSS_FILTER_HUE_ROTATE = 5;
+    const unsigned short CSS_FILTER_INVERT = 6;
+    const unsigned short CSS_FILTER_OPACITY = 7;
+    const unsigned short CSS_FILTER_BRIGHTNESS = 8;
+    const unsigned short CSS_FILTER_CONTRAST = 9;
+    const unsigned short CSS_FILTER_BLUR = 10;
+    const unsigned short CSS_FILTER_DROP_SHADOW = 11;
+    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/CSSKeyframeRule.idl b/core/css/CSSKeyframeRule.idl
new file mode 100644
index 0000000..2c51a47
--- /dev/null
+++ b/core/css/CSSKeyframeRule.idl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Introduced in DOM Level ?:
+[
+    InterfaceName=WebKitCSSKeyframeRule
+]
+interface CSSKeyframeRule : CSSRule {
+
+    attribute DOMString keyText;
+    readonly attribute CSSStyleDeclaration style;
+
+};
+
diff --git a/core/css/CSSKeyframesRule.idl b/core/css/CSSKeyframesRule.idl
new file mode 100644
index 0000000..873e756
--- /dev/null
+++ b/core/css/CSSKeyframesRule.idl
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Introduced in DOM Level ?:
+[
+    InterfaceName=WebKitCSSKeyframesRule
+] interface CSSKeyframesRule : CSSRule {
+
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString name;
+    readonly attribute CSSRuleList cssRules;
+    
+    [ImplementedAs=item, NotEnumerable] getter CSSKeyframeRule(unsigned long index);
+    void insertRule([Default=Undefined] optional DOMString rule);
+    void deleteRule([Default=Undefined] optional DOMString key);
+    CSSKeyframeRule findRule([Default=Undefined] optional DOMString key);
+};
+
diff --git a/core/css/CSSMatrix.idl b/core/css/CSSMatrix.idl
new file mode 100644
index 0000000..8f2e2bb
--- /dev/null
+++ b/core/css/CSSMatrix.idl
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+// Introduced in DOM Level ?:
+[
+    Constructor([Default=NullString] optional DOMString cssValue),
+    InterfaceName=WebKitCSSMatrix,
+    RaisesException
+] interface CSSMatrix {
+
+    // These attributes are simple aliases for certain elements of the 4x4 matrix
+    attribute double a; // alias for m11
+    attribute double b; // alias for m12
+    attribute double c; // alias for m21
+    attribute double d; // alias for m22
+    attribute double e; // alias for m41
+    attribute double f; // alias for m42
+
+    attribute double m11;
+    attribute double m12;
+    attribute double m13;
+    attribute double m14;
+    attribute double m21;
+    attribute double m22;
+    attribute double m23;
+    attribute double m24;
+    attribute double m31;
+    attribute double m32;
+    attribute double m33;
+    attribute double m34;
+    attribute double m41;
+    attribute double m42;
+    attribute double m43;
+    attribute double m44;
+
+    [RaisesException] void setMatrixValue([Default=Undefined] optional DOMString string);
+    
+    // Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix)
+    [Immutable] CSSMatrix multiply([Default=Undefined] optional CSSMatrix secondMatrix);
+    
+    // Return the inverse of this matrix. Throw an exception if the matrix is not invertible
+    [Immutable, RaisesException] CSSMatrix inverse();
+    
+    // Return this matrix translated by the passed values.
+    // Passing a NaN will use a value of 0. This allows the 3D form to used for 2D operations    
+    [Immutable] CSSMatrix translate([Default=Undefined] optional double x, 
+                                          [Default=Undefined] optional double y, 
+                                          [Default=Undefined] optional double z);
+    
+    // Returns this matrix scaled by the passed values.
+    // Passing scaleX or scaleZ as NaN uses a value of 1, but passing scaleY of NaN 
+    // makes it the same as scaleX. This allows the 3D form to used for 2D operations
+    [Immutable] CSSMatrix scale([Default=Undefined] optional double scaleX, 
+                                      [Default=Undefined] optional double scaleY, 
+                                      [Default=Undefined] optional double scaleZ);
+    
+    // Returns this matrix rotated by the passed values.
+    // If rotY and rotZ are NaN, rotate about Z (rotX=0, rotateY=0, rotateZ=rotX).
+    // Otherwise use a rotation value of 0 for any passed NaN.    
+    [Immutable] CSSMatrix rotate([Default=Undefined] optional double rotX, 
+                                       [Default=Undefined] optional double rotY, 
+                                       [Default=Undefined] optional double rotZ);
+    
+    // Returns this matrix rotated about the passed axis by the passed angle.
+    // Passing a NaN will use a value of 0. If the axis is (0,0,0) use a value
+    // of (0,0,1).
+    [Immutable] CSSMatrix rotateAxisAngle([Default=Undefined] optional double x, 
+                                                [Default=Undefined] optional double y, 
+                                                [Default=Undefined] optional double z, 
+                                                [Default=Undefined] optional double angle);
+
+    // Returns this matrix skewed along the X axis by the passed values.
+    // Passing a NaN will use a value of 0.
+    [Immutable] CSSMatrix skewX([Default=Undefined] optional double angle);
+
+    // Returns this matrix skewed along the Y axis by the passed values.
+    // Passing a NaN will use a value of 0.
+    [Immutable] CSSMatrix skewY([Default=Undefined] optional double angle);
+
+    [NotEnumerable] DOMString toString();
+};
+
diff --git a/core/css/CSSMixFunctionValue.idl b/core/css/CSSMixFunctionValue.idl
new file mode 100644
index 0000000..3519f33
--- /dev/null
+++ b/core/css/CSSMixFunctionValue.idl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Adobe Systems Incorporated. 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 THE COPYRIGHT HOLDER "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+[
+    InterfaceName=WebKitCSSMixFunctionValue
+] interface CSSMixFunctionValue : CSSValueList {
+};
+
diff --git a/core/css/CSSRegionRule.idl b/core/css/CSSRegionRule.idl
new file mode 100644
index 0000000..0b264a3
--- /dev/null
+++ b/core/css/CSSRegionRule.idl
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2011 Adobe Systems Incorporated. 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 THE COPYRIGHT HOLDER "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+[
+    EnabledAtRuntime=cssRegions,
+    InterfaceName=WebKitCSSRegionRule
+] interface CSSRegionRule : CSSRule {
+    readonly attribute CSSRuleList cssRules;
+};
+
diff --git a/core/css/CSSTransformValue.idl b/core/css/CSSTransformValue.idl
new file mode 100644
index 0000000..f6a3942
--- /dev/null
+++ b/core/css/CSSTransformValue.idl
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2008 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+        DoNotCheckConstants,
+        InterfaceName=WebKitCSSTransformValue
+] interface CSSTransformValue : CSSValueList {
+
+    // OperationTypes
+
+    const unsigned short CSS_TRANSLATE   = 1;
+    const unsigned short CSS_TRANSLATEX  = 2;
+    const unsigned short CSS_TRANSLATEY  = 3;
+    const unsigned short CSS_ROTATE      = 4;
+    const unsigned short CSS_SCALE       = 5;
+    const unsigned short CSS_SCALEX      = 6;
+    const unsigned short CSS_SCALEY      = 7;
+    const unsigned short CSS_SKEW        = 8;
+    const unsigned short CSS_SKEWX       = 9;
+    const unsigned short CSS_SKEWY       = 10;
+    const unsigned short CSS_MATRIX      = 11;
+    const unsigned short CSS_TRANSLATEZ  = 12;
+    const unsigned short CSS_TRANSLATE3D = 13;
+    const unsigned short CSS_ROTATEX     = 14;
+    const unsigned short CSS_ROTATEY     = 15;
+    const unsigned short CSS_ROTATEZ     = 16;
+    const unsigned short CSS_ROTATE3D    = 17;
+    const unsigned short CSS_SCALEZ      = 18;
+    const unsigned short CSS_SCALE3D     = 19;
+    const unsigned short CSS_PERSPECTIVE = 20;
+    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/CSSViewportRule.idl b/core/css/CSSViewportRule.idl
new file mode 100644
index 0000000..c4e69e1
--- /dev/null
+++ b/core/css/CSSViewportRule.idl
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 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 THE COPYRIGHT HOLDER “AS IS” AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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=CSS_DEVICE_ADAPTATION,
+    InterfaceName=WebKitCSSViewportRule
+] interface CSSViewportRule : CSSRule {
+    readonly attribute CSSStyleDeclaration style;
+};
diff --git a/core/dom/ResourceProgressEvent.idl b/core/dom/ResourceProgressEvent.idl
new file mode 100644
index 0000000..c08192a
--- /dev/null
+++ b/core/dom/ResourceProgressEvent.idl
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+// ResourceProgressEvent is a non-standard class that is simply a ProgressEvent
+// with an additional read-only "url" property containing a string URL. This is
+// used by the Chromium NaCl integration to indicate to which resource the
+// event applies. This is useful because the NaCl integration will download
+// (and translate in the case of PNaCl) multiple binary files. It is not
+// constructable by web content at all, and so does not provide the usual
+// EventInit pattern for Event construction.
+[
+    NoInterfaceObject,
+] interface ResourceProgressEvent : ProgressEvent {
+    readonly attribute DOMString url;
+};
+
diff --git a/core/html/canvas/EXTFragDepth.idl b/core/html/canvas/EXTFragDepth.idl
new file mode 100644
index 0000000..52a6f93
--- /dev/null
+++ b/core/html/canvas/EXTFragDepth.idl
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    NoInterfaceObject
+] interface EXTFragDepth {
+};
diff --git a/core/inspector/CodeGeneratorInstrumentation.py b/core/inspector/CodeGeneratorInstrumentation.py
new file mode 100644
index 0000000..a1744eb
--- /dev/null
+++ b/core/inspector/CodeGeneratorInstrumentation.py
@@ -0,0 +1,480 @@
+#!/usr/bin/env python
+# Copyright (c) 2013 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import optparse
+import re
+import string
+import sys
+
+template_h = string.Template("""// Code generated from InspectorInstrumentation.idl
+
+#ifndef InspectorInstrumentationInl_h
+#define InspectorInstrumentationInl_h
+
+namespace WebCore {
+
+namespace InspectorInstrumentation {
+
+$impl_declarations
+$inline_methods
+} // namespace InspectorInstrumentation
+
+} // namespace WebCore
+
+#endif // !defined(InspectorInstrumentationInl_h)
+""")
+
+template_inline = string.Template("""
+inline void ${name}(${params_public})
+{   ${fast_return}
+    if (InstrumentingAgents* instrumentingAgents = ${agents_getter})
+        ${name}Impl(${params_impl});
+}
+""")
+
+template_inline_forward = string.Template("""
+inline void ${name}(${params_public})
+{   ${fast_return}
+    ${name}Impl(${params_impl});
+}
+""")
+
+template_inline_accepts_cookie = string.Template("""
+inline void ${name}(${params_public})
+{   ${fast_return}
+    if (${cookie}.isValid())
+        ${name}Impl(${params_impl});
+}
+""")
+
+template_inline_returns_cookie = string.Template("""
+inline InspectorInstrumentationCookie ${name}(${params_public})
+{   ${fast_return}
+    if (InstrumentingAgents* instrumentingAgents = ${agents_getter})
+        return ${name}Impl(${params_impl});
+    return InspectorInstrumentationCookie();
+}
+""")
+
+
+template_cpp = string.Template("""// Code generated from InspectorInstrumentation.idl
+
+#include "config.h"
+#include "core/inspector/InspectorInstrumentation.h"
+
+#include "core/inspector/InspectorAgent.h"
+#include "core/inspector/InspectorApplicationCacheAgent.h"
+#include "core/inspector/InspectorCSSAgent.h"
+#include "core/inspector/InspectorCanvasAgent.h"
+#include "core/inspector/InspectorConsoleAgent.h"
+#include "core/inspector/InspectorConsoleInstrumentation.h"
+#include "core/inspector/InspectorDOMAgent.h"
+#include "core/inspector/InspectorDOMDebuggerAgent.h"
+#include "core/inspector/InspectorDOMStorageAgent.h"
+#include "core/inspector/InspectorDatabaseAgent.h"
+#include "core/inspector/InspectorDatabaseInstrumentation.h"
+#include "core/inspector/InspectorDebuggerAgent.h"
+#include "core/inspector/InspectorHeapProfilerAgent.h"
+#include "core/inspector/InspectorLayerTreeAgent.h"
+#include "core/inspector/InspectorPageAgent.h"
+#include "core/inspector/InspectorProfilerAgent.h"
+#include "core/inspector/InspectorResourceAgent.h"
+#include "core/inspector/InspectorTimelineAgent.h"
+#include "core/inspector/InspectorWorkerAgent.h"
+#include "core/inspector/InstrumentingAgents.h"
+#include "core/inspector/PageDebuggerAgent.h"
+#include "core/inspector/PageRuntimeAgent.h"
+#include "core/inspector/WorkerRuntimeAgent.h"
+
+namespace WebCore {
+
+namespace InspectorInstrumentation {
+$out_of_line_methods
+
+} // namespace InspectorInstrumentation
+
+} // namespace WebCore
+""")
+
+template_outofline = string.Template("""
+void ${name}Impl(${params_impl})
+{${agent_calls}
+}""")
+
+template_agent_call = string.Template("""
+    if (${agent_class}* ${agent}Agent = ${agent_fetch})
+        ${agent}Agent->${name}(${params_agent});""")
+
+template_timeline_agent_call = string.Template("""
+    int timelineAgentId = 0;
+    if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) {
+        if (timelineAgent->${name}(${params_agent}))
+            timelineAgentId = timelineAgent->id();
+    }""")
+
+template_outofline_returns_cookie = string.Template("""
+${return_type} ${name}Impl(${params_impl})
+{${agent_calls}
+    return InspectorInstrumentationCookie(instrumentingAgents, ${timeline_agent_id});
+}""")
+
+
+def load_model_from_idl(source):
+    source = re.sub("//.*\n", "", source)    # Remove line comments
+    source = re.sub("\n", " ", source)       # Remove newlines
+    source = re.sub("/\*.*\*/", "", source)  # Remove block comments
+    source = re.sub("\s\s+", " ", source)    # Collapse whitespace
+    source = source.strip()
+
+    match = re.match("interface\s\w*\s?\{(.*)\}", source)
+    if not match:
+        sys.stderr.write("Cannot parse the file")
+        sys.exit(1)
+    lines = match.group(1)
+
+    methods = []
+    for line in map(str.strip, lines.split(";")):
+        if len(line) == 0:
+            continue
+        methods.append(Method(line))
+    return methods
+
+
+class Method:
+    def __init__(self, source):
+        match = re.match("(\[[\w|,|=|\s]*\])?\s?(\w*) (\w*)\((.*)\)", source)
+        if not match:
+            sys.stderr.write("Cannot parse %s\n" % source)
+            sys.exit(1)
+
+        self.method_options = []
+        if match.group(1):
+            method_options_str = re.sub("\s", "", match.group(1)[1:-1])
+            if len(method_options_str) != 0:
+                self.method_options = method_options_str.split(",")
+
+        self.return_type = match.group(2)
+
+        self.name = match.group(3)
+
+        param_string = match.group(4)
+
+        self.param_options = []
+        options_match = re.match("\[(.*)\]\s?(.*)", param_string)
+        if options_match:
+            param_string = options_match.group(2)
+            self.param_options = map(str.strip, options_match.group(1).split(","))
+
+        self.params = map(Parameter, map(str.strip, param_string.split(",")))
+
+
+class Parameter:
+    def __init__(self, source):
+        parts = map(str.strip, source.split("="))
+        if len(parts) == 1:
+            self.default_value = None
+        else:
+            self.default_value = parts[1]
+
+        param_decl = parts[0]
+
+        if re.match("(const|unsigned long) ", param_decl):
+            min_type_tokens = 2
+        else:
+            min_type_tokens = 1
+
+        if len(param_decl.split(" ")) > min_type_tokens:
+            parts = param_decl.split(" ")
+            self.type = " ".join(parts[:-1])
+            self.name = parts[-1]
+        else:
+            self.type = param_decl
+            self.name = generate_param_name(self.type)
+
+    def to_str_full(self):
+        if self.default_value is None:
+            return self.to_str_class_and_name()
+        return "%s %s = %s" % (self.type, self.name, self.default_value)
+
+    def to_str_class_and_name(self):
+        return "%s %s" % (self.type, self.name)
+
+    def to_str_class(self):
+        return self.type
+
+    def to_str_name(self):
+        return self.name
+
+
+# This function is only needed to minimize the diff with the handwritten code.
+# In fact it is sufficient to return a globally unique string.
+def generate_param_name(param_type):
+    base_name = re.match("(const |RefPtr<|PassRefPtr<)?(\w*)", param_type).group(2)
+
+    custom_param_types = {
+        "CharacterData": "characterData",
+        "CSSSelector": "pseudoState",
+        "DocumentStyleSheetCollection": "styleSheetCollection",
+        "EventPath": "eventPath",
+        "FormData": "formData",
+        "InspectorCSSOMWrappers": "inspectorCSSOMWrappers",
+        "InstrumentingAgents": "instrumentingAgents",
+        "NamedFlow": "namedFlow",
+        "RenderObject": "renderer",
+        "RenderLayer": "renderLayer",
+        "ResourceLoader": "resourceLoader",
+        "PseudoElement": "pseudoElement",
+        "ScriptState": "scriptState"}
+    if base_name in custom_param_types:
+        return custom_param_types[base_name]
+
+    match = re.match("(.*)([A-Z][a-z]+)", base_name)
+    if match:
+        return match.group(2).lower()  # CamelCaseWord -> word
+
+    if base_name.lower() == base_name:
+        return base_name + "_"
+    return base_name.lower()
+
+
+# This function is only needed to minimize the diff with the handwritten code.
+# In fact is is sufficient to hardcode a constant string (e.g. "agent") into the template.
+def agent_variable_name(agent):
+    if re.match("DOM", agent):
+        return re.sub("DOM", "dom", agent)
+    if agent.upper() == agent:
+        return agent.lower()
+    return agent[0].lower() + agent[1:]
+
+
+def agent_class_name(agent):
+    custom_agent_names = ["Inspector", "PageDebugger", "PageRuntime", "WorkerRuntime"]
+    if agent in custom_agent_names:
+        return "%sAgent" % agent
+    return "Inspector%sAgent" % agent
+
+
+def agent_getter_name(agent):
+    name = agent_class_name(agent)
+    return name[0].lower() + name[1:]
+
+
+def generate(input_path, output_h_dir, output_cpp_dir):
+    fin = open(input_path, "r")
+    declarations = load_model_from_idl(fin.read())
+    fin.close()
+
+    impl_declarations = []
+    inline_methods = []
+    out_of_line_methods = []
+
+    for declaration in declarations:
+        param_string_public = ", ".join(map(Parameter.to_str_full, declaration.params))
+
+        param_list_impl_parsed = declaration.params[:]
+
+        accepts_cookie = (declaration.params[0].type == "const InspectorInstrumentationCookie&")
+        if not accepts_cookie and not "Inline=Forward" in declaration.method_options:
+            if not "Keep" in declaration.param_options:
+                param_list_impl_parsed = param_list_impl_parsed[1:]
+            param_list_impl_parsed = [Parameter("InstrumentingAgents*")] + param_list_impl_parsed
+
+        generate_inline = not "Inline=Custom" in declaration.method_options
+        if generate_inline:
+            impl_declarations.append("%s %sImpl(%s);" % (
+                declaration.return_type, declaration.name, ", ".join(map(Parameter.to_str_class, param_list_impl_parsed))))
+
+        leading_impl_param_name = param_list_impl_parsed[0].name
+        param_string_impl_full = ", ".join(map(Parameter.to_str_class_and_name, param_list_impl_parsed))
+
+        param_list_impl_names_only = map(Parameter.to_str_name, param_list_impl_parsed)
+        param_string_impl_names_only = ", ".join(param_list_impl_names_only)
+        param_string_agent = ", ".join(param_list_impl_names_only[1:])
+
+        def is_agent_name(name):
+            return not "=" in name
+
+        agents = filter(is_agent_name, declaration.method_options)
+
+        if "Inline=FastReturn" in declaration.method_options or "Inline=Forward" in declaration.method_options:
+            fast_return = "\n    FAST_RETURN_IF_NO_FRONTENDS(%s());" % declaration.return_type
+        else:
+            fast_return = ""
+
+        if accepts_cookie:
+            if generate_inline:
+                inline_methods.append(
+                    template_inline_accepts_cookie.substitute(
+                        None,
+                        name=declaration.name,
+                        fast_return=fast_return,
+                        params_public=param_string_public,
+                        params_impl=param_string_impl_names_only,
+                        cookie=leading_impl_param_name))
+            if len(agents):
+                agent_calls = []
+                for agent in agents:
+                    if agent == "Timeline":
+                        agent_fetch = "retrieveTimelineAgent(%s)" % leading_impl_param_name
+                    else:
+                        agent_fetch = "%s.instrumentingAgents()->%s()" % (leading_impl_param_name, agent_getter_name(agent))
+                    agent_calls.append(
+                        template_agent_call.substitute(
+                            None,
+                            name=declaration.name,
+                            agent_fetch=agent_fetch,
+                            params_agent=param_string_agent,
+                            agent_class=agent_class_name(agent),
+                            agent=agent_variable_name(agent)))
+                out_of_line_methods.append(
+                    template_outofline.substitute(
+                        None,
+                        name=declaration.name,
+                        params_impl=param_string_impl_full,
+                        agent_calls="".join(agent_calls)))
+        else:
+            leading_public_param = declaration.params[0]
+            selector_class = re.match("(\w*)", leading_public_param.type).group(1)
+            agents_getter = "instrumentingAgentsFor%s(%s)" % (selector_class, leading_public_param.name)
+            if declaration.return_type == "void":
+                if generate_inline:
+                    if "Inline=Forward" in declaration.method_options:
+                        inline_methods.append(
+                            template_inline_forward.substitute(
+                                None,
+                                name=declaration.name,
+                                fast_return=fast_return,
+                                params_public=param_string_public,
+                                params_impl=param_string_impl_names_only))
+                    else:
+                        inline_methods.append(
+                            template_inline.substitute(
+                                None,
+                                name=declaration.name,
+                                fast_return=fast_return,
+                                params_public=param_string_public,
+                                params_impl=param_string_impl_names_only,
+                                agents_getter=agents_getter))
+                if len(agents):
+                    agent_calls = []
+                    for agent in agents:
+                        agent_fetch = "%s->%s()" % (leading_impl_param_name, agent_getter_name(agent))
+                        agent_call = template_agent_call.substitute(
+                            None,
+                            name=declaration.name,
+                            agent_fetch=agent_fetch,
+                            params_agent=param_string_agent,
+                            agent_class=agent_class_name(agent),
+                            agent=agent_variable_name(agent))
+                        agent_calls.append(agent_call)
+                    out_of_line_methods.append(
+                        template_outofline.substitute(
+                            None,
+                            name=declaration.name,
+                            params_impl=param_string_impl_full,
+                            agent_calls="".join(agent_calls)))
+            elif declaration.return_type == "InspectorInstrumentationCookie":
+                if generate_inline:
+                    inline_methods.append(
+                        template_inline_returns_cookie.substitute(
+                            None,
+                            name=declaration.name,
+                            fast_return=fast_return,
+                            params_public=param_string_public,
+                            params_impl=param_string_impl_names_only,
+                            agents_getter=agents_getter))
+
+                if len(agents):
+                    timeline_agent_id = "0"
+                    agent_calls = []
+                    for agent in agents:
+                        if agent == "Timeline":
+                            agent_call = template_timeline_agent_call.substitute(
+                                None,
+                                name=declaration.name,
+                                params_agent=param_string_agent)
+                            timeline_agent_id = "timelineAgentId"
+                        else:
+                            agent_fetch = "%s->%s()" % (leading_impl_param_name, agent_getter_name(agent))
+                            agent_call = template_agent_call.substitute(
+                                None,
+                                name=declaration.name,
+                                agent_fetch=agent_fetch,
+                                params_agent=param_string_agent,
+                                agent_class=agent_class_name(agent),
+                                agent=agent_variable_name(agent))
+                        agent_calls.append(agent_call)
+
+                    out_of_line_methods.append(
+                        template_outofline_returns_cookie.substitute(
+                            None,
+                            return_type=declaration.return_type,
+                            name=declaration.name,
+                            params_impl=param_string_impl_full,
+                            agent_calls="".join(agent_calls),
+                            timeline_agent_id=timeline_agent_id))
+            else:
+                sys.stderr.write("Unsupported return type %s" % declaration.return_type)
+                sys.exit(1)
+
+    fout = open(output_h_dir + "/InspectorInstrumentationInl.h", "w")
+    fout.write(template_h.substitute(None,
+                                     impl_declarations="\n".join(impl_declarations),
+                                     inline_methods="".join(inline_methods)))
+    fout.close()
+
+    fout = open(output_cpp_dir + "/InspectorInstrumentationImpl.cpp", "w")
+    fout.write(template_cpp.substitute(None,
+                                       out_of_line_methods="\n".join(out_of_line_methods)))
+    fout.close()
+
+
+cmdline_parser = optparse.OptionParser()
+cmdline_parser.add_option("--output_h_dir")
+cmdline_parser.add_option("--output_cpp_dir")
+
+try:
+    arg_options, arg_values = cmdline_parser.parse_args()
+    if (len(arg_values) != 1):
+        raise Exception("Exactly one plain argument expected (found %s)" % len(arg_values))
+    input_path = arg_values[0]
+    output_header_dirpath = arg_options.output_h_dir
+    output_cpp_dirpath = arg_options.output_cpp_dir
+    if not output_header_dirpath:
+        raise Exception("Output .h directory must be specified")
+    if not output_cpp_dirpath:
+        raise Exception("Output .cpp directory must be specified")
+except Exception:
+    # Work with python 2 and 3 http://docs.python.org/py3k/howto/pyporting.html
+    exc = sys.exc_info()[1]
+    sys.stderr.write("Failed to parse command-line arguments: %s\n\n" % exc)
+    sys.stderr.write("Usage: <script> InspectorInstrumentation.idl --output_h_dir <output_header_dir> --output_cpp_dir <output_cpp_dir>\n")
+    exit(1)
+
+generate(input_path, output_header_dirpath, output_cpp_dirpath)
diff --git a/core/inspector/InspectorInstrumentation.idl b/core/inspector/InspectorInstrumentation.idl
new file mode 100644
index 0000000..85cb8b6
--- /dev/null
+++ b/core/inspector/InspectorInstrumentation.idl
@@ -0,0 +1,445 @@
+/*
+* Copyright (C) 2013 Google Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*
+*     * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*     * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+*     * Neither the name of Google Inc. nor the names of its
+* contributors may be used to endorse or promote products derived from
+* this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/*
+* CodeGeneratorInstrumentation.py uses this file as a source to generate
+* InspectorInstrumentationInl.h and InspectorInstrumentationImpl.cpp
+*
+* The code below is not a correct IDL but a mix of IDL and C++.
+*
+* The syntax for an instrumentation method is as follows:
+*
+*    [methodAttributes] returnValue methodName([paramAttributes] paramList)
+*
+* Where:
+*   methodAttributes - optional list of method attributes.
+*       Attributes containing "=" are code generation options:
+*           Inline=Custom - do not generate the public inline method.
+*           Inline=FastReturn - return early from the inline method if there are no frontends.
+*           Inline=Forward - generate a simple forwarding inline method that does not
+                             modify the parameter list (implies Inline=FastReturn)
+*       Attributes without "=" are the names of the agents to be invoked.
+*           Examples: DOM, Page, Debugger.
+*
+*   paramAttributes - options list of attributes controlling the parameters handling.
+*       Keep - pass first parameter (used to access the InstrumentingAgents instance) to agents.
+*
+*   returnValue: C++ return value. Only "void" and "InspectorInstrumentationCookie" are supported.
+*
+*   methodName: C++ name for the public instrumentation method and agents methods.
+*
+*   paramList: C++ parameter list with optional names. Names will be deduced from types if omitted but you have to
+*        specify explicit names for multiple parameters of the same type.
+*/
+
+interface InspectorInstrumentation {
+    [Page, Inspector, PageDebugger, PageRuntime]
+    void didClearWindowObjectInWorld([Keep] Frame*, DOMWrapperWorld*);
+
+    [DOMDebugger, Inline=FastReturn]
+    void willInsertDOMNode(Document*, Node* parent);
+
+    [DOM, DOMDebugger, Inline=FastReturn]
+    void didInsertDOMNode(Document*, Node*);
+
+    [DOMDebugger, DOM, Inline=FastReturn]
+    void willRemoveDOMNode(Document* document, Node*);
+
+    [DOMDebugger, DOM, Inline=FastReturn]
+    void willModifyDOMAttr(Document*, Element*, const AtomicString& oldValue, const AtomicString& newValue);
+
+    [DOM, Inline=FastReturn]
+    void didModifyDOMAttr(Document*, Element*, const AtomicString& name, const AtomicString& value);
+
+    [DOM, Inline=FastReturn]
+    void didRemoveDOMAttr(Document*, Element*, const AtomicString& name);
+
+    [DOM, Inline=FastReturn]
+    void characterDataModified(Document*, CharacterData*);
+
+    [DOM, DOMDebugger, Inline=FastReturn]
+    void didInvalidateStyleAttr(Document*, Node*);
+
+    [CSS, Inline=FastReturn]
+    void activeStyleSheetsUpdated([Keep] Document*, const Vector<RefPtr<StyleSheet> >& newSheets);
+
+    [Console]
+    void frameWindowDiscarded(Frame*, DOMWindow* domWindow);
+
+    [CSS, Inline=FastReturn]
+    void mediaQueryResultChanged(Document*);
+
+    [DOM, Inline=FastReturn]
+    void didPushShadowRoot([Keep] Element* host, ShadowRoot*);
+
+    [DOM, Inline=FastReturn]
+    void willPopShadowRoot([Keep] Element* host, ShadowRoot*);
+
+    [CSS, Inline=FastReturn]
+    void didCreateNamedFlow([Keep] Document*, NamedFlow*);
+
+    [CSS, Inline=FastReturn]
+    void willRemoveNamedFlow([Keep] Document*, NamedFlow*);
+
+    [CSS, Inline=FastReturn]
+    void didUpdateRegionLayout([Keep] Document*, NamedFlow*);
+
+    [DOMDebugger, Inline=FastReturn]
+    void willSendXMLHttpRequest(ScriptExecutionContext*, const String& url);
+
+    [Timeline, Inline=FastReturn]
+    void didScheduleResourceRequest([Keep] Document*, const String& url);
+
+    [DOMDebugger, Timeline, Inline=FastReturn]
+    void didInstallTimer([Keep] ScriptExecutionContext*, int timerId, int timeout, bool singleShot);
+
+    [DOMDebugger, Timeline, Inline=FastReturn]
+    void didRemoveTimer([Keep] ScriptExecutionContext*, int timerId);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willCallFunction([Keep] ScriptExecutionContext*, const String& scriptName, int scriptLine);
+
+    [Timeline, Inline=FastReturn]
+    void didCallFunction(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willDispatchXHRReadyStateChangeEvent([Keep] ScriptExecutionContext*, XMLHttpRequest*);
+
+    [Timeline, Inline=FastReturn]
+    void didDispatchXHRReadyStateChangeEvent(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willDispatchEvent([Keep] Document*, const Event&, DOMWindow*, Node*, const EventPath&);
+
+    [Timeline, Inline=FastReturn]
+    void didDispatchEvent(const InspectorInstrumentationCookie&);
+
+    [DOMDebugger, Inline=FastReturn]
+    InspectorInstrumentationCookie willHandleEvent(ScriptExecutionContext*, Event*);
+
+    [Debugger, Inline=FastReturn]
+    void didHandleEvent(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willDispatchEventOnWindow(Frame*, const Event&, DOMWindow*);
+
+    [Timeline, Inline=FastReturn]
+    void didDispatchEventOnWindow(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willEvaluateScript([Keep] Frame*, const String& url, int lineNumber);
+
+    [Timeline, Inline=FastReturn]
+    void didEvaluateScript(const InspectorInstrumentationCookie&);
+
+    [Page, Inline=FastReturn]
+    void scriptsEnabled(Page*, bool isEnabled);
+
+    [PageRuntime, Inline=FastReturn]
+    void didCreateIsolatedContext([Keep] Frame*, ScriptState*, SecurityOrigin*);
+
+    [DOMDebugger, Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willFireTimer([Keep] ScriptExecutionContext*, int timerId);
+
+    [Debugger, Timeline, Inline=FastReturn]
+    void didFireTimer(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    void didInvalidateLayout([Keep] Frame*);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willLayout([Keep] Frame*);
+
+    [Timeline, Page, Inline=FastReturn]
+    void didLayout(const InspectorInstrumentationCookie&, RenderObject* root);
+
+    [Page, Inline=FastReturn]
+    void didScroll(Page*);
+
+    [Page, Inline=FastReturn]
+    void didResizeMainFrame(Page*);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willDispatchXHRLoadEvent([Keep] ScriptExecutionContext*, XMLHttpRequest*);
+
+    [Timeline, Inline=FastReturn]
+    void didDispatchXHRLoadEvent(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    void willScrollLayer([Keep] Frame*);
+
+    [Timeline, Inline=FastReturn]
+    void didScrollLayer(Frame*);
+
+    [Timeline, Inline=FastReturn]
+    void willPaint([Keep] RenderObject*);
+
+    [Timeline, Page, Inline=FastReturn]
+    void didPaint([Keep] RenderObject*, GraphicsContext*, const LayoutRect&);
+
+    [Resource, Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willRecalculateStyle([Keep] Document*);
+
+    [Timeline, Resource, Page, Inline=FastReturn]
+    void didRecalculateStyle(const InspectorInstrumentationCookie&);
+
+    [Timeline, Inline=FastReturn]
+    void didRecalculateStyleForElement(Element*);
+
+    [Timeline, Resource, Inline=FastReturn]
+    void didScheduleStyleRecalculation([Keep] Document*);
+
+    [CSS, Inline=FastReturn]
+    InspectorInstrumentationCookie willMatchRule(Document*, StyleRule*, InspectorCSSOMWrappers&, DocumentStyleSheetCollection*);
+
+    [CSS, Inline=FastReturn]
+    void didMatchRule(const InspectorInstrumentationCookie&, bool matched);
+
+    [CSS, Inline=Custom]
+    InspectorInstrumentationCookie willProcessRule(Document* document, StyleRule* rule, StyleResolver* styleResolver);
+
+    [CSS, Inline=FastReturn]
+    void didProcessRule(const InspectorInstrumentationCookie&);
+
+    [Resource, Inline=FastReturn]
+    void applyUserAgentOverride(Frame*, String* userAgent);
+
+    [Page, Inline=FastReturn]
+    void applyScreenWidthOverride(Frame*, long* width);
+
+    [Page, Inline=FastReturn]
+    void applyScreenHeightOverride(Frame*, long* height);
+
+    [Page, Inline=FastReturn]
+    void applyEmulatedMedia(Frame*, String* media);
+
+    [Timeline, Resource]
+    void willSendRequest(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
+
+    void continueAfterPingLoader(Frame*, unsigned long identifier, DocumentLoader*, ResourceRequest&, const ResourceResponse&);
+
+    [Resource]
+    void markResourceAsCached(Page*, unsigned long identifier);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willReceiveResourceData([Keep] Frame*, unsigned long identifier, int length);
+
+    [Timeline, Inline=FastReturn]
+    void didReceiveResourceData(const InspectorInstrumentationCookie&);
+
+    [Timeline]
+    InspectorInstrumentationCookie willReceiveResourceResponse([Keep] Frame*, unsigned long identifier, const ResourceResponse&);
+
+    [Timeline, Resource, Console] // Console should come AFTER Resource notification, front-end relies on this.
+    void didReceiveResourceResponse(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
+
+    [Inline=Forward]
+    void continueAfterXFrameOptionsDenied(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
+
+    [Inline=Forward]
+    void continueWithPolicyDownload(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
+
+    [Inline=Forward]
+    void continueWithPolicyIgnore(Frame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
+
+    [Resource]
+    void didReceiveData(Frame*, unsigned long identifier, const char* data, int dataLength, int encodedDataLength);
+
+    [Timeline, Resource]
+    void didFinishLoading(Frame* frame, unsigned long identifier, DocumentLoader*, double finishTime);
+
+    [Timeline, Resource, Console] // Console should come AFTER Resource notification, front-end relies on this.
+    void didFailLoading(Frame* frame, unsigned long identifier, DocumentLoader*, const ResourceError&);
+
+    [Resource]
+    void documentThreadableLoaderStartedLoadingForClient(ScriptExecutionContext*, unsigned long identifier, ThreadableLoaderClient* client);
+
+    [Resource]
+    void willLoadXHR(ScriptExecutionContext*, ThreadableLoaderClient* client, const String& method, const KURL& url, bool async, PassRefPtr<FormData>, const HTTPHeaderMap& headers, bool includeCredentials);
+
+    [Resource]
+    void didFailXHRLoading(ScriptExecutionContext*, ThreadableLoaderClient* client);
+
+    [Console, Resource]
+    void didFinishXHRLoading(ScriptExecutionContext*, ThreadableLoaderClient* client, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
+
+    [Resource]
+    void didReceiveXHRResponse(ScriptExecutionContext*, unsigned long identifier);
+
+    [Resource]
+    void willLoadXHRSynchronously(ScriptExecutionContext*);
+
+    [Resource]
+    void didLoadXHRSynchronously(ScriptExecutionContext*);
+
+    [Resource]
+    void scriptImported(ScriptExecutionContext*, unsigned long identifier, const String& sourceString);
+
+    [Debugger]
+    void scriptExecutionBlockedByCSP(ScriptExecutionContext*, const String& directiveText);
+
+    [Resource]
+    void didReceiveScriptResponse(ScriptExecutionContext*, unsigned long identifier);
+
+    [Timeline, Inspector, DOM, Page]
+    void domContentLoadedEventFired([Keep] Frame*);
+
+    [DOM, Timeline, Page]
+    void loadEventFired([Keep] Frame*);
+
+    [Canvas, Page, CSS]
+    void frameDetachedFromParent([Keep] Frame*);
+
+    [Console, Resource, CSS, Database, DOM, LayerTree, Inspector, Canvas, Page]
+    void didCommitLoad([Keep] Frame*, DocumentLoader*);
+
+    [DOM, Inline=FastReturn]
+    void frameDocumentUpdated([Keep] Frame*);
+
+    [Page]
+    void loaderDetachedFromFrame(Frame*, DocumentLoader*);
+
+    [Page]
+    void frameStartedLoading([Keep] Frame*);
+
+    [Page]
+    void frameStoppedLoading([Keep] Frame*);
+
+    [Page]
+    void frameScheduledNavigation([Keep] Frame*, double delay);
+
+    [Page]
+    void frameClearedScheduledNavigation([Keep] Frame*);
+
+    [Page, Inline=FastReturn]
+    InspectorInstrumentationCookie willRunJavaScriptDialog(Page*, const String& message);
+
+    [Page, Inline=FastReturn]
+    void didRunJavaScriptDialog(const InspectorInstrumentationCookie&);
+
+    [Inline=Forward]
+    void willDestroyCachedResource(CachedResource* cachedResource);
+
+    [Timeline, Inline=FastReturn]
+    InspectorInstrumentationCookie willWriteHTML([Keep] Document*, unsigned startLine);
+
+    [Timeline, Inline=FastReturn]
+    void didWriteHTML(const InspectorInstrumentationCookie&, unsigned endLine);
+
+    [DOMDebugger, Timeline]
+    void didRequestAnimationFrame([Keep] Document*, int callbackId);
+
+    [DOMDebugger, Timeline]
+    void didCancelAnimationFrame([Keep] Document*, int callbackId);
+
+    [DOMDebugger, Timeline]
+    InspectorInstrumentationCookie willFireAnimationFrame([Keep] Document*, int callbackId);
+
+    [Timeline, Inline=FastReturn]
+    void didFireAnimationFrame(const InspectorInstrumentationCookie&);
+
+    [Console, Debugger, Inline=Custom]  // FIXME: Drop this once we no longer generate stacks outside of Inspector.
+    void addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, unsigned long requestIdentifier = 0);
+
+    [Console, Debugger, Inline=Custom]
+    void addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptState* state, PassRefPtr<ScriptArguments> arguments, unsigned long requestIdentifier = 0);
+
+    [Console, Inline=Custom]
+    void addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& scriptId, unsigned lineNumber, ScriptState* state = 0, unsigned long requestIdentifier = 0);
+
+    [Console, Inline=Custom]
+    void consoleCount(Page* page, ScriptState* state, PassRefPtr<ScriptArguments> arguments);
+
+    [Timeline, Console, Inline=Custom]
+    void startConsoleTiming([Keep] Frame* frame, const String& title);
+
+    [Console, Timeline, Inline=Custom]
+    void stopConsoleTiming([Keep] Frame* frame, const String& title, PassRefPtr<ScriptCallStack> stack);
+
+    [Timeline, Inline=Custom]
+    void consoleTimeStamp([Keep] Frame* frame, PassRefPtr<ScriptArguments> arguments);
+
+    [Profiler, Inline=Custom]
+    void addStartProfilingMessageToConsole(Page* page, const String& title, unsigned lineNumber, const String& sourceURL);
+
+    [Profiler, Inline=Custom]
+    void addProfile(Page* page, PassRefPtr<ScriptProfile> profile, PassRefPtr<ScriptCallStack> callStack);
+
+    [Database, Inline=Custom]
+    void didOpenDatabase(ScriptExecutionContext* context, PassRefPtr<Database> database, const String& domain, const String& name, const String& version);
+
+    [DOMStorage, Inline=FastReturn]
+    void didDispatchDOMStorageEvent(Page* page, const String& key, const String& oldValue, const String& newValue, StorageType storageType, SecurityOrigin* securityOrigin);
+
+    [Worker]
+    void didStartWorkerContext(ScriptExecutionContext*, WorkerContextProxy* proxy, const KURL& url);
+
+    [WorkerRuntime]
+    void willEvaluateWorkerScript([Keep] WorkerContext* context, int workerThreadStartMode);
+
+    [Worker]
+    void workerContextTerminated(ScriptExecutionContext*, WorkerContextProxy* proxy);
+
+    [Resource, Timeline]
+    void didCreateWebSocket([Keep] Document*, unsigned long identifier, const KURL& requestURL, const String& protocol);
+
+    [Resource, Timeline]
+    void willSendWebSocketHandshakeRequest([Keep] Document*, unsigned long identifier, const WebSocketHandshakeRequest& request);
+
+    [Resource, Timeline]
+    void didReceiveWebSocketHandshakeResponse([Keep] Document*, unsigned long identifier, const WebSocketHandshakeResponse& response);
+
+    [Resource, Timeline]
+    void didCloseWebSocket([Keep] Document*, unsigned long identifier);
+
+    [Resource]
+    void didReceiveWebSocketFrame(Document*, unsigned long identifier, const WebSocketFrame& frame);
+
+    [Resource]
+    void didSendWebSocketFrame(Document*, unsigned long identifier, const WebSocketFrame& frame);
+
+    [Resource]
+    void didReceiveWebSocketFrameError(Document*, unsigned long identifier, const String& errorMessage);
+
+    [ApplicationCache, Inline=FastReturn]
+    void networkStateChanged(Page*);
+
+    [ApplicationCache, Inline=FastReturn]
+    void updateApplicationCacheStatus([Keep] Frame*);
+
+    [LayerTree]
+    void layerTreeDidChange(Page*);
+
+    [LayerTree]
+    void renderLayerDestroyed(Page*, const RenderLayer*);
+
+    [LayerTree]
+    void pseudoElementDestroyed(Page*, PseudoElement*);
+}
diff --git a/modules/webmidi/MIDIAccess.idl b/modules/webmidi/MIDIAccess.idl
new file mode 100644
index 0000000..ea5fe0a
--- /dev/null
+++ b/modules/webmidi/MIDIAccess.idl
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+[
+    NoInterfaceObject,
+    ActiveDOMObject,
+    EventTarget
+] interface MIDIAccess {
+    sequence<MIDIInput> inputs();
+    sequence<MIDIOutput> outputs();
+
+    attribute EventListener onconnect;
+    attribute EventListener ondisconnect;
+
+    // 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);
+};