diff --git a/README.md b/README.md
index 2804747..f3a1b27 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,6 @@
 
  - In order to build GWT, `java` and `ant` are required in your system.
 
- - Optional: if you want to compile elemental you need
-   `python` and `g++` installed.
-
  - You need the [GWT tools repository](https://github.com/gwtproject/tools/)
    checked out and up-to-date. By default it is expected to be found at `../tools`.
    You can override the default location using the GWT_TOOLS environment variable
@@ -28,7 +25,7 @@
 
  - To create the SDK distribution files run:
 
-   `$ ant clean elemental dist-dev`
+   `$ ant clean dist-dev`
 
    or if you don't have `python` and `g++` just run
 
@@ -39,11 +36,11 @@
 
    if you want to specify a different version number run:
 
-   `$ ant clean elemental dist-dev -Dgwt.version=x.x.x`
+   `$ ant clean dist-dev -Dgwt.version=x.x.x`
 
  - To compile everything including examples you have to run
 
-   `$ ant clean elemental dist`
+   `$ ant clean dist`
 
 ### How to verify GWT code conventions:
 
@@ -106,10 +103,6 @@
     user           | test.nometa.selenium   | test.nometa.selenium.disable   | Run -XdisableClassMetadata tests using Selenium RC servers
     user           | test.emma.selenium     | test.emma.selenium.disable     | Run emma tests with Selenium RC servers
     requestfactory | test                   | test.requestfactory.disable    | Request Factory library
-    elemental      | test                   | test.elemental.disable         | Elemental library
-    elemental      | test.nongwt            | test.nongwt.disable            | Run elemental tests that not require GWTTestCase
-    elemental      | test.dev.htmlunit      | test.dev.htmlunit.disable      | Run elemental dev-mode tests with HtmlUnit
-    elemental      | test.web.htmlunit      | test.web.htmlunit.disable      | Run elemental web-mode tests with HtmlUnit
     tools          | test                   | test.tools.disable             | Some tools used in GWT development
 
    Additionally you can utilize some variables to filter which test to run in each task:
@@ -151,17 +144,6 @@
     _Note: that we disable dev tests because code server depends on dev
     and we don`t want to run its tests._
 
- - Run all tests in elemental:
-
-   `$ ( cd elemental && ant test.nongwt )`
-
-    or
-
-   `$ ant elemental -Dtarget=test -Dtest.dev.disable=true -Dtest.user.disable=true`
-
-    _Note: that we have to disable dev and user tests because elemental
-    depends on both._
-
  - Run all tests in tools
 
    `$ ant tools -Dtarget=test -Dtest.dev.disable=true -Dtest.user.disable=true`
@@ -196,7 +178,6 @@
           -Dtest.dev.disable=true \
           -Dtest.codeserver.disable=true \
           -Dtest.requestfactory.disable=true \
-          -Dtest.elemental.disable=true \
           -Dtest.tools.disable=true \
           -Dtest.dev.htmlunit.disable=true \
           -Dtest.web.htmlunit.disable=true \
diff --git a/build.xml b/build.xml
index f3b059a..d5bd2da 100755
--- a/build.xml
+++ b/build.xml
@@ -70,12 +70,6 @@
     <gwt.ant dir="user"/>
   </target>
 
-  <target name="elemental"
-          description="[subdir] Builds (or runs ${target} if set) only the elemental library">
-    <call-subproject subproject="user" subtarget="build"/>
-    <gwt.ant dir="elemental"/>
-  </target>
-
   <target name="tools" description="[subdir] Builds (or runs ${target} if set) only the tools">
     <call-subproject subproject="user" subtarget="build"/>
     <gwt.ant dir="tools"/>
@@ -143,7 +137,7 @@
   </target>
 
   <target name="test" depends="buildonly,apicheck,checkstyle"
-          description="[action] Runs all the GWT tests, including checkstyle, apicheck and elemental">
+          description="[action] Runs all the GWT tests, including checkstyle and apicheck">
     <call-subproject subproject="buildtools" subtarget="test"/>
     <call-subproject subproject="dev" subtarget="test"/>
     <call-subproject subproject="user" subtarget="test"/>
@@ -151,7 +145,6 @@
     <call-subproject subproject="requestfactory" subtarget="test"/>
     <call-subproject subproject="servlet" subtarget="test"/>
     <call-subproject subproject="tools" subtarget="test"/>
-    <call-subproject subproject="elemental" subtarget="test"/>
   </target>
 
   <target name="testrf" depends="buildonly"
diff --git a/distro-source/build.xml b/distro-source/build.xml
index 02ba43a..03e1c7b 100755
--- a/distro-source/build.xml
+++ b/distro-source/build.xml
@@ -27,14 +27,6 @@
     <!-- TODO: figure out how to share most of this across platforms -->
     <mkdir dir="${gwt.build.dist}" />
     <mkdir dir="${gwt.build.out}/samples-scripts"/>
-    <if>
-      <not>
-        <available file="${gwt.build.lib}/gwt-elemental.jar" type="file" />
-      </not>
-      <then>
-        <echo message="Building SDK without Elemental - did you forget to call 'ant elemental' before 'ant dist'?" />
-      </then>
-    </if>
     <zip destfile="${project.dist}">
       <!-- jars -->
       <zipfileset file="${gwt.build.lib}/gwt-dev.jar" prefix="${project.distname}" />
@@ -44,7 +36,6 @@
       <zipfileset file="${gwt.build.lib}/gwt-servlet-deps.jar" prefix="${project.distname}" />
       <zipfileset file="${gwt.build.lib}/gwt-api-checker.jar" prefix="${project.distname}" />
       <zipfileset file="${gwt.build.lib}/requestfactory*.jar" prefix="${project.distname}" />
-      <zipfileset file="${gwt.build.lib}/gwt-elemental.jar" prefix="${project.distname}" />
 
       <!-- external libs -->
       <zipfileset file="${gwt.tools}/lib/javax/validation/validation-api-1.0.0.GA.jar" prefix="${project.distname}" />
diff --git a/eclipse/elemental/.classpath b/eclipse/elemental/.classpath
deleted file mode 100644
index e6f5070..0000000
--- a/eclipse/elemental/.classpath
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry excluding="elemental/super/" kind="src" path="elemental/src"/>
-	<classpathentry kind="src" path="elemental/tests"/>
-	<classpathentry kind="src" path="elemental/idl/generated/src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/gwt-dev"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/gwt-user"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse/elemental/.project b/eclipse/elemental/.project
deleted file mode 100644
index dbad802..0000000
--- a/eclipse/elemental/.project
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>elemental</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>com.atlassw.tools.eclipse.checkstyle.CheckstyleNature</nature>
-	</natures>
-	<linkedResources>
-		<link>
-			<name>elemental</name>
-			<type>2</type>
-			<locationURI>GWT_ROOT/elemental</locationURI>
-		</link>
-	</linkedResources>
-</projectDescription>
diff --git a/eclipse/elemental/RunAllTests-dev.launch b/eclipse/elemental/RunAllTests-dev.launch
deleted file mode 100644
index 12c2186..0000000
--- a/eclipse/elemental/RunAllTests-dev.launch
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/elemental/elemental/tests/elemental/AllTests.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;gwt-user&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;gwt-user&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/test&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/idl/generated/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/tests&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/test-super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-dev/core/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-dev/core/super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;elemental&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;gwt-dev&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;gwt-user&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_TOOLS/lib/junit/junit-4.8.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="elemental.AllTests"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="elemental"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value=""/>
-</launchConfiguration>
diff --git a/eclipse/elemental/RunAllTests-prod.launch b/eclipse/elemental/RunAllTests-prod.launch
deleted file mode 100644
index 3e2f079..0000000
--- a/eclipse/elemental/RunAllTests-prod.launch
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/elemental/elemental/tests/elemental/AllTests.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
-<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
-<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
-<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;gwt-user&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;gwt-user&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/test&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/idl/generated/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/elemental/elemental/tests&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-user/core/test-super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-dev/core/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-dev/core/super&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;elemental&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;gwt-dev&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry path=&quot;3&quot; projectName=&quot;gwt-user&quot; type=&quot;1&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
-<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;GWT_TOOLS/lib/junit/junit-4.8.2.jar&quot; path=&quot;3&quot; type=&quot;3&quot;/&gt;&#10;"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="elemental.AllTests"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="elemental"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dgwt.args=&quot;-prod&quot;"/>
-</launchConfiguration>
diff --git a/elemental/.gitignore b/elemental/.gitignore
deleted file mode 100644
index 8d4e751..0000000
--- a/elemental/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-# NOTE: we don't include IDE-specific files (e.g. Emacs' or Vim's *~) on-purpose.
-# Those patterns should go in a global gitignore or repository-specific excludes.
-# See http://www.gwtproject.org/makinggwtbetter.html#global_gitignore
-
-# Generated by elemental build script
-idl/database/
-idl/generated/
-*.pyc
-java_interface_CSSStyleDeclaration.darttemplate
-jso_impl_CSSStyleDeclaration.darttemplate
diff --git a/elemental/BUILD b/elemental/BUILD
deleted file mode 100644
index fbc6706..0000000
--- a/elemental/BUILD
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright 2012 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-# Description:
-#   Elemental bindings for GWT # released under various licenses, derived from Dart project
-licenses(["notice"])  # BSD (with Chrome/WebKit IDL files under LGPL)
-
-package(default_visibility = [
-    "//visibility:public",
-])
-
-ELEMENTAL_EXTRA_XML = """
-  <inherits name='com.google.gwt.resources.Resources' />
-  <set-configuration-property name='user.agent.runtimeWarning' value='false' />
-  <set-property name='user.agent' value='safari' />
-  <source path='client' />
-  <source path='js' />
-  <source path='canvas'/>
-  <source path='css'/>
-  <source path='dom'/>
-  <source path='events'/>
-  <source path='html'/>
-  <source path='json'/>
-  <source path='ranges'/>
-  <source path='stylesheets'/>
-  <source path='svg'/>
-  <source path='traversal'/>
-  <source path='xpath'/>
-  <source path='xml'/>
-  <source path='util'/>
-  <super-source path='super'/>
-"""
-
-genrule(
-    name = "elemental_extra_xml",
-    outs = ["ElementalExtra.gwt.xml"],
-    cmd = "echo \"" + ELEMENTAL_EXTRA_XML + "\" > $@",
-)
-
-gwt_module(
-    name = "elemental",
-    srcs = [":buildsrcjar"] + glob(
-        ["src/**/*.java"],
-        exclude = ["**/super/**"],
-    ),
-    base_inherits = ["com.google.gwt.core.Core"],
-    extra_module_contents = [":ElementalExtra.gwt.xml"],
-    resources = [
-        "src/elemental/super/elemental/json/Json.java",
-        "src/elemental/super/elemental/json/impl/JreJsonValue.java",
-    ],
-    deps = ["//third_party/java/gwt"],
-)
-
-genrule(
-    name = "buildsrcjar",
-    srcs = glob(["idl/**/*"]),
-    outs = ["elementaldom.srcjar"],
-    cmd = " && ".join([
-        "mkdir -p $@.tmp",
-        "export CC=$(CC)",
-        "export JAR=$(location //third_party/java/jdk/jar)",
-        "idl/buildsrcjar $@.tmp $@",
-    ]),
-    tools = [
-        "//third_party/crosstool",
-        "//third_party/java/jdk/jar",
-        "//tools/defaults:jdk",
-        "//tools/defaults:python_runtime",
-    ],
-)
diff --git a/elemental/META-INF/MANIFEST.MF b/elemental/META-INF/MANIFEST.MF
deleted file mode 100644
index 954e075..0000000
--- a/elemental/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Created-By: blaze-singlejar
-
diff --git a/elemental/README b/elemental/README
deleted file mode 100644
index 9e98897..0000000
--- a/elemental/README
+++ /dev/null
@@ -1,18 +0,0 @@
-Elemental is a "to the metal" raw programming API designed to keep up with fast changing 
-HTML5 browsers, reduce the need for JSNI code, and melt away to as little overhead as possible.
-It is particularly suited for situations where direct low level access and small code are important 
-such as mobile devices.
-
-Currently, Elemental is generated from the WebKit project's WebIDL binding definitions which are used also
-by the Dart project. Because of this, vendor prefixed APIs also show up (webkit specific). These APIs are
-often also available on Firefox and IE. A future version of Elemental will generate these as well, either
-as Mozilla/IE vendor prefixed calls, or as standardized non-prefix calls backed by multibrowser shim.
-
-To see Elemental and SuperDevMode in action, run 'ant dist-dev' to build gwt-dev and gwt-user jars. Then
-cd to examples/silvercomet and run 'ant demo'
-
-Visit http://localhost:9876/SilverComet/SilverComet.html and enjoy.
-
-
-
-
diff --git a/elemental/STOP.EXPERIMENTAL b/elemental/STOP.EXPERIMENTAL
deleted file mode 100644
index c00e557..0000000
--- a/elemental/STOP.EXPERIMENTAL
+++ /dev/null
@@ -1,6 +0,0 @@
-DANGER! DANGER!
-
-Elemental is experimental. It will change rapidly, both because the HTML5 IDLs are evolving, and because
-some things like the Collection class APIs will most likely be changed. If you use elemental, be prepared to
-have your app broken, and to contribute by giving feedback and/or patches.
-
diff --git a/elemental/build.xml b/elemental/build.xml
deleted file mode 100644
index b6d56e8..0000000
--- a/elemental/build.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<project name="elemental" default="build" basedir=".">
-  <property name="gwt.root" location=".." />
-  <property name="project.tail" value="elemental" />
-  <property name="test.args" value="-ea" />
-  <property name="test.jvmargs" value="-ea" />
-
-  <import file="${gwt.root}/common.ant.xml" />
-
-  <!-- Platform shouldn't matter here, just picking one -->
-  <property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" />
-  <property.ensure name="gwt.user.jar" location="${gwt.build.lib}/gwt-user.jar" />
-
-  <target name="check.generated" description="Check whether elemental code has been generated">
-    <condition property="generated">
-      <available file="idl/generated/src" type="dir" />
-    </condition>
-  </target>
-
-  <target name="generate" description="Generate Elemental bindings from IDL">
-    <exec executable="idl/build" dir="." failonerror="true"/>
-  </target>
-
-  <target name="compile" description="Compile all class files">
-    <mkdir dir="${javac.out}" />
-    <gwt.javac srcdir="src:idl/generated/src" excludes="**/super/**">
-      <classpath>
-        <pathelement location="${gwt.dev.jar}" />
-        <pathelement location="${gwt.user.jar}" />
-      </classpath>
-    </gwt.javac>
-  </target>
-
-  <target name="compile.tests" if="generated" depends="check.generated" description="Compile Tests">
-    <echo message="${javac.junit.out}" />
-    <mkdir dir="${javac.junit.out}" />
-    <gwt.javac srcdir="src:idl/generated/src:tests" destdir="${javac.junit.out}" excludes="**/super/**">
-      <classpath>
-        <pathelement location="${javac.out}"/>
-        <pathelement location="${gwt.dev.jar}" />
-        <pathelement location="${gwt.user.jar}" />
-        <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar" />
-      </classpath>
-    </gwt.javac>
-  </target>
-
-  <target name="build" depends="generate, compile"
-      description="Creates gwt-elemental.jar">
-    <mkdir dir="${gwt.build.lib}" />
-    <gwt.jar>
-      <fileset dir="src" excludes="**/package.html" />
-      <fileset dir="idl/generated/src"/>
-      <fileset dir="${javac.out}" />
-    </gwt.jar>
-  </target>
-
-  <macrodef name="run-tests">
-    <attribute name="output"/>
-    <attribute name="args"/>
-    <attribute name="classes"/>
-    <sequential>
-      <fileset id="tests" dir="${javac.junit.out}" includes="@{classes}" />
-      <gwt.junit test.name="test"
-          test.args="@{args}"
-          test.jvmargs="${test.jvmargs}"
-          test.out="@{output}"
-          test.cases="tests">
-        <extraclasspaths>
-          <pathelement location="${gwt.root}/elemental/src" />
-          <pathelement location="${gwt.root}/elemental/idl/generated/src" />
-          <pathelement location="${gwt.root}/elemental/tests" />
-          <pathelement location="${gwt.dev.jar}" />
-          <pathelement location="${gwt.user.jar}" />
-        </extraclasspaths>
-      </gwt.junit>
-    </sequential>
-  </macrodef>
-
-  <target name="test.dev.htmlunit" if="generated" depends="compile.tests"
-          unless="test.dev.htmlunit.disable"
-          description="Run tests with HtmlUnit in dev mode">
-    <run-tests output="${junit.out}/dev" args="${test.args} -devMode" classes="**/AllTests.class"/>
-  </target>
-
-  <target name="test.web.htmlunit" if="generated" depends="compile.tests"
-          unless="test.web.htmlunit.disable"
-          description="Run tests with HtmlUnit in prod mode">
-    <run-tests output="${junit.out}/web" args="${test.args} -prod" classes="**/AllTests.class"/>
-  </target>
-
-  <target name="test.nongwt" if="generated" depends="compile.tests"
-          unless="test.nongwt.disable"
-          description="Run tests in the JVM">
-    <run-tests output="${junit.out}/nongwt" args="" classes="**/*JreTest.class"/>
-  </target>
-
-  <target name="test"
-          unless="test.elemental.disable"
-          description="Run all Elemental tests">
-    <antcall target="test.nongwt" />
-    <antcall target="test.web.htmlunit" />
-    <antcall target="test.dev.htmlunit" />
-  </target>
-
-  <macrodef name="compileModule">
-    <element name="module" />
-    <sequential>
-      <java classname="com.google.gwt.dev.CompileModule" fork="yes" failonerror="true">
-        <classpath>
-          <pathelement location="${gwt.root}/elemental/src" />
-          <pathelement location="${gwt.root}/elemental/idl/generated/src" />
-          <pathelement location="${gwt.dev.jar}" />
-          <pathelement location="${gwt.user.jar}" />
-        </classpath>
-        <jvmarg value="-Xmx512M" />
-        <module />
-        <arg value="-strict" />
-        <arg value="-out" />
-        <arg value="${project.build}/bin" />
-      </java>
-    </sequential>
-  </macrodef>
-
-  <target name="clean"
-      description="Cleans this project's intermediate and output files">
-    <delete dir="idl/generated" />
-    <delete dir="idl/database" />
-    <delete dir="${project.build}" />
-    <delete dir="${javac.junit.out}" />
-    <delete file="${project.lib}" />
-  </target>
-</project>
diff --git a/elemental/examples/silvercomet/build.xml b/elemental/examples/silvercomet/build.xml
deleted file mode 100755
index cdd70c6..0000000
--- a/elemental/examples/silvercomet/build.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- Demo of elemental implementing search and visualization of marathon runner times (json data) -->
-<project name="silvercomet" default="build" basedir=".">
-  <property name="gwt.root" location="../../.." />
-  <property name="project.tail" value="elemental/examples/silvercomet" />
-  <import file="${gwt.root}/common.ant.xml" />
-
-  <property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" />
-  <property.ensure name="gwt.codeserver.jar" location="${gwt.build.lib}/gwt-codeserver.jar" />
-  <property.ensure name="gwt.elemental.jar" location="${gwt.build.lib}/gwt-elemental.jar" />
-
-  <target name="demo" depends="build" description="starts the code server with a sample app">
-
-    <!-- hack to make sourcemaps generation work in the compiler -->
-    <!-- See: http://code.google.com/p/google-web-toolkit/issues/detail?id=7397 -->
-    <property.ensure name="json.jar"
-                     location="${gwt.tools}/redist/json/r2_20080312/json-1.5.jar" />
-
-    <property.ensure name="gwt.user.jar" location="${gwt.build.lib}/gwt-user.jar" />
-    <property.ensure name="sample-src" location="${gwt.root}/elemental/examples/silvercomet/src" />
-
-
-    <java fork="true" failonerror="true" classname="com.google.gwt.dev.codeserver.CodeServer">
-      <classpath>
-        <pathelement location="${project.lib}"/>
-        <pathelement location="${gwt.dev.jar}"/>
-        <pathelement location="${json.jar}" />
-        <pathelement location="${gwt.user.jar}"/>
-        <pathelement location="${gwt.codeserver.jar}"/>
-        <pathelement location="${gwt.elemental.jar}"/>
-      </classpath>
-      <arg value="-src"/>
-      <arg value="${sample-src}"/>
-      <arg value="com.google.silvercomet.SilverComet"/>
-    </java>
-  </target>
-
-</project>
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/SilverComet.gwt.xml b/elemental/examples/silvercomet/src/com/google/silvercomet/SilverComet.gwt.xml
deleted file mode 100644
index e2df12e..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/SilverComet.gwt.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<module rename-to="SilverComet">
-  <inherits name="elemental.Elemental"/>
-  <entry-point class="com.google.silvercomet.client.Main"/>
-</module>
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Main.java b/elemental/examples/silvercomet/src/com/google/silvercomet/client/Main.java
deleted file mode 100644
index e6c67ce..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Main.java
+++ /dev/null
@@ -1,522 +0,0 @@
-package com.google.silvercomet.client;
-
-import com.google.gwt.core.client.EntryPoint;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.resources.client.ClientBundle;
-import com.google.gwt.resources.client.CssResource;
-
-import elemental.client.Browser;
-import elemental.css.CSSStyleDeclaration;
-import elemental.css.CSSStyleDeclaration.Display;
-import elemental.css.CSSStyleDeclaration.Unit;
-import elemental.css.CSSStyleDeclaration.Visibility;
-import elemental.events.Event;
-import elemental.events.EventListener;
-import elemental.events.KeyboardEvent;
-import elemental.dom.Document;
-import elemental.dom.Element;
-import elemental.html.InputElement;
-import elemental.html.StyleElement;
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfInt;
-import elemental.util.Collections;
-import elemental.dom.*;
-
-/**
- * All the view code that is fit to run.
- *
- * @author knorton@google.com (Kelly Norton)
- */
-public class Main implements EntryPoint, Model.Listener, EventListener {
-
-  /**
-   * Access to all the relevant classnames and constants for the CSS selectors.
-   */
-  public static interface Css extends CssResource {
-    String bar();
-
-    String browserInfo();
-
-    String count();
-
-    String label();
-
-    String marker();
-
-    String moreResults();
-
-    String result();
-
-    String resultLeft();
-
-    String resultName();
-
-    String resultRight();
-
-    String root();
-
-    int rootHeight();
-
-    int rootWidth();
-
-    String tickMajor();
-
-    String tickMinor();
-  }
-
-  /**
-   * Bundles the CSS resources.
-   */
-  public interface Resources extends ClientBundle {
-    @Source("silver-comet.gwt.css")
-    Css css();
-  }
-
-  /**
-   * A simple view to show a runner's finishing info.
-   */
-  private static class RunnerView {
-    /**
-     * Returns a string describing a runner's place & finishing time. Example:
-     * 325th (1:49:11)
-     */
-    private static String infoString(Runner runner) {
-      return placeString(runner.place()) + " (" + secondsToTime(runner.time(), true) + ")";
-    }
-
-    /**
-     * Produces a english locale human readable places. Example: 1st, 2nd, 11th,
-     * etc.
-     */
-    private static String placeString(int place) {
-      final int tens = place / 10;
-      final int ones = place % 10;
-      if (ones == 1 && tens != 1) {
-        return place + "st";
-      } else if (ones == 2 && tens != 1) {
-        return place + "nd";
-      } else if (ones == 3 && tens != 1) {
-        return place + "rd";
-      } else {
-        return place + "th";
-      }
-    }
-
-    /**
-     * Sets the current runner being displayed.
-     */
-    private static native void setRunner(Element element, Runner runner) /*-{
-      element.currentRunner = runner;
-    }-*/;
-
-    /**
-     * This is a hack for sure, but I claim it demonstrates your ability to
-     * commit clever atrosities in JavaScript even while working in Java.
-     */
-    static native Runner getRunnerFromElement(Element element) /*-{
-      return element.currentRunner || element.parentNode.currentRunner;
-    }-*/;
-
-    private final Element root;
-
-    private final Element name;
-
-    private final Element info;
-
-    private final double secondsPerPixel;
-
-    /**
-     * Create a new view with a classname for the root element and a scaling
-     * factor for translating along the timeline.
-     */
-    RunnerView(String rootClass, double secondsPerPixel) {
-      this(rootClass, null, secondsPerPixel);
-    }
-
-    /**
-     * Create a new view classnames for the root element and text elements and a
-     * scaling factor for translating along the timeline.
-     */
-    RunnerView(String rootClass, String textClass, double secondsPerPixel) {
-      root = div(rootClass);
-      name = textClass == null ? div() : div(textClass);
-      info = textClass == null ? div() : div(textClass);
-
-      root.appendChild(name);
-      root.appendChild(info);
-
-      this.secondsPerPixel = secondsPerPixel;
-    }
-
-    /**
-     * Returns the root element for the view. Generally used to add the view to
-     * the DOM.
-     */
-    Element element() {
-      return root;
-    }
-
-    /**
-     * Make the view invisible.
-     */
-    void hide() {
-      root.getStyle().setVisibility(Visibility.HIDDEN);
-    }
-
-    /**
-     * Make the view visible.
-     */
-    void show() {
-      root.getStyle().removeProperty("visibility");
-    }
-
-    /**
-     * Update the view to show the info of a runner.
-     */
-    void update(Runner runner) {
-      setRunner(root, runner);
-      name.setTextContent(runner.name());
-      info.setTextContent(infoString(runner));
-      final int x = (int) ((double) runner.time() / (double) Model.SECONDS_PER_HISTOGRAM_BUCKET
-          * secondsPerPixel);
-
-      // TODO(knorton): This is actually wrong because it sets left on all
-      // markers.
-      root.getStyle().setLeft(x, Unit.PX);
-      show();
-    }
-  }
-
-  private static final int NUM_SEARCH_RESULTS = 6;
-
-  /*
-   * Get the correct classname based on the index of the result. This allows for
-   * different classnames on the first and last item.
-   */
-  private static String cssClassForResultItem(Css css, int index) {
-    if (index == 0) {
-      return css.result() + " " + css.resultLeft();
-    }
-
-    if (index == NUM_SEARCH_RESULTS - 1) {
-      return css.result() + " " + css.resultRight();
-    }
-
-    return css.result();
-  }
-
-  /**
-   * Convenience method for creating a new div.
-   */
-  private static Element div() {
-    return Browser.getDocument().createElement("div");
-  }
-
-  /**
-   * Convenience method for creating a new div with a classname.
-   */
-  private static Element div(String className) {
-    final Element e = div();
-    e.setClassName(className);
-    return e;
-  }
-
-  private static String getBrowserInfoString() {
-    final Browser.Info info = Browser.getInfo();
-    if (info.isWebKit()) {
-      return "WebKit Browser";
-    } else if (info.isGecko()) {
-      return "Gecko Browser";
-    }
-    return "Unsupported Browser";
-  }
-
-  private static void injectStyles(Document document, String css) {
-    final StyleElement style = (StyleElement)document.createElement("style");
-    style.setTextContent(css);
-    document.getHead().appendChild(style);
-  }
-
-  /**
-   * Converts a integer to a {@link String}, prepending a zero if the string
-   * representation is only 1 character in length.
-   */
-  private static String pad(int number) {
-    return number > 9 ? "" + number : "0" + number;
-  }
-
-  /**
-   * Converts the number of seconds to a more human readable finishing time.
-   */
-  private static String secondsToTime(int seconds, boolean includeSeconds) {
-    final int hrs = seconds / 3600;
-    final int mns = seconds / 60 - hrs * 60;
-    if (includeSeconds) {
-      final int scs = seconds - hrs * 3600 - mns * 60;
-      return hrs + ":" + pad(mns) + ":" + pad(scs);
-    }
-    return hrs + ":" + pad(mns);
-  }
-
-  private final Css css = GWT.<Resources>create(Resources.class).css();
-
-  private Element root;
-
-  private InputElement search;
-
-  private RunnerView marker;
-
-  private Model model;
-
-  private String lastQuery;
-
-  private Element results;
-
-  private ArrayOf<RunnerView> resultItems;
-
-  private double xAxisScale;
-
-  private Element moreResults;
-
-  /**
-   * Handles all DOM events for the app.
-   */
-  @Override
-  public void handleEvent(Event evt) {
-    final Element target = (Element) evt.getTarget();
-
-    // Handle searches.
-    if (target == search) {
-	//      if (((KeyboardEvent)evt).getKeyCode() == 42) {
-	//        clearSearch();
-	//      } else {
-        final String query = search.getValue();
-        updateSearch(query == null ? "" : query.trim());
-	//      }
-      return;
-    }
-
-    // Handle clicks on search results.
-    final Runner runner = RunnerView.getRunnerFromElement(target);
-    if (runner != null) {
-      marker.update(runner);
-      clearSearch();
-      return;
-    }
-  }
-
-  /**
-   * Indicates that the data failed to load.
-   */
-  @Override
-  public void modelDidFailLoading(Model model) {
-  }
-
-  /**
-   * Indicates that the model finished building the search indexes.
-   */
-  @Override
-  public void modelDidFinishBuildingIndex(Model model) {
-    // TODO(knorton): File crbug about readOnly not working properly.
-    // search.setReadOnly(false);
-    search.focus();
-  }
-
-  /**
-   * Indicates that all data has been loaded into the model.
-   */
-  @Override
-  public void modelDidFinishLoading(Model model) {
-    final ArrayOfInt histogram = model.histogram();
-    assert histogram.length() > 0 : "histogram is empty.";
-
-    xAxisScale = (double) css.rootWidth() / (double) histogram.length();
-
-    // Build the histogram graph.
-    render();
-
-    // Create the marker.
-    marker = new RunnerView(css.marker(), xAxisScale);
-    marker.hide();
-    root.appendChild(marker.element());
-    Browser.getDocument().getBody().getStyle().setOpacity(1.0);
-  }
-
-  /**
-   * The main entry point for the application.
-   */
-  public void onModuleLoad() {
-    injectStyles(Browser.getDocument(), css.getText());
-
-    // TODO(knorton): Bad Elemental pattern.
-    search = (InputElement) Browser.getDocument().getElementById("search");
-    // TODO(knorton): File crbug about readOnly not working properly.
-    // search.setReadOnly(true);
-    search.addEventListener("change", this, false);
-    search.addEventListener("keyup", this, false);
-    search.addEventListener("keydown", this, false);
-
-    root = (Element) Browser.getDocument().getElementById("c");
-    root.setClassName(css.root());
-
-    results = (Element)Browser.getDocument().getElementById("r");
-    results.getStyle().setVisibility(Visibility.HIDDEN);
-    results.addEventListener("click", this, false);
-
-    // Browser info indicator.
-    // TODO(knorton): Put this in a debug perm.
-    final Element info = Browser.getDocument().getElementById("f");
-    info.setClassName(css.browserInfo());
-    info.setTextContent(getBrowserInfoString());
-    
-    model = new Model(this);
-    model.load();
-  }
-
-  /**
-   * Clear the search box and hide the result item list.
-   */
-  private void clearSearch() {
-    search.setValue("");
-    hideSearchResults();
-  }
-
-  /**
-   * Ensure that the DOM for result items has been built and appended to the
-   * DOM.
-   */
-  private void ensureSearchResultItems() {
-    if (resultItems != null) {
-      return;
-    }
-
-    resultItems = Collections.arrayOf();
-    for (int i = 0; i < NUM_SEARCH_RESULTS; ++i) {
-      final RunnerView marker =
-          new RunnerView(cssClassForResultItem(css, i), css.resultName(), xAxisScale);
-      results.appendChild(marker.element());
-      resultItems.push(marker);
-    }
-
-    moreResults = div(css.moreResults());
-    results.appendChild(moreResults);
-    moreResults.getStyle().setDisplay(Display.NONE);
-  }
-  
-  /**
-   * Hide the search result items list.
-   */
-  private void hideSearchResults() {
-    results.getStyle().setVisibility(Visibility.HIDDEN);
-  }
-
-  /**
-   * Renders the bar graph.
-   */
-  private void render() {
-    final ArrayOfInt histogram = model.histogram();
-
-    final int padding = 2;
-    final int topPadding = 50;
-
-    final double dx = xAxisScale;
-    final double dy = (double) css.rootHeight() / histogram.get(histogram.length() - 1);
-    final double halfDx = dx / 2.0;
-
-    // Render all bars.
-    for (int i = 0, n = histogram.length(); i < n; ++i) {
-      final int value = histogram.get(i);
-      if (value == 0) continue;
-
-      final int x = (int) (dx * i) + padding;
-      final int h = (int) (dy * value) - topPadding;
-      final int w = (int) dx - padding * 2;
-
-      // Create the vertical bar.
-      final Element bar = div(css.bar());
-      final CSSStyleDeclaration barStyle = bar.getStyle();
-      barStyle.setLeft(x, Unit.PX);
-      barStyle.setBottom("0");
-      barStyle.setHeight(h, Unit.PX);
-      barStyle.setWidth(w, Unit.PX);
-
-      // Add a count at the top.
-      final Element count = div(css.count());
-      count.setTextContent("" + value);
-
-      bar.appendChild(count);
-      root.appendChild(bar);
-    }
-
-    // Render labels
-    for (int i = 0, n = histogram.length(); i <= n; ++i) {
-      final int x = (int) (dx * i);
-      final int w = (int) dx;
-
-      final String time = secondsToTime(i * Model.SECONDS_PER_HISTOGRAM_BUCKET, false);
-
-      final Element label = div(css.label());
-      label.setTextContent(time);
-      final CSSStyleDeclaration labelStyle = label.getStyle();
-      labelStyle.setLeft(x - dx, Unit.PX);
-      labelStyle.setWidth(w, Unit.PX);
-      root.appendChild(label);
-
-      // TODO(knorton): Heh, that's pretty trashy. I should fix that. :-)
-      final Element tick =
-          div(time.charAt(time.length() - 1) == '0' && time.charAt(time.length() - 2) == '0'
-              ? css.tickMajor() : css.tickMinor());
-      tick.getStyle().setLeft(x, Unit.PX);
-      root.appendChild(tick);
-    }
-  }
-
-  /**
-   * Show the search result items list and update it with the specified list of
-   * results.
-   */
-  private void showSearchResults(ArrayOf<Runner> runners) {
-    ensureSearchResultItems();
-    results.getStyle().removeProperty("visibility");
-    for (int i = 0; i < NUM_SEARCH_RESULTS; ++i) {
-      final RunnerView item = resultItems.get(i);
-      if (i < runners.length()) {
-        item.show();
-        item.update(runners.get(i));
-      } else {
-        item.hide();
-      }
-    }
-
-    if (runners.length() > NUM_SEARCH_RESULTS) {
-      moreResults.setTextContent("+" + (runners.length() - NUM_SEARCH_RESULTS) + " more");
-      moreResults.getStyle().removeProperty("display");
-    } else {
-      moreResults.getStyle().setDisplay(Display.NONE);
-    }
-  }
-
-  /**
-   * Update the search results visually for the specified query.
-   */
-  private void updateSearch(String query) {
-    if (query.equals(lastQuery)) {
-      return;
-    }
-
-    lastQuery = query;
-    if (query.length() == 0) {
-      hideSearchResults();
-    }
-
-    final ArrayOf<Runner> runners = model.search(query);
-    if (runners == null) {
-      hideSearchResults();
-    } else if (runners.length() == 1) {
-      hideSearchResults();
-      marker.update(runners.get(0));
-    } else {
-      showSearchResults(runners);
-    }
-  }
-}
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Model.java b/elemental/examples/silvercomet/src/com/google/silvercomet/client/Model.java
deleted file mode 100644
index 9db9022..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Model.java
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.google.silvercomet.client;
-
-import com.google.gwt.xhr.client.XMLHttpRequest;
-
-import elemental.client.Browser;
-import elemental.html.Window;
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringTo;
-import elemental.json.Json;
-import elemental.js.util.StringUtil;
-import elemental.js.util.Xhr;
-import elemental.util.CanCompare;
-import elemental.dom.TimeoutHandler;
-import elemental.util.Collections;
-
-/**
- * A very simple data model for the application.
- *
- * @author knorton@google.com (Kelly Norton)
- */
-public class Model implements Xhr.Callback {
-
-  /**
-   * A listener to receive callbacks on model events.
-   */
-  public interface Listener {
-    void modelDidFailLoading(Model model);
-
-    void modelDidFinishBuildingIndex(Model model);
-
-    void modelDidFinishLoading(Model model);
-  }
-
-  private static final String DATA_URL = "results.json";
-
-  public static final int SECONDS_PER_HISTOGRAM_BUCKET = 600;
-
-  /**
-   * Compute a histogram with number of finishers per bucket of time where the
-   * size of the bucket is indicated by <code>seconds</code>.
-   */
-  private static ArrayOfInt computeHistogram(ArrayOf<Runner> runners, int seconds) {
-    final ArrayOfInt hist = Collections.arrayOfInt();
-
-    for (int i = 0, n = runners.length(); i < n; ++i) {
-      int index = runners.get(i).time() / seconds;
-      hist.set(index, hist.isSet(index) ? hist.get(index) + 1 : 1);
-    }
-
-    int sum = 0;
-    for (int i = 0, n = hist.length(); i < n; ++i) {
-      if (hist.isSet(i)) {
-        sum += hist.get(i);
-      }
-      hist.set(i, sum);
-    }
-
-    return hist;
-  }
-
-  /**
-   * Sorts the list of runners by {@link Runner#time()} and updates their places
-   * accordingly.
-   */
-  private static ArrayOf<Runner> normalize(ArrayOf<Runner> runners) {
-    // Sort by time() which is based on bib time.
-    runners.sort(new CanCompare<Runner>() {
-      @Override
-      public int compare(Runner a, Runner b) {
-        return a.time() - b.time();
-      }
-    });
-
-    // Update the runner's new place.
-    for (int i = 0, n = runners.length(); i < n; ++i) {
-      runners.get(i).setPlace(i + 1);
-    }
-
-    return runners;
-  }
-
-  /**
-   * Update the model's index with all possible prefixes of the search key.
-   */
-  private static void updateIndexForAllPrefixes(
-      MapFromStringTo<ArrayOf<Runner>> index, String key, Runner runner) {
-    assert key.length() > 0 : "key.length must be > 0.";
-
-    for (int i = 1, n = key.length(); i <= n; ++i) {
-      final String prefix = key.substring(0, i);
-      if (!index.hasKey(prefix)) {
-        index.put(prefix, Collections.<Runner>arrayOf());
-      }
-
-      final ArrayOf<Runner> values = index.get(prefix);
-      // Do not add the same runner twice.
-      if (values.get(values.length() - 1) != runner) {
-        index.get(prefix).push(runner);
-      }
-    }
-  }
-
-  private final Listener listener;
-
-  private ArrayOfInt histogram = null;
-
-  private MapFromStringTo<ArrayOf<Runner>> index = Collections.mapFromStringTo();
-
-  /**
-   * Create a new model.
-   */
-  public Model(Listener listener) {
-    this.listener = listener;
-  }
-
-  /**
-   * Get a reference to the models histogram.
-   */
-  public ArrayOfInt histogram() {
-    return histogram;
-  }
-
-  /**
-   * Load the remote data into the model.
-   */
-  public void load() {
-    Xhr.get(DATA_URL, this);
-  }
-
-  /**
-   * Called if the XHR fails to load data from there server.
-   */
-  @Override
-  public void onFail(XMLHttpRequest xhr) {
-    listener.modelDidFailLoading(this);
-  }
-
-  /**
-   * Called when XHR successfully loads data from the server.
-   */
-  @Override
-  public void onSuccess(XMLHttpRequest xhr) {
-    update((ArrayOf<Runner>)Json.parse(xhr.getResponseText()));
-    listener.modelDidFinishLoading(this);
-  }
-
-  /**
-   * Performs a search and returns the list of runners that match.
-   */
-  public ArrayOf<Runner> search(String query) {
-    return index.get(query);
-  }
-
-  /**
-   * Update the model's internal data from an list of runners coming from the
-   * server.
-   */
-  private void update(ArrayOf<Runner> data) {
-    // Sort & mutate source data.
-    final ArrayOf<Runner> runners = normalize(data);
-
-    // Update indexes later.
-    Browser.getWindow().setTimeout(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        for (int i = 0, n = runners.length(); i < n; ++i) {
-          final Runner runner = runners.get(i);
-
-          final String name = runner.name().toLowerCase();
-          updateIndexForAllPrefixes(index, name, runner);
-          final ArrayOfString words = StringUtil.split(name, " ");
-          for (int j = 0, m = words.length(); j < m; ++j) {
-            updateIndexForAllPrefixes(index, words.get(j), runner);
-          }
-
-          updateIndexForAllPrefixes(index, "" + runner.place(), runner);
-          updateIndexForAllPrefixes(index, "" + runner.bibNumber(), runner);
-        }
-        listener.modelDidFinishBuildingIndex(Model.this);
-      }
-    }, 0);
-
-    // Compute histogram.
-    final ArrayOfInt histogram = computeHistogram(runners, SECONDS_PER_HISTOGRAM_BUCKET);
-
-    // Update fields.
-    this.histogram = histogram;
-  }
-}
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Runner.java b/elemental/examples/silvercomet/src/com/google/silvercomet/client/Runner.java
deleted file mode 100644
index ecef8b5..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/client/Runner.java
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2010 Google Inc. All Rights Reserved.
-
-package com.google.silvercomet.client;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-/**
- * An overlay type that structures a runner's data.
- *
- * @author knorton@google.com (Kelly Norton)
- */
-public final class Runner extends JavaScriptObject {
-  protected Runner() {
-  }
-
-  /**
-   * The runner's age.
-   */
-  public native int age() /*-{
-    return this[2];
-  }-*/;
-
-  /**
-   * The number on the runner's bib (race number).
-   */
-  public native int bibNumber() /*-{
-    return this[5];
-  }-*/;
-
-  /**
-   * The runner's finishing time based on the RFID tag in their bib. -1 is
-   * returned if the runner did not record a valid time with their bib.
-   */
-  public native int bibTime() /*-{
-    return this[8];
-  }-*/;
-
-  /**
-   * The city the runner entered in their registration.
-   */
-  public native String city() /*-{
-    return this[4];
-  }-*/;
-
-  /**
-   * Male or Female.
-   */
-  public native int gender() /*-{
-    return this[3];
-  }-*/;
-
-  /**
-   * The runner's finishing time based on the time from the gun fire to the time
-   * they passed the finish line.
-   */
-  public native int gunTime() /*-{
-    return this[6];
-  }-*/;
-
-  /**
-   * The runner's full name.
-   */
-  public native String name() /*-{
-    return this[1];
-  }-*/;
-
-  /**
-   * The runner's pace in seconds / mile.
-   */
-  public native int pace() /*-{
-    return this[7];
-  }-*/;
-
-  /**
-   * The runner's finishing place (1 based).
-   */
-  public native int place() /*-{
-    return this[0];
-  }-*/;
-
-  /**
-   * Allows updating of the runner's place to accommodate reordering by
-   * {@link #bibTime()} instead of {@link #gunTime()}.
-   */
-  public native void setPlace(int place) /*-{
-    this[0] = place;
-  }-*/;
-
-  /**
-   * Normalized finishing time. This returns the {@link #bibTime()} if it's
-   * valid, {@link #gunTime()} otherwise.
-   */
-  public int time() {
-    return bibTime() != -1 ? bibTime() : gunTime();
-  }
-}
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/client/silver-comet.gwt.css b/elemental/examples/silvercomet/src/com/google/silvercomet/client/silver-comet.gwt.css
deleted file mode 100644
index e641ccc..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/client/silver-comet.gwt.css
+++ /dev/null
@@ -1,175 +0,0 @@
-@def rootWidth 800px;
-@def rootHeight 600px;
-
-/* TODO(knorton): -moz and -webkit prefixes can be targeted with @if */
-body {
-  font-family: Helvetica,Arial,san-serif;
-  -webkit-transition: opacity 200ms ease-in-out;
-  /* opacity: 0 is defined in SilverComet.html */
-  
-  /* 
-   * Firefox doesn't allow margin: auto on flex-box displayed elements.
-   * It's like the new IE6.
-   */
-  text-align: center;
-}
-
-/* header */
-#h {
-  display: -webkit-box;
-  display: -moz-box;
-  -webkit-box-orient: horizontal;
-  -moz-box-orient: horizontal;
-  width: rootWidth;
-  margin: 10px auto;
-  background: #666;
-  padding: 10px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  color: #be7;
-  font-size: 12pt;
-}
-
-/* The chart */
-#c {
-  text-align: left;
-}
-
-/* find a runner */
-#ha {
-  font-size: 10px;
-  background-color: #777;
-  padding: 4px 10px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-}
-
-/* header title */
-#hb {
-  padding: 4px 10px;
-  -webkit-box-flex: 1;
-  -moz-box-flex: 1;
-  text-align: right;
-}
-
-/* search results */
-#r {
-  position: relative;
-  text-align: left;
-  font-size: 10px;
-  width: rootWidth;
-  margin: 0 auto;
-  height: 45px;
-  padding: 10px 4px;
-  background-color: #eee;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-}
-
-.result {
-  display: inline-block;
-  margin: 4px 0;
-  padding: 4px 10px;
-  border-right: 1px solid #999;
-  border-left: 1px solid #fff;
-  width: 111px;
-  cursor: pointer;
-  text-align: center;
-}
-
-.resultLeft {
-  border-left: none;
-}
-
-.resultRight {
-  border-right: none;
-}
- 
- .resultName {
-   white-space: nowrap;
-   overflow: hidden;
-   text-overflow: ellipsis;
- }
-  
-#search {
-  font-size: 10px;
-  margin-left: 10px;
-}
-
-.root {
-  width: rootWidth;
-  height: rootHeight;
-  border-bottom: 1px solid #666;
-  margin: 50px auto;
-  position: relative;
-}
-
-.bar {
-  position: absolute;
-  background: #ccc;
-}
-
-.count {
-  font-size: 10px;
-  color: #666;
-  margin-top: -15px;
-}
-
-.label {
-  font-size: 10px;
-  position: absolute;
-  top: 601px;
-  height: 20px;
-  padding-top: 15px;
-  text-align: center;
-}
-
-.tickMinor {
-  position: absolute;
-  border-left: 1px solid #666;
-  bottom: -6px;
-  height: 6px;
-}
-
-.tickMajor {
-  position: absolute;
-  border-left: 1px solid #666;
-  bottom: -10px;
-  height: 10px;
-}
-
-.marker {
-  font-size: 10px;
-  border-left: 1px solid #600;
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  color: #600;
-  padding-left: 4px;
-  -webkit-transition: left 200ms ease-in-out;
-  -moz-transition: left 200ms ease-in-out;
-  min-width: 200px;
-}
-
-.moreResults {
-  right: -5em;
-  top: 2.5em;
-  position: absolute;
-  background-color: #fff;
-  color: #000;
-  padding: 2px 10px;
-  -webkit-box-shadow: rgba(0, 0, 0, 0.2) 2px 2px 2px;
-  -moz-box-shadow: rgba(0, 0, 0, 0.2) 2px 2px 2px;
-  -webkit-border-radius: 20px;
-  -moz-border-radius: 20px;
-  border: 1px solid #666;
-}
-
-.browserInfo {
-  font-size: 8px;
-  position: fixed;
-  right: 0;
-  bottom: 0;
-  padding: 4px;
-  color: #666;
-}
\ No newline at end of file
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/public/SilverComet.html b/elemental/examples/silvercomet/src/com/google/silvercomet/public/SilverComet.html
deleted file mode 100644
index 3b3cdb7..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/public/SilverComet.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <script src="SilverComet.nocache.js"></script>
-  </head>
-  <body style="opacity:0">
-    <div id="h">
-      <div id="ha">find a runner <input type="search" id="search"></div>
-      <div id="hb">Silver Comet Half Marathon &ndash; Oct 30, 2010</div>
-    </div>
-    <div id="r">
-    </div>
-    <div id="c"></div>
-    <div id="f"></div>
-  </body>
-</html>
-
diff --git a/elemental/examples/silvercomet/src/com/google/silvercomet/public/results.json b/elemental/examples/silvercomet/src/com/google/silvercomet/public/results.json
deleted file mode 100644
index 8723dcc..0000000
--- a/elemental/examples/silvercomet/src/com/google/silvercomet/public/results.json
+++ /dev/null
@@ -1,18735 +0,0 @@
-[
-  [
-    1, 
-    "KEVIN CLARY", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    337, 
-    4090, 
-    313, 
-    4088
-  ], 
-  [
-    2, 
-    "TIM PRICHARD", 
-    39, 
-    "M", 
-    "DECATUR GA", 
-    1470, 
-    4665, 
-    357, 
-    4662
-  ], 
-  [
-    3, 
-    "CHRIS SMITH", 
-    32, 
-    "M", 
-    "ATLANTA GA", 
-    1704, 
-    4687, 
-    358, 
-    4685
-  ], 
-  [
-    4, 
-    "DAVID CATER", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    299, 
-    4694, 
-    359, 
-    4692
-  ], 
-  [
-    5, 
-    "JUSTIN TUCKER", 
-    25, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    1863, 
-    4726, 
-    361, 
-    4723
-  ], 
-  [
-    6, 
-    "JACK WESTRICK", 
-    40, 
-    "M", 
-    "DUNWOODY GA", 
-    1954, 
-    4739, 
-    362, 
-    4736
-  ], 
-  [
-    7, 
-    "KEN YOUNGERS", 
-    54, 
-    "M", 
-    "DECATUR GA", 
-    2016, 
-    4795, 
-    366, 
-    4791
-  ], 
-  [
-    8, 
-    "BRITTNEY MENSEN", 
-    28, 
-    "F", 
-    "WINSTON GA", 
-    1255, 
-    4846, 
-    370, 
-    4843
-  ], 
-  [
-    9, 
-    "RAOUL NOWITZ", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    1356, 
-    4971, 
-    380, 
-    4966
-  ], 
-  [
-    10, 
-    "DANIEL SEO", 
-    28, 
-    "M", 
-    "DECATUR GA", 
-    1640, 
-    4986, 
-    381, 
-    4983
-  ], 
-  [
-    11, 
-    "IAN SMITH", 
-    22, 
-    "M", 
-    "MARIETTA GA", 
-    1707, 
-    5064, 
-    387, 
-    5057
-  ], 
-  [
-    12, 
-    "TODD KENNEDY", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    989, 
-    5071, 
-    388, 
-    5065
-  ], 
-  [
-    13, 
-    "EVAN GLUECK", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    700, 
-    5142, 
-    393, 
-    5139
-  ], 
-  [
-    14, 
-    "JOHN ALSOBROOK", 
-    40, 
-    "M", 
-    "SUGAR HILL GA", 
-    38, 
-    5158, 
-    394, 
-    5156
-  ], 
-  [
-    15, 
-    "JEFF CHAMBRELLO", 
-    51, 
-    "M", 
-    "MARIETTA GA", 
-    2034, 
-    5168, 
-    395, 
-    5164
-  ], 
-  [
-    16, 
-    "TOREY MCCORMICK", 
-    36, 
-    "M", 
-    "MCDONOUGH GA", 
-    1201, 
-    5177, 
-    396, 
-    5172
-  ], 
-  [
-    17, 
-    "MIKE WIEN", 
-    59, 
-    "M", 
-    "ATLANTA", 
-    2146, 
-    5184, 
-    396, 
-    5181
-  ], 
-  [
-    18, 
-    "BRAD SUMNER", 
-    40, 
-    "M", 
-    "CANTON GA", 
-    1787, 
-    5186, 
-    396, 
-    5182
-  ], 
-  [
-    19, 
-    "RAYMOND ROSS", 
-    49, 
-    "M", 
-    "ROSEWELL GA", 
-    1563, 
-    5222, 
-    399, 
-    5218
-  ], 
-  [
-    20, 
-    "ROBERT SCHNITTMAN", 
-    23, 
-    "M", 
-    "ATLANTA GA", 
-    1614, 
-    5236, 
-    400, 
-    5233
-  ], 
-  [
-    21, 
-    "CHAD DANIEL", 
-    32, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    436, 
-    5245, 
-    401, 
-    5242
-  ], 
-  [
-    22, 
-    "KIMBERLY KREMER", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    1025, 
-    5251, 
-    401, 
-    5248
-  ], 
-  [
-    23, 
-    "DAVID REHM", 
-    48, 
-    "M", 
-    "FAYETTEVILLE GA", 
-    1508, 
-    5263, 
-    402, 
-    5260
-  ], 
-  [
-    24, 
-    "DIRK REAUME", 
-    53, 
-    "M", 
-    "GAINESVILLE GA", 
-    1498, 
-    5269, 
-    403, 
-    5264
-  ], 
-  [
-    25, 
-    "MARK MCDUFFIE", 
-    40, 
-    "M", 
-    "BUFORD GA", 
-    1213, 
-    5272, 
-    403, 
-    5264
-  ], 
-  [
-    26, 
-    "JOHN KELSCH", 
-    39, 
-    "M", 
-    "MARIETTA GA", 
-    985, 
-    5281, 
-    404, 
-    5277
-  ], 
-  [
-    27, 
-    "NICK WESTBROOK", 
-    30, 
-    "M", 
-    "MCDONOUGH GA", 
-    1952, 
-    5284, 
-    404, 
-    5279
-  ], 
-  [
-    28, 
-    "DANNY WESTHEIMER", 
-    45, 
-    "M", 
-    "ATLANTA GA", 
-    1953, 
-    5288, 
-    404, 
-    5283
-  ], 
-  [
-    29, 
-    "JON CHALLY", 
-    31, 
-    "M", 
-    "SMYRNA GA", 
-    309, 
-    5300, 
-    405, 
-    5290
-  ], 
-  [
-    30, 
-    "JARED LEE", 
-    31, 
-    "M", 
-    "ATHENS GA", 
-    1079, 
-    5307, 
-    406, 
-    5303
-  ], 
-  [
-    31, 
-    "RYAN MCCREADY", 
-    30, 
-    "M", 
-    "OXFORD MS", 
-    1204, 
-    5314, 
-    406, 
-    5305
-  ], 
-  [
-    32, 
-    "GRANT KENDALL", 
-    24, 
-    "M", 
-    "ATLANTA GA", 
-    987, 
-    5320, 
-    407, 
-    5314
-  ], 
-  [
-    33, 
-    "SEAN DAVIS", 
-    39, 
-    "M", 
-    "MCDONOUGH GA", 
-    455, 
-    5323, 
-    407, 
-    5318
-  ], 
-  [
-    34, 
-    "KATE BRUN", 
-    24, 
-    "F", 
-    "KENNESAW GA", 
-    224, 
-    5325, 
-    407, 
-    5322
-  ], 
-  [
-    35, 
-    "NICK SMYTHE", 
-    30, 
-    "M", 
-    "SMYRNA GA", 
-    1719, 
-    5399, 
-    413, 
-    5395
-  ], 
-  [
-    36, 
-    "AMYN SOLDIER", 
-    23, 
-    "M", 
-    "DULUTH GA", 
-    1723, 
-    5403, 
-    413, 
-    5395
-  ], 
-  [
-    37, 
-    "MATT CAMPBELL", 
-    36, 
-    "M", 
-    "ATLANTA GA", 
-    277, 
-    5404, 
-    413, 
-    5400
-  ], 
-  [
-    38, 
-    "DAN SPOHRER", 
-    38, 
-    "M", 
-    "ALPHARETTA GA", 
-    1740, 
-    5405, 
-    413, 
-    5397
-  ], 
-  [
-    39, 
-    "BEN MCLAIN", 
-    35, 
-    "M", 
-    "CONYERS GA", 
-    1229, 
-    5405, 
-    413, 
-    5401
-  ], 
-  [
-    40, 
-    "RAY ALLEN", 
-    39, 
-    "M", 
-    "ROSWELL GA", 
-    35, 
-    5409, 
-    413, 
-    5395
-  ], 
-  [
-    41, 
-    "JACKSON ESODA", 
-    20, 
-    "M", 
-    "MARIETTA GA", 
-    577, 
-    5413, 
-    414, 
-    5410
-  ], 
-  [
-    42, 
-    "LAURA GOLD", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    702, 
-    5427, 
-    415, 
-    5423
-  ], 
-  [
-    43, 
-    "TODD KIEFFER", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    994, 
-    5430, 
-    415, 
-    5425
-  ], 
-  [
-    44, 
-    "MATT HACKETT", 
-    37, 
-    "M", 
-    "WOODSTOCK GA", 
-    750, 
-    5433, 
-    415, 
-    5409
-  ], 
-  [
-    45, 
-    "DUANE NOVOTNI", 
-    31, 
-    "M", 
-    "FAIRFAX VA", 
-    1355, 
-    5455, 
-    417, 
-    5451
-  ], 
-  [
-    46, 
-    "CLAUDE GAUTHIER", 
-    45, 
-    "M", 
-    "DECATUR GA", 
-    677, 
-    5475, 
-    418, 
-    5454
-  ], 
-  [
-    47, 
-    "WENDELL BREWTON", 
-    34, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    204, 
-    5483, 
-    419, 
-    5476
-  ], 
-  [
-    48, 
-    "ORLANDO DANIELS", 
-    46, 
-    "M", 
-    "COLLEGE PARK GA", 
-    2038, 
-    5484, 
-    419, 
-    5480
-  ], 
-  [
-    49, 
-    "PATRICIA COPPEL", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    862, 
-    5486, 
-    419, 
-    5482
-  ], 
-  [
-    50, 
-    "HARRY EVANS", 
-    48, 
-    "M", 
-    "ATLANTA GA", 
-    585, 
-    5498, 
-    420, 
-    5494
-  ], 
-  [
-    51, 
-    "PHILLIP FINLEY", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    601, 
-    5505, 
-    421, 
-    5500
-  ], 
-  [
-    52, 
-    "HEIDI SPAETH", 
-    39, 
-    "F", 
-    "CANTON GA", 
-    1727, 
-    5528, 
-    422, 
-    5524
-  ], 
-  [
-    53, 
-    "REHAN HAQUE", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    781, 
-    5535, 
-    423, 
-    5530
-  ], 
-  [
-    54, 
-    "MICHEL ODERMATT", 
-    49, 
-    "M", 
-    "SMYRNA GA", 
-    1364, 
-    5567, 
-    425, 
-    5563
-  ], 
-  [
-    55, 
-    "THOMAS PLATT", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    1446, 
-    5577, 
-    426, 
-    5566
-  ], 
-  [
-    56, 
-    "RAY DEMELFI", 
-    28, 
-    "M", 
-    "ATLANTA GA", 
-    474, 
-    5578, 
-    426, 
-    5570
-  ], 
-  [
-    57, 
-    "ROBERT TRUCKENMILLER", 
-    35, 
-    "M", 
-    "ACWORTH GA", 
-    1857, 
-    5579, 
-    426, 
-    5570
-  ], 
-  [
-    58, 
-    "MITCHELL BUTLER", 
-    46, 
-    "M", 
-    "FAYETTEVILLE GA", 
-    256, 
-    5583, 
-    427, 
-    5577
-  ], 
-  [
-    59, 
-    "LAURIE WHARTON", 
-    44, 
-    "F", 
-    "MARIETTA GA", 
-    1955, 
-    5585, 
-    427, 
-    5582
-  ], 
-  [
-    60, 
-    "ERIC LAMPHIER", 
-    36, 
-    "M", 
-    "MABLETON GA", 
-    1052, 
-    5590, 
-    427, 
-    5585
-  ], 
-  [
-    61, 
-    "JACOB BARTON", 
-    32, 
-    "M", 
-    "COLUMBUS GA", 
-    116, 
-    5595, 
-    428, 
-    5591
-  ], 
-  [
-    62, 
-    "HUMBERTO BENEDETTO", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    140, 
-    5595, 
-    428, 
-    5591
-  ], 
-  [
-    63, 
-    "MICHAEL WYSONG", 
-    48, 
-    "M", 
-    "ALPHARETTA GA", 
-    2013, 
-    5598, 
-    428, 
-    5593
-  ], 
-  [
-    64, 
-    "JEFF BREWER", 
-    42, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    203, 
-    5599, 
-    428, 
-    -1
-  ], 
-  [
-    65, 
-    "TAD SCEPANIAK", 
-    36, 
-    "M", 
-    "WOODSTOCK GA", 
-    1601, 
-    5603, 
-    428, 
-    5597
-  ], 
-  [
-    66, 
-    "CHRIS KOJALI", 
-    42, 
-    "M", 
-    "FAYETTEVILLE GA", 
-    1016, 
-    5603, 
-    428, 
-    5596
-  ], 
-  [
-    67, 
-    "DANIEL DELAMATER", 
-    38, 
-    "M", 
-    "ATHENS GA", 
-    469, 
-    5605, 
-    428, 
-    5602
-  ], 
-  [
-    68, 
-    "NAVEEN RAMACHANDRAPPA", 
-    28, 
-    "M", 
-    "ATLANTA GA", 
-    1489, 
-    5610, 
-    429, 
-    5603
-  ], 
-  [
-    69, 
-    "GREG MORRIS", 
-    36, 
-    "M", 
-    "BUFORD GA", 
-    1315, 
-    5620, 
-    429, 
-    5612
-  ], 
-  [
-    70, 
-    "BRIAN FRANK", 
-    42, 
-    "M", 
-    "ATLANTA GA", 
-    630, 
-    5621, 
-    430, 
-    5617
-  ], 
-  [
-    71, 
-    "JIM PARKER", 
-    51, 
-    "M", 
-    "CUMMING GA", 
-    1393, 
-    5623, 
-    430, 
-    5616
-  ], 
-  [
-    72, 
-    "DIRK MAISEL", 
-    41, 
-    "M", 
-    "CUMMING GA", 
-    1155, 
-    5623, 
-    430, 
-    5613
-  ], 
-  [
-    73, 
-    "RON TEED", 
-    41, 
-    "M", 
-    "ATLANTA GA", 
-    1814, 
-    5624, 
-    430, 
-    5617
-  ], 
-  [
-    74, 
-    "DEAN SHAW", 
-    45, 
-    "M", 
-    "KENNESAW GA", 
-    1658, 
-    5626, 
-    430, 
-    5623
-  ], 
-  [
-    75, 
-    "JOSHUA STEPHENS", 
-    21, 
-    "M", 
-    "MARIETTA GA", 
-    1762, 
-    5628, 
-    430, 
-    5625
-  ], 
-  [
-    76, 
-    "MICHAEL FIELDER", 
-    33, 
-    "M", 
-    "SMYRNA GA", 
-    598, 
-    5631, 
-    430, 
-    5620
-  ], 
-  [
-    77, 
-    "BRIAN KAUFMANN", 
-    50, 
-    "M", 
-    "MARIETTA GA", 
-    972, 
-    5635, 
-    431, 
-    5622
-  ], 
-  [
-    78, 
-    "TONY DICKS", 
-    36, 
-    "M", 
-    "WOODSTOCK GA", 
-    489, 
-    5673, 
-    434, 
-    5665
-  ], 
-  [
-    79, 
-    "JUSTIN BAKER", 
-    37, 
-    "M", 
-    "ATLANTA GA", 
-    82, 
-    5680, 
-    434, 
-    5675
-  ], 
-  [
-    80, 
-    "TAMMI KOLE", 
-    37, 
-    "F", 
-    "JOHNS CREEK GA", 
-    1019, 
-    5683, 
-    434, 
-    5678
-  ], 
-  [
-    81, 
-    "MIKE ERNSTES", 
-    52, 
-    "M", 
-    "MARIETTA GA", 
-    575, 
-    5704, 
-    436, 
-    5698
-  ], 
-  [
-    82, 
-    "DENNIS SITZMANN", 
-    44, 
-    "M", 
-    "MADISON GA", 
-    1691, 
-    5708, 
-    436, 
-    5701
-  ], 
-  [
-    83, 
-    "ANDREW SHANNON", 
-    23, 
-    "M", 
-    "ATLANTA GA", 
-    1651, 
-    5709, 
-    436, 
-    5704
-  ], 
-  [
-    84, 
-    "MATTHEW PORTER", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    1458, 
-    5716, 
-    437, 
-    5681
-  ], 
-  [
-    85, 
-    "AARON DELAIGLE", 
-    24, 
-    "M", 
-    "OAKWOOD GA", 
-    467, 
-    5718, 
-    437, 
-    5712
-  ], 
-  [
-    86, 
-    "GRIFFEN ELLINGTON", 
-    39, 
-    "M", 
-    "CLARKSTON GA", 
-    563, 
-    5726, 
-    438, 
-    5722
-  ], 
-  [
-    87, 
-    "DEREK SCHILS", 
-    41, 
-    "M", 
-    "DALLAS GA", 
-    1604, 
-    5727, 
-    438, 
-    5713
-  ], 
-  [
-    88, 
-    "YVONNE BEDELL", 
-    33, 
-    "F", 
-    "DUNWOODY GA", 
-    136, 
-    5729, 
-    438, 
-    5721
-  ], 
-  [
-    89, 
-    "TIM WRIGHT", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    2009, 
-    5735, 
-    438, 
-    5729
-  ], 
-  [
-    90, 
-    "JASON HUYCK", 
-    35, 
-    "M", 
-    "CANTON GA", 
-    898, 
-    5738, 
-    438, 
-    5729
-  ], 
-  [
-    91, 
-    "BYRNE LAMB", 
-    42, 
-    "M", 
-    "ALPHARETTA GA", 
-    1050, 
-    5748, 
-    439, 
-    5692
-  ], 
-  [
-    92, 
-    "JOHN VOLTZ", 
-    38, 
-    "M", 
-    "LOGANVILLE GA", 
-    1894, 
-    5751, 
-    439, 
-    5745
-  ], 
-  [
-    93, 
-    "WES DUKE", 
-    43, 
-    "M", 
-    "ROSWELL GA", 
-    529, 
-    5755, 
-    440, 
-    5751
-  ], 
-  [
-    94, 
-    "MATTHEW THIBAULT", 
-    22, 
-    "M", 
-    "SAVAGE MN", 
-    1819, 
-    5759, 
-    440, 
-    5751
-  ], 
-  [
-    95, 
-    "SANDRA RIGGIN", 
-    49, 
-    "F", 
-    "SAUTEE GA", 
-    1529, 
-    5761, 
-    440, 
-    5759
-  ], 
-  [
-    96, 
-    "KEN ALMON", 
-    49, 
-    "M", 
-    "NORCROSS GA", 
-    36, 
-    5777, 
-    441, 
-    5773
-  ], 
-  [
-    97, 
-    "DAN MCCORMICK", 
-    51, 
-    "M", 
-    "MARIETTA GA", 
-    1200, 
-    5796, 
-    443, 
-    5788
-  ], 
-  [
-    98, 
-    "RYAN LEWIS", 
-    34, 
-    "M", 
-    "NEW FAIRFIELD CT", 
-    1094, 
-    5803, 
-    443, 
-    5796
-  ], 
-  [
-    99, 
-    "JASON TURNAGE", 
-    34, 
-    "M", 
-    "CANTON GA", 
-    1868, 
-    5805, 
-    444, 
-    5778
-  ], 
-  [
-    100, 
-    "KATIE HEINTZELMAN", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    825, 
-    5806, 
-    444, 
-    5798
-  ], 
-  [
-    101, 
-    "TOM BRYSON", 
-    49, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    231, 
-    5809, 
-    444, 
-    5790
-  ], 
-  [
-    102, 
-    "TARA SARGENT", 
-    42, 
-    "F", 
-    "DALLAS GA", 
-    1595, 
-    5812, 
-    444, 
-    5805
-  ], 
-  [
-    103, 
-    "CHRIS RECKNOR", 
-    45, 
-    "M", 
-    "GAINESVILLE GA", 
-    1500, 
-    5816, 
-    444, 
-    5810
-  ], 
-  [
-    104, 
-    "MICHAEL TAYLOR HENDRIXSON", 
-    18, 
-    "M", 
-    "MARIETTA GA", 
-    828, 
-    5818, 
-    445, 
-    5780
-  ], 
-  [
-    105, 
-    "HEATH WOLFE", 
-    31, 
-    "M", 
-    "MARIETTA GA", 
-    1993, 
-    5820, 
-    445, 
-    5811
-  ], 
-  [
-    106, 
-    "MARC DAHLQUIST", 
-    28, 
-    "M", 
-    "CUMMING GA", 
-    429, 
-    5831, 
-    446, 
-    5818
-  ], 
-  [
-    107, 
-    "MIKE HENDRIXSON", 
-    47, 
-    "M", 
-    "MARIETTA GA", 
-    829, 
-    5845, 
-    447, 
-    5807
-  ], 
-  [
-    108, 
-    "PAUL SHINGLER", 
-    36, 
-    "M", 
-    "ATLANTA GA", 
-    1670, 
-    5847, 
-    447, 
-    5841
-  ], 
-  [
-    109, 
-    "MARIUS HECHTER", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    823, 
-    5850, 
-    447, 
-    -1
-  ], 
-  [
-    110, 
-    "MELANIE COX", 
-    40, 
-    "F", 
-    "KNOXVILLE TN", 
-    398, 
-    5855, 
-    447, 
-    5849
-  ], 
-  [
-    111, 
-    "LINDSEY AMERSON", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    46, 
-    5874, 
-    449, 
-    5863
-  ], 
-  [
-    112, 
-    "JAMES MOON", 
-    44, 
-    "M", 
-    "ROSWELL GA", 
-    1300, 
-    5876, 
-    449, 
-    5865
-  ], 
-  [
-    113, 
-    "ASHLEY KEETON", 
-    33, 
-    "F", 
-    "SUWANEE GA", 
-    979, 
-    5880, 
-    449, 
-    5875
-  ], 
-  [
-    114, 
-    "JASON PALMER", 
-    25, 
-    "M", 
-    "ATLANTA GA", 
-    1389, 
-    5882, 
-    449, 
-    5877
-  ], 
-  [
-    115, 
-    "JEFF DROBNEY", 
-    44, 
-    "M", 
-    "ACWORTH GA", 
-    524, 
-    5898, 
-    451, 
-    5885
-  ], 
-  [
-    116, 
-    "MICHAEL BABCOCK", 
-    37, 
-    "M", 
-    "DECATUR GA", 
-    75, 
-    5899, 
-    451, 
-    5889
-  ], 
-  [
-    117, 
-    "DAWN HULTSTROM", 
-    43, 
-    "F", 
-    "WOODSTOCK GA", 
-    883, 
-    5904, 
-    451, 
-    5899
-  ], 
-  [
-    118, 
-    "AMY MAYER", 
-    37, 
-    "F", 
-    "DECATUR GA", 
-    1190, 
-    5904, 
-    451, 
-    5895
-  ], 
-  [
-    119, 
-    "JAMES BYRNES", 
-    54, 
-    "M", 
-    "HOSCHTON GA", 
-    265, 
-    5917, 
-    452, 
-    5911
-  ], 
-  [
-    120, 
-    "JAMES STANLEY", 
-    43, 
-    "M", 
-    "ACWORTH GA", 
-    1752, 
-    5919, 
-    452, 
-    5907
-  ], 
-  [
-    121, 
-    "FRED SOLLER", 
-    36, 
-    "M", 
-    "ALPHARETTA GA", 
-    2029, 
-    5920, 
-    452, 
-    5912
-  ], 
-  [
-    122, 
-    "KEVIN O'SULLIVAN", 
-    42, 
-    "M", 
-    "ATLANTA GA", 
-    1360, 
-    5921, 
-    452, 
-    5914
-  ], 
-  [
-    123, 
-    "ASHLEY JOHNSON", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    939, 
-    5921, 
-    452, 
-    5912
-  ], 
-  [
-    124, 
-    "STEVEN PHELPS", 
-    35, 
-    "M", 
-    "MARIETTA GA", 
-    1429, 
-    5936, 
-    454, 
-    5928
-  ], 
-  [
-    125, 
-    "SAMANTHA HACKETT", 
-    34, 
-    "F", 
-    "WOODSTOCK GA", 
-    751, 
-    5940, 
-    454, 
-    5926
-  ], 
-  [
-    126, 
-    "TIM GILLMAN", 
-    53, 
-    "M", 
-    "ROSWELL GA", 
-    695, 
-    5940, 
-    454, 
-    5932
-  ], 
-  [
-    127, 
-    "BRIAN WARREN", 
-    34, 
-    "M", 
-    "MARIETTA GA", 
-    1923, 
-    5945, 
-    454, 
-    5934
-  ], 
-  [
-    128, 
-    "STEVE GLEICHWEIT", 
-    41, 
-    "M", 
-    "MARIETTA GA", 
-    698, 
-    5957, 
-    455, 
-    5950
-  ], 
-  [
-    129, 
-    "SEAN FRICK", 
-    34, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    643, 
-    5958, 
-    455, 
-    5927
-  ], 
-  [
-    130, 
-    "TOM LOACH", 
-    44, 
-    "M", 
-    "NORCROSS GA", 
-    1112, 
-    5972, 
-    456, 
-    5961
-  ], 
-  [
-    131, 
-    "KRISTA OSBORNE", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1377, 
-    5982, 
-    457, 
-    5972
-  ], 
-  [
-    132, 
-    "CASEY KEETER", 
-    34, 
-    "F", 
-    "MARIETTA GA", 
-    978, 
-    5983, 
-    457, 
-    5980
-  ], 
-  [
-    133, 
-    "DAVID HOGAN", 
-    39, 
-    "M", 
-    "CUMMING GA", 
-    850, 
-    5987, 
-    457, 
-    5976
-  ], 
-  [
-    134, 
-    "PAUL TAYLOR", 
-    52, 
-    "M", 
-    "ATLANTA GA", 
-    1811, 
-    5989, 
-    458, 
-    5972
-  ], 
-  [
-    135, 
-    "BOBBY SMITH", 
-    57, 
-    "M", 
-    "SOUTH PITTSBURG TN", 
-    1702, 
-    5992, 
-    458, 
-    5988
-  ], 
-  [
-    136, 
-    "JORDAN EISON", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    562, 
-    5996, 
-    458, 
-    5993
-  ], 
-  [
-    137, 
-    "R BEAVER", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    134, 
-    5998, 
-    458, 
-    5984
-  ], 
-  [
-    138, 
-    "BETH MCCURDY", 
-    41, 
-    "F", 
-    "DACULA GA", 
-    1206, 
-    6005, 
-    459, 
-    5996
-  ], 
-  [
-    139, 
-    "BARRY SNYDER", 
-    39, 
-    "M", 
-    "TUCKER GA", 
-    1721, 
-    6015, 
-    460, 
-    6008
-  ], 
-  [
-    140, 
-    "ENRIQUE (RICK) ALVAREZ", 
-    39, 
-    "M", 
-    "CHAMBLEE GA", 
-    42, 
-    6019, 
-    460, 
-    6005
-  ], 
-  [
-    141, 
-    "ANTHONY HARVEY", 
-    40, 
-    "M", 
-    "ALPHARETTA GA", 
-    805, 
-    6022, 
-    460, 
-    6010
-  ], 
-  [
-    142, 
-    "STEPHEN JANIS", 
-    41, 
-    "M", 
-    "DUNWOODY GA", 
-    920, 
-    6032, 
-    461, 
-    6026
-  ], 
-  [
-    143, 
-    "MARK SINGLETARY", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    1690, 
-    6037, 
-    461, 
-    6030
-  ], 
-  [
-    144, 
-    "RUSSELL DALBA", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    431, 
-    6040, 
-    462, 
-    6031
-  ], 
-  [
-    145, 
-    "KEELAN DIEHL", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    490, 
-    6043, 
-    462, 
-    6008
-  ], 
-  [
-    146, 
-    "CHAD ADAMS", 
-    39, 
-    "M", 
-    "DECATUR GA", 
-    8, 
-    6046, 
-    462, 
-    6034
-  ], 
-  [
-    147, 
-    "SARAH HALBACH", 
-    33, 
-    "F", 
-    "MABLETON GA", 
-    756, 
-    6051, 
-    462, 
-    6038
-  ], 
-  [
-    148, 
-    "STEPHEN COCKERHAM", 
-    49, 
-    "M", 
-    "BLAIRSVILLE GA", 
-    351, 
-    6056, 
-    463, 
-    6048
-  ], 
-  [
-    149, 
-    "MARK WIMAN", 
-    53, 
-    "M", 
-    "ACWORTH GA", 
-    1986, 
-    6056, 
-    463, 
-    6038
-  ], 
-  [
-    150, 
-    "CURTISS SAMUEL", 
-    49, 
-    "M", 
-    "MARIETTA GA", 
-    1587, 
-    6056, 
-    463, 
-    6050
-  ], 
-  [
-    151, 
-    "PAUL LIPSEY", 
-    51, 
-    "M", 
-    "NEWNAN GA", 
-    1107, 
-    6057, 
-    463, 
-    6045
-  ], 
-  [
-    152, 
-    "JILL LOACH", 
-    45, 
-    "F", 
-    "NORCROSS GA", 
-    1111, 
-    6064, 
-    463, 
-    6054
-  ], 
-  [
-    153, 
-    "ROBERT OCHS", 
-    34, 
-    "M", 
-    "DACULA GA", 
-    1362, 
-    6068, 
-    464, 
-    6053
-  ], 
-  [
-    154, 
-    "JIM WALTERS", 
-    39, 
-    "M", 
-    "MABLETON GA", 
-    1910, 
-    6071, 
-    464, 
-    6064
-  ], 
-  [
-    155, 
-    "BOB DEBUSK", 
-    25, 
-    "M", 
-    "CARTERSVILLE GA", 
-    465, 
-    6072, 
-    464, 
-    6055
-  ], 
-  [
-    156, 
-    "BARRY MEREDITH JR", 
-    43, 
-    "M", 
-    "ATLANTA GA", 
-    1256, 
-    6073, 
-    464, 
-    6057
-  ], 
-  [
-    157, 
-    "BUDDY RABIN", 
-    58, 
-    "M", 
-    "MARIETTA GA", 
-    1479, 
-    6078, 
-    464, 
-    6066
-  ], 
-  [
-    158, 
-    "BRIAN GRAY", 
-    44, 
-    "M", 
-    "NORCROSS GA", 
-    722, 
-    6085, 
-    465, 
-    6070
-  ], 
-  [
-    159, 
-    "RACHELLE KURAMOTO", 
-    36, 
-    "F", 
-    "NORCROSS GA", 
-    1041, 
-    6086, 
-    465, 
-    6069
-  ], 
-  [
-    160, 
-    "VINCE BARTGES", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    113, 
-    6095, 
-    466, 
-    6071
-  ], 
-  [
-    161, 
-    "CHUCK CARVER", 
-    50, 
-    "M", 
-    "ATLANTA GA", 
-    293, 
-    6095, 
-    466, 
-    6079
-  ], 
-  [
-    162, 
-    "BRANDON KUNZ", 
-    39, 
-    "M", 
-    "CUMMING GA", 
-    1040, 
-    6097, 
-    466, 
-    6086
-  ], 
-  [
-    163, 
-    "BILL JONES", 
-    52, 
-    "M", 
-    "ATLANTA GA", 
-    953, 
-    6097, 
-    466, 
-    6085
-  ], 
-  [
-    164, 
-    "RANDY LESTER", 
-    99, 
-    "M", 
-    "ACWORTH GA", 
-    1086, 
-    6098, 
-    466, 
-    6075
-  ], 
-  [
-    165, 
-    "ELIZABETH BROWN", 
-    45, 
-    "F", 
-    "DUNWOODY GA", 
-    217, 
-    6099, 
-    466, 
-    6096
-  ], 
-  [
-    166, 
-    "LARRY GORDON", 
-    58, 
-    "M", 
-    "DUNWOODY GA", 
-    711, 
-    6101, 
-    466, 
-    6095
-  ], 
-  [
-    167, 
-    "PAULA MUSONE", 
-    37, 
-    "F", 
-    "HOSCHTON GA", 
-    1327, 
-    6110, 
-    467, 
-    6102
-  ], 
-  [
-    168, 
-    "MARY HOWIE", 
-    40, 
-    "F", 
-    "DUNWOODY GA", 
-    876, 
-    6114, 
-    467, 
-    6110
-  ], 
-  [
-    169, 
-    "MOLLY HART", 
-    36, 
-    "F", 
-    "ALPHARETTA GA", 
-    800, 
-    6118, 
-    467, 
-    6107
-  ], 
-  [
-    170, 
-    "RONALD BYRNE", 
-    40, 
-    "M", 
-    "CUMMING GA", 
-    264, 
-    6126, 
-    468, 
-    6115
-  ], 
-  [
-    171, 
-    "BARRETT MERRILL", 
-    16, 
-    "M", 
-    "ATLANTA GA", 
-    1259, 
-    6127, 
-    468, 
-    6115
-  ], 
-  [
-    172, 
-    "JOE MCCOY", 
-    29, 
-    "M", 
-    "SMYRNA GA", 
-    1202, 
-    6132, 
-    469, 
-    6123
-  ], 
-  [
-    173, 
-    "SCOTT BOWMAN", 
-    43, 
-    "M", 
-    "ACWORTH GA", 
-    184, 
-    6137, 
-    469, 
-    6129
-  ], 
-  [
-    174, 
-    "CHARLIE PEEBLES", 
-    41, 
-    "M", 
-    "ALPHARETTA GA", 
-    1411, 
-    6138, 
-    469, 
-    6126
-  ], 
-  [
-    175, 
-    "WILLIAM FLETCHER", 
-    31, 
-    "M", 
-    "SMYRNA GA", 
-    613, 
-    6138, 
-    469, 
-    6103
-  ], 
-  [
-    176, 
-    "KIMARI WILSON", 
-    34, 
-    "F", 
-    "MABLETON GA", 
-    1979, 
-    6140, 
-    469, 
-    6128
-  ], 
-  [
-    177, 
-    "CHAD AKINS", 
-    40, 
-    "M", 
-    "CUMMING GA", 
-    21, 
-    6160, 
-    471, 
-    6144
-  ], 
-  [
-    178, 
-    "JENNY HOULROYD", 
-    29, 
-    "F", 
-    "MAREITTA GA", 
-    869, 
-    6163, 
-    471, 
-    6153
-  ], 
-  [
-    179, 
-    "MARK BLITZ", 
-    49, 
-    "M", 
-    "CLEARWATER FL", 
-    160, 
-    6166, 
-    471, 
-    6157
-  ], 
-  [
-    180, 
-    "KYLE PHILLIPPI", 
-    35, 
-    "M", 
-    "ROSWELL GA", 
-    1432, 
-    6167, 
-    471, 
-    6153
-  ], 
-  [
-    181, 
-    "ZACK NORDEN", 
-    19, 
-    "M", 
-    "ACWORTH GA", 
-    1351, 
-    6167, 
-    471, 
-    6163
-  ], 
-  [
-    182, 
-    "TRENT LLOYD", 
-    24, 
-    "M", 
-    "DECATUR GA", 
-    1110, 
-    6169, 
-    471, 
-    6159
-  ], 
-  [
-    183, 
-    "ANDREW DROTLEFF", 
-    48, 
-    "M", 
-    "ROSWELL GA", 
-    525, 
-    6169, 
-    471, 
-    6149
-  ], 
-  [
-    184, 
-    "JIMMY DALTON", 
-    52, 
-    "M", 
-    "ATLANTA GA", 
-    433, 
-    6175, 
-    472, 
-    6165
-  ], 
-  [
-    185, 
-    "ERIK DOWDEN", 
-    31, 
-    "M", 
-    "DECATUR GA", 
-    513, 
-    6184, 
-    472, 
-    6158
-  ], 
-  [
-    186, 
-    "JOHN STACK", 
-    31, 
-    "M", 
-    "MACON GA", 
-    1746, 
-    6195, 
-    473, 
-    6189
-  ], 
-  [
-    187, 
-    "JONATHAN MACDONALD", 
-    35, 
-    "M", 
-    "CUMMING GA", 
-    1142, 
-    6198, 
-    474, 
-    6178
-  ], 
-  [
-    188, 
-    "KENNETH KONDRITZER", 
-    59, 
-    "M", 
-    "ATLANTA GA", 
-    1020, 
-    6201, 
-    474, 
-    6198
-  ], 
-  [
-    189, 
-    "KAREN LUI", 
-    55, 
-    "F", 
-    "GAINESVILLE GA", 
-    1134, 
-    6204, 
-    474, 
-    6196
-  ], 
-  [
-    190, 
-    "DAVID FOURNIER", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    628, 
-    6204, 
-    474, 
-    6197
-  ], 
-  [
-    191, 
-    "BJ MANN", 
-    37, 
-    "M", 
-    "ROSWELL GA", 
-    1165, 
-    6206, 
-    474, 
-    6186
-  ], 
-  [
-    192, 
-    "KEENAN SHARPE", 
-    42, 
-    "M", 
-    "ALPHARETTA GA", 
-    1653, 
-    6221, 
-    475, 
-    6216
-  ], 
-  [
-    193, 
-    "KENNETH TURNER", 
-    42, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1871, 
-    6226, 
-    476, 
-    6216
-  ], 
-  [
-    194, 
-    "JASON WHITING", 
-    30, 
-    "M", 
-    "ATHENS GA", 
-    1962, 
-    6228, 
-    476, 
-    6221
-  ], 
-  [
-    195, 
-    "ROBERT ANTHONY", 
-    46, 
-    "M", 
-    "SMYRNA GA", 
-    59, 
-    6232, 
-    476, 
-    6216
-  ], 
-  [
-    196, 
-    "CHRISTIAN GRIFFITH", 
-    40, 
-    "M", 
-    "NORCROSS GA", 
-    740, 
-    6232, 
-    476, 
-    6205
-  ], 
-  [
-    197, 
-    "DOROTHY LINDSEY", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1103, 
-    6233, 
-    476, 
-    6225
-  ], 
-  [
-    198, 
-    "DAVID JONES", 
-    55, 
-    "M", 
-    "ATLANTA GA", 
-    956, 
-    6237, 
-    477, 
-    6231
-  ], 
-  [
-    199, 
-    "RACHEL WHITING", 
-    30, 
-    "F", 
-    "ATHENS GA", 
-    1963, 
-    6239, 
-    477, 
-    6233
-  ], 
-  [
-    200, 
-    "MORRIS ESTES", 
-    44, 
-    "M", 
-    "ALPHARETTA GA", 
-    581, 
-    6243, 
-    477, 
-    6233
-  ], 
-  [
-    201, 
-    "STEVE ALTER", 
-    43, 
-    "M", 
-    "MARIETTA GA", 
-    41, 
-    6244, 
-    477, 
-    6238
-  ], 
-  [
-    202, 
-    "ERIK MOORE", 
-    43, 
-    "M", 
-    "ROSWELL GA", 
-    1302, 
-    6246, 
-    477, 
-    6233
-  ], 
-  [
-    203, 
-    "JONATHAN RUBIN", 
-    24, 
-    "M", 
-    "ATLANTA GA", 
-    1574, 
-    6247, 
-    477, 
-    6222
-  ], 
-  [
-    204, 
-    "RAE ANN MCCLAIN", 
-    39, 
-    "F", 
-    "KENNESAW GA", 
-    1198, 
-    6250, 
-    478, 
-    6235
-  ], 
-  [
-    205, 
-    "ERIC TUCKER", 
-    38, 
-    "M", 
-    "MENLO GA", 
-    1861, 
-    6251, 
-    478, 
-    6239
-  ], 
-  [
-    206, 
-    "MATTHEW WHEATLEY", 
-    33, 
-    "M", 
-    "DECATUR GA", 
-    1957, 
-    6251, 
-    478, 
-    6218
-  ], 
-  [
-    207, 
-    "CLAY MERSMANN", 
-    19, 
-    "M", 
-    "SNELLVILLE GA", 
-    1265, 
-    6253, 
-    478, 
-    6231
-  ], 
-  [
-    208, 
-    "KELLY LEFEVERE", 
-    23, 
-    "F", 
-    "ATLANTA OR", 
-    1081, 
-    6255, 
-    478, 
-    6239
-  ], 
-  [
-    209, 
-    "RITCHE CARNEY", 
-    55, 
-    "M", 
-    "ROSWELL GA", 
-    287, 
-    6259, 
-    478, 
-    6251
-  ], 
-  [
-    210, 
-    "CHRIS EHLERS", 
-    39, 
-    "M", 
-    "MABLETON GA", 
-    560, 
-    6263, 
-    479, 
-    6248
-  ], 
-  [
-    211, 
-    "BRIAN SIMMONS", 
-    38, 
-    "M", 
-    "DALLAS GA", 
-    1681, 
-    6265, 
-    479, 
-    6251
-  ], 
-  [
-    212, 
-    "TIMOTHY MERSMANN", 
-    49, 
-    "M", 
-    "SNELLVILLE GA", 
-    1266, 
-    6265, 
-    479, 
-    6243
-  ], 
-  [
-    213, 
-    "JIM UNDERWOOD", 
-    52, 
-    "M", 
-    "MARIETTA GA", 
-    1873, 
-    6266, 
-    479, 
-    6240
-  ], 
-  [
-    214, 
-    "MIKE MCHALE", 
-    43, 
-    "M", 
-    "SMYRNA GA", 
-    1222, 
-    6267, 
-    479, 
-    6262
-  ], 
-  [
-    215, 
-    "NICOLE BENCOMO", 
-    26, 
-    "F", 
-    "HIRAM GA", 
-    139, 
-    6268, 
-    479, 
-    6256
-  ], 
-  [
-    216, 
-    "KELLI MITTRUCKER", 
-    36, 
-    "F", 
-    "WOODSTOCK GA", 
-    1294, 
-    6270, 
-    479, 
-    6259
-  ], 
-  [
-    217, 
-    "SHAWN HARDISTER", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    784, 
-    6277, 
-    480, 
-    6265
-  ], 
-  [
-    218, 
-    "KEVIN WEST", 
-    42, 
-    "M", 
-    "NORCROSS GA", 
-    1951, 
-    6279, 
-    480, 
-    6264
-  ], 
-  [
-    219, 
-    "STEPHANIE HAIGLER", 
-    34, 
-    "F", 
-    "KANNAPOLIS NC", 
-    755, 
-    6280, 
-    480, 
-    6266
-  ], 
-  [
-    220, 
-    "DONALD KNAPP", 
-    40, 
-    "M", 
-    "ALPHARETTA GA", 
-    1013, 
-    6280, 
-    480, 
-    6271
-  ], 
-  [
-    221, 
-    "VERNON SERMONS", 
-    54, 
-    "M", 
-    "MABLETON GA", 
-    1642, 
-    6281, 
-    480, 
-    6265
-  ], 
-  [
-    222, 
-    "JEFF BALLARD", 
-    37, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    87, 
-    6282, 
-    480, 
-    6270
-  ], 
-  [
-    223, 
-    "EZRA OWEN", 
-    34, 
-    "M", 
-    "KENNESAW GA", 
-    1380, 
-    6283, 
-    480, 
-    6268
-  ], 
-  [
-    224, 
-    "VERONICA ESTRADA", 
-    32, 
-    "F", 
-    "MARIETTA GA", 
-    582, 
-    6286, 
-    480, 
-    6278
-  ], 
-  [
-    225, 
-    "JULIE RECKNOR", 
-    47, 
-    "F", 
-    "GAINESVILLE GA", 
-    1501, 
-    6287, 
-    480, 
-    6281
-  ], 
-  [
-    226, 
-    "DAVID BROWN", 
-    52, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    216, 
-    6288, 
-    480, 
-    6284
-  ], 
-  [
-    227, 
-    "ARTHUR LYNN", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    1139, 
-    6291, 
-    481, 
-    6277
-  ], 
-  [
-    228, 
-    "WINDY LOO", 
-    36, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1123, 
-    6296, 
-    481, 
-    6268
-  ], 
-  [
-    229, 
-    "SERGIO TORRES", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    1849, 
-    6298, 
-    481, 
-    6286
-  ], 
-  [
-    230, 
-    "TAMARA DANIEL", 
-    32, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    438, 
-    6304, 
-    482, 
-    6296
-  ], 
-  [
-    231, 
-    "WALTER AUSTIN", 
-    39, 
-    "M", 
-    "MARIETTA GA", 
-    2033, 
-    6304, 
-    482, 
-    6286
-  ], 
-  [
-    232, 
-    "MIKE DYER", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    538, 
-    6308, 
-    482, 
-    6292
-  ], 
-  [
-    233, 
-    "DALE VANHOOSER", 
-    52, 
-    "M", 
-    "DULUTH GA", 
-    1884, 
-    6311, 
-    482, 
-    6284
-  ], 
-  [
-    234, 
-    "BRENT WYPER", 
-    41, 
-    "M", 
-    "ATLANTA GA", 
-    2012, 
-    6318, 
-    483, 
-    6301
-  ], 
-  [
-    235, 
-    "PETER ROBERTS", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    1541, 
-    6319, 
-    483, 
-    6187
-  ], 
-  [
-    236, 
-    "MIKE CHALLMAN", 
-    48, 
-    "M", 
-    "FAYETTEVILLE GA", 
-    307, 
-    6321, 
-    483, 
-    6309
-  ], 
-  [
-    237, 
-    "WILLIAM KING", 
-    41, 
-    "M", 
-    "ATLANTA GA", 
-    1003, 
-    6325, 
-    483, 
-    6320
-  ], 
-  [
-    238, 
-    "JENNIFER ROWAN", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    240, 
-    6328, 
-    484, 
-    6318
-  ], 
-  [
-    239, 
-    "JILLIAN BURNS", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    250, 
-    6329, 
-    484, 
-    6319
-  ], 
-  [
-    240, 
-    "BRIAN LUCKETT", 
-    45, 
-    "M", 
-    "ATLANTA GA", 
-    1130, 
-    6330, 
-    484, 
-    6319
-  ], 
-  [
-    241, 
-    "TODD MITCHELL", 
-    47, 
-    "M", 
-    "VANCOUVER BC", 
-    1293, 
-    6333, 
-    484, 
-    6324
-  ], 
-  [
-    242, 
-    "DAVID NEUJAHR", 
-    37, 
-    "M", 
-    "ATLANTA GA", 
-    1341, 
-    6333, 
-    484, 
-    6324
-  ], 
-  [
-    243, 
-    "JAMES SALZER", 
-    50, 
-    "M", 
-    "DECATUR GA", 
-    1584, 
-    6338, 
-    484, 
-    6328
-  ], 
-  [
-    244, 
-    "AMY COBB", 
-    35, 
-    "F", 
-    "ATLANTA GA", 
-    346, 
-    6341, 
-    484, 
-    6335
-  ], 
-  [
-    245, 
-    "RANDY STANFORD", 
-    42, 
-    "M", 
-    "MCDONOUGH GA", 
-    1751, 
-    6343, 
-    485, 
-    6332
-  ], 
-  [
-    246, 
-    "DALE WESSON", 
-    35, 
-    "M", 
-    "NEWNAN GA", 
-    1950, 
-    6343, 
-    485, 
-    6326
-  ], 
-  [
-    247, 
-    "LAWRENCE LAMMERS", 
-    47, 
-    "M", 
-    "DACULA GA", 
-    1051, 
-    6352, 
-    485, 
-    6335
-  ], 
-  [
-    248, 
-    "FRANK DEMELFI, JR.", 
-    31, 
-    "M", 
-    "WOODSTOCK GA", 
-    2022, 
-    6362, 
-    486, 
-    6354
-  ], 
-  [
-    249, 
-    "VICTOR HALL", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    766, 
-    6370, 
-    487, 
-    6316
-  ], 
-  [
-    250, 
-    "ANDY SMITH", 
-    32, 
-    "M", 
-    "ACWORTH GA", 
-    1700, 
-    6370, 
-    487, 
-    6366
-  ], 
-  [
-    251, 
-    "KATIE SCANLON", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1600, 
-    6372, 
-    487, 
-    6365
-  ], 
-  [
-    252, 
-    "AMY BARKER", 
-    36, 
-    "F", 
-    "MABLETON GA", 
-    100, 
-    6373, 
-    487, 
-    -1
-  ], 
-  [
-    253, 
-    "JOHN MCRAE", 
-    32, 
-    "M", 
-    "ALPHARETTA GA", 
-    1244, 
-    6373, 
-    487, 
-    6291
-  ], 
-  [
-    254, 
-    "TOM KELLY", 
-    52, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    984, 
-    6375, 
-    487, 
-    6365
-  ], 
-  [
-    255, 
-    "BILL BOYNES", 
-    43, 
-    "M", 
-    "ATLANTA GA", 
-    187, 
-    6376, 
-    487, 
-    6263
-  ], 
-  [
-    256, 
-    "JONATHAN MERRILL", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    1261, 
-    6379, 
-    487, 
-    6367
-  ], 
-  [
-    257, 
-    "JOHN KAYAL", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    973, 
-    6379, 
-    487, 
-    6319
-  ], 
-  [
-    258, 
-    "MATTHEW ANDERSON", 
-    25, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    53, 
-    6380, 
-    487, 
-    6366
-  ], 
-  [
-    259, 
-    "RICHARD HAMBRICK", 
-    33, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    770, 
-    6386, 
-    488, 
-    6372
-  ], 
-  [
-    260, 
-    "TIMOTHY EDWARDS", 
-    46, 
-    "M", 
-    "ALPHARETTA GA", 
-    557, 
-    6388, 
-    488, 
-    6373
-  ], 
-  [
-    261, 
-    "NICOLE HAWKINS", 
-    35, 
-    "F", 
-    "SMYRNA GA", 
-    817, 
-    6393, 
-    488, 
-    6382
-  ], 
-  [
-    262, 
-    "MAX DUMAS", 
-    44, 
-    "M", 
-    "MARIETTA GA", 
-    531, 
-    6397, 
-    489, 
-    6386
-  ], 
-  [
-    263, 
-    "TODD HENRY", 
-    39, 
-    "M", 
-    "CANTON GA", 
-    833, 
-    6405, 
-    489, 
-    6384
-  ], 
-  [
-    264, 
-    "JUAN GALARZA", 
-    45, 
-    "M", 
-    "MARIETTA GA", 
-    660, 
-    6408, 
-    490, 
-    6396
-  ], 
-  [
-    265, 
-    "JOSEPH HEINRICH", 
-    54, 
-    "M", 
-    "ATLANTA GA", 
-    824, 
-    6414, 
-    490, 
-    6397
-  ], 
-  [
-    266, 
-    "MICHAEL SMITH", 
-    42, 
-    "M", 
-    "ARNOLDSVILLE GA", 
-    1713, 
-    6418, 
-    490, 
-    6400
-  ], 
-  [
-    267, 
-    "PHILIP HARRELL", 
-    51, 
-    "M", 
-    "LILBURN GA", 
-    791, 
-    6419, 
-    490, 
-    6407
-  ], 
-  [
-    268, 
-    "CATHERINE BROWN", 
-    27, 
-    "F", 
-    "WARRENVILLE SC", 
-    214, 
-    6420, 
-    491, 
-    6397
-  ], 
-  [
-    269, 
-    "RYAN RICHARDS", 
-    24, 
-    "M", 
-    "DUNWOODY GA", 
-    1521, 
-    6423, 
-    491, 
-    6415
-  ], 
-  [
-    270, 
-    "STEVE WILSON", 
-    40, 
-    "M", 
-    "MARIETTA GA", 
-    1984, 
-    6432, 
-    491, 
-    6423
-  ], 
-  [
-    271, 
-    "NORMAN RICHARDSON", 
-    40, 
-    "M", 
-    "MABLETON GA", 
-    1522, 
-    6442, 
-    492, 
-    6431
-  ], 
-  [
-    272, 
-    "EMILIE HENRY", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    832, 
-    6445, 
-    492, 
-    6425
-  ], 
-  [
-    273, 
-    "CLINT HAWKINS", 
-    31, 
-    "M", 
-    "SMYRNA GA", 
-    815, 
-    6449, 
-    493, 
-    6439
-  ], 
-  [
-    274, 
-    "DAVID CURRY", 
-    40, 
-    "M", 
-    "MCDONOUGH GA", 
-    425, 
-    6451, 
-    493, 
-    6443
-  ], 
-  [
-    275, 
-    "JOHN CHILDS", 
-    53, 
-    "M", 
-    "ATLANTA GA", 
-    326, 
-    6456, 
-    493, 
-    6439
-  ], 
-  [
-    276, 
-    "DONOVAN HAAG", 
-    37, 
-    "M", 
-    "DACULA GA", 
-    749, 
-    6458, 
-    493, 
-    6438
-  ], 
-  [
-    277, 
-    "KAREN CUNLIFFE", 
-    52, 
-    "F", 
-    "ATLANTA GA", 
-    415, 
-    6458, 
-    493, 
-    6444
-  ], 
-  [
-    278, 
-    "JANET FITZ", 
-    53, 
-    "F", 
-    "DACULA GA", 
-    604, 
-    6459, 
-    494, 
-    6441
-  ], 
-  [
-    279, 
-    "ANDY JOHNSON", 
-    28, 
-    "M", 
-    "CARROLLTON GA", 
-    936, 
-    6462, 
-    494, 
-    6426
-  ], 
-  [
-    280, 
-    "THOMAS STREET", 
-    47, 
-    "M", 
-    "ATLANTA GA", 
-    1769, 
-    6466, 
-    494, 
-    6451
-  ], 
-  [
-    281, 
-    "PHIL HURWITZ", 
-    43, 
-    "M", 
-    "DUNWOODY GA", 
-    894, 
-    6467, 
-    494, 
-    6446
-  ], 
-  [
-    282, 
-    "ELIZABETH BARTGES", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    112, 
-    6468, 
-    494, 
-    6445
-  ], 
-  [
-    283, 
-    "BRIAN MURRAY", 
-    27, 
-    "M", 
-    "DAHLONEGA GA", 
-    1325, 
-    6469, 
-    494, 
-    6430
-  ], 
-  [
-    284, 
-    "MARK WEINTRAUB", 
-    41, 
-    "M", 
-    "ROSWELL GA", 
-    1943, 
-    6471, 
-    494, 
-    6452
-  ], 
-  [
-    285, 
-    "KEN BUWALDA", 
-    49, 
-    "M", 
-    "ACWORTH GA", 
-    260, 
-    6476, 
-    495, 
-    6441
-  ], 
-  [
-    286, 
-    "LAURA MOSSING", 
-    22, 
-    "F", 
-    "DUNWOODY GA", 
-    1319, 
-    6481, 
-    495, 
-    6474
-  ], 
-  [
-    287, 
-    "CHRISSIE BURNS", 
-    35, 
-    "F", 
-    "ATLANTA GA", 
-    249, 
-    6485, 
-    495, 
-    6472
-  ], 
-  [
-    288, 
-    "CHRIS KALLIO", 
-    33, 
-    "M", 
-    "ATLANTA GA", 
-    964, 
-    6485, 
-    496, 
-    6472
-  ], 
-  [
-    289, 
-    "MICHAEL BAMBA", 
-    16, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    91, 
-    6486, 
-    496, 
-    6450
-  ], 
-  [
-    290, 
-    "JESSICA BURKHART", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    248, 
-    6488, 
-    496, 
-    6467
-  ], 
-  [
-    291, 
-    "EMILY EDWARDS", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    549, 
-    6489, 
-    496, 
-    6466
-  ], 
-  [
-    292, 
-    "STEVEN SCOLERI", 
-    39, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    1624, 
-    6490, 
-    496, 
-    6452
-  ], 
-  [
-    293, 
-    "KELLY STEPHENS", 
-    35, 
-    "F", 
-    "SHARPSBURG GA", 
-    1763, 
-    6492, 
-    496, 
-    6455
-  ], 
-  [
-    294, 
-    "ERICA COCHRAN", 
-    41, 
-    "F", 
-    "CUMMING GA", 
-    349, 
-    6494, 
-    496, 
-    6479
-  ], 
-  [
-    295, 
-    "CHRIS FOX", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    629, 
-    6495, 
-    496, 
-    6473
-  ], 
-  [
-    296, 
-    "ROB ST. JEAN", 
-    32, 
-    "M", 
-    "SMYRNA GA", 
-    1745, 
-    6500, 
-    497, 
-    6483
-  ], 
-  [
-    297, 
-    "SANDRA ABBOTT", 
-    54, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    6, 
-    6501, 
-    497, 
-    6494
-  ], 
-  [
-    298, 
-    "ROBERT REDHEAD", 
-    40, 
-    "M", 
-    "MARIETTA GA", 
-    1502, 
-    6502, 
-    497, 
-    6485
-  ], 
-  [
-    299, 
-    "DANIEL LECLERC", 
-    23, 
-    "M", 
-    "ATLANTA GA", 
-    1077, 
-    6503, 
-    497, 
-    6463
-  ], 
-  [
-    300, 
-    "JAMES SUMMERLIN", 
-    52, 
-    "M", 
-    "DACULA GA", 
-    1782, 
-    6504, 
-    497, 
-    6493
-  ], 
-  [
-    301, 
-    "KELSEY HAGAN", 
-    23, 
-    "F", 
-    "CARROLLTON GA", 
-    754, 
-    6512, 
-    498, 
-    6496
-  ], 
-  [
-    302, 
-    "ALICE ROUGEUX", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    1568, 
-    6520, 
-    498, 
-    6484
-  ], 
-  [
-    303, 
-    "ROBERT TOMEY", 
-    46, 
-    "M", 
-    "MABLETON GA", 
-    1846, 
-    6521, 
-    498, 
-    6501
-  ], 
-  [
-    304, 
-    "CHAD DAVIS", 
-    31, 
-    "M", 
-    "ALPHARETTA GA", 
-    448, 
-    6527, 
-    499, 
-    6508
-  ], 
-  [
-    305, 
-    "WAYNE DOWNEY", 
-    44, 
-    "M", 
-    "BETHLEHEM GA", 
-    519, 
-    6529, 
-    499, 
-    6502
-  ], 
-  [
-    306, 
-    "BETH KRUMPER", 
-    34, 
-    "F", 
-    "ATLANTA GA", 
-    1032, 
-    6531, 
-    499, 
-    6516
-  ], 
-  [
-    307, 
-    "ROBERT LEWALLEN", 
-    39, 
-    "M", 
-    "ATLANTA GA", 
-    1088, 
-    6532, 
-    499, 
-    6517
-  ], 
-  [
-    308, 
-    "KEN BEATTY", 
-    37, 
-    "M", 
-    "ATLANTA GA", 
-    131, 
-    6538, 
-    500, 
-    6493
-  ], 
-  [
-    309, 
-    "KYLE COCHRAN", 
-    36, 
-    "M", 
-    "MABLETON GA", 
-    350, 
-    6538, 
-    500, 
-    6498
-  ], 
-  [
-    310, 
-    "JENS RAHBEK", 
-    41, 
-    "M", 
-    "SMYRNA GA", 
-    1485, 
-    6544, 
-    500, 
-    -1
-  ], 
-  [
-    311, 
-    "VINAYAK KULKARNI", 
-    47, 
-    "M", 
-    "ALPHARETTA GA", 
-    1039, 
-    6545, 
-    500, 
-    6522
-  ], 
-  [
-    312, 
-    "CHARLENE PREG", 
-    45, 
-    "F", 
-    "ATLANTA GA", 
-    1463, 
-    6546, 
-    500, 
-    6533
-  ], 
-  [
-    313, 
-    "TREI WENTZ", 
-    37, 
-    "M", 
-    "WOODSTOCK GA", 
-    1947, 
-    6555, 
-    501, 
-    6542
-  ], 
-  [
-    314, 
-    "ROB BYRAM", 
-    39, 
-    "M", 
-    "SUWANEE GA", 
-    261, 
-    6556, 
-    501, 
-    6537
-  ], 
-  [
-    315, 
-    "MELISSA LIBBY", 
-    47, 
-    "F", 
-    "ATLANTA GA", 
-    1097, 
-    6562, 
-    501, 
-    6552
-  ], 
-  [
-    316, 
-    "RYAN STRONG", 
-    35, 
-    "M", 
-    "ALPHARETTA GA", 
-    1772, 
-    6563, 
-    501, 
-    6545
-  ], 
-  [
-    317, 
-    "MICHAEL MCLAUGHLIN", 
-    43, 
-    "M", 
-    "NORCROSS GA", 
-    1232, 
-    6564, 
-    501, 
-    6545
-  ], 
-  [
-    318, 
-    "BENJAMIN COLLIER", 
-    34, 
-    "M", 
-    "MCDONOUGH GA", 
-    363, 
-    6567, 
-    502, 
-    6549
-  ], 
-  [
-    319, 
-    "SUNG FLEMMING", 
-    49, 
-    "F", 
-    "SUGARHILL GA", 
-    611, 
-    6569, 
-    502, 
-    6525
-  ], 
-  [
-    320, 
-    "NEIL HUTCHINSON", 
-    37, 
-    "M", 
-    "ROSWELL GA", 
-    896, 
-    6572, 
-    502, 
-    6546
-  ], 
-  [
-    321, 
-    "BRADLEY FULKERSON", 
-    48, 
-    "M", 
-    "MARIETTA GA", 
-    651, 
-    6573, 
-    502, 
-    6566
-  ], 
-  [
-    322, 
-    "JENNIFER TUCKER", 
-    34, 
-    "F", 
-    "MARIETTA GA", 
-    1862, 
-    6573, 
-    502, 
-    6558
-  ], 
-  [
-    323, 
-    "JEREMY GREENWELL", 
-    35, 
-    "M", 
-    "SMYRNA GA", 
-    730, 
-    6575, 
-    502, 
-    6544
-  ], 
-  [
-    324, 
-    "CARRIE DIX", 
-    47, 
-    "F", 
-    "ROSWELL GA", 
-    494, 
-    6580, 
-    503, 
-    6565
-  ], 
-  [
-    325, 
-    "PATRICK GRAFFIUS", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    715, 
-    6582, 
-    503, 
-    6566
-  ], 
-  [
-    326, 
-    "GLENN GRAVES", 
-    47, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    718, 
-    6583, 
-    503, 
-    6549
-  ], 
-  [
-    327, 
-    "JON PICKENS", 
-    36, 
-    "M", 
-    "ROSWELL GA", 
-    1440, 
-    6585, 
-    503, 
-    6571
-  ], 
-  [
-    328, 
-    "JOHN EDWARDS, JR.", 
-    45, 
-    "M", 
-    "RADCLIFF KY", 
-    558, 
-    6588, 
-    503, 
-    6560
-  ], 
-  [
-    329, 
-    "ERIC COONEY", 
-    49, 
-    "M", 
-    "MARIETTA GA", 
-    381, 
-    6588, 
-    503, 
-    6557
-  ], 
-  [
-    330, 
-    "BRITT JONES", 
-    36, 
-    "M", 
-    "MARIETTA GA", 
-    954, 
-    6590, 
-    504, 
-    6558
-  ], 
-  [
-    331, 
-    "ELENA JOHNSON", 
-    31, 
-    "F", 
-    "ALPHARETTA GA", 
-    944, 
-    6593, 
-    504, 
-    6485
-  ], 
-  [
-    332, 
-    "TOM MAKRIDES", 
-    51, 
-    "M", 
-    "MILTON GA", 
-    1157, 
-    6594, 
-    504, 
-    6526
-  ], 
-  [
-    333, 
-    "KARA QUINCY", 
-    39, 
-    "F", 
-    "CUMMING GA", 
-    1477, 
-    6594, 
-    504, 
-    6582
-  ], 
-  [
-    334, 
-    "JENNIFER HASSON", 
-    39, 
-    "F", 
-    "ROSWELL GA", 
-    811, 
-    6594, 
-    504, 
-    6579
-  ], 
-  [
-    335, 
-    "DAVID HURST", 
-    38, 
-    "M", 
-    "WOODSTOCK GA", 
-    893, 
-    6594, 
-    504, 
-    6569
-  ], 
-  [
-    336, 
-    "MAUREEN UNDERWOOD", 
-    43, 
-    "F", 
-    "ROSWELL GA", 
-    1874, 
-    6596, 
-    504, 
-    6581
-  ], 
-  [
-    337, 
-    "NATALIE WITT", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    1991, 
-    6596, 
-    504, 
-    6554
-  ], 
-  [
-    338, 
-    "LISA MARCINEK", 
-    34, 
-    "F", 
-    "CUMMING GA", 
-    1168, 
-    6597, 
-    504, 
-    6585
-  ], 
-  [
-    339, 
-    "JOHN HYLAND", 
-    38, 
-    "M", 
-    "ALPHARETTA GA", 
-    901, 
-    6598, 
-    504, 
-    6579
-  ], 
-  [
-    340, 
-    "TOM HYLAND", 
-    46, 
-    "M", 
-    "AVON LAKE OH", 
-    902, 
-    6599, 
-    504, 
-    6579
-  ], 
-  [
-    341, 
-    "JEREMY HENSON", 
-    35, 
-    "M", 
-    "NEWNAN GA", 
-    835, 
-    6599, 
-    504, 
-    6585
-  ], 
-  [
-    342, 
-    "MATTHEW RIGDON", 
-    31, 
-    "M", 
-    "CALHOUN GA", 
-    2028, 
-    6599, 
-    504, 
-    6582
-  ], 
-  [
-    343, 
-    "SARAH LANGVILLE", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    1054, 
-    6605, 
-    505, 
-    6559
-  ], 
-  [
-    344, 
-    "CHRISTOPHER FRATTO", 
-    36, 
-    "M", 
-    "SMYRNA GA", 
-    635, 
-    6607, 
-    505, 
-    6482
-  ], 
-  [
-    345, 
-    "JAMES HARRIS", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    796, 
-    6609, 
-    505, 
-    6600
-  ], 
-  [
-    346, 
-    "BRANDON FAYE", 
-    39, 
-    "M", 
-    "MARIETTA GA", 
-    591, 
-    6611, 
-    505, 
-    6570
-  ], 
-  [
-    347, 
-    "SCOTT STAFFORD", 
-    38, 
-    "M", 
-    "SMYRNA GA", 
-    1748, 
-    6612, 
-    505, 
-    6563
-  ], 
-  [
-    348, 
-    "STEVE BERREY", 
-    41, 
-    "M", 
-    "ROSWELL GA", 
-    149, 
-    6613, 
-    505, 
-    6588
-  ], 
-  [
-    349, 
-    "KYLE ZAUNBRECHER", 
-    27, 
-    "M", 
-    "BIRMINGHAM AL", 
-    2020, 
-    6614, 
-    505, 
-    6596
-  ], 
-  [
-    350, 
-    "JASON TOOLE", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    1848, 
-    6617, 
-    506, 
-    6575
-  ], 
-  [
-    351, 
-    "MATTHEW WOLFE", 
-    39, 
-    "M", 
-    "DECATUR GA", 
-    1995, 
-    6618, 
-    506, 
-    6578
-  ], 
-  [
-    352, 
-    "BRYAN JACKSON", 
-    41, 
-    "M", 
-    "SANDY SPRINGS GA", 
-    908, 
-    6621, 
-    506, 
-    6603
-  ], 
-  [
-    353, 
-    "TOM VANN", 
-    38, 
-    "M", 
-    "ROSWELL GA", 
-    1885, 
-    6622, 
-    506, 
-    6609
-  ], 
-  [
-    354, 
-    "LEONARDO GARCIA", 
-    36, 
-    "M", 
-    "NEWNAN GA", 
-    668, 
-    6624, 
-    506, 
-    6588
-  ], 
-  [
-    355, 
-    "CHRIS KYRIAKAKIS", 
-    38, 
-    "M", 
-    "DULUTH GA", 
-    1043, 
-    6628, 
-    506, 
-    6609
-  ], 
-  [
-    356, 
-    "CAROLYN SULLIVAN", 
-    27, 
-    "F", 
-    "ACWORTH GA", 
-    1779, 
-    6629, 
-    506, 
-    6595
-  ], 
-  [
-    357, 
-    "KELLY NORTON", 
-    36, 
-    "M", 
-    "DECATUR GA", 
-    1352, 
-    6631, 
-    507, 
-    6551
-  ], 
-  [
-    358, 
-    "JENNIFER COLEMAN", 
-    35, 
-    "F", 
-    "MOBILE AL", 
-    362, 
-    6632, 
-    507, 
-    6603
-  ], 
-  [
-    359, 
-    "JANE GROVER", 
-    37, 
-    "F", 
-    "GRAYSON GA", 
-    744, 
-    6633, 
-    507, 
-    6611
-  ], 
-  [
-    360, 
-    "ASHLEY CHURCH", 
-    35, 
-    "F", 
-    "ALTANTA GA", 
-    331, 
-    6637, 
-    507, 
-    6616
-  ], 
-  [
-    361, 
-    "SCOTT MARTIN", 
-    39, 
-    "M", 
-    "ATLANTA GA", 
-    1178, 
-    6663, 
-    509, 
-    6649
-  ], 
-  [
-    362, 
-    "MATTHEW LOGAN", 
-    43, 
-    "M", 
-    "ACWORTH GA", 
-    1117, 
-    6664, 
-    509, 
-    6645
-  ], 
-  [
-    363, 
-    "MITCHELL SALAIN", 
-    41, 
-    "M", 
-    "DAHLONEGA GA", 
-    1581, 
-    6664, 
-    509, 
-    6615
-  ], 
-  [
-    364, 
-    "ALAN MORELLI", 
-    55, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1310, 
-    6667, 
-    509, 
-    6629
-  ], 
-  [
-    365, 
-    "KEVIN HEATH", 
-    39, 
-    "M", 
-    "SMRYNA GA", 
-    822, 
-    6668, 
-    509, 
-    6637
-  ], 
-  [
-    366, 
-    "JEFF GANTT", 
-    23, 
-    "M", 
-    "MARIETTA GA", 
-    667, 
-    6668, 
-    509, 
-    6650
-  ], 
-  [
-    367, 
-    "DAVID BOFF", 
-    39, 
-    "M", 
-    "KENNESAW GA", 
-    166, 
-    6674, 
-    510, 
-    6658
-  ], 
-  [
-    368, 
-    "CAREY HYDE", 
-    49, 
-    "F", 
-    "MABLETON GA", 
-    900, 
-    6676, 
-    510, 
-    6651
-  ], 
-  [
-    369, 
-    "KRISTIN WHITE", 
-    40, 
-    "F", 
-    "ALPHARETTA GA", 
-    1960, 
-    6682, 
-    511, 
-    6641
-  ], 
-  [
-    370, 
-    "NICHOLE LEWIS", 
-    40, 
-    "F", 
-    "NEW FAIRFIELD CT", 
-    1093, 
-    6687, 
-    511, 
-    6671
-  ], 
-  [
-    371, 
-    "ANDREAS BOMMARIUS", 
-    51, 
-    "M", 
-    "ATLANTA GA", 
-    170, 
-    6689, 
-    511, 
-    6680
-  ], 
-  [
-    372, 
-    "JEREMY SELLARS", 
-    31, 
-    "M", 
-    "MARIETTA GA", 
-    1637, 
-    6690, 
-    511, 
-    6640
-  ], 
-  [
-    373, 
-    "KENDRA SELLARS", 
-    30, 
-    "F", 
-    "MARIETTA GA", 
-    1638, 
-    6690, 
-    511, 
-    6640
-  ], 
-  [
-    374, 
-    "SCOTT NADER", 
-    40, 
-    "M", 
-    "ROSWELL GA", 
-    1331, 
-    6691, 
-    511, 
-    6680
-  ], 
-  [
-    375, 
-    "JAMES N WOODRUFF", 
-    53, 
-    "M", 
-    "ATLANTA GA", 
-    2000, 
-    6692, 
-    511, 
-    6673
-  ], 
-  [
-    376, 
-    "A SWEET", 
-    45, 
-    "F", 
-    "ALPHARETTA GA", 
-    1793, 
-    6694, 
-    511, 
-    6673
-  ], 
-  [
-    377, 
-    "SCOTT GOLDEN", 
-    40, 
-    "M", 
-    "SMYRNA GA", 
-    703, 
-    6696, 
-    512, 
-    6676
-  ], 
-  [
-    378, 
-    "MARYANNA HALL", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    763, 
-    6700, 
-    512, 
-    6684
-  ], 
-  [
-    379, 
-    "SHANE CRIDER", 
-    28, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    405, 
-    6701, 
-    512, 
-    6694
-  ], 
-  [
-    380, 
-    "JANET HALL", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    762, 
-    6701, 
-    512, 
-    6683
-  ], 
-  [
-    381, 
-    "REID DAVIS", 
-    39, 
-    "M", 
-    "ATLANTA GA", 
-    453, 
-    6702, 
-    512, 
-    6679
-  ], 
-  [
-    382, 
-    "BRETT HASLAM", 
-    38, 
-    "M", 
-    "BISHOP GA", 
-    810, 
-    6705, 
-    512, 
-    6690
-  ], 
-  [
-    383, 
-    "ALYSON HASLAM", 
-    35, 
-    "F", 
-    "BISHOP GA", 
-    809, 
-    6705, 
-    512, 
-    6691
-  ], 
-  [
-    384, 
-    "CALVIN COOK", 
-    32, 
-    "M", 
-    "WOODSTOCK GA", 
-    374, 
-    6705, 
-    512, 
-    6673
-  ], 
-  [
-    385, 
-    "DOUG CUNNINGTON", 
-    31, 
-    "M", 
-    "DUNWOODY GA", 
-    419, 
-    6706, 
-    512, 
-    6680
-  ], 
-  [
-    386, 
-    "HILDE THOMAS", 
-    49, 
-    "F", 
-    "CARROLLTON GA", 
-    1820, 
-    6706, 
-    512, 
-    6689
-  ], 
-  [
-    387, 
-    "CHRISTOPHER BROWN", 
-    25, 
-    "M", 
-    "ATLANTA GA", 
-    215, 
-    6707, 
-    512, 
-    6686
-  ], 
-  [
-    388, 
-    "ASHLEY BROWN", 
-    26, 
-    "F", 
-    "ATLANTA SC", 
-    212, 
-    6708, 
-    512, 
-    6687
-  ], 
-  [
-    389, 
-    "RICK GALLOWAY", 
-    38, 
-    "M", 
-    "KENNESAW GA", 
-    665, 
-    6709, 
-    513, 
-    6659
-  ], 
-  [
-    390, 
-    "GREG SHILLING", 
-    43, 
-    "M", 
-    "CARROLLTON GA", 
-    1668, 
-    6711, 
-    513, 
-    6681
-  ], 
-  [
-    391, 
-    "DIANE MCHORNEY", 
-    38, 
-    "F", 
-    "ACWORTH GA", 
-    1224, 
-    6716, 
-    513, 
-    6701
-  ], 
-  [
-    392, 
-    "BRITTANY ATKINSON", 
-    31, 
-    "F", 
-    "MILTON GA", 
-    69, 
-    6717, 
-    513, 
-    6660
-  ], 
-  [
-    393, 
-    "BRIAN FRONK", 
-    27, 
-    "M", 
-    "ATLANTA GA", 
-    649, 
-    6719, 
-    513, 
-    6691
-  ], 
-  [
-    394, 
-    "RYAN ASCHAUER", 
-    33, 
-    "M", 
-    "ATLANTA GA", 
-    66, 
-    6724, 
-    514, 
-    6687
-  ], 
-  [
-    395, 
-    "TRACI GOWENS", 
-    40, 
-    "F", 
-    "DULUTH GA", 
-    713, 
-    6726, 
-    514, 
-    6559
-  ], 
-  [
-    396, 
-    "JENNIFER STEPHENS", 
-    27, 
-    "F", 
-    "SMYRNA GA", 
-    1761, 
-    6727, 
-    514, 
-    6706
-  ], 
-  [
-    397, 
-    "KIRA DUNKERLEY", 
-    39, 
-    "F", 
-    "DUNWOODY GA", 
-    532, 
-    6729, 
-    514, 
-    6712
-  ], 
-  [
-    398, 
-    "MARIO BACCE", 
-    52, 
-    "M", 
-    "MARIETTA GA", 
-    76, 
-    6731, 
-    514, 
-    6718
-  ], 
-  [
-    399, 
-    "KELLY MCNEARNEY", 
-    42, 
-    "F", 
-    "ACWORTH GA", 
-    1239, 
-    6732, 
-    514, 
-    6702
-  ], 
-  [
-    400, 
-    "GLENN HOWELL", 
-    42, 
-    "M", 
-    "LILBURN GA", 
-    875, 
-    6732, 
-    514, 
-    6713
-  ], 
-  [
-    401, 
-    "HAZEL CALDWELL", 
-    32, 
-    "F", 
-    "FORSYTH GA", 
-    270, 
-    6733, 
-    514, 
-    6651
-  ], 
-  [
-    402, 
-    "NICOLE JAYNE", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    924, 
-    6736, 
-    515, 
-    6653
-  ], 
-  [
-    403, 
-    "CHARLES CAYCE", 
-    44, 
-    "M", 
-    "CUMMING GA", 
-    303, 
-    6736, 
-    515, 
-    6714
-  ], 
-  [
-    404, 
-    "BISHOP LEATHERBURY", 
-    58, 
-    "M", 
-    "ATLANTA GA", 
-    1075, 
-    6742, 
-    515, 
-    6707
-  ], 
-  [
-    405, 
-    "DAVID SPEACH", 
-    34, 
-    "M", 
-    "CARTERSVILLE GA", 
-    1729, 
-    6743, 
-    515, 
-    6726
-  ], 
-  [
-    406, 
-    "EMELINE ABEITA", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    7, 
-    6744, 
-    515, 
-    6721
-  ], 
-  [
-    407, 
-    "KERRI MCMAHON", 
-    34, 
-    "F", 
-    "DACULA GA", 
-    1234, 
-    6745, 
-    515, 
-    6714
-  ], 
-  [
-    408, 
-    "KEITH JERNIGAN", 
-    45, 
-    "M", 
-    "SUWANEE GA", 
-    932, 
-    6747, 
-    515, 
-    6716
-  ], 
-  [
-    409, 
-    "MELANIE PHILLIPS", 
-    38, 
-    "F", 
-    "CANTON GA", 
-    1436, 
-    6749, 
-    516, 
-    6691
-  ], 
-  [
-    410, 
-    "EARL SHARPE", 
-    44, 
-    "M", 
-    "DULUTH GA", 
-    1652, 
-    6751, 
-    516, 
-    6717
-  ], 
-  [
-    411, 
-    "AMANDA WRUBEL", 
-    35, 
-    "F", 
-    "ATLANTA GA", 
-    2010, 
-    6752, 
-    516, 
-    6708
-  ], 
-  [
-    412, 
-    "KIMBERLEY HALE", 
-    38, 
-    "F", 
-    "NORCROSS GA", 
-    758, 
-    6752, 
-    516, 
-    6736
-  ], 
-  [
-    413, 
-    "GARY MARTIN", 
-    45, 
-    "M", 
-    "ALPHARETTA GA", 
-    1174, 
-    6753, 
-    516, 
-    6729
-  ], 
-  [
-    414, 
-    "ANGELA FREEMAN", 
-    45, 
-    "F", 
-    "ROSWELL GA", 
-    640, 
-    6755, 
-    516, 
-    6740
-  ], 
-  [
-    415, 
-    "CARLOS TALLEY", 
-    99, 
-    "M", 
-    "MARIETTA GA", 
-    1799, 
-    6757, 
-    516, 
-    6665
-  ], 
-  [
-    416, 
-    "CATHERINE HASH", 
-    38, 
-    "F", 
-    "CUMMING GA", 
-    808, 
-    6759, 
-    516, 
-    6735
-  ], 
-  [
-    417, 
-    "JOHN SWANSON", 
-    45, 
-    "M", 
-    "ATLANTA GA", 
-    1790, 
-    6760, 
-    516, 
-    6743
-  ], 
-  [
-    418, 
-    "ALLISON SPEARS", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    1732, 
-    6761, 
-    517, 
-    6741
-  ], 
-  [
-    419, 
-    "BETH STUDLEY", 
-    38, 
-    "F", 
-    "SMYRNA GA", 
-    1774, 
-    6766, 
-    517, 
-    6729
-  ], 
-  [
-    420, 
-    "JODI JACKSON", 
-    39, 
-    "F", 
-    "SANDY SPRINGS GA", 
-    909, 
-    6767, 
-    517, 
-    -1
-  ], 
-  [
-    421, 
-    "THOMAS RUSSE", 
-    56, 
-    "M", 
-    "CHATTANOOGA TN", 
-    1576, 
-    6773, 
-    517, 
-    6764
-  ], 
-  [
-    422, 
-    "DERRICK FRIEDMAN", 
-    38, 
-    "M", 
-    "ALPHARETTA GA", 
-    646, 
-    6773, 
-    517, 
-    6759
-  ], 
-  [
-    423, 
-    "SCOTT BALLARD", 
-    46, 
-    "M", 
-    "WOODSTOCK GA", 
-    88, 
-    6775, 
-    518, 
-    6732
-  ], 
-  [
-    424, 
-    "LYNN HOWE", 
-    49, 
-    "F", 
-    "JONESBORO GA", 
-    874, 
-    6775, 
-    518, 
-    6753
-  ], 
-  [
-    425, 
-    "KAREN MATHEWS", 
-    45, 
-    "F", 
-    "ROSWELL GA", 
-    1185, 
-    6778, 
-    518, 
-    6758
-  ], 
-  [
-    426, 
-    "CRAIG CURRENT", 
-    45, 
-    "M", 
-    "MARIETTA GA", 
-    423, 
-    6779, 
-    518, 
-    6667
-  ], 
-  [
-    427, 
-    "JOSE RIVERA", 
-    29, 
-    "M", 
-    "MARIETTA GA", 
-    1534, 
-    6780, 
-    518, 
-    6745
-  ], 
-  [
-    428, 
-    "CHRISTOPHER TUFF", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    1865, 
-    6781, 
-    518, 
-    6758
-  ], 
-  [
-    429, 
-    "FRANK DEMELFI", 
-    58, 
-    "M", 
-    "MARIETTA GA", 
-    472, 
-    6782, 
-    518, 
-    6750
-  ], 
-  [
-    430, 
-    "RAMON DEMPERS", 
-    52, 
-    "M", 
-    "ALPHARETTA GA", 
-    477, 
-    6783, 
-    518, 
-    6762
-  ], 
-  [
-    431, 
-    "SARAH RANK", 
-    33, 
-    "F", 
-    "LAGRANGE GA", 
-    1492, 
-    6784, 
-    518, 
-    6752
-  ], 
-  [
-    432, 
-    "JULIE TUFF", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1866, 
-    6787, 
-    519, 
-    6764
-  ], 
-  [
-    433, 
-    "MATT COSSON", 
-    37, 
-    "M", 
-    "HOSCHTON GA", 
-    388, 
-    6789, 
-    519, 
-    6752
-  ], 
-  [
-    434, 
-    "NIKKI BLYSTONE", 
-    32, 
-    "F", 
-    "ELLENWOOD GA", 
-    163, 
-    6789, 
-    519, 
-    6728
-  ], 
-  [
-    435, 
-    "TIMOTHY GRANT", 
-    40, 
-    "M", 
-    "MACON GA", 
-    717, 
-    6789, 
-    519, 
-    6774
-  ], 
-  [
-    436, 
-    "MARISA WHEATLEY", 
-    31, 
-    "F", 
-    "DECATUR GA", 
-    1956, 
-    6790, 
-    519, 
-    6756
-  ], 
-  [
-    437, 
-    "CHAD LORD", 
-    37, 
-    "M", 
-    "SUGAR HILL GA", 
-    1126, 
-    6791, 
-    519, 
-    6690
-  ], 
-  [
-    438, 
-    "MICHELLE DAVIDSON", 
-    42, 
-    "F", 
-    "MABLETON GA", 
-    447, 
-    6791, 
-    519, 
-    6659
-  ], 
-  [
-    439, 
-    "NICK ERNESTON", 
-    29, 
-    "M", 
-    "SMYRNA GA", 
-    573, 
-    6792, 
-    519, 
-    6779
-  ], 
-  [
-    440, 
-    "MICHAEL BALLOU", 
-    25, 
-    "M", 
-    "SMYRNA GA", 
-    89, 
-    6793, 
-    519, 
-    6732
-  ], 
-  [
-    441, 
-    "KAREN ANDERSON", 
-    45, 
-    "F", 
-    "COVINGTON GA", 
-    51, 
-    6794, 
-    519, 
-    6766
-  ], 
-  [
-    442, 
-    "TOMMY DANCE", 
-    39, 
-    "M", 
-    "WOODSTOCK GA", 
-    435, 
-    6794, 
-    519, 
-    6756
-  ], 
-  [
-    443, 
-    "DUSTY SHARPES", 
-    24, 
-    "M", 
-    "ATLANTA GA", 
-    1654, 
-    6799, 
-    519, 
-    6756
-  ], 
-  [
-    444, 
-    "JENNIFER PHILLIPPI", 
-    37, 
-    "F", 
-    "ROSWELL GA", 
-    1431, 
-    6800, 
-    519, 
-    6767
-  ], 
-  [
-    445, 
-    "KRISTI COX", 
-    33, 
-    "F", 
-    "MARIETTA GA", 
-    397, 
-    6801, 
-    520, 
-    6766
-  ], 
-  [
-    446, 
-    "BO JACKSON", 
-    33, 
-    "M", 
-    "CANTON GA", 
-    907, 
-    6801, 
-    520, 
-    6774
-  ], 
-  [
-    447, 
-    "KIRSTEN SHARPES", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1655, 
-    6803, 
-    520, 
-    6780
-  ], 
-  [
-    448, 
-    "MATTHEW RACK", 
-    34, 
-    "M", 
-    "HIXSON TN", 
-    1481, 
-    6804, 
-    520, 
-    6740
-  ], 
-  [
-    449, 
-    "BEN WAITES", 
-    48, 
-    "M", 
-    "SUWANEE GA", 
-    1897, 
-    6809, 
-    520, 
-    6782
-  ], 
-  [
-    450, 
-    "VINNIE CUPOLI", 
-    40, 
-    "M", 
-    "JOHNS CREEK GA", 
-    420, 
-    6823, 
-    521, 
-    6808
-  ], 
-  [
-    451, 
-    "STEVE SEGARS", 
-    40, 
-    "M", 
-    "BRASELTON GA", 
-    1633, 
-    6826, 
-    522, 
-    6822
-  ], 
-  [
-    452, 
-    "ANDY PARSONS", 
-    40, 
-    "M", 
-    "CUMMING GA", 
-    1400, 
-    6829, 
-    522, 
-    6812
-  ], 
-  [
-    453, 
-    "JAKE EAVENSON", 
-    21, 
-    "M", 
-    "ATLANTA GA", 
-    544, 
-    6830, 
-    522, 
-    6796
-  ], 
-  [
-    454, 
-    "MARTIN BOYLE", 
-    46, 
-    "M", 
-    "MARIETTA GA", 
-    186, 
-    6831, 
-    522, 
-    6804
-  ], 
-  [
-    455, 
-    "ALISHA JEPPSON", 
-    34, 
-    "F", 
-    "CUMMING GA", 
-    928, 
-    6832, 
-    522, 
-    6785
-  ], 
-  [
-    456, 
-    "JUSTINE PHIFER", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1430, 
-    6833, 
-    522, 
-    6775
-  ], 
-  [
-    457, 
-    "AMI ROACH", 
-    35, 
-    "F", 
-    "DACULA GA", 
-    1535, 
-    6835, 
-    522, 
-    6816
-  ], 
-  [
-    458, 
-    "CHRIS REZEK", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    1517, 
-    6837, 
-    522, 
-    6820
-  ], 
-  [
-    459, 
-    "LISA WOODWARD", 
-    47, 
-    "F", 
-    "CANTON GA", 
-    2003, 
-    6837, 
-    522, 
-    6804
-  ], 
-  [
-    460, 
-    "ANDREA RESTIFO", 
-    45, 
-    "F", 
-    "ATLANTA GA", 
-    1515, 
-    6841, 
-    523, 
-    6815
-  ], 
-  [
-    461, 
-    "JENNIFER SCHMIDT", 
-    38, 
-    "F", 
-    "ATHENS GA", 
-    1608, 
-    6844, 
-    523, 
-    6828
-  ], 
-  [
-    462, 
-    "FRANCES CREEKMUIR", 
-    51, 
-    "F", 
-    "ATLANTA GA", 
-    402, 
-    6846, 
-    523, 
-    6815
-  ], 
-  [
-    463, 
-    "CHRIS KULINSKI", 
-    32, 
-    "M", 
-    "ATLANTA GA", 
-    1036, 
-    6847, 
-    523, 
-    6819
-  ], 
-  [
-    464, 
-    "MATT WATERS", 
-    32, 
-    "M", 
-    "ACWORTH GA", 
-    1930, 
-    6848, 
-    523, 
-    6798
-  ], 
-  [
-    465, 
-    "MARGARET BARBEE", 
-    36, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    97, 
-    6852, 
-    523, 
-    6819
-  ], 
-  [
-    466, 
-    "COREY RIECK", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    385, 
-    6854, 
-    524, 
-    6837
-  ], 
-  [
-    467, 
-    "KAREN GAILEY", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    658, 
-    6855, 
-    524, 
-    6818
-  ], 
-  [
-    468, 
-    "CHRIS HOLTON", 
-    30, 
-    "M", 
-    "MABLETON GA", 
-    857, 
-    6855, 
-    524, 
-    6798
-  ], 
-  [
-    469, 
-    "MICHAEL OZBURN", 
-    36, 
-    "M", 
-    "SANDY SPRINGS GA", 
-    1384, 
-    6855, 
-    524, 
-    6826
-  ], 
-  [
-    470, 
-    "ALEXANDER AMBINDER", 
-    24, 
-    "M", 
-    "ATLANTA GA", 
-    44, 
-    6857, 
-    524, 
-    6799
-  ], 
-  [
-    471, 
-    "EMILY MCINTOSH", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1225, 
-    6858, 
-    524, 
-    6799
-  ], 
-  [
-    472, 
-    "DAN CURRIDEN", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    424, 
-    6864, 
-    524, 
-    6790
-  ], 
-  [
-    473, 
-    "JOHN OCONNOR", 
-    43, 
-    "M", 
-    "SUWANEE GA", 
-    1363, 
-    6865, 
-    524, 
-    6838
-  ], 
-  [
-    474, 
-    "STEPHEN BUMPAS", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    239, 
-    6865, 
-    525, 
-    6803
-  ], 
-  [
-    475, 
-    "BEN KIRKLAND", 
-    56, 
-    "M", 
-    "PEACHTREE CITY, GA", 
-    1005, 
-    6866, 
-    525, 
-    6825
-  ], 
-  [
-    476, 
-    "JEFF ROBERTS", 
-    40, 
-    "M", 
-    "WOODSTOCK GA", 
-    1539, 
-    6868, 
-    525, 
-    6831
-  ], 
-  [
-    477, 
-    "SHELBY KATZ", 
-    44, 
-    "F", 
-    "NORCROSS GA", 
-    970, 
-    6869, 
-    525, 
-    6829
-  ], 
-  [
-    478, 
-    "SHAWN RYALS", 
-    33, 
-    "M", 
-    "MABLETON GA", 
-    1578, 
-    6870, 
-    525, 
-    6846
-  ], 
-  [
-    479, 
-    "KEVIN GARMON", 
-    37, 
-    "M", 
-    "CUMMING GA", 
-    670, 
-    6873, 
-    525, 
-    6859
-  ], 
-  [
-    480, 
-    "JACQUELINE DANIELS", 
-    38, 
-    "F", 
-    "KENNESAW GA", 
-    440, 
-    6880, 
-    526, 
-    6853
-  ], 
-  [
-    481, 
-    "LES SEIBERT", 
-    50, 
-    "M", 
-    "ALPHARETTA GA", 
-    1635, 
-    6887, 
-    526, 
-    6871
-  ], 
-  [
-    482, 
-    "ERIC WEIDNER", 
-    31, 
-    "M", 
-    "MARIETTA GA", 
-    1940, 
-    6887, 
-    526, 
-    6851
-  ], 
-  [
-    483, 
-    "TERRY HARRIS", 
-    47, 
-    "M", 
-    "BREMEN GA", 
-    797, 
-    6888, 
-    526, 
-    6834
-  ], 
-  [
-    484, 
-    "MARK ADENT", 
-    43, 
-    "M", 
-    "JOHNS CREEK GA", 
-    14, 
-    6892, 
-    527, 
-    6886
-  ], 
-  [
-    485, 
-    "PATTY WILDER", 
-    29, 
-    "F", 
-    "TUCKER GA", 
-    1967, 
-    6893, 
-    527, 
-    6853
-  ], 
-  [
-    486, 
-    "DEBORAH GAUL", 
-    15, 
-    "F", 
-    "CUMMING GA", 
-    675, 
-    6895, 
-    527, 
-    6883
-  ], 
-  [
-    487, 
-    "NANCY GAUL", 
-    42, 
-    "F", 
-    "CUMMING GA", 
-    676, 
-    6895, 
-    527, 
-    -1
-  ], 
-  [
-    488, 
-    "DAVE KEMP", 
-    51, 
-    "M", 
-    "KENNESAW GA", 
-    986, 
-    6895, 
-    527, 
-    6853
-  ], 
-  [
-    489, 
-    "TRACY ROSE", 
-    48, 
-    "M", 
-    "ACWORTH GA", 
-    1561, 
-    6900, 
-    527, 
-    6865
-  ], 
-  [
-    490, 
-    "CYNTHIA ESKEW", 
-    43, 
-    "F", 
-    "BRASELTON GA", 
-    576, 
-    6901, 
-    527, 
-    6881
-  ], 
-  [
-    491, 
-    "STEPHANIE WILSON", 
-    36, 
-    "F", 
-    "TUCKER GA", 
-    1983, 
-    6903, 
-    527, 
-    6882
-  ], 
-  [
-    492, 
-    "CAMBREE ROSE", 
-    17, 
-    "F", 
-    "ACWORTH GA", 
-    1558, 
-    6910, 
-    528, 
-    6875
-  ], 
-  [
-    493, 
-    "PETER VAN DER REYDEN", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    1878, 
-    6915, 
-    528, 
-    6905
-  ], 
-  [
-    494, 
-    "JOHN COBB", 
-    58, 
-    "M", 
-    "ATLANTA GA", 
-    347, 
-    6916, 
-    528, 
-    6899
-  ], 
-  [
-    495, 
-    "MILO COGAN", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    354, 
-    6916, 
-    528, 
-    6894
-  ], 
-  [
-    496, 
-    "ANDREW JEPPSON", 
-    37, 
-    "M", 
-    "CUMMING GA", 
-    929, 
-    6919, 
-    529, 
-    6870
-  ], 
-  [
-    497, 
-    "TONIA HARBIN", 
-    45, 
-    "F", 
-    "WOODSTOCK GA", 
-    782, 
-    6919, 
-    529, 
-    6901
-  ], 
-  [
-    498, 
-    "REBECCA WATTERS", 
-    24, 
-    "F", 
-    "MABLETON GA", 
-    1935, 
-    6920, 
-    529, 
-    6887
-  ], 
-  [
-    499, 
-    "WILL OWENS", 
-    40, 
-    "M", 
-    "MABLETON GA", 
-    1383, 
-    6920, 
-    529, 
-    6886
-  ], 
-  [
-    500, 
-    "ERIK ATKINSON", 
-    37, 
-    "M", 
-    "MILTON GA", 
-    70, 
-    6921, 
-    529, 
-    6865
-  ], 
-  [
-    501, 
-    "LARRY KOLAND", 
-    44, 
-    "M", 
-    "MABLETON GA", 
-    1017, 
-    6923, 
-    529, 
-    6909
-  ], 
-  [
-    502, 
-    "PAUL COX", 
-    41, 
-    "M", 
-    "ATLANTA GA", 
-    399, 
-    6923, 
-    529, 
-    6880
-  ], 
-  [
-    503, 
-    "STEVE BRADY", 
-    54, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    195, 
-    6924, 
-    529, 
-    6891
-  ], 
-  [
-    504, 
-    "RODNEY SMITH", 
-    45, 
-    "M", 
-    "CARROLLTON GA", 
-    1715, 
-    6924, 
-    529, 
-    6902
-  ], 
-  [
-    505, 
-    "COURTNEY FOSTER", 
-    31, 
-    "F", 
-    "CANTON GA", 
-    622, 
-    6927, 
-    529, 
-    6900
-  ], 
-  [
-    506, 
-    "NOELL WANNAMAKER", 
-    49, 
-    "M", 
-    "SMYRNA GA", 
-    1917, 
-    6930, 
-    529, 
-    6904
-  ], 
-  [
-    507, 
-    "WILLIAM LEAHY", 
-    50, 
-    "M", 
-    "JASPER GA", 
-    1072, 
-    6933, 
-    530, 
-    6922
-  ], 
-  [
-    508, 
-    "BENJAMIN KIRKLAND", 
-    22, 
-    "M", 
-    "DESTIN FL", 
-    1006, 
-    6933, 
-    530, 
-    6893
-  ], 
-  [
-    509, 
-    "ALTON CHAPMAN", 
-    41, 
-    "M", 
-    "MABLETON GA", 
-    318, 
-    6936, 
-    530, 
-    6931
-  ], 
-  [
-    510, 
-    "BOB DANVILLE", 
-    51, 
-    "M", 
-    "ALPHARETTA GA", 
-    441, 
-    6937, 
-    530, 
-    6923
-  ], 
-  [
-    511, 
-    "KURT BRUDER", 
-    48, 
-    "M", 
-    "ALPHARETTA GA", 
-    223, 
-    6937, 
-    530, 
-    6925
-  ], 
-  [
-    512, 
-    "MICHAEL FONSECA", 
-    33, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    617, 
-    6939, 
-    530, 
-    6921
-  ], 
-  [
-    513, 
-    "KRISTINA MCLAUGHLIN", 
-    35, 
-    "F", 
-    "CUMMING GA", 
-    1230, 
-    6941, 
-    530, 
-    6916
-  ], 
-  [
-    514, 
-    "TIMOTHY TACKETT", 
-    49, 
-    "M", 
-    "SNELLVILLE GA", 
-    1798, 
-    6942, 
-    530, 
-    6914
-  ], 
-  [
-    515, 
-    "MALLORY KIRKLAND", 
-    24, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1007, 
-    6943, 
-    530, 
-    6903
-  ], 
-  [
-    516, 
-    "ROBIN SMITH", 
-    32, 
-    "F", 
-    "ACWORTH GA", 
-    1714, 
-    6945, 
-    531, 
-    6916
-  ], 
-  [
-    517, 
-    "KEN KLAER", 
-    52, 
-    "M", 
-    "JOHNS CREEK DR GA", 
-    1011, 
-    6947, 
-    531, 
-    6907
-  ], 
-  [
-    518, 
-    "ERIC NORDEN", 
-    46, 
-    "M", 
-    "ACWORTH GA", 
-    1350, 
-    6947, 
-    531, 
-    6925
-  ], 
-  [
-    519, 
-    "MARK LASITER", 
-    39, 
-    "M", 
-    "MABLETON GA", 
-    1056, 
-    6954, 
-    531, 
-    6906
-  ], 
-  [
-    520, 
-    "KATHERYN PETTUS", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1424, 
-    6956, 
-    531, 
-    6867
-  ], 
-  [
-    521, 
-    "JACK DILLARD", 
-    29, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    491, 
-    6964, 
-    532, 
-    6919
-  ], 
-  [
-    522, 
-    "MICHAEL THRASHER", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    1833, 
-    6966, 
-    532, 
-    6927
-  ], 
-  [
-    523, 
-    "KEN THRASHER", 
-    59, 
-    "M", 
-    "ATLANTA GA", 
-    1832, 
-    6967, 
-    532, 
-    6928
-  ], 
-  [
-    524, 
-    "GUS JOHNSON", 
-    45, 
-    "M", 
-    "MARIETTA GA", 
-    945, 
-    6972, 
-    533, 
-    6939
-  ], 
-  [
-    525, 
-    "TARA BLACK", 
-    41, 
-    "F", 
-    "ROSWELL GA", 
-    156, 
-    6973, 
-    533, 
-    6937
-  ], 
-  [
-    526, 
-    "RAY BROWN", 
-    53, 
-    "M", 
-    "ROSWELL GA", 
-    219, 
-    6973, 
-    533, 
-    6959
-  ], 
-  [
-    527, 
-    "SHARON BONDHUS", 
-    38, 
-    "F", 
-    "MABLETON GA", 
-    172, 
-    6974, 
-    533, 
-    6944
-  ], 
-  [
-    528, 
-    "HEATHER SHOEMAKER", 
-    25, 
-    "F", 
-    "ALPHARETTA GA", 
-    1673, 
-    6974, 
-    533, 
-    6964
-  ], 
-  [
-    529, 
-    "TONYA CENIZA", 
-    41, 
-    "F", 
-    "ALPHARETTA GA", 
-    304, 
-    6975, 
-    533, 
-    6964
-  ], 
-  [
-    530, 
-    "CHRISTOPHER BARR", 
-    28, 
-    "M", 
-    "CANTON GA", 
-    105, 
-    6977, 
-    533, 
-    6961
-  ], 
-  [
-    531, 
-    "KAREN KRESAK", 
-    47, 
-    "F", 
-    "MARIETTA GA", 
-    1026, 
-    6983, 
-    534, 
-    6959
-  ], 
-  [
-    532, 
-    "STEVE CALBERT", 
-    40, 
-    "M", 
-    "WOODSTOCK GA", 
-    267, 
-    6985, 
-    534, 
-    6900
-  ], 
-  [
-    533, 
-    "ALEXANDRA ALDRICH", 
-    42, 
-    "F", 
-    "SANDY SPRINGS GA", 
-    28, 
-    6990, 
-    534, 
-    6953
-  ], 
-  [
-    534, 
-    "KEN GREBE", 
-    48, 
-    "M", 
-    "ACWORTH GA", 
-    726, 
-    6992, 
-    534, 
-    6967
-  ], 
-  [
-    535, 
-    "LAURA HERAKOVICH", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    836, 
-    6996, 
-    534, 
-    6971
-  ], 
-  [
-    536, 
-    "MATTHEW TAYLOR", 
-    35, 
-    "M", 
-    "SMYRNA GA", 
-    1810, 
-    7000, 
-    535, 
-    6938
-  ], 
-  [
-    537, 
-    "KAREN BATTLES", 
-    38, 
-    "F", 
-    "DAHLONEGA GA", 
-    124, 
-    7015, 
-    536, 
-    6987
-  ], 
-  [
-    538, 
-    "DAVID RHODEN", 
-    41, 
-    "M", 
-    "CANTON GA", 
-    1518, 
-    7017, 
-    536, 
-    6965
-  ], 
-  [
-    539, 
-    "BRETT CAMPBELL", 
-    37, 
-    "M", 
-    "ROSWELL GA", 
-    274, 
-    7018, 
-    536, 
-    6978
-  ], 
-  [
-    540, 
-    "ROBERT MORRIS", 
-    34, 
-    "M", 
-    "DECATUR GA", 
-    1316, 
-    7022, 
-    537, 
-    6989
-  ], 
-  [
-    541, 
-    "MOLLY FULLER", 
-    32, 
-    "F", 
-    "ATLANTA GA", 
-    653, 
-    7024, 
-    537, 
-    7002
-  ], 
-  [
-    542, 
-    "ALESHKA CALDERON", 
-    25, 
-    "F", 
-    "SMYRNA GA", 
-    269, 
-    7025, 
-    537, 
-    6988
-  ], 
-  [
-    543, 
-    "BONNIE SCOTT", 
-    22, 
-    "F", 
-    "ATLANTA GA", 
-    1626, 
-    7026, 
-    537, 
-    7002
-  ], 
-  [
-    544, 
-    "ELIZABETH SMITH", 
-    27, 
-    "F", 
-    "MARIETTA GA", 
-    1705, 
-    7026, 
-    537, 
-    7017
-  ], 
-  [
-    545, 
-    "BRETT HADDON-COOK", 
-    39, 
-    "M", 
-    "ROSWELL GA", 
-    753, 
-    7028, 
-    537, 
-    6989
-  ], 
-  [
-    546, 
-    "LAURA JOPLING", 
-    40, 
-    "F", 
-    "GRAYSON GA", 
-    960, 
-    7028, 
-    537, 
-    7006
-  ], 
-  [
-    547, 
-    "JEFF KLEIN", 
-    37, 
-    "M", 
-    "ROSWELL GA", 
-    1012, 
-    7030, 
-    537, 
-    6990
-  ], 
-  [
-    548, 
-    "HUTCH DELOACH", 
-    56, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    470, 
-    7031, 
-    537, 
-    7018
-  ], 
-  [
-    549, 
-    "REBECCA BRYAN", 
-    39, 
-    "F", 
-    "CUMMING GA", 
-    226, 
-    7034, 
-    537, 
-    6985
-  ], 
-  [
-    550, 
-    "DANIEL SZYMANSKI", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    1797, 
-    7035, 
-    537, 
-    6970
-  ], 
-  [
-    551, 
-    "MICHAEL TUCHALSKI", 
-    51, 
-    "M", 
-    "MARIETTA GA", 
-    1859, 
-    7038, 
-    538, 
-    6996
-  ], 
-  [
-    552, 
-    "THERESE TUCHALSKI", 
-    51, 
-    "F", 
-    "MARIETTA GA", 
-    1860, 
-    7039, 
-    538, 
-    6998
-  ], 
-  [
-    553, 
-    "NATALIE LOPRESTI", 
-    27, 
-    "F", 
-    "KENNESAW GA", 
-    1125, 
-    7040, 
-    538, 
-    7001
-  ], 
-  [
-    554, 
-    "BART WALTERS", 
-    40, 
-    "M", 
-    "WATKINSVILLE GA", 
-    1908, 
-    7044, 
-    538, 
-    6994
-  ], 
-  [
-    555, 
-    "ROBERT HOWREN", 
-    46, 
-    "M", 
-    "AUSTELL GA", 
-    877, 
-    7045, 
-    538, 
-    7034
-  ], 
-  [
-    556, 
-    "NATHAN FANT", 
-    25, 
-    "M", 
-    "CARTERSVILLE GA", 
-    590, 
-    7046, 
-    538, 
-    7011
-  ], 
-  [
-    557, 
-    "JAY BASSETT", 
-    27, 
-    "M", 
-    "MABLETON GA", 
-    122, 
-    7049, 
-    539, 
-    7028
-  ], 
-  [
-    558, 
-    "DAVID TINSLEY", 
-    61, 
-    "M", 
-    "CUMMING GA", 
-    1842, 
-    7050, 
-    539, 
-    7029
-  ], 
-  [
-    559, 
-    "CHAD DANIELS", 
-    36, 
-    "M", 
-    "SMYRNA GA", 
-    439, 
-    7051, 
-    539, 
-    6999
-  ], 
-  [
-    560, 
-    "MICHAEL STANTON", 
-    28, 
-    "M", 
-    "DACULA GA", 
-    1755, 
-    7054, 
-    539, 
-    6954
-  ], 
-  [
-    561, 
-    "BARRON SMITH", 
-    50, 
-    "M", 
-    "WHITE GA", 
-    1701, 
-    7057, 
-    539, 
-    7034
-  ], 
-  [
-    562, 
-    "BRIAN SIMPSON", 
-    61, 
-    "M", 
-    "LAWNDALE NC", 
-    1684, 
-    7058, 
-    539, 
-    7034
-  ], 
-  [
-    563, 
-    "CHRISTOPHER WEISER", 
-    42, 
-    "M", 
-    "ACWORTH GA", 
-    1944, 
-    7060, 
-    539, 
-    7013
-  ], 
-  [
-    564, 
-    "AUBREY KNICK-KOPPENHOFER", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    1014, 
-    7060, 
-    539, 
-    7006
-  ], 
-  [
-    565, 
-    "GEORGE CONNOLLY", 
-    33, 
-    "M", 
-    "WOODSTOCK GA", 
-    372, 
-    7063, 
-    540, 
-    6950
-  ], 
-  [
-    566, 
-    "KIM ROWAN", 
-    41, 
-    "F", 
-    "SMYRNA GA", 
-    1571, 
-    7064, 
-    540, 
-    7040
-  ], 
-  [
-    567, 
-    "WARD PETTENGER", 
-    36, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    1423, 
-    7064, 
-    540, 
-    7038
-  ], 
-  [
-    568, 
-    "ERICA WATFORD", 
-    30, 
-    "F", 
-    "MARIETTA GA", 
-    1931, 
-    7066, 
-    540, 
-    7017
-  ], 
-  [
-    569, 
-    "NICOLE EDWARDS", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    551, 
-    7068, 
-    540, 
-    7044
-  ], 
-  [
-    570, 
-    "JANA MCCLENDON", 
-    47, 
-    "F", 
-    "MARIETTA GA", 
-    4, 
-    7068, 
-    540, 
-    7037
-  ], 
-  [
-    571, 
-    "GORDON PATRICK", 
-    36, 
-    "M", 
-    "WOODSTOCK GA", 
-    1402, 
-    7069, 
-    540, 
-    7050
-  ], 
-  [
-    572, 
-    "TERI MCKENNAN", 
-    35, 
-    "F", 
-    "TYRONE GA", 
-    1226, 
-    7069, 
-    540, 
-    7013
-  ], 
-  [
-    573, 
-    "WILLIAM MARTIN II", 
-    41, 
-    "M", 
-    "MACON GA", 
-    1179, 
-    7070, 
-    540, 
-    7045
-  ], 
-  [
-    574, 
-    "DAVID LAMAR", 
-    31, 
-    "M", 
-    "ATLANTA GA", 
-    1049, 
-    7077, 
-    541, 
-    7038
-  ], 
-  [
-    575, 
-    "BEN PHILLIPS", 
-    34, 
-    "M", 
-    "ATLANTA GA", 
-    1433, 
-    7078, 
-    541, 
-    7039
-  ], 
-  [
-    576, 
-    "CARLOS CASON", 
-    37, 
-    "M", 
-    "ATLANTA GA", 
-    296, 
-    7078, 
-    541, 
-    7065
-  ], 
-  [
-    577, 
-    "RANDY STRICKLIN", 
-    39, 
-    "M", 
-    "STONE MOUNTAIN GA", 
-    2143, 
-    7080, 
-    541, 
-    7058
-  ], 
-  [
-    578, 
-    "JOIE FROST", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    650, 
-    7081, 
-    541, 
-    7035
-  ], 
-  [
-    579, 
-    "WILLIAM CREEKMUIR", 
-    55, 
-    "M", 
-    "ATLANTA GA", 
-    403, 
-    7081, 
-    541, 
-    7050
-  ], 
-  [
-    580, 
-    "CHRISTINE CASON", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    297, 
-    7083, 
-    541, 
-    7070
-  ], 
-  [
-    581, 
-    "ANTHONY WATSON", 
-    33, 
-    "M", 
-    "TUCKER GA", 
-    1933, 
-    7083, 
-    541, 
-    7043
-  ], 
-  [
-    582, 
-    "CHARLIE WILLIAMSON", 
-    33, 
-    "M", 
-    "LITHIA SPRINGS GA", 
-    1977, 
-    7084, 
-    541, 
-    7055
-  ], 
-  [
-    583, 
-    "KURT SCHNEIDER", 
-    43, 
-    "M", 
-    "CUMMING GA", 
-    1613, 
-    7085, 
-    541, 
-    7051
-  ], 
-  [
-    584, 
-    "EVAN RITTENBERG", 
-    46, 
-    "M", 
-    "NASHVILLE TN", 
-    1532, 
-    7085, 
-    541, 
-    6993
-  ], 
-  [
-    585, 
-    "TERESA KIRKMAN", 
-    38, 
-    "F", 
-    "CANTON GA", 
-    1008, 
-    7087, 
-    541, 
-    7061
-  ], 
-  [
-    586, 
-    "VALERIE KELLEHER", 
-    61, 
-    "F", 
-    "ATLANTA GA", 
-    980, 
-    7087, 
-    541, 
-    7066
-  ], 
-  [
-    587, 
-    "DIANNA MORTON", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    1318, 
-    7088, 
-    542, 
-    7017
-  ], 
-  [
-    588, 
-    "DANIEL EARLES", 
-    40, 
-    "M", 
-    "SMYRNA GA", 
-    541, 
-    7093, 
-    542, 
-    6987
-  ], 
-  [
-    589, 
-    "BRENDA FLAIG", 
-    37, 
-    "F", 
-    "ROSWELL GA", 
-    606, 
-    7098, 
-    542, 
-    7087
-  ], 
-  [
-    590, 
-    "SUZANNE MCGUIRE", 
-    31, 
-    "F", 
-    "MCDONOUGH GA", 
-    1221, 
-    7106, 
-    543, 
-    6954
-  ], 
-  [
-    591, 
-    "PATRICK MACKEN", 
-    36, 
-    "M", 
-    "DULUTH GA", 
-    1147, 
-    7108, 
-    543, 
-    7065
-  ], 
-  [
-    592, 
-    "JOSIE SNAPP", 
-    29, 
-    "F", 
-    "MCDONOUGH GA", 
-    1720, 
-    7110, 
-    543, 
-    7043
-  ], 
-  [
-    593, 
-    "DAVID ST. HILAIRE", 
-    54, 
-    "M", 
-    "ALPHARETTA GA", 
-    1743, 
-    7110, 
-    543, 
-    7082
-  ], 
-  [
-    594, 
-    "JAMES RICKETT", 
-    41, 
-    "M", 
-    "ATLANTA GA", 
-    1524, 
-    7111, 
-    543, 
-    6952
-  ], 
-  [
-    595, 
-    "ELLEN LAHATTE", 
-    14, 
-    "F", 
-    "ROSWELL GA", 
-    1045, 
-    7113, 
-    543, 
-    7078
-  ], 
-  [
-    596, 
-    "SUSAN PERKINS", 
-    47, 
-    "F", 
-    "ATLANTA GA", 
-    1418, 
-    7115, 
-    544, 
-    7077
-  ], 
-  [
-    597, 
-    "MIKE KOTANIAN", 
-    39, 
-    "M", 
-    "SUWANEE GA", 
-    1021, 
-    7119, 
-    544, 
-    7109
-  ], 
-  [
-    598, 
-    "KIM KRONSHAGE", 
-    40, 
-    "M", 
-    "ALPHARETTA GA", 
-    1030, 
-    7119, 
-    544, 
-    7109
-  ], 
-  [
-    599, 
-    "JOSH TOLLEY", 
-    31, 
-    "M", 
-    "MARIETTA GA", 
-    1845, 
-    7120, 
-    544, 
-    7055
-  ], 
-  [
-    600, 
-    "DANIELLE SPEARMAN", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1730, 
-    7121, 
-    544, 
-    7061
-  ], 
-  [
-    601, 
-    "MICHAEL SIMPSON", 
-    38, 
-    "M", 
-    "MARIETTA GA", 
-    1686, 
-    7122, 
-    544, 
-    7083
-  ], 
-  [
-    602, 
-    "LEE JOHNSON", 
-    42, 
-    "F", 
-    "ATHENS GA", 
-    948, 
-    7122, 
-    544, 
-    7104
-  ], 
-  [
-    603, 
-    "KORY MUEHLHAUSER", 
-    30, 
-    "F", 
-    "SMYRNA GA", 
-    1320, 
-    7123, 
-    544, 
-    7103
-  ], 
-  [
-    604, 
-    "DAVID JACKLITCH", 
-    58, 
-    "M", 
-    "NEW SMYRNA BEAC FL", 
-    906, 
-    7123, 
-    544, 
-    7096
-  ], 
-  [
-    605, 
-    "THOMAS ANDREWS", 
-    47, 
-    "M", 
-    "SANDY SPRINGS GA", 
-    57, 
-    7124, 
-    544, 
-    7107
-  ], 
-  [
-    606, 
-    "CAROLYN LAHATTE", 
-    50, 
-    "F", 
-    "ROSWELL GA", 
-    1044, 
-    7125, 
-    544, 
-    7090
-  ], 
-  [
-    607, 
-    "JERRY LAHATTE", 
-    49, 
-    "M", 
-    "ROSWELL GA", 
-    1046, 
-    7126, 
-    544, 
-    7091
-  ], 
-  [
-    608, 
-    "DAVID DANIEL", 
-    40, 
-    "M", 
-    "SUWANEE GA", 
-    437, 
-    7126, 
-    544, 
-    7101
-  ], 
-  [
-    609, 
-    "LINDSAY ROBISON", 
-    33, 
-    "F", 
-    "SHARPSBURG GA", 
-    1548, 
-    7127, 
-    545, 
-    7090
-  ], 
-  [
-    610, 
-    "LISA ROGERS", 
-    36, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    1552, 
-    7128, 
-    545, 
-    7091
-  ], 
-  [
-    611, 
-    "CHELSEA BUTTRAM", 
-    22, 
-    "F", 
-    "CATAULA GA", 
-    259, 
-    7129, 
-    545, 
-    7009
-  ], 
-  [
-    612, 
-    "KATHERINA GONZALEZ", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    707, 
-    7132, 
-    545, 
-    7081
-  ], 
-  [
-    613, 
-    "MICHAEL RIEMAN", 
-    33, 
-    "M", 
-    "KENNESAW GA", 
-    1528, 
-    7134, 
-    545, 
-    7126
-  ], 
-  [
-    614, 
-    "GLORIA ARGUMEDO", 
-    40, 
-    "F", 
-    "LONG BEACH CA", 
-    62, 
-    7136, 
-    545, 
-    7108
-  ], 
-  [
-    615, 
-    "KEITH GALLIGAN", 
-    35, 
-    "M", 
-    "JASPER GA", 
-    661, 
-    7136, 
-    545, 
-    7086
-  ], 
-  [
-    616, 
-    "SANTIAGO (TED) RAVELO, JR.", 
-    39, 
-    "M", 
-    "NEWNAN GA", 
-    1495, 
-    7138, 
-    545, 
-    7108
-  ], 
-  [
-    617, 
-    "DELL MAJURE", 
-    40, 
-    "M", 
-    "CUMMING GA", 
-    1156, 
-    7140, 
-    545, 
-    7016
-  ], 
-  [
-    618, 
-    "PAUL FERGUSON", 
-    29, 
-    "M", 
-    "ACWORTH GA", 
-    597, 
-    7142, 
-    546, 
-    7090
-  ], 
-  [
-    619, 
-    "AMY VINSON", 
-    37, 
-    "F", 
-    "ROSWELL GA", 
-    1891, 
-    7144, 
-    546, 
-    7107
-  ], 
-  [
-    620, 
-    "SAMRA ALIKHAN", 
-    39, 
-    "F", 
-    "SMYRNA GA", 
-    32, 
-    7146, 
-    546, 
-    7122
-  ], 
-  [
-    621, 
-    "GEORGE MONSALVATGE", 
-    44, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1297, 
-    7147, 
-    546, 
-    7130
-  ], 
-  [
-    622, 
-    "MADELEINE HACKNEY", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    752, 
-    7148, 
-    546, 
-    7040
-  ], 
-  [
-    623, 
-    "NATE SANDERS", 
-    31, 
-    "M", 
-    "CANTON GA", 
-    1590, 
-    7148, 
-    546, 
-    7120
-  ], 
-  [
-    624, 
-    "ROBERT POMA", 
-    49, 
-    "M", 
-    "MARIETTA GA", 
-    2026, 
-    7150, 
-    546, 
-    7135
-  ], 
-  [
-    625, 
-    "ELLEN COMEAUX", 
-    32, 
-    "F", 
-    "ALPHARETTA GA", 
-    368, 
-    7156, 
-    547, 
-    7138
-  ], 
-  [
-    626, 
-    "AUDREY SUMMERS", 
-    36, 
-    "F", 
-    "SMYRNA GA", 
-    1783, 
-    7156, 
-    547, 
-    7035
-  ], 
-  [
-    627, 
-    "CHRIS TART", 
-    37, 
-    "M", 
-    "ATLANTA GA", 
-    1801, 
-    7157, 
-    547, 
-    7081
-  ], 
-  [
-    628, 
-    "JESSICA FORREST", 
-    24, 
-    "F", 
-    "SPRINGFIELD IL", 
-    621, 
-    7157, 
-    547, 
-    7106
-  ], 
-  [
-    629, 
-    "TIMOTHY LLOYD", 
-    28, 
-    "M", 
-    "DECATUR GA", 
-    1109, 
-    7161, 
-    547, 
-    7140
-  ], 
-  [
-    630, 
-    "CLAUDE COLE", 
-    52, 
-    "M", 
-    "MABLETON GA", 
-    358, 
-    7162, 
-    547, 
-    7134
-  ], 
-  [
-    631, 
-    "JACQUELINE SANDORA", 
-    34, 
-    "F", 
-    "WOODSTOCK GA", 
-    1592, 
-    7168, 
-    548, 
-    7136
-  ], 
-  [
-    632, 
-    "HEATHER CARTER", 
-    28, 
-    "F", 
-    "KATHLEEN GA", 
-    289, 
-    7169, 
-    548, 
-    7142
-  ], 
-  [
-    633, 
-    "DENISE BERGEY", 
-    40, 
-    "F", 
-    "CUMMING GA", 
-    145, 
-    7169, 
-    548, 
-    7107
-  ], 
-  [
-    634, 
-    "STACEY KELLER", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    981, 
-    7170, 
-    548, 
-    7096
-  ], 
-  [
-    635, 
-    "JANICE ST. HILAIRE", 
-    47, 
-    "F", 
-    "ALPHARETTA GA", 
-    1744, 
-    7177, 
-    548, 
-    7148
-  ], 
-  [
-    636, 
-    "GLENN SIMPSON", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    1685, 
-    7178, 
-    548, 
-    7133
-  ], 
-  [
-    637, 
-    "CHAD NILES", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    1349, 
-    7181, 
-    549, 
-    7144
-  ], 
-  [
-    638, 
-    "NATALIE WATSON", 
-    25, 
-    "F", 
-    "TUCKER GA", 
-    1934, 
-    7181, 
-    549, 
-    7140
-  ], 
-  [
-    639, 
-    "RON EAKER", 
-    52, 
-    "M", 
-    "AUGUSTA GA", 
-    539, 
-    7187, 
-    549, 
-    7161
-  ], 
-  [
-    640, 
-    "ALEXANDRA HARTNETT", 
-    25, 
-    "F", 
-    "KENNESAW GA", 
-    802, 
-    7188, 
-    549, 
-    7173
-  ], 
-  [
-    641, 
-    "ROLF SODERBERG", 
-    57, 
-    "M", 
-    "JASPER GA", 
-    1722, 
-    7190, 
-    549, 
-    7175
-  ], 
-  [
-    642, 
-    "FRANK TURNER", 
-    41, 
-    "M", 
-    "CUMMING GA", 
-    1869, 
-    7191, 
-    549, 
-    7170
-  ], 
-  [
-    643, 
-    "HAMPTON HALE", 
-    41, 
-    "M", 
-    "MARIETTA GA", 
-    757, 
-    7193, 
-    550, 
-    7120
-  ], 
-  [
-    644, 
-    "CARL LINE", 
-    50, 
-    "M", 
-    "LITHONIA GA", 
-    1104, 
-    7193, 
-    550, 
-    7156
-  ], 
-  [
-    645, 
-    "ALISON ESTELLA", 
-    38, 
-    "F", 
-    "MARIETTA GA", 
-    579, 
-    7193, 
-    550, 
-    7121
-  ], 
-  [
-    646, 
-    "NELSON MILLER", 
-    36, 
-    "M", 
-    "ADAIRSVILLE GA", 
-    1282, 
-    7195, 
-    550, 
-    7148
-  ], 
-  [
-    647, 
-    "AMY ROBBINS", 
-    38, 
-    "F", 
-    "CUMMING GA", 
-    1537, 
-    7195, 
-    550, 
-    7169
-  ], 
-  [
-    648, 
-    "SHAWN SIMPSON", 
-    34, 
-    "M", 
-    "SANDY SPRINGS GA", 
-    1689, 
-    7198, 
-    550, 
-    7172
-  ], 
-  [
-    649, 
-    "JESSICA ROPER", 
-    22, 
-    "F", 
-    "JASPER GA", 
-    1556, 
-    7198, 
-    550, 
-    7158
-  ], 
-  [
-    650, 
-    "LIANI SWINGLE", 
-    29, 
-    "F", 
-    "CHAMBLEE GA", 
-    1795, 
-    7199, 
-    550, 
-    7167
-  ], 
-  [
-    651, 
-    "ELEANOR THOMPSON", 
-    51, 
-    "F", 
-    "SUGAR HILL GA", 
-    1825, 
-    7200, 
-    550, 
-    7163
-  ], 
-  [
-    652, 
-    "JILL KANTOR", 
-    34, 
-    "F", 
-    "MARIETTA GA", 
-    967, 
-    7207, 
-    551, 
-    7140
-  ], 
-  [
-    653, 
-    "SUSAN SCHMIDT", 
-    37, 
-    "F", 
-    "WOODSTOCK GA", 
-    1609, 
-    7207, 
-    551, 
-    7175
-  ], 
-  [
-    654, 
-    "JENNIFER ROWAN DUPLICATE", 
-    24, 
-    "F", 
-    "", 
-    2587, 
-    7208, 
-    551, 
-    -1
-  ], 
-  [
-    655, 
-    "KATHERINE CUTTER", 
-    35, 
-    "F", 
-    "ATHENS GA", 
-    427, 
-    7212, 
-    551, 
-    7181
-  ], 
-  [
-    656, 
-    "SCOTT SCHATZBERG", 
-    39, 
-    "M", 
-    "ATHENS GA", 
-    1603, 
-    7212, 
-    551, 
-    7182
-  ], 
-  [
-    657, 
-    "JENNIFER SORRELLS", 
-    35, 
-    "F", 
-    "GAINESVILLE GA", 
-    1726, 
-    7214, 
-    551, 
-    7100
-  ], 
-  [
-    658, 
-    "DAVID STEINES", 
-    62, 
-    "M", 
-    "WOODSTOCK GA", 
-    1758, 
-    7215, 
-    551, 
-    7193
-  ], 
-  [
-    659, 
-    "EMILY DRURY", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    527, 
-    7215, 
-    551, 
-    7129
-  ], 
-  [
-    660, 
-    "CAROLYN DOWNEY", 
-    48, 
-    "F", 
-    "KENNESAW GA", 
-    518, 
-    7216, 
-    551, 
-    7184
-  ], 
-  [
-    661, 
-    "ANDREA HUYCK", 
-    35, 
-    "F", 
-    "CANTON GA", 
-    897, 
-    7216, 
-    551, 
-    7195
-  ], 
-  [
-    662, 
-    "JILLIAN MARTIN", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    1176, 
-    7218, 
-    551, 
-    7181
-  ], 
-  [
-    663, 
-    "SHANE SHEFFIELD", 
-    38, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    1662, 
-    7222, 
-    552, 
-    7191
-  ], 
-  [
-    664, 
-    "DANA VAN WINKLE", 
-    26, 
-    "F", 
-    "SENOIA GA", 
-    1882, 
-    7225, 
-    552, 
-    7129
-  ], 
-  [
-    665, 
-    "ALISON NEISLER", 
-    32, 
-    "F", 
-    "MABLETON GA", 
-    1337, 
-    7226, 
-    552, 
-    7203
-  ], 
-  [
-    666, 
-    "KATHRYN MILLER", 
-    35, 
-    "F", 
-    "ATLANTA GA", 
-    1279, 
-    7226, 
-    552, 
-    7178
-  ], 
-  [
-    667, 
-    "JOANNA DAVIDSON", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    446, 
-    7227, 
-    552, 
-    7203
-  ], 
-  [
-    668, 
-    "BRYAN PRICE", 
-    39, 
-    "M", 
-    "NEWNAN GA", 
-    1467, 
-    7228, 
-    552, 
-    7178
-  ], 
-  [
-    669, 
-    "LAINE KILBURN", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    995, 
-    7232, 
-    553, 
-    7210
-  ], 
-  [
-    670, 
-    "STEPHANIE TONRA", 
-    42, 
-    "F", 
-    "ROSWELL GA", 
-    1847, 
-    7234, 
-    553, 
-    7201
-  ], 
-  [
-    671, 
-    "ANDREW WARD", 
-    23, 
-    "M", 
-    "HOUSTON TX", 
-    1918, 
-    7235, 
-    553, 
-    7175
-  ], 
-  [
-    672, 
-    "ADAM MILLER", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    1271, 
-    7236, 
-    553, 
-    7184
-  ], 
-  [
-    673, 
-    "MANDI SUMMERS", 
-    28, 
-    "F", 
-    "DALLAS GA", 
-    1786, 
-    7236, 
-    553, 
-    7195
-  ], 
-  [
-    674, 
-    "SCOTT MCDUFFEE", 
-    38, 
-    "M", 
-    "ROSWELL GA", 
-    1212, 
-    7240, 
-    553, 
-    7205
-  ], 
-  [
-    675, 
-    "TERESA MOORE", 
-    41, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    1309, 
-    7241, 
-    553, 
-    7199
-  ], 
-  [
-    676, 
-    "LAURA SCHOLZ", 
-    34, 
-    "F", 
-    "ATLANTA GA", 
-    1616, 
-    7242, 
-    553, 
-    7124
-  ], 
-  [
-    677, 
-    "TIMOTHY LONG", 
-    47, 
-    "M", 
-    "ATLANTA GA", 
-    1122, 
-    7242, 
-    553, 
-    7124
-  ], 
-  [
-    678, 
-    "MICHAEL LATHAM", 
-    61, 
-    "M", 
-    "MABLETON GA", 
-    1061, 
-    7249, 
-    554, 
-    7242
-  ], 
-  [
-    679, 
-    "MIQUEL SCHLOERKE", 
-    34, 
-    "F", 
-    "ALPHARETTA GA", 
-    1607, 
-    7250, 
-    554, 
-    7214
-  ], 
-  [
-    680, 
-    "MICHAEL RAYMOND", 
-    34, 
-    "M", 
-    "MILTON GA", 
-    2027, 
-    7252, 
-    554, 
-    7118
-  ], 
-  [
-    681, 
-    "SUSIE CRISLER", 
-    43, 
-    "F", 
-    "ATLANTA GA", 
-    406, 
-    7252, 
-    554, 
-    7220
-  ], 
-  [
-    682, 
-    "RODNEY BARRY", 
-    52, 
-    "M", 
-    "SMYRNA GA", 
-    110, 
-    7259, 
-    555, 
-    7237
-  ], 
-  [
-    683, 
-    "PAGETT BOSSI", 
-    40, 
-    "F", 
-    "DECATUR GA", 
-    177, 
-    7259, 
-    555, 
-    7212
-  ], 
-  [
-    684, 
-    "MELISSA BRODY", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    209, 
-    7259, 
-    555, 
-    7188
-  ], 
-  [
-    685, 
-    "JOANNE IANITELLO", 
-    43, 
-    "F", 
-    "WOODSTOCK GA", 
-    903, 
-    7261, 
-    555, 
-    7247
-  ], 
-  [
-    686, 
-    "TIM DOWDY", 
-    49, 
-    "M", 
-    "MCDONOUGH GA", 
-    516, 
-    7266, 
-    555, 
-    7244
-  ], 
-  [
-    687, 
-    "ANTHONY STOLARSKI", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    1767, 
-    7270, 
-    555, 
-    7148
-  ], 
-  [
-    688, 
-    "MICHAEL BOZEMAN", 
-    31, 
-    "M", 
-    "JOHNS CREEK GA", 
-    190, 
-    7275, 
-    556, 
-    7206
-  ], 
-  [
-    689, 
-    "NANCY ALBINGER", 
-    47, 
-    "F", 
-    "MARIETTA GA", 
-    24, 
-    7276, 
-    556, 
-    7231
-  ], 
-  [
-    690, 
-    "RHONDA HARRISON", 
-    37, 
-    "F", 
-    "CHATSWORTH GA", 
-    799, 
-    7277, 
-    556, 
-    7192
-  ], 
-  [
-    691, 
-    "ANITA BURKES", 
-    33, 
-    "F", 
-    "CUMMING GA", 
-    246, 
-    7279, 
-    556, 
-    7231
-  ], 
-  [
-    692, 
-    "JILL WANDSTRAT", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    1915, 
-    7282, 
-    556, 
-    7230
-  ], 
-  [
-    693, 
-    "ELIZABETH HESMER", 
-    55, 
-    "F", 
-    "MARIETTA GA", 
-    839, 
-    7284, 
-    557, 
-    7255
-  ], 
-  [
-    694, 
-    "RILINDO FOSTER", 
-    36, 
-    "M", 
-    "ATLANTA GA", 
-    625, 
-    7286, 
-    557, 
-    7237
-  ], 
-  [
-    695, 
-    "JENKA FYFE", 
-    35, 
-    "F", 
-    "ATLANTA GA", 
-    656, 
-    7295, 
-    557, 
-    7181
-  ], 
-  [
-    696, 
-    "KELLY JERDEN", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    930, 
-    7296, 
-    557, 
-    7229
-  ], 
-  [
-    697, 
-    "ROBERT HULME-LIPPERT", 
-    28, 
-    "M", 
-    "DECATUR GA", 
-    882, 
-    7297, 
-    557, 
-    7264
-  ], 
-  [
-    698, 
-    "JAMES HANSEN", 
-    44, 
-    "M", 
-    "LYNDHURST OH", 
-    778, 
-    7299, 
-    558, 
-    7243
-  ], 
-  [
-    699, 
-    "JILL BAGBY", 
-    46, 
-    "F", 
-    "BIRMINGHAM AL", 
-    77, 
-    7302, 
-    558, 
-    7260
-  ], 
-  [
-    700, 
-    "BRIAN FRANKLIN", 
-    32, 
-    "M", 
-    "TYRONE GA", 
-    631, 
-    7305, 
-    558, 
-    7246
-  ], 
-  [
-    701, 
-    "AMBER MELVILLE", 
-    29, 
-    "F", 
-    "CARROLLTON GA", 
-    1252, 
-    7308, 
-    558, 
-    7224
-  ], 
-  [
-    702, 
-    "L WALLER", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1905, 
-    7309, 
-    558, 
-    7274
-  ], 
-  [
-    703, 
-    "SARAH PORRI", 
-    23, 
-    "F", 
-    "MARIETTA GA", 
-    1457, 
-    7311, 
-    559, 
-    7291
-  ], 
-  [
-    704, 
-    "TOM BANG", 
-    48, 
-    "M", 
-    "DECATUR GA", 
-    93, 
-    7314, 
-    559, 
-    7253
-  ], 
-  [
-    705, 
-    "TARA GREGORY", 
-    38, 
-    "F", 
-    "ALPHARETTA GA", 
-    733, 
-    7315, 
-    559, 
-    7168
-  ], 
-  [
-    706, 
-    "BONGSUB SHIM", 
-    51, 
-    "M", 
-    "LAGRANGE GA", 
-    1669, 
-    7316, 
-    559, 
-    7232
-  ], 
-  [
-    707, 
-    "JOEL FERGUSON", 
-    59, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    596, 
-    7318, 
-    559, 
-    7264
-  ], 
-  [
-    708, 
-    "SEAN BRAUD", 
-    34, 
-    "M", 
-    "ATLANTA GA", 
-    197, 
-    7318, 
-    559, 
-    7252
-  ], 
-  [
-    709, 
-    "HERBERT WASHINGTON", 
-    42, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    1926, 
-    7320, 
-    559, 
-    7300
-  ], 
-  [
-    710, 
-    "CHRISTIE CASEY", 
-    36, 
-    "F", 
-    "LAKELAND TN", 
-    295, 
-    7320, 
-    559, 
-    7213
-  ], 
-  [
-    711, 
-    "KEVIN BALDWIN", 
-    36, 
-    "M", 
-    "DULUTH GA", 
-    85, 
-    7325, 
-    560, 
-    7296
-  ], 
-  [
-    712, 
-    "SAMUEL SIMPSON", 
-    28, 
-    "M", 
-    "KENNESAW GA", 
-    1688, 
-    7328, 
-    560, 
-    7310
-  ], 
-  [
-    713, 
-    "MATT POHLMANN", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    1451, 
-    7328, 
-    560, 
-    7292
-  ], 
-  [
-    714, 
-    "STUART DAILEY", 
-    37, 
-    "M", 
-    "MURRAYVILLE GA", 
-    430, 
-    7329, 
-    560, 
-    7311
-  ], 
-  [
-    715, 
-    "MARY MCDONALD", 
-    37, 
-    "F", 
-    "CARTERSVILLE GA", 
-    1209, 
-    7330, 
-    560, 
-    7276
-  ], 
-  [
-    716, 
-    "KELLY BARBERA", 
-    24, 
-    "F", 
-    "NEW YORK NY", 
-    98, 
-    7332, 
-    560, 
-    7293
-  ], 
-  [
-    717, 
-    "ELLEN MCNAMARA", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1237, 
-    7332, 
-    560, 
-    7294
-  ], 
-  [
-    718, 
-    "RENEE WILLIAMS", 
-    36, 
-    "F", 
-    "SAVANNAH GA", 
-    1976, 
-    7333, 
-    560, 
-    7297
-  ], 
-  [
-    719, 
-    "CINDY MCGEE", 
-    42, 
-    "F", 
-    "DUNWOODY GA", 
-    1217, 
-    7333, 
-    560, 
-    7317
-  ], 
-  [
-    720, 
-    "MOLLY ELMORE", 
-    36, 
-    "F", 
-    "NORCROSS GA", 
-    568, 
-    7334, 
-    560, 
-    7294
-  ], 
-  [
-    721, 
-    "JOHNNY WEBB", 
-    61, 
-    "M", 
-    "ACWORTH GA", 
-    1937, 
-    7336, 
-    560, 
-    7278
-  ], 
-  [
-    722, 
-    "BILL YATES", 
-    45, 
-    "M", 
-    "KENNESAW GA", 
-    2015, 
-    7336, 
-    560, 
-    7277
-  ], 
-  [
-    723, 
-    "TAMMY BROWN", 
-    46, 
-    "F", 
-    "ROSWELL GA", 
-    220, 
-    7340, 
-    561, 
-    7325
-  ], 
-  [
-    724, 
-    "MELANIE FRICKS", 
-    48, 
-    "F", 
-    "ALPHARETTA GA", 
-    645, 
-    7344, 
-    561, 
-    7312
-  ], 
-  [
-    725, 
-    "FRANK FRICKS", 
-    50, 
-    "M", 
-    "ALPHARETTA GA", 
-    644, 
-    7344, 
-    561, 
-    7312
-  ], 
-  [
-    726, 
-    "TRACY OVERTON", 
-    36, 
-    "F", 
-    "KENNESAW GA", 
-    1379, 
-    7345, 
-    561, 
-    7252
-  ], 
-  [
-    727, 
-    "CARALYN LEONARD", 
-    52, 
-    "F", 
-    "MANSFIELD GA", 
-    1084, 
-    7348, 
-    561, 
-    7294
-  ], 
-  [
-    728, 
-    "WILLIAM PARRISH", 
-    42, 
-    "M", 
-    "CARROLLTON GA", 
-    1397, 
-    7348, 
-    561, 
-    7291
-  ], 
-  [
-    729, 
-    "ROBERT WILSON", 
-    39, 
-    "M", 
-    "ROSWELL GA", 
-    1982, 
-    7349, 
-    561, 
-    7316
-  ], 
-  [
-    730, 
-    "CATHY HAMRICK", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    772, 
-    7350, 
-    562, 
-    7313
-  ], 
-  [
-    731, 
-    "TIMOTHY HENDRICKS", 
-    39, 
-    "M", 
-    "GRIFFIN GA", 
-    827, 
-    7351, 
-    562, 
-    7307
-  ], 
-  [
-    732, 
-    "JUDY CANGEALOSE", 
-    46, 
-    "F", 
-    "SMYRNA GA", 
-    279, 
-    7354, 
-    562, 
-    7323
-  ], 
-  [
-    733, 
-    "JENNIFER GROSS", 
-    23, 
-    "F", 
-    "MCDONOUGH GA", 
-    743, 
-    7356, 
-    562, 
-    7331
-  ], 
-  [
-    734, 
-    "ARI MATHE", 
-    31, 
-    "F", 
-    "FLOWERY BRANCH GA", 
-    1184, 
-    7359, 
-    562, 
-    7329
-  ], 
-  [
-    735, 
-    "MICHAL DOERGE", 
-    51, 
-    "M", 
-    "HARRISBURG IL", 
-    502, 
-    7359, 
-    562, 
-    7315
-  ], 
-  [
-    736, 
-    "BONNIE BASSETT", 
-    35, 
-    "F", 
-    "DECATUR GA", 
-    121, 
-    7359, 
-    562, 
-    7329
-  ], 
-  [
-    737, 
-    "MARSHALL THURMOND", 
-    56, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1835, 
-    7363, 
-    563, 
-    7305
-  ], 
-  [
-    738, 
-    "QUINCY BARNETT", 
-    32, 
-    "M", 
-    "LITHONIA GA", 
-    104, 
-    7365, 
-    563, 
-    7343
-  ], 
-  [
-    739, 
-    "HOLLY BONVISSUTO", 
-    40, 
-    "F", 
-    "SMYRNA GA", 
-    174, 
-    7366, 
-    563, 
-    7320
-  ], 
-  [
-    740, 
-    "KELLY HUNT", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    887, 
-    7366, 
-    563, 
-    7307
-  ], 
-  [
-    741, 
-    "DIANA HATCHER", 
-    35, 
-    "F", 
-    "ROSWELL GA", 
-    814, 
-    7367, 
-    563, 
-    7336
-  ], 
-  [
-    742, 
-    "CAREY CHIPPS", 
-    45, 
-    "F", 
-    "MARIETTA GA", 
-    327, 
-    7367, 
-    563, 
-    7284
-  ], 
-  [
-    743, 
-    "JEFF BREWER", 
-    50, 
-    "M", 
-    "KENNESAW GA", 
-    202, 
-    7375, 
-    563, 
-    7318
-  ], 
-  [
-    744, 
-    "JULIE CERNICH", 
-    42, 
-    "F", 
-    "GRAYSON GA", 
-    306, 
-    7378, 
-    564, 
-    7356
-  ], 
-  [
-    745, 
-    "MARIA BRAUNE", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    198, 
-    7387, 
-    564, 
-    7314
-  ], 
-  [
-    746, 
-    "GINGER PHELAN", 
-    48, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1428, 
-    7388, 
-    564, 
-    7345
-  ], 
-  [
-    747, 
-    "SUSIE DEAN", 
-    30, 
-    "F", 
-    "WOODSTOCK GA", 
-    461, 
-    7390, 
-    565, 
-    7337
-  ], 
-  [
-    748, 
-    "RAJEEV DAYAL", 
-    31, 
-    "M", 
-    "SMYRNA GA", 
-    459, 
-    7391, 
-    565, 
-    7311
-  ], 
-  [
-    749, 
-    "KATHARINA PROBST", 
-    34, 
-    "F", 
-    "ATLANTA GA", 
-    1473, 
-    7391, 
-    565, 
-    7311
-  ], 
-  [
-    750, 
-    "TAWANDA LEWIS", 
-    33, 
-    "F", 
-    "BUFORD GA", 
-    1095, 
-    7392, 
-    565, 
-    7317
-  ], 
-  [
-    751, 
-    "KOREY CARTER", 
-    33, 
-    "F", 
-    "SMYRNA GA", 
-    291, 
-    7392, 
-    565, 
-    7378
-  ], 
-  [
-    752, 
-    "GARY SANDERS", 
-    53, 
-    "M", 
-    "ACWORTH GA", 
-    1588, 
-    7393, 
-    565, 
-    7331
-  ], 
-  [
-    753, 
-    "EMILY WILLIAMS", 
-    30, 
-    "F", 
-    "AUBURN AL", 
-    1973, 
-    7394, 
-    565, 
-    7285
-  ], 
-  [
-    754, 
-    "ELIZABETH HUMPHRIES", 
-    43, 
-    "F", 
-    "CUMMING GA", 
-    884, 
-    7403, 
-    566, 
-    7374
-  ], 
-  [
-    755, 
-    "JEFFREY HOLLINGTON", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    855, 
-    7403, 
-    566, 
-    7366
-  ], 
-  [
-    756, 
-    "ADDIE COCHRAN", 
-    36, 
-    "F", 
-    "MABLETON GA", 
-    348, 
-    7405, 
-    566, 
-    -1
-  ], 
-  [
-    757, 
-    "C.L. DUNN", 
-    60, 
-    "M", 
-    "DALTON GA", 
-    534, 
-    7407, 
-    566, 
-    7322
-  ], 
-  [
-    758, 
-    "JENNIFER ALSOBROOK", 
-    39, 
-    "F", 
-    "SUGAR HILL GA", 
-    37, 
-    7407, 
-    566, 
-    7383
-  ], 
-  [
-    759, 
-    "LAURA BETH JACKSON", 
-    18, 
-    "F", 
-    "ALPHARETTA GA", 
-    910, 
-    7408, 
-    566, 
-    7350
-  ], 
-  [
-    760, 
-    "EDDIE PULLEY", 
-    47, 
-    "M", 
-    "MARIETTA GA", 
-    1475, 
-    7409, 
-    566, 
-    7349
-  ], 
-  [
-    761, 
-    "GREG FANSLER", 
-    30, 
-    "M", 
-    "BLACKSBURG VA", 
-    589, 
-    7412, 
-    566, 
-    7362
-  ], 
-  [
-    762, 
-    "SUSIE PANNES", 
-    37, 
-    "F", 
-    "ORLANDO FL", 
-    1391, 
-    7412, 
-    566, 
-    7361
-  ], 
-  [
-    763, 
-    "RANDOLPH COOK", 
-    49, 
-    "M", 
-    "VILLA RICA GA", 
-    376, 
-    7414, 
-    566, 
-    7337
-  ], 
-  [
-    764, 
-    "KELLY ROTHWELL", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    1567, 
-    7414, 
-    566, 
-    7350
-  ], 
-  [
-    765, 
-    "ADELAIDA GALARZA", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    659, 
-    7416, 
-    567, 
-    7399
-  ], 
-  [
-    766, 
-    "ELOISA DUMAS", 
-    42, 
-    "F", 
-    "MARIETTA GA", 
-    530, 
-    7417, 
-    567, 
-    7401
-  ], 
-  [
-    767, 
-    "KERI CARTER", 
-    39, 
-    "F", 
-    "CUMMING GA", 
-    290, 
-    7420, 
-    567, 
-    7401
-  ], 
-  [
-    768, 
-    "MARY RUTH HAMBRICK", 
-    38, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    769, 
-    7423, 
-    567, 
-    7371
-  ], 
-  [
-    769, 
-    "BARRY PRENDERGAST", 
-    35, 
-    "M", 
-    "MABLETON GA", 
-    1464, 
-    7428, 
-    568, 
-    -1
-  ], 
-  [
-    770, 
-    "SHEAU-SHAN LIEW", 
-    31, 
-    "F", 
-    "SMYRNA GA", 
-    1099, 
-    7434, 
-    568, 
-    7355
-  ], 
-  [
-    771, 
-    "ALLY HUNG", 
-    35, 
-    "F", 
-    "SMYRNA GA", 
-    885, 
-    7435, 
-    568, 
-    7356
-  ], 
-  [
-    772, 
-    "DAWN SPECKHART", 
-    39, 
-    "F", 
-    "ROSWELL GA", 
-    1735, 
-    7437, 
-    568, 
-    7412
-  ], 
-  [
-    773, 
-    "JARED REEDER", 
-    31, 
-    "M", 
-    "SMYRNA GA", 
-    1506, 
-    7437, 
-    568, 
-    7420
-  ], 
-  [
-    774, 
-    "BARBIE BREGEN", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    2021, 
-    7438, 
-    568, 
-    7354
-  ], 
-  [
-    775, 
-    "LARRY SMITH", 
-    34, 
-    "M", 
-    "LOGANVILLE GA", 
-    1711, 
-    7439, 
-    568, 
-    7345
-  ], 
-  [
-    776, 
-    "LORI ANN ROBERTSON", 
-    38, 
-    "F", 
-    "DAHLONEGA GA", 
-    1542, 
-    7439, 
-    568, 
-    7372
-  ], 
-  [
-    777, 
-    "DEBRA POCH", 
-    40, 
-    "F", 
-    "SMYRNA GA", 
-    1448, 
-    7440, 
-    568, 
-    7416
-  ], 
-  [
-    778, 
-    "GARY POCH", 
-    44, 
-    "M", 
-    "SMYRNA GA", 
-    1449, 
-    7440, 
-    568, 
-    7416
-  ], 
-  [
-    779, 
-    "GREGG ERNST", 
-    45, 
-    "M", 
-    "ATLANTA GA", 
-    574, 
-    7442, 
-    569, 
-    7386
-  ], 
-  [
-    780, 
-    "ALEXIS ST JEAN", 
-    27, 
-    "F", 
-    "DENVER CO", 
-    1742, 
-    7444, 
-    569, 
-    7426
-  ], 
-  [
-    781, 
-    "ZACHERY SCHWARTZ", 
-    31, 
-    "M", 
-    "DULUTH GA", 
-    1622, 
-    7445, 
-    569, 
-    7370
-  ], 
-  [
-    782, 
-    "SHARON DEMIDIO", 
-    45, 
-    "F", 
-    "SENOIA GA", 
-    475, 
-    7447, 
-    569, 
-    7399
-  ], 
-  [
-    783, 
-    "ELIZABETH PHILLIPS", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    1435, 
-    7449, 
-    569, 
-    7414
-  ], 
-  [
-    784, 
-    "JAMES ONEAL", 
-    42, 
-    "M", 
-    "CUMMING GA", 
-    1368, 
-    7450, 
-    569, 
-    7386
-  ], 
-  [
-    785, 
-    "BECCA SUNDAL", 
-    38, 
-    "F", 
-    "SMYRNA GA", 
-    1788, 
-    7456, 
-    570, 
-    7433
-  ], 
-  [
-    786, 
-    "JENNY HUNTER", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    890, 
-    7457, 
-    570, 
-    7413
-  ], 
-  [
-    787, 
-    "ANDREW DAVEY", 
-    50, 
-    "M", 
-    "ATLANTA GA", 
-    445, 
-    7457, 
-    570, 
-    7413
-  ], 
-  [
-    788, 
-    "KELLIE LOVELL", 
-    40, 
-    "F", 
-    "GAINESVILLE GA", 
-    2025, 
-    7460, 
-    570, 
-    7433
-  ], 
-  [
-    789, 
-    "LEANNE BONSACK", 
-    44, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    173, 
-    7460, 
-    570, 
-    7417
-  ], 
-  [
-    790, 
-    "JELENA CRAWFORD", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    401, 
-    7460, 
-    570, 
-    7421
-  ], 
-  [
-    791, 
-    "KEVIN REDMON", 
-    30, 
-    "M", 
-    "MARIETTA GA", 
-    1503, 
-    7462, 
-    570, 
-    7422
-  ], 
-  [
-    792, 
-    "DESHA SECREST", 
-    34, 
-    "F", 
-    "HOLLY SPRINGS GA", 
-    1632, 
-    7462, 
-    570, 
-    7436
-  ], 
-  [
-    793, 
-    "JILL GRAY", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    723, 
-    7462, 
-    570, 
-    7436
-  ], 
-  [
-    794, 
-    "SCOTT RITTENBERG", 
-    47, 
-    "M", 
-    "ROSWELL GA", 
-    1533, 
-    7466, 
-    570, 
-    7418
-  ], 
-  [
-    795, 
-    "CARL LAI LEUNG", 
-    67, 
-    "M", 
-    "STONE MOUNTAIN GA", 
-    1047, 
-    7466, 
-    570, 
-    7461
-  ], 
-  [
-    796, 
-    "GEORGE MILLS", 
-    35, 
-    "M", 
-    "WOODSTOCK GA", 
-    1287, 
-    7468, 
-    570, 
-    7359
-  ], 
-  [
-    797, 
-    "RIGOBERTO HERNANDEZ", 
-    42, 
-    "M", 
-    "ATLANTA GA", 
-    838, 
-    7471, 
-    571, 
-    7450
-  ], 
-  [
-    798, 
-    "DANA ROBBINS", 
-    51, 
-    "M", 
-    "ATLANTA GA", 
-    1538, 
-    7481, 
-    571, 
-    7459
-  ], 
-  [
-    799, 
-    "AMY HERNANDEZ", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    837, 
-    7485, 
-    572, 
-    7463
-  ], 
-  [
-    800, 
-    "SAM MCCLENDON", 
-    46, 
-    "M", 
-    "MARIETTA GA", 
-    1199, 
-    7486, 
-    572, 
-    7454
-  ], 
-  [
-    801, 
-    "LINDSAY MCFEELEY", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    1216, 
-    7486, 
-    572, 
-    7432
-  ], 
-  [
-    802, 
-    "SHANNON HORSEY", 
-    34, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    867, 
-    7490, 
-    572, 
-    7423
-  ], 
-  [
-    803, 
-    "AMY RYAN", 
-    33, 
-    "F", 
-    "ALPHARETTA GA", 
-    1579, 
-    7494, 
-    573, 
-    7452
-  ], 
-  [
-    804, 
-    "TODD SHERMAN", 
-    41, 
-    "M", 
-    "MARIETTA GA", 
-    1667, 
-    7495, 
-    573, 
-    7423
-  ], 
-  [
-    805, 
-    "STACY KOLAND", 
-    40, 
-    "F", 
-    "MABLETON GA", 
-    1018, 
-    7495, 
-    573, 
-    7482
-  ], 
-  [
-    806, 
-    "STUART GRAY", 
-    37, 
-    "M", 
-    "TUCKER GA", 
-    725, 
-    7495, 
-    573, 
-    7432
-  ], 
-  [
-    807, 
-    "RYAN NICELER", 
-    37, 
-    "M", 
-    "TUCKER GA", 
-    1342, 
-    7496, 
-    573, 
-    7433
-  ], 
-  [
-    808, 
-    "EVETTE MCKENZIE", 
-    44, 
-    "F", 
-    "LITHONIA GA", 
-    1227, 
-    7496, 
-    573, 
-    7435
-  ], 
-  [
-    809, 
-    "REBECCA TIMMIS", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1841, 
-    7504, 
-    573, 
-    7465
-  ], 
-  [
-    810, 
-    "WILLIAM STULTZ", 
-    49, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    1776, 
-    7508, 
-    574, 
-    7438
-  ], 
-  [
-    811, 
-    "TRACY MCDONALD", 
-    50, 
-    "F", 
-    "MARIETTA GA", 
-    1210, 
-    7512, 
-    574, 
-    7443
-  ], 
-  [
-    812, 
-    "JEANNINE BERNSTEIN", 
-    37, 
-    "F", 
-    "SMYRNA GA", 
-    148, 
-    7517, 
-    574, 
-    7463
-  ], 
-  [
-    813, 
-    "JUSTIN CANTRELL", 
-    31, 
-    "M", 
-    "LILBURN GA", 
-    281, 
-    7519, 
-    574, 
-    7428
-  ], 
-  [
-    814, 
-    "MATTHEW SCHMOLESKY", 
-    39, 
-    "M", 
-    "OGDEN UT", 
-    1611, 
-    7525, 
-    575, 
-    7476
-  ], 
-  [
-    815, 
-    "MARIAN KING", 
-    41, 
-    "F", 
-    "DULUTH GA", 
-    1000, 
-    7527, 
-    575, 
-    7362
-  ], 
-  [
-    816, 
-    "SARA MCNABB", 
-    38, 
-    "F", 
-    "ROSWELL GA", 
-    1236, 
-    7528, 
-    575, 
-    7428
-  ], 
-  [
-    817, 
-    "TIA HARDY", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    785, 
-    7529, 
-    575, 
-    7490
-  ], 
-  [
-    818, 
-    "TREPHINA GALLOWAY", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    666, 
-    7532, 
-    575, 
-    7483
-  ], 
-  [
-    819, 
-    "JEFF NICHOLS", 
-    49, 
-    "M", 
-    "MARIETTA GA", 
-    1345, 
-    7534, 
-    576, 
-    7503
-  ], 
-  [
-    820, 
-    "SIMONE HOFFMAN", 
-    49, 
-    "F", 
-    "MARIETTA GA", 
-    849, 
-    7534, 
-    576, 
-    7503
-  ], 
-  [
-    821, 
-    "BRANDON CHECKETTS", 
-    31, 
-    "M", 
-    "ATHENS GA", 
-    322, 
-    7539, 
-    576, 
-    7484
-  ], 
-  [
-    822, 
-    "ANGIE BUDAY", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    235, 
-    7539, 
-    576, 
-    7479
-  ], 
-  [
-    823, 
-    "VICTOR MARIANO", 
-    52, 
-    "M", 
-    "SUWANEE GA", 
-    1169, 
-    7543, 
-    576, 
-    7476
-  ], 
-  [
-    824, 
-    "DOUGLAS GIBEAUT", 
-    47, 
-    "M", 
-    "ROSWELL GA", 
-    691, 
-    7543, 
-    576, 
-    7473
-  ], 
-  [
-    825, 
-    "MATTHEW O'HERN", 
-    25, 
-    "M", 
-    "SMYRNA GA", 
-    1359, 
-    7550, 
-    577, 
-    7494
-  ], 
-  [
-    826, 
-    "JENNIFER MCKINNON", 
-    34, 
-    "F", 
-    "NEWNAN GA", 
-    1228, 
-    7550, 
-    577, 
-    7495
-  ], 
-  [
-    827, 
-    "BETH MAGURE", 
-    40, 
-    "F", 
-    "CUMMING GA", 
-    1152, 
-    7551, 
-    577, 
-    7427
-  ], 
-  [
-    828, 
-    "MARK MASON", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    1183, 
-    7554, 
-    577, 
-    7509
-  ], 
-  [
-    829, 
-    "ANITA STRUSS", 
-    56, 
-    "F", 
-    "ARAGON GA", 
-    1773, 
-    7560, 
-    578, 
-    7475
-  ], 
-  [
-    830, 
-    "SEREN AYDEMIR", 
-    21, 
-    "F", 
-    "WARNER ROBINS GA", 
-    74, 
-    7560, 
-    578, 
-    7503
-  ], 
-  [
-    831, 
-    "TIFFANY BJERKEN", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    155, 
-    7561, 
-    578, 
-    7532
-  ], 
-  [
-    832, 
-    "AMANDA CUNNINGHAM", 
-    25, 
-    "F", 
-    "ROSWELL GA", 
-    416, 
-    7563, 
-    578, 
-    7497
-  ], 
-  [
-    833, 
-    "ROBERT ELLIOTT", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    564, 
-    7563, 
-    578, 
-    7492
-  ], 
-  [
-    834, 
-    "CURTIS WALLACE", 
-    29, 
-    "M", 
-    "LAGRANGE GA", 
-    1903, 
-    7564, 
-    578, 
-    7490
-  ], 
-  [
-    835, 
-    "CHRISTINE BAYE", 
-    40, 
-    "F", 
-    "KENNESAW GA", 
-    127, 
-    7570, 
-    578, 
-    7534
-  ], 
-  [
-    836, 
-    "BAI-HENG WANG", 
-    49, 
-    "M", 
-    "ALPHARETTA GA", 
-    1916, 
-    7572, 
-    578, 
-    7520
-  ], 
-  [
-    837, 
-    "CATHERINE LIEMOHN", 
-    43, 
-    "F", 
-    "ALPHARETTA GA", 
-    1098, 
-    7572, 
-    578, 
-    7530
-  ], 
-  [
-    838, 
-    "ZACK NELSON", 
-    33, 
-    "M", 
-    "SMYRNA GA", 
-    1340, 
-    7574, 
-    579, 
-    7477
-  ], 
-  [
-    839, 
-    "TONYA HARDEMAN", 
-    57, 
-    "M", 
-    "BREMEN GA", 
-    783, 
-    7574, 
-    579, 
-    7511
-  ], 
-  [
-    840, 
-    "TARA COWAN", 
-    33, 
-    "F", 
-    "SMYRNA GA", 
-    395, 
-    7575, 
-    579, 
-    7478
-  ], 
-  [
-    841, 
-    "STACI SANDERS", 
-    27, 
-    "F", 
-    "JEFFERSON GA", 
-    1591, 
-    7578, 
-    579, 
-    7507
-  ], 
-  [
-    842, 
-    "KIRKLYN WILSON", 
-    29, 
-    "F", 
-    "LULA GA", 
-    1980, 
-    7579, 
-    579, 
-    7508
-  ], 
-  [
-    843, 
-    "KEVIN DUNLAP", 
-    46, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    533, 
-    7580, 
-    579, 
-    7522
-  ], 
-  [
-    844, 
-    "SUSAN JOHNSON", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    950, 
-    7581, 
-    579, 
-    7490
-  ], 
-  [
-    845, 
-    "APARNA JUE", 
-    30, 
-    "F", 
-    "MARIETTA GA", 
-    963, 
-    7583, 
-    579, 
-    7518
-  ], 
-  [
-    846, 
-    "DANA MINCEY", 
-    32, 
-    "F", 
-    "DAHLONEGA GA", 
-    1289, 
-    7585, 
-    579, 
-    7512
-  ], 
-  [
-    847, 
-    "KIA TAYLOR", 
-    33, 
-    "F", 
-    "ACWORTH GA", 
-    1809, 
-    7585, 
-    579, 
-    7539
-  ], 
-  [
-    848, 
-    "RICKY CORNETT", 
-    40, 
-    "M", 
-    "DAHLONEGA GA", 
-    387, 
-    7585, 
-    579, 
-    7513
-  ], 
-  [
-    849, 
-    "ROSE HALE", 
-    40, 
-    "F", 
-    "MARIETTA GA", 
-    759, 
-    7586, 
-    580, 
-    7514
-  ], 
-  [
-    850, 
-    "ERIC GERALDS", 
-    40, 
-    "M", 
-    "MABLETON GA", 
-    686, 
-    7590, 
-    580, 
-    7562
-  ], 
-  [
-    851, 
-    "KRISTI GRECO", 
-    33, 
-    "F", 
-    "SOCIAL CIRCLE GA", 
-    727, 
-    7594, 
-    580, 
-    7515
-  ], 
-  [
-    852, 
-    "JESSICA HINTON", 
-    29, 
-    "F", 
-    "COVINGTON GA", 
-    844, 
-    7594, 
-    580, 
-    7515
-  ], 
-  [
-    853, 
-    "BRADLEY JAMES", 
-    47, 
-    "M", 
-    "ALPHARETTA GA", 
-    914, 
-    7595, 
-    580, 
-    7531
-  ], 
-  [
-    854, 
-    "SAIDA CABALLERO", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    266, 
-    7599, 
-    581, 
-    7508
-  ], 
-  [
-    855, 
-    "JENNIFER TARDELLI", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1800, 
-    7599, 
-    581, 
-    7528
-  ], 
-  [
-    856, 
-    "RYAN DOUGHERTY", 
-    17, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    512, 
-    7603, 
-    581, 
-    7559
-  ], 
-  [
-    857, 
-    "REBECCA HALES", 
-    52, 
-    "F", 
-    "ALPHARETTA GA", 
-    760, 
-    7604, 
-    581, 
-    7568
-  ], 
-  [
-    858, 
-    "JEFFREY TAYLOR", 
-    50, 
-    "M", 
-    "ALPHARETTA GA", 
-    1808, 
-    7604, 
-    581, 
-    7584
-  ], 
-  [
-    859, 
-    "THOMAS ESTELLA", 
-    35, 
-    "M", 
-    "MARIETTA GA", 
-    580, 
-    7606, 
-    581, 
-    7534
-  ], 
-  [
-    860, 
-    "MARGARET TRIPPE", 
-    26, 
-    "F", 
-    "SILVER SPRING MD", 
-    1854, 
-    7609, 
-    581, 
-    7518
-  ], 
-  [
-    861, 
-    "COLLINS ROUX", 
-    48, 
-    "F", 
-    "MARIETTA GA", 
-    1570, 
-    7609, 
-    581, 
-    7582
-  ], 
-  [
-    862, 
-    "RICHARD ABBOTT", 
-    41, 
-    "M", 
-    "CANTON GA", 
-    5, 
-    7613, 
-    582, 
-    7554
-  ], 
-  [
-    863, 
-    "SUSAN WALL", 
-    39, 
-    "F", 
-    "ROSWELL GA", 
-    1902, 
-    7614, 
-    582, 
-    7554
-  ], 
-  [
-    864, 
-    "LISA MAIER", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    1154, 
-    7618, 
-    582, 
-    7557
-  ], 
-  [
-    865, 
-    "KATE PIENTKA", 
-    30, 
-    "F", 
-    "ROSWELL GA", 
-    1442, 
-    7620, 
-    582, 
-    7596
-  ], 
-  [
-    866, 
-    "SARAH HOHWALD", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    851, 
-    7621, 
-    582, 
-    7581
-  ], 
-  [
-    867, 
-    "MICHELLE LORENZ", 
-    40, 
-    "F", 
-    "CANTON GA", 
-    1127, 
-    7625, 
-    582, 
-    7586
-  ], 
-  [
-    868, 
-    "JEFFREY PERRY", 
-    50, 
-    "M", 
-    "WACO GA", 
-    1420, 
-    7629, 
-    583, 
-    7521
-  ], 
-  [
-    869, 
-    "ROCKY WHITE", 
-    41, 
-    "M", 
-    "GRIFFIN GA", 
-    1961, 
-    7629, 
-    583, 
-    7584
-  ], 
-  [
-    870, 
-    "DAVID BUCHALTER", 
-    46, 
-    "M", 
-    "DECATUR GA", 
-    232, 
-    7632, 
-    583, 
-    7602
-  ], 
-  [
-    871, 
-    "KAREN JOHNSON", 
-    49, 
-    "F", 
-    "ELLIJAY GA", 
-    947, 
-    7634, 
-    583, 
-    7602
-  ], 
-  [
-    872, 
-    "GARY TURNER", 
-    48, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1870, 
-    7638, 
-    584, 
-    7610
-  ], 
-  [
-    873, 
-    "DANA GURELA", 
-    41, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    748, 
-    7639, 
-    584, 
-    7573
-  ], 
-  [
-    874, 
-    "CATHERINE CAMERON", 
-    36, 
-    "F", 
-    "DACULA GA", 
-    273, 
-    7639, 
-    584, 
-    7573
-  ], 
-  [
-    875, 
-    "ANGIE MOONEY", 
-    51, 
-    "F", 
-    "MARIETTA GA", 
-    1301, 
-    7647, 
-    584, 
-    7614
-  ], 
-  [
-    876, 
-    "GARY FACKETT", 
-    62, 
-    "M", 
-    "HENDERSON NV", 
-    586, 
-    7648, 
-    584, 
-    7620
-  ], 
-  [
-    877, 
-    "DEREK MULLINS", 
-    26, 
-    "M", 
-    "MARIETTA GA", 
-    1322, 
-    7656, 
-    585, 
-    7554
-  ], 
-  [
-    878, 
-    "RALPH LLOYD", 
-    66, 
-    "M", 
-    "DUNWOODY GA", 
-    1108, 
-    7661, 
-    585, 
-    7583
-  ], 
-  [
-    879, 
-    "JIMMY AHERN", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    17, 
-    7666, 
-    586, 
-    7604
-  ], 
-  [
-    880, 
-    "MICAH HOLDEN", 
-    29, 
-    "F", 
-    "KENNSAW GA", 
-    853, 
-    7666, 
-    586, 
-    7602
-  ], 
-  [
-    881, 
-    "TARA ARNOLD", 
-    35, 
-    "F", 
-    "SMYRNA GA", 
-    64, 
-    7667, 
-    586, 
-    7604
-  ], 
-  [
-    882, 
-    "JUSTIN WHITE", 
-    29, 
-    "M", 
-    "CLEVELAND TN", 
-    1959, 
-    7667, 
-    586, 
-    7603
-  ], 
-  [
-    883, 
-    "MICHELLE THOMAS", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    1822, 
-    7668, 
-    586, 
-    7576
-  ], 
-  [
-    884, 
-    "ABBI TAYLOR", 
-    44, 
-    "F", 
-    "DECATUR GA", 
-    1805, 
-    7679, 
-    587, 
-    7620
-  ], 
-  [
-    885, 
-    "BEN BRYANT", 
-    39, 
-    "M", 
-    "STOCKBRIDGE GA", 
-    228, 
-    7684, 
-    587, 
-    7509
-  ], 
-  [
-    886, 
-    "SPENCER BRIEN", 
-    31, 
-    "M", 
-    "DECATUR GA", 
-    205, 
-    7690, 
-    587, 
-    7627
-  ], 
-  [
-    887, 
-    "KELLY VAN NORT", 
-    39, 
-    "F", 
-    "SMYRNA GA", 
-    1879, 
-    7691, 
-    588, 
-    7628
-  ], 
-  [
-    888, 
-    "KAREN DEMPERS", 
-    47, 
-    "F", 
-    "ALPHARETTA GA", 
-    476, 
-    7692, 
-    588, 
-    7671
-  ], 
-  [
-    889, 
-    "CHRISTIE CHAPEL", 
-    39, 
-    "F", 
-    "BETHLEHEM GA", 
-    317, 
-    7702, 
-    588, 
-    7627
-  ], 
-  [
-    890, 
-    "NICHOLE ANDERSON", 
-    27, 
-    "F", 
-    "KENNESAW GA", 
-    54, 
-    7704, 
-    589, 
-    7609
-  ], 
-  [
-    891, 
-    "STEPHANIE SPILOTTO", 
-    34, 
-    "F", 
-    "CANTON GA", 
-    1739, 
-    7705, 
-    589, 
-    7678
-  ], 
-  [
-    892, 
-    "LAURA BARTON", 
-    34, 
-    "F", 
-    "CARROLLTON GA", 
-    117, 
-    7705, 
-    589, 
-    7646
-  ], 
-  [
-    893, 
-    "PETER HOAG", 
-    34, 
-    "M", 
-    "DUNWOODY GA", 
-    847, 
-    7707, 
-    589, 
-    7645
-  ], 
-  [
-    894, 
-    "HOLLY ADAMS", 
-    34, 
-    "F", 
-    "ALPHARETTA GA", 
-    9, 
-    7708, 
-    589, 
-    7647
-  ], 
-  [
-    895, 
-    "BRENTON STENSON", 
-    46, 
-    "M", 
-    "MCDONOUGH GA", 
-    1759, 
-    7709, 
-    589, 
-    7692
-  ], 
-  [
-    896, 
-    "BRAD LIPHAM", 
-    40, 
-    "M", 
-    "CARROLLTON GA", 
-    1105, 
-    7712, 
-    589, 
-    7636
-  ], 
-  [
-    897, 
-    "EMILY SHOEMAKER", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    1671, 
-    7714, 
-    589, 
-    7642
-  ], 
-  [
-    898, 
-    "CINDY RALSTON", 
-    53, 
-    "F", 
-    "HIRAM GA", 
-    1488, 
-    7717, 
-    590, 
-    7630
-  ], 
-  [
-    899, 
-    "TAMMY DENNEY", 
-    46, 
-    "F", 
-    "CARROLLTON GA", 
-    480, 
-    7718, 
-    590, 
-    7661
-  ], 
-  [
-    900, 
-    "JOHN DENNEY", 
-    63, 
-    "M", 
-    "CARROLLTON GA", 
-    479, 
-    7718, 
-    590, 
-    7660
-  ], 
-  [
-    901, 
-    "JENNIFER ROBERTS", 
-    36, 
-    "F", 
-    "MACON GA", 
-    1540, 
-    7722, 
-    590, 
-    7661
-  ], 
-  [
-    902, 
-    "JASON WRIGHT", 
-    32, 
-    "M", 
-    "MABLETON GA", 
-    2006, 
-    7723, 
-    590, 
-    7643
-  ], 
-  [
-    903, 
-    "MICAH DOWDY", 
-    22, 
-    "M", 
-    "MCDONOUGH GA", 
-    515, 
-    7723, 
-    590, 
-    7643
-  ], 
-  [
-    904, 
-    "TRINA SCHLECHT", 
-    38, 
-    "F", 
-    "ALPHARETTA GA", 
-    1606, 
-    7727, 
-    590, 
-    7685
-  ], 
-  [
-    905, 
-    "LEE ANN NASH", 
-    56, 
-    "F", 
-    "BARNESVILLE GA", 
-    1333, 
-    7729, 
-    590, 
-    7683
-  ], 
-  [
-    906, 
-    "JULIE POOLE", 
-    49, 
-    "F", 
-    "MARIETTA GA", 
-    1455, 
-    7729, 
-    590, 
-    7683
-  ], 
-  [
-    907, 
-    "SPEARS MALLIS", 
-    32, 
-    "M", 
-    "GAINESVILLE GA", 
-    1161, 
-    7736, 
-    591, 
-    7716
-  ], 
-  [
-    908, 
-    "ANGELIA CAMERON", 
-    41, 
-    "F", 
-    "MONTICELLO GA", 
-    272, 
-    7741, 
-    591, 
-    7687
-  ], 
-  [
-    909, 
-    "A ORTKIESE", 
-    42, 
-    "F", 
-    "ATLANTA GA", 
-    1375, 
-    7743, 
-    592, 
-    7723
-  ], 
-  [
-    910, 
-    "ERIN MULL", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    1321, 
-    7745, 
-    592, 
-    7688
-  ], 
-  [
-    911, 
-    "LORI BLANCHARD", 
-    42, 
-    "F", 
-    "SUWANEE GA", 
-    159, 
-    7747, 
-    592, 
-    7726
-  ], 
-  [
-    912, 
-    "MERIDITH OKEEFE", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1365, 
-    7749, 
-    592, 
-    7729
-  ], 
-  [
-    913, 
-    "NANCY LOCHMAN", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    1113, 
-    7751, 
-    592, 
-    7715
-  ], 
-  [
-    914, 
-    "VICKI GRIZZARD", 
-    39, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    742, 
-    7759, 
-    593, 
-    7673
-  ], 
-  [
-    915, 
-    "VICKI WASHINGTON", 
-    48, 
-    "F", 
-    "NICEVILLE FL", 
-    1927, 
-    7761, 
-    593, 
-    7701
-  ], 
-  [
-    916, 
-    "YEVONE DEAN", 
-    45, 
-    "F", 
-    "ACWORTH GA", 
-    462, 
-    7761, 
-    593, 
-    7702
-  ], 
-  [
-    917, 
-    "NAVEEN BOOMA", 
-    27, 
-    "M", 
-    "ATLANTA GA", 
-    175, 
-    7764, 
-    593, 
-    7740
-  ], 
-  [
-    918, 
-    "JOSEPH PATRICK", 
-    27, 
-    "M", 
-    "MILLEDGEVILLE GA", 
-    1403, 
-    7774, 
-    594, 
-    7670
-  ], 
-  [
-    919, 
-    "ANGIE BOGGS", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    167, 
-    7774, 
-    594, 
-    7736
-  ], 
-  [
-    920, 
-    "STACY WOLFF", 
-    45, 
-    "F", 
-    "MARIETTA GA", 
-    1997, 
-    7779, 
-    594, 
-    7732
-  ], 
-  [
-    921, 
-    "LAURA KURTZ", 
-    49, 
-    "F", 
-    "ROSWELL GA", 
-    1042, 
-    7783, 
-    595, 
-    7723
-  ], 
-  [
-    922, 
-    "TERRY SMITH", 
-    42, 
-    "M", 
-    "MCHENRY IL", 
-    1717, 
-    7783, 
-    595, 
-    7720
-  ], 
-  [
-    923, 
-    "CHRISTOPHER HICKMAN", 
-    34, 
-    "M", 
-    "MABLETON GA", 
-    842, 
-    7784, 
-    595, 
-    7739
-  ], 
-  [
-    924, 
-    "TRACY SELLARS", 
-    35, 
-    "F", 
-    "DALLAS GA", 
-    1639, 
-    7784, 
-    595, 
-    7720
-  ], 
-  [
-    925, 
-    "SUSAN MEHRE", 
-    43, 
-    "F", 
-    "ATLANTA GA", 
-    1249, 
-    7784, 
-    595, 
-    7713
-  ], 
-  [
-    926, 
-    "JAMES GAVIN", 
-    35, 
-    "M", 
-    "WOODSTOCK GA", 
-    679, 
-    7785, 
-    595, 
-    7690
-  ], 
-  [
-    927, 
-    "SUSAN BRADBURY", 
-    47, 
-    "F", 
-    "DECATUR GA", 
-    193, 
-    7785, 
-    595, 
-    7768
-  ], 
-  [
-    928, 
-    "MEGAN BAGBY", 
-    23, 
-    "F", 
-    "BIRMINGHAM AL", 
-    78, 
-    7788, 
-    595, 
-    7745
-  ], 
-  [
-    929, 
-    "PAUL LAZAR", 
-    45, 
-    "M", 
-    "WOODSTOCK GA", 
-    1069, 
-    7790, 
-    595, 
-    7722
-  ], 
-  [
-    930, 
-    "LYNN RIECK", 
-    42, 
-    "F", 
-    "ATLANTA GA", 
-    1526, 
-    7799, 
-    596, 
-    7744
-  ], 
-  [
-    931, 
-    "KELLY KITTLE", 
-    40, 
-    "F", 
-    "ALPHARETTA GA", 
-    1010, 
-    7802, 
-    596, 
-    7746
-  ], 
-  [
-    932, 
-    "JOHN KITTLE", 
-    41, 
-    "M", 
-    "ALPHARETTA GA", 
-    1009, 
-    7802, 
-    596, 
-    7746
-  ], 
-  [
-    933, 
-    "JOE DAVIS", 
-    57, 
-    "M", 
-    "CHATSWORTH GA", 
-    450, 
-    7803, 
-    596, 
-    7718
-  ], 
-  [
-    934, 
-    "KEN FORDE", 
-    41, 
-    "M", 
-    "SANDY SPRINGS GA", 
-    620, 
-    7807, 
-    596, 
-    7779
-  ], 
-  [
-    935, 
-    "CATHY ADDISON", 
-    50, 
-    "F", 
-    "ATLANTA GA", 
-    12, 
-    7814, 
-    597, 
-    7772
-  ], 
-  [
-    936, 
-    "ERIC SCHWARTZ", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    1620, 
-    7818, 
-    597, 
-    7749
-  ], 
-  [
-    937, 
-    "AVERY WIENS", 
-    17, 
-    "F", 
-    "ATLANTA GA", 
-    1966, 
-    7820, 
-    597, 
-    7720
-  ], 
-  [
-    938, 
-    "REBECCA ORTON", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    1376, 
-    7823, 
-    598, 
-    7755
-  ], 
-  [
-    939, 
-    "CASSIE LASSITER", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1060, 
-    7826, 
-    598, 
-    7784
-  ], 
-  [
-    940, 
-    "GURURAJ RAO", 
-    41, 
-    "M", 
-    "MARIETTA GA", 
-    1493, 
-    7828, 
-    598, 
-    7788
-  ], 
-  [
-    941, 
-    "YANTO YANTO", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    2014, 
-    7828, 
-    598, 
-    7811
-  ], 
-  [
-    942, 
-    "SHANE HEWGLEY", 
-    40, 
-    "M", 
-    "WOODSTOCK GA", 
-    841, 
-    7832, 
-    598, 
-    7799
-  ], 
-  [
-    943, 
-    "KATIE WRIGHT", 
-    32, 
-    "F", 
-    "MABLETON GA", 
-    2007, 
-    7835, 
-    599, 
-    7755
-  ], 
-  [
-    944, 
-    "MICHAEL RUSSELL", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    1577, 
-    7837, 
-    599, 
-    7780
-  ], 
-  [
-    945, 
-    "AARON BARTELS", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    111, 
-    7839, 
-    599, 
-    7824
-  ], 
-  [
-    946, 
-    "CALLEY MERSMANN", 
-    21, 
-    "F", 
-    "SNELLVILLE GA", 
-    1264, 
-    7840, 
-    599, 
-    7727
-  ], 
-  [
-    947, 
-    "DESMOND SULLIVAN", 
-    34, 
-    "M", 
-    "ATLANTA GA", 
-    1780, 
-    7843, 
-    599, 
-    7749
-  ], 
-  [
-    948, 
-    "REETIKA NIJHAWAN", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    1348, 
-    7845, 
-    599, 
-    7790
-  ], 
-  [
-    949, 
-    "BARRY BARTON", 
-    37, 
-    "M", 
-    "CARROLLTON GA", 
-    114, 
-    7847, 
-    599, 
-    7789
-  ], 
-  [
-    950, 
-    "STEVE DRUCKENMILLER", 
-    47, 
-    "M", 
-    "CUMMING GA", 
-    526, 
-    7850, 
-    600, 
-    7804
-  ], 
-  [
-    951, 
-    "LANNY BRANUM", 
-    37, 
-    "M", 
-    "DUNWOODY GA", 
-    196, 
-    7851, 
-    600, 
-    7783
-  ], 
-  [
-    952, 
-    "LUTHER OPJORDEN", 
-    65, 
-    "M", 
-    "MILAN MN", 
-    1373, 
-    7854, 
-    600, 
-    7787
-  ], 
-  [
-    953, 
-    "RODNEY EDWARDS", 
-    34, 
-    "M", 
-    "CANTON GA", 
-    552, 
-    7855, 
-    600, 
-    7801
-  ], 
-  [
-    954, 
-    "TINA HARMON", 
-    42, 
-    "F", 
-    "ATLANTA GA", 
-    788, 
-    7856, 
-    600, 
-    7796
-  ], 
-  [
-    955, 
-    "GREG WERCHANOWSKYJ", 
-    36, 
-    "M", 
-    "HELENA AL", 
-    1948, 
-    7856, 
-    600, 
-    7770
-  ], 
-  [
-    956, 
-    "BRANDON TYLER", 
-    26, 
-    "M", 
-    "ATLANTA GA", 
-    1872, 
-    7863, 
-    601, 
-    7809
-  ], 
-  [
-    957, 
-    "RALPH GIACOMARRO", 
-    49, 
-    "M", 
-    "CUMMING GA", 
-    690, 
-    7865, 
-    601, 
-    7804
-  ], 
-  [
-    958, 
-    "ELIZABETH WARD", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    1919, 
-    7870, 
-    601, 
-    7844
-  ], 
-  [
-    959, 
-    "KIMBERLY ELLIS", 
-    29, 
-    "F", 
-    "PRATTVILLE AL", 
-    566, 
-    7873, 
-    601, 
-    7802
-  ], 
-  [
-    960, 
-    "GUY CHAMBLESS", 
-    38, 
-    "M", 
-    "ADAIRSVILLE GA", 
-    313, 
-    7876, 
-    602, 
-    7865
-  ], 
-  [
-    961, 
-    "CHRIS YUEH", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    2017, 
-    7883, 
-    602, 
-    7731
-  ], 
-  [
-    962, 
-    "KATE HANNON", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    775, 
-    7883, 
-    602, 
-    7803
-  ], 
-  [
-    963, 
-    "JAMES TAYLOR", 
-    25, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    1807, 
-    7886, 
-    602, 
-    7822
-  ], 
-  [
-    964, 
-    "NICOLE MEADOR", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    1245, 
-    7887, 
-    602, 
-    7840
-  ], 
-  [
-    965, 
-    "CHANDRA BOZEMAN", 
-    41, 
-    "F", 
-    "JOHNS CREEK GA", 
-    188, 
-    7887, 
-    603, 
-    7818
-  ], 
-  [
-    966, 
-    "KIM SHUFORD", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1677, 
-    7888, 
-    603, 
-    7807
-  ], 
-  [
-    967, 
-    "SHAREE CLARKE", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    336, 
-    7889, 
-    603, 
-    7819
-  ], 
-  [
-    968, 
-    "MIKE LUEBECK", 
-    55, 
-    "M", 
-    "MCDONOUGH GA", 
-    1132, 
-    7892, 
-    603, 
-    7847
-  ], 
-  [
-    969, 
-    "ASHLEY WILLIAMS", 
-    38, 
-    "F", 
-    "MABLETON GA", 
-    1971, 
-    7896, 
-    603, 
-    7815
-  ], 
-  [
-    970, 
-    "CHRISTI MCCAREY", 
-    44, 
-    "F", 
-    "MARIETTA GA", 
-    1194, 
-    7906, 
-    604, 
-    7875
-  ], 
-  [
-    971, 
-    "WHITNEY BROWN", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    221, 
-    7906, 
-    604, 
-    7836
-  ], 
-  [
-    972, 
-    "WALT LIPHAM", 
-    15, 
-    "M", 
-    "CARROLLTON GA", 
-    1106, 
-    7915, 
-    605, 
-    7838
-  ], 
-  [
-    973, 
-    "JARIAN RICH", 
-    31, 
-    "M", 
-    "WOODSTOCK GA", 
-    1520, 
-    7915, 
-    605, 
-    7860
-  ], 
-  [
-    974, 
-    "COLLEEN SPRAYBERRY", 
-    48, 
-    "F", 
-    "NEWNAN GA", 
-    1741, 
-    7924, 
-    605, 
-    7880
-  ], 
-  [
-    975, 
-    "ANDREW SAMPSON", 
-    29, 
-    "M", 
-    "LAKELAND FL", 
-    1585, 
-    7926, 
-    605, 
-    7862
-  ], 
-  [
-    976, 
-    "SAMUEL SAMPSON", 
-    30, 
-    "M", 
-    "MARIETTA GA", 
-    1586, 
-    7926, 
-    605, 
-    7863
-  ], 
-  [
-    977, 
-    "LOU DEMARINO", 
-    37, 
-    "M", 
-    "MABLETON GA", 
-    471, 
-    7930, 
-    606, 
-    7899
-  ], 
-  [
-    978, 
-    "MARICELA SMITH", 
-    39, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1712, 
-    7931, 
-    606, 
-    7837
-  ], 
-  [
-    979, 
-    "AMBER COOK", 
-    39, 
-    "F", 
-    "WOODSTOCK GA", 
-    373, 
-    7937, 
-    606, 
-    7905
-  ], 
-  [
-    980, 
-    "ELIZABETH BROWN", 
-    14, 
-    "F", 
-    "ANNISTON AL", 
-    218, 
-    7937, 
-    606, 
-    7865
-  ], 
-  [
-    981, 
-    "JAMIE LIMBAUGH", 
-    33, 
-    "F", 
-    "ANNISTON AL", 
-    1101, 
-    7938, 
-    606, 
-    7866
-  ], 
-  [
-    982, 
-    "MARK LEWIS", 
-    39, 
-    "M", 
-    "ACWORTH GA", 
-    1092, 
-    7940, 
-    607, 
-    7907
-  ], 
-  [
-    983, 
-    "ANDREA GEPFER", 
-    27, 
-    "F", 
-    "ACWORTH GA", 
-    685, 
-    7945, 
-    607, 
-    7858
-  ], 
-  [
-    984, 
-    "JAMES KING", 
-    50, 
-    "M", 
-    "ATLANTA GA", 
-    2140, 
-    7946, 
-    607, 
-    7867
-  ], 
-  [
-    985, 
-    "MICHAEL ETHRIDGE", 
-    44, 
-    "M", 
-    "MARIETTA GA", 
-    584, 
-    7946, 
-    607, 
-    7873
-  ], 
-  [
-    986, 
-    "MARK KAUFMAN", 
-    61, 
-    "M", 
-    "ATLANTA GA", 
-    971, 
-    7950, 
-    607, 
-    7866
-  ], 
-  [
-    987, 
-    "SUSAN ALDRICH", 
-    64, 
-    "F", 
-    "JOHNS CREEK GA", 
-    29, 
-    7951, 
-    607, 
-    7914
-  ], 
-  [
-    988, 
-    "JODY ALDERMAN", 
-    53, 
-    "M", 
-    "DECATUR GA", 
-    27, 
-    7954, 
-    608, 
-    7903
-  ], 
-  [
-    989, 
-    "DEBYE ALDERMAN", 
-    55, 
-    "F", 
-    "DECATUR GA", 
-    26, 
-    7954, 
-    608, 
-    7903
-  ], 
-  [
-    990, 
-    "BOB REEVES", 
-    43, 
-    "M", 
-    "MARIETTA GA", 
-    1507, 
-    7956, 
-    608, 
-    7929
-  ], 
-  [
-    991, 
-    "KERRY DOUGHERTY", 
-    44, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    511, 
-    7957, 
-    608, 
-    7899
-  ], 
-  [
-    992, 
-    "GLORIA LAWTON", 
-    27, 
-    "F", 
-    "CUMMING GA", 
-    1067, 
-    7957, 
-    608, 
-    7884
-  ], 
-  [
-    993, 
-    "LEAH WOLFE", 
-    31, 
-    "F", 
-    "MARIETTA GA", 
-    1994, 
-    7957, 
-    608, 
-    7927
-  ], 
-  [
-    994, 
-    "AIMEE WATKISS", 
-    35, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1932, 
-    7958, 
-    608, 
-    7868
-  ], 
-  [
-    995, 
-    "DANIEL DONOHUE", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    507, 
-    7959, 
-    608, 
-    7927
-  ], 
-  [
-    996, 
-    "CAROLINE PHILSON", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1438, 
-    7963, 
-    608, 
-    7810
-  ], 
-  [
-    997, 
-    "ASTRID FONTAINE", 
-    41, 
-    "F", 
-    "MABLETON GA", 
-    618, 
-    7964, 
-    608, 
-    7940
-  ], 
-  [
-    998, 
-    "KIM SCHOEN", 
-    50, 
-    "F", 
-    "COHUTTA GA", 
-    1615, 
-    7964, 
-    608, 
-    7883
-  ], 
-  [
-    999, 
-    "KACIE DARDEN", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    442, 
-    7965, 
-    608, 
-    7883
-  ], 
-  [
-    1000, 
-    "SANDRA HUEY", 
-    48, 
-    "F", 
-    "CARROLLTON GA", 
-    881, 
-    7966, 
-    609, 
-    7878
-  ], 
-  [
-    1001, 
-    "MICHAEL JAMIESON", 
-    45, 
-    "M", 
-    "SUWANEE GA", 
-    918, 
-    7968, 
-    609, 
-    7859
-  ], 
-  [
-    1002, 
-    "DANIEL JAMES", 
-    40, 
-    "M", 
-    "DACULA GA", 
-    915, 
-    7975, 
-    609, 
-    7915
-  ], 
-  [
-    1003, 
-    "KARLA BROOKRESON-OWENS", 
-    35, 
-    "F", 
-    "STOCKBRIDGE GA", 
-    211, 
-    7976, 
-    609, 
-    7862
-  ], 
-  [
-    1004, 
-    "CHRISTOPHER TENNANT", 
-    39, 
-    "M", 
-    "ATLANTA GA", 
-    1816, 
-    7978, 
-    609, 
-    7879
-  ], 
-  [
-    1005, 
-    "ELLIS THORP", 
-    45, 
-    "M", 
-    "ATLANTA GA", 
-    1831, 
-    7982, 
-    610, 
-    7927
-  ], 
-  [
-    1006, 
-    "SUZANNE LEBLANC", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    1076, 
-    7982, 
-    610, 
-    7927
-  ], 
-  [
-    1007, 
-    "MEGHAN STACK", 
-    25, 
-    "F", 
-    "ACWORTH GA", 
-    1747, 
-    7983, 
-    610, 
-    7895
-  ], 
-  [
-    1008, 
-    "DONNA THOMPSON", 
-    41, 
-    "F", 
-    "CARROLLTON GA", 
-    1824, 
-    7989, 
-    610, 
-    7944
-  ], 
-  [
-    1009, 
-    "JOSHUA CURRAN", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    422, 
-    7990, 
-    610, 
-    7921
-  ], 
-  [
-    1010, 
-    "BRAD TROHA", 
-    36, 
-    "M", 
-    "DUNWOODY GA", 
-    1855, 
-    7991, 
-    610, 
-    7879
-  ], 
-  [
-    1011, 
-    "SARAH GOODBREAD", 
-    28, 
-    "F", 
-    "KENNESAW GA", 
-    708, 
-    7993, 
-    611, 
-    7891
-  ], 
-  [
-    1012, 
-    "MELODY SANFREY", 
-    38, 
-    "F", 
-    "MACON GA", 
-    1594, 
-    7995, 
-    611, 
-    7934
-  ], 
-  [
-    1013, 
-    "STACEY HIPPS", 
-    27, 
-    "F", 
-    "CUMMING GA", 
-    845, 
-    7999, 
-    611, 
-    7958
-  ], 
-  [
-    1014, 
-    "KATIE URBAN", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    1875, 
-    7999, 
-    611, 
-    7968
-  ], 
-  [
-    1015, 
-    "CHRISTIE WILLIAMS", 
-    35, 
-    "F", 
-    "MARIETTA GA", 
-    1972, 
-    8002, 
-    611, 
-    7903
-  ], 
-  [
-    1016, 
-    "CINDY LOHEIDE", 
-    39, 
-    "F", 
-    "MABLETON GA", 
-    1119, 
-    8002, 
-    611, 
-    7903
-  ], 
-  [
-    1017, 
-    "CHARLES EARL", 
-    32, 
-    "M", 
-    "ATLANTA GA", 
-    540, 
-    8002, 
-    611, 
-    7954
-  ], 
-  [
-    1018, 
-    "PAOLA BEACH", 
-    41, 
-    "F", 
-    "LILBURN GA", 
-    128, 
-    8005, 
-    612, 
-    7908
-  ], 
-  [
-    1019, 
-    "JUDITH ROBINSON", 
-    48, 
-    "F", 
-    "MARIETTA GA", 
-    1544, 
-    8008, 
-    612, 
-    7961
-  ], 
-  [
-    1020, 
-    "ROSINA AUGSBURGER", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    71, 
-    8018, 
-    612, 
-    7965
-  ], 
-  [
-    1021, 
-    "SCARLET HAYES", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    2023, 
-    8019, 
-    613, 
-    7946
-  ], 
-  [
-    1022, 
-    "KATIE GOLDSMITH", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    704, 
-    8025, 
-    613, 
-    7999
-  ], 
-  [
-    1023, 
-    "BRETT LAZANSKY", 
-    38, 
-    "M", 
-    "JOHNS CREEK GA", 
-    1068, 
-    8025, 
-    613, 
-    7997
-  ], 
-  [
-    1024, 
-    "DOUG STROMMEN", 
-    50, 
-    "M", 
-    "MARIETTA GA", 
-    1771, 
-    8027, 
-    613, 
-    7954
-  ], 
-  [
-    1025, 
-    "TOM KESLING", 
-    40, 
-    "M", 
-    "ACWORTH GA", 
-    991, 
-    8037, 
-    614, 
-    7967
-  ], 
-  [
-    1026, 
-    "ROBERT FRIESS", 
-    37, 
-    "M", 
-    "KENNESAW GA", 
-    648, 
-    8037, 
-    614, 
-    7967
-  ], 
-  [
-    1027, 
-    "KIMBERLY NICKELS", 
-    34, 
-    "F", 
-    "WOODSTOCK GA", 
-    1346, 
-    8040, 
-    614, 
-    7972
-  ], 
-  [
-    1028, 
-    "PETER BRACCI", 
-    33, 
-    "M", 
-    "SMYRNA GA", 
-    191, 
-    8042, 
-    614, 
-    7973
-  ], 
-  [
-    1029, 
-    "LILLIAN BARNES", 
-    43, 
-    "F", 
-    "DALLAS GA", 
-    103, 
-    8047, 
-    615, 
-    8033
-  ], 
-  [
-    1030, 
-    "KIM FRANLIN", 
-    29, 
-    "F", 
-    "MARIETTA GA", 
-    633, 
-    8048, 
-    615, 
-    7993
-  ], 
-  [
-    1031, 
-    "MELODY SHELTON", 
-    42, 
-    "F", 
-    "MARIETTA GA", 
-    1665, 
-    8054, 
-    615, 
-    7976
-  ], 
-  [
-    1032, 
-    "EVELYN RACHED", 
-    33, 
-    "F", 
-    "ALPHARETTA GA", 
-    1480, 
-    8058, 
-    616, 
-    7985
-  ], 
-  [
-    1033, 
-    "CRAIG CHAMBERS", 
-    45, 
-    "M", 
-    "MCDONOUGH GA", 
-    311, 
-    8059, 
-    616, 
-    7967
-  ], 
-  [
-    1034, 
-    "CINDI CHAMBERS", 
-    42, 
-    "F", 
-    "MCDONOUGH GA", 
-    310, 
-    8059, 
-    616, 
-    7966
-  ], 
-  [
-    1035, 
-    "DONNA CLEARY", 
-    43, 
-    "F", 
-    "MCDONOUGH GA", 
-    338, 
-    8060, 
-    616, 
-    7967
-  ], 
-  [
-    1036, 
-    "RYAN HANSELL", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    777, 
-    8060, 
-    616, 
-    8009
-  ], 
-  [
-    1037, 
-    "AMANDA HANSELL", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    776, 
-    8060, 
-    616, 
-    8010
-  ], 
-  [
-    1038, 
-    "EUGENE VAN SICKLE", 
-    38, 
-    "M", 
-    "DAHLONEGA GA", 
-    1881, 
-    8062, 
-    616, 
-    7995
-  ], 
-  [
-    1039, 
-    "MARY HARPER", 
-    45, 
-    "F", 
-    "ATLANTA GA", 
-    790, 
-    8063, 
-    616, 
-    7893
-  ], 
-  [
-    1040, 
-    "SRIDHAR VENNA", 
-    36, 
-    "M", 
-    "SMYRNA GA", 
-    1889, 
-    8074, 
-    617, 
-    7990
-  ], 
-  [
-    1041, 
-    "GARY ANDREWS", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    55, 
-    8075, 
-    617, 
-    8016
-  ], 
-  [
-    1042, 
-    "BOBBI HARWOOD", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    807, 
-    8078, 
-    617, 
-    8020
-  ], 
-  [
-    1043, 
-    "YVETTE MORGAN", 
-    37, 
-    "F", 
-    "SUWANEE GA", 
-    1313, 
-    8081, 
-    617, 
-    8011
-  ], 
-  [
-    1044, 
-    "CATHY BANKSTON", 
-    36, 
-    "F", 
-    "FORSYTH GA", 
-    95, 
-    8086, 
-    618, 
-    8004
-  ], 
-  [
-    1045, 
-    "LORI WARD", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    1921, 
-    8090, 
-    618, 
-    8063
-  ], 
-  [
-    1046, 
-    "MELANIE GERNATT", 
-    52, 
-    "F", 
-    "MARIETTA GA", 
-    689, 
-    8091, 
-    618, 
-    8063
-  ], 
-  [
-    1047, 
-    "VALERIE DAVIS", 
-    39, 
-    "F", 
-    "KENNESAW GA", 
-    456, 
-    8091, 
-    618, 
-    8009
-  ], 
-  [
-    1048, 
-    "RONALD PRINCE", 
-    52, 
-    "M", 
-    "MARIETTA GA", 
-    1471, 
-    8091, 
-    618, 
-    8010
-  ], 
-  [
-    1049, 
-    "JENNIFER COOKE", 
-    29, 
-    "F", 
-    "CUMMING GA", 
-    379, 
-    8092, 
-    618, 
-    8024
-  ], 
-  [
-    1050, 
-    "DANIEL SHUFORD", 
-    33, 
-    "M", 
-    "ATLANTA GA", 
-    1676, 
-    8094, 
-    618, 
-    8011
-  ], 
-  [
-    1051, 
-    "KATHI KIMBELL", 
-    45, 
-    "F", 
-    "GRIFFIN GA", 
-    997, 
-    8096, 
-    618, 
-    8051
-  ], 
-  [
-    1052, 
-    "AMANDA KREFT", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    1023, 
-    8099, 
-    619, 
-    8057
-  ], 
-  [
-    1053, 
-    "KEVIN KREFT", 
-    35, 
-    "M", 
-    "CANTON GA", 
-    1024, 
-    8100, 
-    619, 
-    8057
-  ], 
-  [
-    1054, 
-    "AMANDA JACOBS", 
-    37, 
-    "F", 
-    "SUWANEE GA", 
-    2024, 
-    8100, 
-    619, 
-    8016
-  ], 
-  [
-    1055, 
-    "RYAN FREEL", 
-    32, 
-    "M", 
-    "MARIETTA GA", 
-    638, 
-    8102, 
-    619, 
-    8038
-  ], 
-  [
-    1056, 
-    "SCOTT DRINKARD", 
-    44, 
-    "M", 
-    "ATLANTA GA", 
-    523, 
-    8103, 
-    619, 
-    8036
-  ], 
-  [
-    1057, 
-    "AMY MERRILL", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1258, 
-    8105, 
-    619, 
-    8049
-  ], 
-  [
-    1058, 
-    "CHAD MERRILL", 
-    43, 
-    "M", 
-    "ATLANTA GA", 
-    1260, 
-    8105, 
-    619, 
-    8049
-  ], 
-  [
-    1059, 
-    "JENNY SCHNEIDER", 
-    43, 
-    "F", 
-    "CUMMING GA", 
-    1612, 
-    8113, 
-    620, 
-    8079
-  ], 
-  [
-    1060, 
-    "TERRIE TILLMAN", 
-    42, 
-    "F", 
-    "SMYRNA GA", 
-    1839, 
-    8114, 
-    620, 
-    8059
-  ], 
-  [
-    1061, 
-    "NICK J BIERIE", 
-    21, 
-    "M", 
-    "ACWORTH GA", 
-    154, 
-    8114, 
-    620, 
-    8046
-  ], 
-  [
-    1062, 
-    "SHARON LAWSON", 
-    30, 
-    "F", 
-    "SUWANEE GA", 
-    1066, 
-    8117, 
-    620, 
-    8074
-  ], 
-  [
-    1063, 
-    "MARTHA PACINI", 
-    50, 
-    "F", 
-    "ATLANTA GA", 
-    1386, 
-    8118, 
-    620, 
-    8009
-  ], 
-  [
-    1064, 
-    "JENNIFER WEINGARTH", 
-    38, 
-    "F", 
-    "SUWANEE GA", 
-    1941, 
-    8119, 
-    620, 
-    8077
-  ], 
-  [
-    1065, 
-    "COLLEEN DESANTIS", 
-    45, 
-    "F", 
-    "MARIETTA FL", 
-    482, 
-    8120, 
-    620, 
-    8023
-  ], 
-  [
-    1066, 
-    "SALLIE HONEYCHURCH", 
-    55, 
-    "F", 
-    "ATLANTA GA", 
-    859, 
-    8123, 
-    621, 
-    8044
-  ], 
-  [
-    1067, 
-    "LARRY PEPPER", 
-    60, 
-    "M", 
-    "ALPHARETTA GA", 
-    1417, 
-    8123, 
-    621, 
-    8094
-  ], 
-  [
-    1068, 
-    "MELISSA HAPGOOD", 
-    42, 
-    "F", 
-    "SMYRNA GA", 
-    780, 
-    8124, 
-    621, 
-    8061
-  ], 
-  [
-    1069, 
-    "DEBBIE BRYANT", 
-    54, 
-    "F", 
-    "JASPER GA", 
-    229, 
-    8126, 
-    621, 
-    8069
-  ], 
-  [
-    1070, 
-    "KATHIE WOOD", 
-    43, 
-    "F", 
-    "MARIETTAQ GA", 
-    1999, 
-    8127, 
-    621, 
-    8019
-  ], 
-  [
-    1071, 
-    "DENISE MIRABELLA", 
-    40, 
-    "F", 
-    "CANTON GA", 
-    1290, 
-    8130, 
-    621, 
-    8051
-  ], 
-  [
-    1072, 
-    "NICKI MARMOLL", 
-    46, 
-    "F", 
-    "MARIETTA GA", 
-    1171, 
-    8134, 
-    621, 
-    8036
-  ], 
-  [
-    1073, 
-    "KELLY EMERICK", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    570, 
-    8136, 
-    622, 
-    8082
-  ], 
-  [
-    1074, 
-    "LEE BECKNELL", 
-    32, 
-    "F", 
-    "TUCKER GA", 
-    135, 
-    8141, 
-    622, 
-    8064
-  ], 
-  [
-    1075, 
-    "JEANNA CHALLY", 
-    37, 
-    "F", 
-    "SMYRNA GA", 
-    308, 
-    8143, 
-    622, 
-    8039
-  ], 
-  [
-    1076, 
-    "DARREN MARTIN", 
-    36, 
-    "M", 
-    "DAHLONEGA GA", 
-    1173, 
-    8147, 
-    622, 
-    8096
-  ], 
-  [
-    1077, 
-    "WESLEY PARKER", 
-    39, 
-    "M", 
-    "CALHOUN GA", 
-    1396, 
-    8152, 
-    623, 
-    8023
-  ], 
-  [
-    1078, 
-    "JOY SANDOZ", 
-    39, 
-    "F", 
-    "SANDY SPRINGS GA", 
-    1593, 
-    8152, 
-    623, 
-    8071
-  ], 
-  [
-    1079, 
-    "MICHAEL QUIGLEY", 
-    38, 
-    "M", 
-    "ATLANTA GA", 
-    1476, 
-    8153, 
-    623, 
-    8082
-  ], 
-  [
-    1080, 
-    "LINDA NATTRASS", 
-    38, 
-    "F", 
-    "WOODSTOCK GA", 
-    1334, 
-    8156, 
-    623, 
-    8072
-  ], 
-  [
-    1081, 
-    "APRIL STAMBAUGH", 
-    40, 
-    "F", 
-    "ALPHARETTA GA", 
-    1750, 
-    8164, 
-    624, 
-    8093
-  ], 
-  [
-    1082, 
-    "MEERA MODI", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    1295, 
-    8167, 
-    624, 
-    8071
-  ], 
-  [
-    1083, 
-    "REBECCA ROFFMAN", 
-    28, 
-    "F", 
-    "DECATUR GA", 
-    1550, 
-    8167, 
-    624, 
-    8071
-  ], 
-  [
-    1084, 
-    "SUSAN MILLS", 
-    62, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1288, 
-    8168, 
-    624, 
-    8091
-  ], 
-  [
-    1085, 
-    "KRISTIN DEMELFI", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    473, 
-    8171, 
-    624, 
-    8091
-  ], 
-  [
-    1086, 
-    "KIM CEPULL", 
-    41, 
-    "F", 
-    "ROSWELL GA", 
-    305, 
-    8177, 
-    625, 
-    8099
-  ], 
-  [
-    1087, 
-    "CARY SCALES", 
-    36, 
-    "F", 
-    "SMYRNA GA", 
-    1599, 
-    8186, 
-    625, 
-    8161
-  ], 
-  [
-    1088, 
-    "DENISE BIERIE", 
-    54, 
-    "F", 
-    "ACWORTH GA", 
-    153, 
-    8187, 
-    625, 
-    8119
-  ], 
-  [
-    1089, 
-    "BRIAN BRODSKY", 
-    29, 
-    "M", 
-    "CARROLLTON GA", 
-    208, 
-    8188, 
-    625, 
-    8165
-  ], 
-  [
-    1090, 
-    "ANASTASIA WALKER", 
-    38, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1901, 
-    8189, 
-    626, 
-    8141
-  ], 
-  [
-    1091, 
-    "CRAIG SHULER", 
-    43, 
-    "M", 
-    "SMYRNA GA", 
-    1678, 
-    8196, 
-    626, 
-    8125
-  ], 
-  [
-    1092, 
-    "MELISSA ADAMS", 
-    33, 
-    "F", 
-    "DAHLONEGA GA", 
-    11, 
-    8200, 
-    626, 
-    8085
-  ], 
-  [
-    1093, 
-    "MEG ROBINSON", 
-    31, 
-    "F", 
-    "DECATUR GA", 
-    1546, 
-    8204, 
-    627, 
-    8151
-  ], 
-  [
-    1094, 
-    "THERESA SMITH", 
-    41, 
-    "F", 
-    "MABLETON GA", 
-    1718, 
-    8205, 
-    627, 
-    8140
-  ], 
-  [
-    1095, 
-    "DEON WILLIS", 
-    40, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1978, 
-    8207, 
-    627, 
-    8176
-  ], 
-  [
-    1096, 
-    "JASON BEAVER", 
-    37, 
-    "M", 
-    "DULUTH GA", 
-    132, 
-    8210, 
-    627, 
-    8194
-  ], 
-  [
-    1097, 
-    "LISA WEARING", 
-    43, 
-    "F", 
-    "ATLANTA GA", 
-    1936, 
-    8210, 
-    627, 
-    8145
-  ], 
-  [
-    1098, 
-    "JODI BOSSAK", 
-    33, 
-    "F", 
-    "AUSTELL GA", 
-    176, 
-    8217, 
-    628, 
-    8139
-  ], 
-  [
-    1099, 
-    "ROBERT OWEN", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    1381, 
-    8223, 
-    628, 
-    8166
-  ], 
-  [
-    1100, 
-    "LORI BRENNAN", 
-    36, 
-    "F", 
-    "MABLETON GA", 
-    201, 
-    8224, 
-    628, 
-    8144
-  ], 
-  [
-    1101, 
-    "DONALD STAPLES", 
-    50, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    1756, 
-    8230, 
-    629, 
-    8142
-  ], 
-  [
-    1102, 
-    "MELINDA PRUITT", 
-    41, 
-    "F", 
-    "GRIFFIN GA", 
-    1474, 
-    8234, 
-    629, 
-    8176
-  ], 
-  [
-    1103, 
-    "JESSICA CUMMO", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    414, 
-    8235, 
-    629, 
-    8072
-  ], 
-  [
-    1104, 
-    "MILLARD DAVIS", 
-    57, 
-    "M", 
-    "ATLANTA GA", 
-    452, 
-    8236, 
-    629, 
-    8167
-  ], 
-  [
-    1105, 
-    "AMY JEWETT", 
-    39, 
-    "F", 
-    "ROSWELL GA", 
-    934, 
-    8237, 
-    629, 
-    8180
-  ], 
-  [
-    1106, 
-    "LISA TERRY", 
-    45, 
-    "F", 
-    "JOHNS CREEK GA", 
-    1817, 
-    8237, 
-    629, 
-    -1
-  ], 
-  [
-    1107, 
-    "ROBERT MOORE", 
-    53, 
-    "M", 
-    "ACWORTH GA", 
-    1308, 
-    8242, 
-    630, 
-    8193
-  ], 
-  [
-    1108, 
-    "JIM PAGE", 
-    56, 
-    "M", 
-    "ACWORTH GA", 
-    1387, 
-    8243, 
-    630, 
-    8195
-  ], 
-  [
-    1109, 
-    "SUZANNE SIMKIN", 
-    48, 
-    "F", 
-    "ATLANTA GA", 
-    1680, 
-    8243, 
-    630, 
-    -1
-  ], 
-  [
-    1110, 
-    "JODY KUBIET", 
-    35, 
-    "F", 
-    "NEWNAN GA", 
-    1034, 
-    8244, 
-    630, 
-    8179
-  ], 
-  [
-    1111, 
-    "JENNIFER MCDUFFEE", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    1211, 
-    8244, 
-    630, 
-    8178
-  ], 
-  [
-    1112, 
-    "MEG FREDERICK", 
-    57, 
-    "F", 
-    "ATLANTA GA", 
-    637, 
-    8261, 
-    631, 
-    8195
-  ], 
-  [
-    1113, 
-    "KAREN KALLIS", 
-    43, 
-    "F", 
-    "SANDY SPINGS GA", 
-    965, 
-    8261, 
-    631, 
-    8197
-  ], 
-  [
-    1114, 
-    "CASEY BROGDON", 
-    51, 
-    "M", 
-    "SNELLVILLE GA", 
-    210, 
-    8266, 
-    631, 
-    8189
-  ], 
-  [
-    1115, 
-    "MIRANDA DILLARD", 
-    44, 
-    "F", 
-    "ATLANTA GA", 
-    492, 
-    8269, 
-    632, 
-    -1
-  ], 
-  [
-    1116, 
-    "NELSON BURKE", 
-    51, 
-    "M", 
-    "ATLANTA GA", 
-    245, 
-    8269, 
-    632, 
-    8199
-  ], 
-  [
-    1117, 
-    "TODD METCALF", 
-    39, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    1267, 
-    8272, 
-    632, 
-    8212
-  ], 
-  [
-    1118, 
-    "MIKE TETI", 
-    55, 
-    "M", 
-    "ACWORTH GA", 
-    1818, 
-    8274, 
-    632, 
-    8231
-  ], 
-  [
-    1119, 
-    "AMY GLOSSON", 
-    37, 
-    "F", 
-    "TUCKER GA", 
-    699, 
-    8281, 
-    633, 
-    8222
-  ], 
-  [
-    1120, 
-    "VICTORIA FLETCHER", 
-    31, 
-    "F", 
-    "SMYRNA GA", 
-    612, 
-    8281, 
-    633, 
-    8244
-  ], 
-  [
-    1121, 
-    "LISA MILLER", 
-    46, 
-    "F", 
-    "MILLEDGEVILLE GA", 
-    1281, 
-    8282, 
-    633, 
-    8178
-  ], 
-  [
-    1122, 
-    "MARY PICK", 
-    57, 
-    "F", 
-    "ATLANTA GA", 
-    1439, 
-    8282, 
-    633, 
-    8263
-  ], 
-  [
-    1123, 
-    "LINDSEY NELMS", 
-    21, 
-    "F", 
-    "ATLANTA GA", 
-    1338, 
-    8286, 
-    633, 
-    8253
-  ], 
-  [
-    1124, 
-    "HUGH ARMITAGE", 
-    56, 
-    "M", 
-    "DULUTH GA", 
-    63, 
-    8292, 
-    633, 
-    8218
-  ], 
-  [
-    1125, 
-    "JUANITA RAINEY", 
-    41, 
-    "F", 
-    "DULUTH GA", 
-    1486, 
-    8295, 
-    634, 
-    8178
-  ], 
-  [
-    1126, 
-    "PAUL BOUDREAU", 
-    44, 
-    "M", 
-    "MARIETTA GA", 
-    179, 
-    8298, 
-    634, 
-    8227
-  ], 
-  [
-    1127, 
-    "LOREN LYLES", 
-    24, 
-    "F", 
-    "MARIETTA GA", 
-    1138, 
-    8301, 
-    634, 
-    8203
-  ], 
-  [
-    1128, 
-    "KELLEY MAUTZ", 
-    40, 
-    "F", 
-    "DACULA GA", 
-    1188, 
-    8301, 
-    634, 
-    8193
-  ], 
-  [
-    1129, 
-    "HOLLEY FEINBERG", 
-    35, 
-    "F", 
-    "GRAYSON GA", 
-    593, 
-    8309, 
-    635, 
-    8233
-  ], 
-  [
-    1130, 
-    "CAREY HUDDLESTUN", 
-    51, 
-    "M", 
-    "ATLANTA GA", 
-    880, 
-    8320, 
-    636, 
-    8231
-  ], 
-  [
-    1131, 
-    "JAMES LATIMORE", 
-    55, 
-    "M", 
-    "MABLETON GA", 
-    1062, 
-    8320, 
-    636, 
-    8252
-  ], 
-  [
-    1132, 
-    "S WALLER", 
-    39, 
-    "M", 
-    "ATLANTA GA", 
-    1906, 
-    8326, 
-    636, 
-    8292
-  ], 
-  [
-    1133, 
-    "TONIKA LOMAX", 
-    35, 
-    "F", 
-    "CUMMING GA", 
-    1120, 
-    8329, 
-    636, 
-    8237
-  ], 
-  [
-    1134, 
-    "TAMMI PARKER", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1395, 
-    8331, 
-    636, 
-    8235
-  ], 
-  [
-    1135, 
-    "CHERIE AVIV", 
-    57, 
-    "F", 
-    "DUNWOODY GA", 
-    73, 
-    8331, 
-    636, 
-    8235
-  ], 
-  [
-    1136, 
-    "MARGARET TATE", 
-    58, 
-    "F", 
-    "MONROE NC", 
-    1803, 
-    8333, 
-    637, 
-    8257
-  ], 
-  [
-    1137, 
-    "AMANDA DEYOUNG", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    486, 
-    8334, 
-    637, 
-    8280
-  ], 
-  [
-    1138, 
-    "KRISTEN ROMANO", 
-    24, 
-    "F", 
-    "ATLANTA GA", 
-    1555, 
-    8334, 
-    637, 
-    8181
-  ], 
-  [
-    1139, 
-    "ROBERTA DALLA VERDE", 
-    38, 
-    "F", 
-    "SUWANEE GA", 
-    432, 
-    8341, 
-    637, 
-    8273
-  ], 
-  [
-    1140, 
-    "WENDY CATES", 
-    44, 
-    "F", 
-    "CUMMING GA", 
-    301, 
-    8343, 
-    637, 
-    8281
-  ], 
-  [
-    1141, 
-    "ASHLEY GIBLIN", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    692, 
-    8347, 
-    638, 
-    8268
-  ], 
-  [
-    1142, 
-    "GAYLE MARTIN", 
-    44, 
-    "F", 
-    "CUMMING GA", 
-    1175, 
-    8348, 
-    638, 
-    8255
-  ], 
-  [
-    1143, 
-    "JEFF HARRINGTON", 
-    36, 
-    "M", 
-    "MONROE GA", 
-    792, 
-    8348, 
-    638, 
-    8273
-  ], 
-  [
-    1144, 
-    "JAMES HUNTER", 
-    38, 
-    "M", 
-    "CANTON GA", 
-    889, 
-    8349, 
-    638, 
-    -1
-  ], 
-  [
-    1145, 
-    "DAVID ASTOR", 
-    36, 
-    "M", 
-    "MARIETTA GA", 
-    68, 
-    8350, 
-    638, 
-    8296
-  ], 
-  [
-    1146, 
-    "KELLY MARLOW", 
-    43, 
-    "F", 
-    "CANTON GA", 
-    1170, 
-    8358, 
-    638, 
-    8323
-  ], 
-  [
-    1147, 
-    "H MICHAEL BURGETT", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    244, 
-    8358, 
-    638, 
-    8288
-  ], 
-  [
-    1148, 
-    "RUSTY GUNTER", 
-    33, 
-    "M", 
-    "CARTERVILLE GA", 
-    747, 
-    8360, 
-    639, 
-    8305
-  ], 
-  [
-    1149, 
-    "JAMES HAYES", 
-    57, 
-    "M", 
-    "MABLETON GA", 
-    819, 
-    8363, 
-    639, 
-    8312
-  ], 
-  [
-    1150, 
-    "ROBERT DOYAL", 
-    37, 
-    "M", 
-    "PEACHTREE CITY GA", 
-    521, 
-    8375, 
-    640, 
-    8293
-  ], 
-  [
-    1151, 
-    "PETER BURKES", 
-    33, 
-    "M", 
-    "CUMMING GA", 
-    247, 
-    8375, 
-    640, 
-    8328
-  ], 
-  [
-    1152, 
-    "PATRICIA DUBOISE", 
-    43, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    528, 
-    8379, 
-    640, 
-    8311
-  ], 
-  [
-    1153, 
-    "MAGAN HARPER", 
-    37, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    789, 
-    8381, 
-    640, 
-    8334
-  ], 
-  [
-    1154, 
-    "AMY GIROUD", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    697, 
-    8381, 
-    640, 
-    8356
-  ], 
-  [
-    1155, 
-    "RACHEL MILES", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    1270, 
-    8385, 
-    641, 
-    8312
-  ], 
-  [
-    1156, 
-    "KIM BOZEMAN", 
-    46, 
-    "F", 
-    "TEMPLE GA", 
-    189, 
-    8387, 
-    641, 
-    8300
-  ], 
-  [
-    1157, 
-    "SUSAN EDWARDS", 
-    34, 
-    "F", 
-    "DALLAS GA", 
-    554, 
-    8387, 
-    641, 
-    8310
-  ], 
-  [
-    1158, 
-    "DANIEL NICHOLS", 
-    26, 
-    "M", 
-    "DECATUR GA", 
-    1343, 
-    8392, 
-    641, 
-    8311
-  ], 
-  [
-    1159, 
-    "HIROHIKO ASAKAWA", 
-    52, 
-    "M", 
-    "ACWORTH GA", 
-    65, 
-    8393, 
-    641, 
-    8338
-  ], 
-  [
-    1160, 
-    "EMILY CARLTON", 
-    31, 
-    "F", 
-    "DECATUR GA", 
-    286, 
-    8395, 
-    641, 
-    8352
-  ], 
-  [
-    1161, 
-    "STEVEN POTTS", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    1460, 
-    8396, 
-    641, 
-    8319
-  ], 
-  [
-    1162, 
-    "THERESA EBRON", 
-    37, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    545, 
-    8397, 
-    641, 
-    8303
-  ], 
-  [
-    1163, 
-    "ADRIENNE SMITH", 
-    31, 
-    "F", 
-    "DECATUR GA", 
-    1698, 
-    8397, 
-    641, 
-    8325
-  ], 
-  [
-    1164, 
-    "GINNY ROGERS", 
-    28, 
-    "F", 
-    "ADAIRSVILLE GA", 
-    1551, 
-    8398, 
-    641, 
-    8327
-  ], 
-  [
-    1165, 
-    "LIN STRADLEY", 
-    61, 
-    "M", 
-    "ATLANTA GA", 
-    1768, 
-    8403, 
-    642, 
-    8371
-  ], 
-  [
-    1166, 
-    "KELLI PIRKLE", 
-    40, 
-    "F", 
-    "GAINESVILLE GA", 
-    1443, 
-    8403, 
-    642, 
-    8291
-  ], 
-  [
-    1167, 
-    "KELLY GALLIMORE", 
-    45, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    662, 
-    8407, 
-    642, 
-    8352
-  ], 
-  [
-    1168, 
-    "ERIN ROBINSON", 
-    28, 
-    "F", 
-    "MARIETTA GA", 
-    1543, 
-    8408, 
-    642, 
-    8316
-  ], 
-  [
-    1169, 
-    "BRIE KUDLA", 
-    29, 
-    "F", 
-    "SMYRNA GA", 
-    1035, 
-    8408, 
-    642, 
-    8317
-  ], 
-  [
-    1170, 
-    "CINDY RATLIFF", 
-    39, 
-    "F", 
-    "GAINESVILLE GA", 
-    1494, 
-    8410, 
-    642, 
-    8336
-  ], 
-  [
-    1171, 
-    "LAUREN SOMERS", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    1724, 
-    8416, 
-    643, 
-    8319
-  ], 
-  [
-    1172, 
-    "JILL SKOCIR", 
-    35, 
-    "F", 
-    "DECATUR GA", 
-    1694, 
-    8418, 
-    643, 
-    8320
-  ], 
-  [
-    1173, 
-    "TAYLOR EDWARDS", 
-    56, 
-    "M", 
-    "DOUGLASVILLE GA", 
-    555, 
-    8418, 
-    643, 
-    8379
-  ], 
-  [
-    1174, 
-    "MELISSA WHITINGER", 
-    38, 
-    "F", 
-    "FLOWERY BRANCH GA", 
-    1964, 
-    8419, 
-    643, 
-    8353
-  ], 
-  [
-    1175, 
-    "DAWN HANDLEY", 
-    31, 
-    "F", 
-    "FORT WORTH TX", 
-    773, 
-    8425, 
-    644, 
-    8341
-  ], 
-  [
-    1176, 
-    "KIM BRUNDAGE", 
-    44, 
-    "F", 
-    "SUWANEE GA", 
-    225, 
-    8430, 
-    644, 
-    8345
-  ], 
-  [
-    1177, 
-    "SARAH LASITER", 
-    37, 
-    "F", 
-    "MABLETON GA", 
-    1057, 
-    8431, 
-    644, 
-    8384
-  ], 
-  [
-    1178, 
-    "PAULA JAMIESON", 
-    45, 
-    "F", 
-    "SUWANEE GA", 
-    919, 
-    8432, 
-    644, 
-    8346
-  ], 
-  [
-    1179, 
-    "SANDY SCHWARTZ", 
-    57, 
-    "M", 
-    "ATLANTA GA", 
-    1621, 
-    8432, 
-    644, 
-    8404
-  ], 
-  [
-    1180, 
-    "DAVID BARRON", 
-    49, 
-    "M", 
-    "MARIETTA GA", 
-    107, 
-    8438, 
-    645, 
-    8357
-  ], 
-  [
-    1181, 
-    "ANNE SEPKO", 
-    40, 
-    "F", 
-    "SUGAR HILL GA", 
-    1641, 
-    8442, 
-    645, 
-    8321
-  ], 
-  [
-    1182, 
-    "CATHERINE CANFIELD", 
-    50, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    278, 
-    8444, 
-    645, 
-    8355
-  ], 
-  [
-    1183, 
-    "TERESITA PACHANO", 
-    46, 
-    "F", 
-    "MARIETTA GA", 
-    1385, 
-    8444, 
-    645, 
-    8391
-  ], 
-  [
-    1184, 
-    "HEATHER WRIGHT", 
-    41, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    2005, 
-    8444, 
-    645, 
-    8356
-  ], 
-  [
-    1185, 
-    "LIZBETH TULLOCH", 
-    53, 
-    "F", 
-    "HOUSTON TX", 
-    1867, 
-    8446, 
-    645, 
-    8367
-  ], 
-  [
-    1186, 
-    "KRISTEN BREEDLOVE", 
-    28, 
-    "F", 
-    "SMYRNA GA", 
-    199, 
-    8447, 
-    645, 
-    8406
-  ], 
-  [
-    1187, 
-    "DIANA RIMBY", 
-    29, 
-    "F", 
-    "MARIETTA GA", 
-    1531, 
-    8447, 
-    645, 
-    8391
-  ], 
-  [
-    1188, 
-    "SANDY SHEAROUSE", 
-    38, 
-    "F", 
-    "BARNESVILLE GA", 
-    1660, 
-    8447, 
-    645, 
-    8344
-  ], 
-  [
-    1189, 
-    "RACHEL WITKIEWICZ", 
-    28, 
-    "F", 
-    "CANTON GA", 
-    1990, 
-    8451, 
-    646, 
-    8364
-  ], 
-  [
-    1190, 
-    "ROBERT MCMENOMY", 
-    26, 
-    "M", 
-    "MONTGOMERY AL", 
-    1235, 
-    8454, 
-    646, 
-    8349
-  ], 
-  [
-    1191, 
-    "KATIE COOPER", 
-    22, 
-    "F", 
-    "CHARLOTTE NC", 
-    382, 
-    8455, 
-    646, 
-    8404
-  ], 
-  [
-    1192, 
-    "JAMIE CROSBY", 
-    37, 
-    "M", 
-    "NORCROSS GA", 
-    410, 
-    8457, 
-    646, 
-    8438
-  ], 
-  [
-    1193, 
-    "SARA TOERING", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1844, 
-    8457, 
-    646, 
-    8404
-  ], 
-  [
-    1194, 
-    "HOWARD ALTER", 
-    50, 
-    "M", 
-    "SMYRNA GA", 
-    39, 
-    8458, 
-    646, 
-    8376
-  ], 
-  [
-    1195, 
-    "CHRISTINA ALLEN", 
-    37, 
-    "F", 
-    "DAWSONVILLE GA", 
-    33, 
-    8463, 
-    647, 
-    8410
-  ], 
-  [
-    1196, 
-    "TIFFANY JONES", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    2032, 
-    8465, 
-    647, 
-    8347
-  ], 
-  [
-    1197, 
-    "SUZANNE MACKIEWICZ", 
-    40, 
-    "F", 
-    "MARIETTA GA", 
-    1148, 
-    8469, 
-    647, 
-    8403
-  ], 
-  [
-    1198, 
-    "SANDY LASSERE", 
-    44, 
-    "F", 
-    "ATLANTA GA", 
-    1059, 
-    8470, 
-    647, 
-    8409
-  ], 
-  [
-    1199, 
-    "AMBER WATERS", 
-    27, 
-    "F", 
-    "CARROLLTON GA", 
-    1928, 
-    8472, 
-    647, 
-    8412
-  ], 
-  [
-    1200, 
-    "KATHERINE MELVIN", 
-    32, 
-    "F", 
-    "SMYRNA GA", 
-    1253, 
-    8477, 
-    648, 
-    8423
-  ], 
-  [
-    1201, 
-    "MEGAN MCGUIGAN", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    1220, 
-    8499, 
-    649, 
-    8404
-  ], 
-  [
-    1202, 
-    "ROBERT MAURY", 
-    53, 
-    "M", 
-    "FAYETTEVILLE GA", 
-    1187, 
-    8504, 
-    650, 
-    8416
-  ], 
-  [
-    1203, 
-    "SUSAN CHRISTIAN", 
-    35, 
-    "F", 
-    "CANTON GA", 
-    329, 
-    8505, 
-    650, 
-    8420
-  ], 
-  [
-    1204, 
-    "KATIE BYRD", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    263, 
-    8513, 
-    650, 
-    8406
-  ], 
-  [
-    1205, 
-    "PAMELA ROPER", 
-    37, 
-    "F", 
-    "KENNESAW GA", 
-    1557, 
-    8520, 
-    651, 
-    8427
-  ], 
-  [
-    1206, 
-    "TAMMY MELLOTT", 
-    44, 
-    "F", 
-    "HOSCHTON GA", 
-    1250, 
-    8520, 
-    651, 
-    8436
-  ], 
-  [
-    1207, 
-    "SARA SMITH", 
-    38, 
-    "F", 
-    "KENNESAW GA", 
-    1716, 
-    8521, 
-    651, 
-    8385
-  ], 
-  [
-    1208, 
-    "RON OLIVER", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    1367, 
-    8523, 
-    651, 
-    8479
-  ], 
-  [
-    1209, 
-    "ANNA GRAY", 
-    19, 
-    "F", 
-    "SNELLVILLE GA", 
-    721, 
-    8526, 
-    651, 
-    8458
-  ], 
-  [
-    1210, 
-    "ELSPETH FRENCH", 
-    43, 
-    "F", 
-    "CHAMBLEE GA", 
-    642, 
-    8536, 
-    652, 
-    8440
-  ], 
-  [
-    1211, 
-    "ANNIE KING", 
-    51, 
-    "F", 
-    "DECATUR GA", 
-    998, 
-    8537, 
-    652, 
-    8444
-  ], 
-  [
-    1212, 
-    "MICHAEL CHASE", 
-    60, 
-    "M", 
-    "DECATUR GA", 
-    320, 
-    8538, 
-    652, 
-    8445
-  ], 
-  [
-    1213, 
-    "JENNIFER DEYOUNG", 
-    39, 
-    "F", 
-    "CANTON GA", 
-    487, 
-    8540, 
-    652, 
-    8443
-  ], 
-  [
-    1214, 
-    "LYNDEL BEAVER", 
-    25, 
-    "F", 
-    "ATLANTA GA", 
-    133, 
-    8548, 
-    653, 
-    8502
-  ], 
-  [
-    1215, 
-    "MEGAN RILEY", 
-    35, 
-    "F", 
-    "MARIETTA GA", 
-    1530, 
-    8553, 
-    653, 
-    8434
-  ], 
-  [
-    1216, 
-    "BROOKE WALDEN", 
-    29, 
-    "F", 
-    "CUMMING GA", 
-    1899, 
-    8553, 
-    653, 
-    8505
-  ], 
-  [
-    1217, 
-    "TRICIA ONEILL", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    1371, 
-    8554, 
-    653, 
-    8435
-  ], 
-  [
-    1218, 
-    "MEERA SHAH", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    1648, 
-    8555, 
-    654, 
-    8510
-  ], 
-  [
-    1219, 
-    "STEPHANIE LOOMIS", 
-    45, 
-    "F", 
-    "MARIETTA GA", 
-    1124, 
-    8556, 
-    654, 
-    8455
-  ], 
-  [
-    1220, 
-    "JOHN BARRON", 
-    15, 
-    "M", 
-    "MARIETTA GA", 
-    108, 
-    8556, 
-    654, 
-    8477
-  ], 
-  [
-    1221, 
-    "MEGAN BOYD", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    2144, 
-    8557, 
-    654, 
-    8472
-  ], 
-  [
-    1222, 
-    "JEREMY SALE", 
-    30, 
-    "M", 
-    "ATLANTA GA", 
-    2145, 
-    8557, 
-    654, 
-    8472
-  ], 
-  [
-    1223, 
-    "KIMBERLY RALICH", 
-    39, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1487, 
-    8561, 
-    654, 
-    8512
-  ], 
-  [
-    1224, 
-    "MELLISSA FRIEDRICH", 
-    42, 
-    "F", 
-    "CARTERSVILLE GA", 
-    647, 
-    8574, 
-    655, 
-    8519
-  ], 
-  [
-    1225, 
-    "VANESSA LE", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1071, 
-    8576, 
-    655, 
-    8499
-  ], 
-  [
-    1226, 
-    "KERSTIN BENTON", 
-    38, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    144, 
-    8576, 
-    655, 
-    8500
-  ], 
-  [
-    1227, 
-    "NIKKI MOORE", 
-    99, 
-    "F", 
-    "SMYRNA GA", 
-    1306, 
-    8579, 
-    655, 
-    8474
-  ], 
-  [
-    1228, 
-    "LAURA FOSTER", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    623, 
-    8584, 
-    656, 
-    8507
-  ], 
-  [
-    1229, 
-    "SARAH KING", 
-    38, 
-    "F", 
-    "ROME GA", 
-    1002, 
-    8584, 
-    656, 
-    8507
-  ], 
-  [
-    1230, 
-    "ALI THOMPSON", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    2031, 
-    8586, 
-    656, 
-    8468
-  ], 
-  [
-    1231, 
-    "JUDY JOHNSTON", 
-    48, 
-    "F", 
-    "CANTON GA", 
-    951, 
-    8587, 
-    656, 
-    8525
-  ], 
-  [
-    1232, 
-    "ROBERTA WALTERS", 
-    36, 
-    "F", 
-    "WATKINSVILLE GA", 
-    1912, 
-    8588, 
-    656, 
-    8529
-  ], 
-  [
-    1233, 
-    "MELINDA SETCHELL", 
-    36, 
-    "F", 
-    "MARIETTA GA", 
-    1643, 
-    8590, 
-    656, 
-    8517
-  ], 
-  [
-    1234, 
-    "BONITA CASON-ATLOW", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    298, 
-    8594, 
-    656, 
-    8548
-  ], 
-  [
-    1235, 
-    "TROY RAMBO", 
-    40, 
-    "M", 
-    "COLUMBUS OH", 
-    1490, 
-    8594, 
-    656, 
-    8561
-  ], 
-  [
-    1236, 
-    "MELISSA LUNDELL", 
-    33, 
-    "F", 
-    "MARIETTA GA", 
-    1135, 
-    8597, 
-    657, 
-    8544
-  ], 
-  [
-    1237, 
-    "JENNIFER BUSEICK", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    254, 
-    8598, 
-    657, 
-    8516
-  ], 
-  [
-    1238, 
-    "ELIZABETH SCHWARZE", 
-    46, 
-    "F", 
-    "DUNWOODY GA", 
-    1623, 
-    8598, 
-    657, 
-    8552
-  ], 
-  [
-    1239, 
-    "REBECCA KIEFFER", 
-    30, 
-    "F", 
-    "SMYRNA GA", 
-    993, 
-    8599, 
-    657, 
-    8546
-  ], 
-  [
-    1240, 
-    "CURTIS JONES", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    955, 
-    8610, 
-    658, 
-    8564
-  ], 
-  [
-    1241, 
-    "TANYA PALMER", 
-    32, 
-    "F", 
-    "SMYRNA GA", 
-    1390, 
-    8610, 
-    658, 
-    8565
-  ], 
-  [
-    1242, 
-    "CHRISTINE PATRICK", 
-    35, 
-    "F", 
-    "ALPHARETTA GA", 
-    1401, 
-    8611, 
-    658, 
-    8538
-  ], 
-  [
-    1243, 
-    "DIANA PENGE", 
-    43, 
-    "F", 
-    "ACWORTH GA", 
-    1416, 
-    8611, 
-    658, 
-    8534
-  ], 
-  [
-    1244, 
-    "JENNIFER HAWKINS", 
-    39, 
-    "F", 
-    "CUMMING GA", 
-    816, 
-    8620, 
-    658, 
-    8560
-  ], 
-  [
-    1245, 
-    "JOSH BUGOSH", 
-    26, 
-    "M", 
-    "BUFORD GA", 
-    236, 
-    8622, 
-    659, 
-    8517
-  ], 
-  [
-    1246, 
-    "TIM SCHIPPMANN", 
-    41, 
-    "M", 
-    "CUMMING GA", 
-    1605, 
-    8625, 
-    659, 
-    8601
-  ], 
-  [
-    1247, 
-    "AMY BERRY", 
-    35, 
-    "F", 
-    "TULSA OK", 
-    150, 
-    8631, 
-    659, 
-    8536
-  ], 
-  [
-    1248, 
-    "WENDY SCHMITZ", 
-    35, 
-    "F", 
-    "ROSWELL GA", 
-    1610, 
-    8631, 
-    659, 
-    8537
-  ], 
-  [
-    1249, 
-    "ROSS JOHNSTON", 
-    48, 
-    "M", 
-    "CANTON GA", 
-    952, 
-    8640, 
-    660, 
-    8578
-  ], 
-  [
-    1250, 
-    "CHERYL HUNTER", 
-    47, 
-    "F", 
-    "DECATUR GA", 
-    888, 
-    8643, 
-    660, 
-    8527
-  ], 
-  [
-    1251, 
-    "TAMERA MILLER", 
-    49, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1283, 
-    8644, 
-    660, 
-    8571
-  ], 
-  [
-    1252, 
-    "JENNIFER CLEMENS", 
-    39, 
-    "F", 
-    "MARIETTA GA", 
-    340, 
-    8653, 
-    661, 
-    8565
-  ], 
-  [
-    1253, 
-    "JEANNINE BROCK", 
-    39, 
-    "F", 
-    "MARIETTA GA", 
-    206, 
-    8653, 
-    661, 
-    8565
-  ], 
-  [
-    1254, 
-    "DAMON BENNAFIELD", 
-    43, 
-    "M", 
-    "ATLANTA GA", 
-    141, 
-    8654, 
-    661, 
-    8593
-  ], 
-  [
-    1255, 
-    "JANELLE BOWERSOX", 
-    50, 
-    "F", 
-    "ATLANTA GA", 
-    181, 
-    8658, 
-    661, 
-    8562
-  ], 
-  [
-    1256, 
-    "CLAUDIA DONATO", 
-    33, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    505, 
-    8662, 
-    662, 
-    8587
-  ], 
-  [
-    1257, 
-    "KATE HOWARD", 
-    24, 
-    "F", 
-    "ACWORTH GA", 
-    872, 
-    8664, 
-    662, 
-    8585
-  ], 
-  [
-    1258, 
-    "JUDY STANLEY", 
-    59, 
-    "F", 
-    "DECATUR GA", 
-    1753, 
-    8677, 
-    663, 
-    8647
-  ], 
-  [
-    1259, 
-    "LEWIS DOWDEN", 
-    62, 
-    "M", 
-    "DECATUR GA GA", 
-    514, 
-    8678, 
-    663, 
-    8647
-  ], 
-  [
-    1260, 
-    "MELISSA O'CONNELL", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1358, 
-    8681, 
-    663, 
-    8619
-  ], 
-  [
-    1261, 
-    "ERIN MACE", 
-    35, 
-    "F", 
-    "NEWNAN GA", 
-    1143, 
-    8681, 
-    663, 
-    8636
-  ], 
-  [
-    1262, 
-    "ELIZABETH ALLEN", 
-    38, 
-    "F", 
-    "COVINGTON GA", 
-    34, 
-    8683, 
-    663, 
-    8625
-  ], 
-  [
-    1263, 
-    "ODIONYENFE ADELAKUN", 
-    34, 
-    "F", 
-    "MARIETTA GA", 
-    13, 
-    8688, 
-    664, 
-    8617
-  ], 
-  [
-    1264, 
-    "GLORIA CLARK", 
-    48, 
-    "F", 
-    "MARIETTA GA", 
-    333, 
-    8689, 
-    664, 
-    8620
-  ], 
-  [
-    1265, 
-    "VICTORIA PRICE", 
-    21, 
-    "F", 
-    "MILLEDGEVILLE GA", 
-    1469, 
-    8690, 
-    664, 
-    8624
-  ], 
-  [
-    1266, 
-    "MARK LASSERE", 
-    46, 
-    "M", 
-    "ATLANTA GA", 
-    1058, 
-    8692, 
-    664, 
-    -1
-  ], 
-  [
-    1267, 
-    "MITCHELL MCGHEE", 
-    23, 
-    "M", 
-    "MILLEDGEVILLE GA", 
-    1218, 
-    8692, 
-    664, 
-    8625
-  ], 
-  [
-    1268, 
-    "DANIELA MARTINEZ", 
-    25, 
-    "F", 
-    "DAHLONEGA GA", 
-    1180, 
-    8696, 
-    664, 
-    8582
-  ], 
-  [
-    1269, 
-    "WILLIAM HENRY, JR.", 
-    55, 
-    "M", 
-    "NEWPORT NEWS VA", 
-    834, 
-    8699, 
-    665, 
-    8539
-  ], 
-  [
-    1270, 
-    "RUTH COLEGROVE", 
-    37, 
-    "F", 
-    "DULUTH GA", 
-    361, 
-    8703, 
-    665, 
-    8610
-  ], 
-  [
-    1271, 
-    "IRENE DA SILVA", 
-    39, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    428, 
-    8711, 
-    665, 
-    8612
-  ], 
-  [
-    1272, 
-    "MORGAN ETHERINGTON", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    583, 
-    8711, 
-    665, 
-    8612
-  ], 
-  [
-    1273, 
-    "WENDY COSTELLO", 
-    47, 
-    "F", 
-    "FLOWERY BRANCH GA", 
-    389, 
-    8711, 
-    665, 
-    8640
-  ], 
-  [
-    1274, 
-    "KRISTY BASINGER", 
-    38, 
-    "F", 
-    "GAINESVILLE GA", 
-    120, 
-    8722, 
-    666, 
-    8650
-  ], 
-  [
-    1275, 
-    "JULIEANA JOHNSON", 
-    37, 
-    "F", 
-    "ALPHARETTA GA", 
-    946, 
-    8727, 
-    667, 
-    8606
-  ], 
-  [
-    1276, 
-    "KRISTEN GOTT", 
-    30, 
-    "F", 
-    "LOCUST GROVE GA", 
-    712, 
-    8728, 
-    667, 
-    8633
-  ], 
-  [
-    1277, 
-    "CARRIE RAGAN", 
-    18, 
-    "F", 
-    "ROSWELL GA", 
-    1483, 
-    8729, 
-    667, 
-    8651
-  ], 
-  [
-    1278, 
-    "DIANE PITTMAN", 
-    60, 
-    "F", 
-    "JOHNS CREEK GA", 
-    1444, 
-    8732, 
-    667, 
-    8656
-  ], 
-  [
-    1279, 
-    "WHITNEY HALLER", 
-    23, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    768, 
-    8732, 
-    667, 
-    8662
-  ], 
-  [
-    1280, 
-    "JAMES KIM", 
-    26, 
-    "M", 
-    "LAGRANGE GA", 
-    996, 
-    8734, 
-    667, 
-    8711
-  ], 
-  [
-    1281, 
-    "KIMBERLY LARAVEA", 
-    52, 
-    "F", 
-    "ALPHARETTA GA", 
-    1055, 
-    8737, 
-    667, 
-    8661
-  ], 
-  [
-    1282, 
-    "SARAH BABCOCK", 
-    28, 
-    "F", 
-    "MARIETTA GA", 
-    2035, 
-    8738, 
-    667, 
-    8663
-  ], 
-  [
-    1283, 
-    "THOMAS DARNELL", 
-    37, 
-    "M", 
-    "CANTON GA", 
-    443, 
-    8739, 
-    668, 
-    8703
-  ], 
-  [
-    1284, 
-    "RAQUEL BOWMAN", 
-    48, 
-    "F", 
-    "ACWORTH GA", 
-    183, 
-    8742, 
-    668, 
-    8632
-  ], 
-  [
-    1285, 
-    "ALEXIS SEYMOUR", 
-    28, 
-    "F", 
-    "GAINESVILLE GA", 
-    1645, 
-    8744, 
-    668, 
-    8673
-  ], 
-  [
-    1286, 
-    "AMY POTTS", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    1459, 
-    8759, 
-    669, 
-    8660
-  ], 
-  [
-    1287, 
-    "JAMES SHELTON", 
-    35, 
-    "M", 
-    "ROSWELL GA", 
-    1664, 
-    8762, 
-    669, 
-    8735
-  ], 
-  [
-    1288, 
-    "JOHN RAFFERTY", 
-    40, 
-    "M", 
-    "STONE MOUNTAIN GA", 
-    1482, 
-    8762, 
-    669, 
-    8660
-  ], 
-  [
-    1289, 
-    "SANDI SASSENBERGER", 
-    41, 
-    "F", 
-    "MARIETTA GA", 
-    1596, 
-    8770, 
-    670, 
-    8690
-  ], 
-  [
-    1290, 
-    "ELIZABETH EDWARDS", 
-    32, 
-    "F", 
-    "CANTON GA", 
-    548, 
-    8773, 
-    670, 
-    8678
-  ], 
-  [
-    1291, 
-    "JENNIFER CHANG", 
-    36, 
-    "F", 
-    "TUCKER GA", 
-    316, 
-    8775, 
-    670, 
-    8675
-  ], 
-  [
-    1292, 
-    "DOMINIC AMBROSIO", 
-    30, 
-    "M", 
-    "SAN DIEGO CA", 
-    45, 
-    8778, 
-    670, 
-    8711
-  ], 
-  [
-    1293, 
-    "BETH BELK", 
-    31, 
-    "F", 
-    "SAN DIEGO CA", 
-    137, 
-    8778, 
-    671, 
-    8712
-  ], 
-  [
-    1294, 
-    "SCOTT BRYANT", 
-    43, 
-    "M", 
-    "MARIETTA GA", 
-    230, 
-    8780, 
-    671, 
-    8688
-  ], 
-  [
-    1295, 
-    "AMY HARVISON", 
-    34, 
-    "F", 
-    "VILLA RICA GA", 
-    806, 
-    8781, 
-    671, 
-    8724
-  ], 
-  [
-    1296, 
-    "KIM SHATTUCK", 
-    44, 
-    "F", 
-    "SANDY SPRINGS GA", 
-    1657, 
-    8781, 
-    671, 
-    8683
-  ], 
-  [
-    1297, 
-    "PAMELA ROSEN", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    1562, 
-    8783, 
-    671, 
-    8704
-  ], 
-  [
-    1298, 
-    "DEBBIE PAULDING", 
-    48, 
-    "F", 
-    "CUMMING GA", 
-    1408, 
-    8787, 
-    671, 
-    8740
-  ], 
-  [
-    1299, 
-    "AMY DEARMENT", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    463, 
-    8787, 
-    671, 
-    8722
-  ], 
-  [
-    1300, 
-    "DAN MCCULLY", 
-    50, 
-    "M", 
-    "SHARPSBURG GA", 
-    1205, 
-    8790, 
-    671, 
-    8680
-  ], 
-  [
-    1301, 
-    "HEATHER SAILORS", 
-    30, 
-    "F", 
-    "MARIETTA GA", 
-    1580, 
-    8790, 
-    671, 
-    8693
-  ], 
-  [
-    1302, 
-    "MICHAEL VETTER", 
-    37, 
-    "M", 
-    "GAINESVILLE GA", 
-    1890, 
-    8795, 
-    672, 
-    8721
-  ], 
-  [
-    1303, 
-    "LAURA OWENS", 
-    36, 
-    "F", 
-    "MABLETON GA", 
-    1382, 
-    8795, 
-    672, 
-    8689
-  ], 
-  [
-    1304, 
-    "KIM FULKERSON", 
-    40, 
-    "F", 
-    "KENNESAW GA", 
-    652, 
-    8799, 
-    672, 
-    8714
-  ], 
-  [
-    1305, 
-    "STACY ALEXANDER", 
-    33, 
-    "F", 
-    "MARIETTA GA", 
-    31, 
-    8800, 
-    672, 
-    8754
-  ], 
-  [
-    1306, 
-    "KEVIN WILLIAMS", 
-    39, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1974, 
-    8801, 
-    672, 
-    -1
-  ], 
-  [
-    1307, 
-    "KATE JARVIS", 
-    18, 
-    "F", 
-    "CUMMING GA", 
-    923, 
-    8805, 
-    673, 
-    8724
-  ], 
-  [
-    1308, 
-    "CHRIS JARVIS", 
-    44, 
-    "M", 
-    "CUMMING GA", 
-    922, 
-    8805, 
-    673, 
-    8726
-  ], 
-  [
-    1309, 
-    "HINTON DAVIS", 
-    41, 
-    "M", 
-    "DULUTH GA", 
-    449, 
-    8808, 
-    673, 
-    8734
-  ], 
-  [
-    1310, 
-    "RUSSELL SPEARS", 
-    46, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    1734, 
-    8811, 
-    673, 
-    8737
-  ], 
-  [
-    1311, 
-    "MARLENE BURCKHALTER", 
-    46, 
-    "F", 
-    "THOMASVILLE NC", 
-    241, 
-    8811, 
-    673, 
-    8669
-  ], 
-  [
-    1312, 
-    "KAREN SLATE", 
-    53, 
-    "F", 
-    "THOMASVILLE NC", 
-    1695, 
-    8811, 
-    673, 
-    8670
-  ], 
-  [
-    1313, 
-    "JILL SPEARS", 
-    42, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1733, 
-    8812, 
-    673, 
-    8737
-  ], 
-  [
-    1314, 
-    "MICHAEL LINDSAY", 
-    57, 
-    "M", 
-    "LITHONIA GA", 
-    1102, 
-    8823, 
-    674, 
-    8728
-  ], 
-  [
-    1315, 
-    "MARY ESPIRITU", 
-    39, 
-    "F", 
-    "COLUMBUS GA", 
-    578, 
-    8826, 
-    674, 
-    8712
-  ], 
-  [
-    1316, 
-    "SARAH BIERENFELD", 
-    17, 
-    "F", 
-    "COLUMBUS GA", 
-    152, 
-    8827, 
-    674, 
-    8713
-  ], 
-  [
-    1317, 
-    "KESHAWN RIDGEL", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1525, 
-    8828, 
-    674, 
-    8737
-  ], 
-  [
-    1318, 
-    "MATTHEW BASFORD", 
-    30, 
-    "M", 
-    "MABLETON GA", 
-    119, 
-    8830, 
-    675, 
-    8730
-  ], 
-  [
-    1319, 
-    "KELLIE ADAMS", 
-    28, 
-    "F", 
-    "CONYERS GA", 
-    10, 
-    8831, 
-    675, 
-    8741
-  ], 
-  [
-    1320, 
-    "JEANNE GREEN", 
-    42, 
-    "F", 
-    "MARIETTA GA", 
-    729, 
-    8831, 
-    675, 
-    8762
-  ], 
-  [
-    1321, 
-    "LULIT GEBRU", 
-    41, 
-    "F", 
-    "MARIETTE GA", 
-    683, 
-    8833, 
-    675, 
-    8731
-  ], 
-  [
-    1322, 
-    "ROBERT LOSAW", 
-    66, 
-    "M", 
-    "CANTON GA", 
-    1128, 
-    8835, 
-    675, 
-    8756
-  ], 
-  [
-    1323, 
-    "ALECIA SMITH", 
-    26, 
-    "F", 
-    "BETHLEHEM GA", 
-    1699, 
-    8835, 
-    675, 
-    8791
-  ], 
-  [
-    1324, 
-    "JANNA MALLIS", 
-    31, 
-    "F", 
-    "GAINESVILLE GA", 
-    1160, 
-    8836, 
-    675, 
-    8763
-  ], 
-  [
-    1325, 
-    "ALVARO TEJADA", 
-    33, 
-    "M", 
-    "CANTON GA", 
-    1815, 
-    8840, 
-    675, 
-    8740
-  ], 
-  [
-    1326, 
-    "KENDRA CALDARELLA", 
-    40, 
-    "F", 
-    "MARIETTA GA", 
-    268, 
-    8843, 
-    675, 
-    8748
-  ], 
-  [
-    1327, 
-    "MICHELLE MOORE", 
-    36, 
-    "F", 
-    "MARIETTA GA", 
-    1305, 
-    8844, 
-    676, 
-    8750
-  ], 
-  [
-    1328, 
-    "SARAH KENNEDY", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    988, 
-    8844, 
-    676, 
-    8742
-  ], 
-  [
-    1329, 
-    "STEVEN JENKINS", 
-    36, 
-    "M", 
-    "NOLENSVILLE TN", 
-    926, 
-    8863, 
-    677, 
-    8775
-  ], 
-  [
-    1330, 
-    "KEVIN LYON", 
-    36, 
-    "M", 
-    "SMYRNA GA", 
-    1140, 
-    8864, 
-    677, 
-    8776
-  ], 
-  [
-    1331, 
-    "MERISSA HAYMORE", 
-    33, 
-    "F", 
-    "MARIETTA GA", 
-    821, 
-    8866, 
-    677, 
-    8767
-  ], 
-  [
-    1332, 
-    "ROSA KING", 
-    38, 
-    "F", 
-    "WOODSTOCK GA", 
-    1001, 
-    8869, 
-    677, 
-    8767
-  ], 
-  [
-    1333, 
-    "KELLY FREEMAN", 
-    42, 
-    "F", 
-    "SUGAR HILL GA", 
-    641, 
-    8873, 
-    678, 
-    8751
-  ], 
-  [
-    1334, 
-    "YULONDA GODBOLD", 
-    44, 
-    "F", 
-    "DECATUR GA", 
-    701, 
-    8881, 
-    678, 
-    8782
-  ], 
-  [
-    1335, 
-    "ANDY GRIFFIN", 
-    41, 
-    "M", 
-    "GAINESVILLEG GA", 
-    738, 
-    8888, 
-    679, 
-    8816
-  ], 
-  [
-    1336, 
-    "TIMOTHY REESE", 
-    32, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    2036, 
-    8894, 
-    679, 
-    8808
-  ], 
-  [
-    1337, 
-    "JORJA DAVENPORT", 
-    64, 
-    "F", 
-    "ATLANTA GA", 
-    444, 
-    8894, 
-    679, 
-    8871
-  ], 
-  [
-    1338, 
-    "SUSI BRACKNELL", 
-    37, 
-    "F", 
-    "ACWORTH GA", 
-    192, 
-    8901, 
-    680, 
-    8859
-  ], 
-  [
-    1339, 
-    "ANGIE SCOTT", 
-    35, 
-    "F", 
-    "GRAYSON GA", 
-    1625, 
-    8903, 
-    680, 
-    8833
-  ], 
-  [
-    1340, 
-    "TRICIA GRAHAM", 
-    45, 
-    "F", 
-    "JULIETTE GA", 
-    716, 
-    8911, 
-    681, 
-    8829
-  ], 
-  [
-    1341, 
-    "AMANDA HAYMORE", 
-    25, 
-    "F", 
-    "NASHVILLE TN", 
-    820, 
-    8918, 
-    681, 
-    8819
-  ], 
-  [
-    1342, 
-    "ILENE MILLER", 
-    35, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1276, 
-    8918, 
-    681, 
-    8812
-  ], 
-  [
-    1343, 
-    "ELIZABETH LEWIS", 
-    39, 
-    "F", 
-    "DACULA GA", 
-    1090, 
-    8922, 
-    682, 
-    8817
-  ], 
-  [
-    1344, 
-    "LISA DOWNER", 
-    34, 
-    "F", 
-    "DALLAS GA", 
-    517, 
-    8924, 
-    682, 
-    8896
-  ], 
-  [
-    1345, 
-    "RACHEL REED", 
-    34, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1505, 
-    8924, 
-    682, 
-    8819
-  ], 
-  [
-    1346, 
-    "JEFFREY FLEMING", 
-    46, 
-    "M", 
-    "HOSCHTON GA", 
-    608, 
-    8925, 
-    682, 
-    8842
-  ], 
-  [
-    1347, 
-    "TUCKER FLEMING", 
-    17, 
-    "M", 
-    "HOSCHTON GA", 
-    610, 
-    8926, 
-    682, 
-    8843
-  ], 
-  [
-    1348, 
-    "MELISSA WILSON", 
-    26, 
-    "F", 
-    "SMYRNA GA", 
-    1981, 
-    8927, 
-    682, 
-    8833
-  ], 
-  [
-    1349, 
-    "JAMES GRAVES", 
-    40, 
-    "M", 
-    "ATLANTA GA", 
-    719, 
-    8928, 
-    682, 
-    8834
-  ], 
-  [
-    1350, 
-    "STACEY GRAVES", 
-    37, 
-    "F", 
-    "ATLANTA GA", 
-    720, 
-    8929, 
-    682, 
-    8836
-  ], 
-  [
-    1351, 
-    "JO ANN SHANLEY", 
-    51, 
-    "F", 
-    "DULUTH GA", 
-    1650, 
-    8929, 
-    682, 
-    8864
-  ], 
-  [
-    1352, 
-    "ERIKA SHADOFF", 
-    40, 
-    "F", 
-    "SUWANEE GA", 
-    1647, 
-    8930, 
-    682, 
-    8830
-  ], 
-  [
-    1353, 
-    "RORY GAGAN", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    657, 
-    8933, 
-    682, 
-    8851
-  ], 
-  [
-    1354, 
-    "MARIE ONEIL", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    1369, 
-    8946, 
-    683, 
-    8898
-  ], 
-  [
-    1355, 
-    "BARBARA BLAKE", 
-    48, 
-    "F", 
-    "ROSWELL GA", 
-    158, 
-    8947, 
-    683, 
-    8923
-  ], 
-  [
-    1356, 
-    "LINDA GEBERT", 
-    51, 
-    "F", 
-    "DALLAS GA", 
-    682, 
-    8949, 
-    684, 
-    8910
-  ], 
-  [
-    1357, 
-    "GARRON BOTHE", 
-    39, 
-    "F", 
-    "MABLETON GA", 
-    178, 
-    8963, 
-    685, 
-    8932
-  ], 
-  [
-    1358, 
-    "JAMIE FISHER", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    603, 
-    8966, 
-    685, 
-    8889
-  ], 
-  [
-    1359, 
-    "KATHERINE HOYLE", 
-    53, 
-    "F", 
-    "LAWNDALE NC", 
-    878, 
-    8967, 
-    685, 
-    8858
-  ], 
-  [
-    1360, 
-    "COREEN DELAMATER", 
-    38, 
-    "F", 
-    "ATHENS GA", 
-    468, 
-    8971, 
-    685, 
-    8890
-  ], 
-  [
-    1361, 
-    "FRANK FLYNN", 
-    74, 
-    "M", 
-    "ROSWELL GA", 
-    616, 
-    8979, 
-    686, 
-    8928
-  ], 
-  [
-    1362, 
-    "BRAD WOLFF", 
-    50, 
-    "M", 
-    "ALPHARETTA GA", 
-    1996, 
-    8983, 
-    686, 
-    8892
-  ], 
-  [
-    1363, 
-    "DANIELLE MACIK", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    1144, 
-    8992, 
-    687, 
-    8893
-  ], 
-  [
-    1364, 
-    "MARGARET HOPKINS", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    861, 
-    8999, 
-    687, 
-    8957
-  ], 
-  [
-    1365, 
-    "SONDI LOSAW", 
-    63, 
-    "F", 
-    "CANTON GA", 
-    1129, 
-    9004, 
-    688, 
-    8924
-  ], 
-  [
-    1366, 
-    "CHRISTY EPSTEIN", 
-    37, 
-    "F", 
-    "ALPHARETTA GA", 
-    571, 
-    9005, 
-    688, 
-    8907
-  ], 
-  [
-    1367, 
-    "MARGO GREGORY", 
-    45, 
-    "F", 
-    "KENNESAW GA", 
-    732, 
-    9015, 
-    689, 
-    8963
-  ], 
-  [
-    1368, 
-    "MARIANN DEWITT", 
-    42, 
-    "F", 
-    "KENNESAW GA", 
-    485, 
-    9018, 
-    689, 
-    8942
-  ], 
-  [
-    1369, 
-    "DEIRDRE WALSH", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    1907, 
-    9021, 
-    689, 
-    8910
-  ], 
-  [
-    1370, 
-    "LOLITA MANNIK", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    1166, 
-    9021, 
-    689, 
-    8910
-  ], 
-  [
-    1371, 
-    "ALISON GREY", 
-    40, 
-    "F", 
-    "DACULA GA", 
-    736, 
-    9029, 
-    690, 
-    8919
-  ], 
-  [
-    1372, 
-    "BRIDGET GONGOL", 
-    26, 
-    "F", 
-    "EAST POINT GA", 
-    706, 
-    9031, 
-    690, 
-    8934
-  ], 
-  [
-    1373, 
-    "JENNIFER LAZO", 
-    29, 
-    "F", 
-    "ATLANTA GA", 
-    1070, 
-    9034, 
-    690, 
-    8931
-  ], 
-  [
-    1374, 
-    "TAMARA CALDWELL", 
-    45, 
-    "F", 
-    "MARIETTA GA", 
-    271, 
-    9035, 
-    690, 
-    8939
-  ], 
-  [
-    1375, 
-    "MICHAEL GEREN", 
-    51, 
-    "M", 
-    "SUWANEE GA", 
-    688, 
-    9041, 
-    691, 
-    8963
-  ], 
-  [
-    1376, 
-    "VIRGINIA JAMES", 
-    38, 
-    "F", 
-    "DACULA GA", 
-    917, 
-    9042, 
-    691, 
-    8932
-  ], 
-  [
-    1377, 
-    "ADRIENNE MILLER", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    1272, 
-    9044, 
-    691, 
-    8963
-  ], 
-  [
-    1378, 
-    "MARYBETH MONTINI", 
-    37, 
-    "F", 
-    "DACULA GA", 
-    1298, 
-    9045, 
-    691, 
-    8936
-  ], 
-  [
-    1379, 
-    "SONJA MCLEOD", 
-    37, 
-    "F", 
-    "MCDONOUGH GA", 
-    1233, 
-    9060, 
-    692, 
-    9003
-  ], 
-  [
-    1380, 
-    "JULIE MILLER", 
-    43, 
-    "F", 
-    "WOODSTOCK GA", 
-    1278, 
-    9060, 
-    692, 
-    8985
-  ], 
-  [
-    1381, 
-    "RYAN REMILLARD", 
-    29, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    1511, 
-    9061, 
-    692, 
-    8962
-  ], 
-  [
-    1382, 
-    "NICOLE MCCARTHY", 
-    32, 
-    "F", 
-    "BIRMINGHAM AL", 
-    1196, 
-    9075, 
-    693, 
-    8987
-  ], 
-  [
-    1383, 
-    "AMY NUGENT", 
-    42, 
-    "F", 
-    "ALPHARETTA GA", 
-    1357, 
-    9076, 
-    693, 
-    9002
-  ], 
-  [
-    1384, 
-    "SEBASTIAN LURIE", 
-    39, 
-    "M", 
-    "SAN FRANCISCO CA", 
-    1136, 
-    9087, 
-    694, 
-    9037
-  ], 
-  [
-    1385, 
-    "SANDRA HANSEN", 
-    54, 
-    "F", 
-    "JONESBORO GA", 
-    779, 
-    9087, 
-    694, 
-    9000
-  ], 
-  [
-    1386, 
-    "DREW DEMPSEY", 
-    33, 
-    "M", 
-    "ROME GA", 
-    478, 
-    9089, 
-    694, 
-    9020
-  ], 
-  [
-    1387, 
-    "LORI FURR", 
-    47, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    655, 
-    9099, 
-    695, 
-    9012
-  ], 
-  [
-    1388, 
-    "AMY ANASTAS", 
-    27, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    47, 
-    9100, 
-    695, 
-    9024
-  ], 
-  [
-    1389, 
-    "ALLISON REPASS", 
-    16, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1512, 
-    9107, 
-    696, 
-    9063
-  ], 
-  [
-    1390, 
-    "JENNIFER WOHL", 
-    40, 
-    "F", 
-    "MARIETTA GA", 
-    1992, 
-    9113, 
-    696, 
-    9078
-  ], 
-  [
-    1391, 
-    "LISA NADREAU", 
-    35, 
-    "F", 
-    "NEWNAN GA", 
-    1332, 
-    9114, 
-    696, 
-    9038
-  ], 
-  [
-    1392, 
-    "CJ ALVERSON", 
-    44, 
-    "M", 
-    "CANTON GA", 
-    43, 
-    9120, 
-    697, 
-    9075
-  ], 
-  [
-    1393, 
-    "MARY BLITZ", 
-    49, 
-    "F", 
-    "CLEARWATER FL", 
-    161, 
-    9136, 
-    698, 
-    9049
-  ], 
-  [
-    1394, 
-    "LINDSAY WOODS", 
-    36, 
-    "F", 
-    "ATLANTA GA", 
-    2001, 
-    9156, 
-    699, 
-    9117
-  ], 
-  [
-    1395, 
-    "CLIFF JORDAN", 
-    32, 
-    "M", 
-    "AUSTELL GA", 
-    962, 
-    9162, 
-    700, 
-    9117
-  ], 
-  [
-    1396, 
-    "DANIEL NELSON", 
-    51, 
-    "M", 
-    "CARROLLTON GA", 
-    2142, 
-    9164, 
-    700, 
-    9142
-  ], 
-  [
-    1397, 
-    "JAMES L. SORRELLS", 
-    69, 
-    "M", 
-    "CARROLLTON GA", 
-    1725, 
-    9165, 
-    700, 
-    9113
-  ], 
-  [
-    1398, 
-    "ANGELA JOHNSON", 
-    43, 
-    "F", 
-    "ATHENS GA", 
-    937, 
-    9168, 
-    700, 
-    9043
-  ], 
-  [
-    1399, 
-    "JOHN THOMAS", 
-    40, 
-    "M", 
-    "ACWORTH GA", 
-    1821, 
-    9179, 
-    701, 
-    9113
-  ], 
-  [
-    1400, 
-    "SUZANNA MORRIS", 
-    50, 
-    "F", 
-    "MARIETTA GA", 
-    1317, 
-    9182, 
-    701, 
-    9038
-  ], 
-  [
-    1401, 
-    "JENNIFER HEWGLEY", 
-    36, 
-    "F", 
-    "WOODSTOCK GA", 
-    840, 
-    9183, 
-    701, 
-    9151
-  ], 
-  [
-    1402, 
-    "JAMIE HATCH", 
-    33, 
-    "F", 
-    "DORAVILLE GA", 
-    812, 
-    9183, 
-    701, 
-    9095
-  ], 
-  [
-    1403, 
-    "SAM HARTIN", 
-    69, 
-    "M", 
-    "DUNWOODY GA", 
-    801, 
-    9202, 
-    703, 
-    9151
-  ], 
-  [
-    1404, 
-    "RON ALTER", 
-    44, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    40, 
-    9205, 
-    703, 
-    9122
-  ], 
-  [
-    1405, 
-    "SHERON CURTIS", 
-    44, 
-    "F", 
-    "CONYERS GA", 
-    426, 
-    9208, 
-    703, 
-    9108
-  ], 
-  [
-    1406, 
-    "JOE COLE", 
-    39, 
-    "M", 
-    "CUMMING GA", 
-    359, 
-    9219, 
-    704, 
-    9131
-  ], 
-  [
-    1407, 
-    "RICHARD DAVIS", 
-    54, 
-    "M", 
-    "COCHRAN GA", 
-    454, 
-    9224, 
-    705, 
-    9207
-  ], 
-  [
-    1408, 
-    "DAVID SLEPPY", 
-    54, 
-    "M", 
-    "ATLANTA GA", 
-    1696, 
-    9229, 
-    705, 
-    9084
-  ], 
-  [
-    1409, 
-    "ARAS KANNU", 
-    40, 
-    "M", 
-    "CUMMING GA", 
-    966, 
-    9238, 
-    706, 
-    9155
-  ], 
-  [
-    1410, 
-    "GAYE ORSINI", 
-    49, 
-    "F", 
-    "MARIETTA GA", 
-    1374, 
-    9241, 
-    706, 
-    9140
-  ], 
-  [
-    1411, 
-    "MICHAEL ALBINGER", 
-    18, 
-    "M", 
-    "MARIETTA GA", 
-    23, 
-    9267, 
-    708, 
-    9221
-  ], 
-  [
-    1412, 
-    "VALERIE FAMBROUGH", 
-    30, 
-    "F", 
-    "DAHLONEGA GA", 
-    588, 
-    9270, 
-    708, 
-    9157
-  ], 
-  [
-    1413, 
-    "WENDY STULL", 
-    30, 
-    "F", 
-    "PUYALLUP WA", 
-    1775, 
-    9270, 
-    708, 
-    9157
-  ], 
-  [
-    1414, 
-    "JOE MILLER", 
-    46, 
-    "M", 
-    "MARIETTA GA", 
-    1277, 
-    9271, 
-    708, 
-    9202
-  ], 
-  [
-    1415, 
-    "RONALD HOLMES", 
-    29, 
-    "M", 
-    "ATLANTA GA", 
-    856, 
-    9272, 
-    708, 
-    9207
-  ], 
-  [
-    1416, 
-    "MIKE KRESAK", 
-    42, 
-    "M", 
-    "MARIETTA GA", 
-    1027, 
-    9278, 
-    709, 
-    9182
-  ], 
-  [
-    1417, 
-    "CANDICE POOR", 
-    39, 
-    "F", 
-    "MILTON GA", 
-    1456, 
-    9279, 
-    709, 
-    9172
-  ], 
-  [
-    1418, 
-    "MICHAEL LYONS", 
-    32, 
-    "M", 
-    "ATLANTA GA", 
-    1141, 
-    9298, 
-    710, 
-    9229
-  ], 
-  [
-    1419, 
-    "REBECCA HELLGETH", 
-    39, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    826, 
-    9304, 
-    711, 
-    9227
-  ], 
-  [
-    1420, 
-    "JESSICA MCCARTY", 
-    29, 
-    "F", 
-    "MARIETTA GA", 
-    1197, 
-    9306, 
-    711, 
-    9232
-  ], 
-  [
-    1421, 
-    "LINDA PAUL", 
-    48, 
-    "F", 
-    "SNELLVILLE GA", 
-    1407, 
-    9314, 
-    711, 
-    9201
-  ], 
-  [
-    1422, 
-    "EMILY PAUL", 
-    19, 
-    "F", 
-    "SNELLVILLE GA", 
-    1405, 
-    9314, 
-    711, 
-    9203
-  ], 
-  [
-    1423, 
-    "CAROLINE KEATING", 
-    39, 
-    "F", 
-    "KENNESAW GA", 
-    975, 
-    9323, 
-    712, 
-    9218
-  ], 
-  [
-    1424, 
-    "LINDSEY MCNEIL", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    1241, 
-    9326, 
-    712, 
-    9254
-  ], 
-  [
-    1425, 
-    "ALANA STANTON", 
-    28, 
-    "F", 
-    "DACULA GA", 
-    1754, 
-    9329, 
-    713, 
-    9227
-  ], 
-  [
-    1426, 
-    "JOE SCHUSTER", 
-    52, 
-    "M", 
-    "CUMMING GA", 
-    1619, 
-    9339, 
-    713, 
-    9278
-  ], 
-  [
-    1427, 
-    "ROSS ALEXANDER", 
-    37, 
-    "M", 
-    "DAHLONEGA GA", 
-    30, 
-    9341, 
-    714, 
-    9274
-  ], 
-  [
-    1428, 
-    "KERRY PLATT", 
-    54, 
-    "F", 
-    "MARIETTA GA", 
-    1445, 
-    9347, 
-    714, 
-    9261
-  ], 
-  [
-    1429, 
-    "REBEKAH WALTERS", 
-    28, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1911, 
-    9352, 
-    714, 
-    9262
-  ], 
-  [
-    1430, 
-    "STEPHEN WALTERS", 
-    30, 
-    "M", 
-    "LAWRENCEVILLE GA", 
-    1914, 
-    9352, 
-    714, 
-    9262
-  ], 
-  [
-    1431, 
-    "MICHAEL WILLIAMS", 
-    64, 
-    "M", 
-    "NEWNAN GA", 
-    1975, 
-    9356, 
-    715, 
-    9257
-  ], 
-  [
-    1432, 
-    "CHELSEA CLINE", 
-    26, 
-    "F", 
-    "WINSTON GA", 
-    343, 
-    9364, 
-    715, 
-    9262
-  ], 
-  [
-    1433, 
-    "GUS HUBER", 
-    38, 
-    "M", 
-    "CUMMING GA", 
-    879, 
-    9367, 
-    715, 
-    9258
-  ], 
-  [
-    1434, 
-    "PAUL MACIK", 
-    50, 
-    "M", 
-    "ATLANTA GA", 
-    1145, 
-    9369, 
-    716, 
-    9270
-  ], 
-  [
-    1435, 
-    "ERIN ANDERSON", 
-    32, 
-    "F", 
-    "DALLAS GA", 
-    48, 
-    9377, 
-    716, 
-    9288
-  ], 
-  [
-    1436, 
-    "JEFFREY ANDERSON", 
-    32, 
-    "M", 
-    "DALLAS GA", 
-    50, 
-    9378, 
-    716, 
-    9288
-  ], 
-  [
-    1437, 
-    "ERICA LEYDIC", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1096, 
-    9379, 
-    716, 
-    9281
-  ], 
-  [
-    1438, 
-    "LESLIE BENNETT", 
-    51, 
-    "F", 
-    "JOHNS CREEK GA", 
-    143, 
-    9379, 
-    716, 
-    9303
-  ], 
-  [
-    1439, 
-    "KRISTEN WARNER", 
-    40, 
-    "F", 
-    "WOODSTOCK GA", 
-    1922, 
-    9379, 
-    716, 
-    9305
-  ], 
-  [
-    1440, 
-    "LISA CROSBY", 
-    49, 
-    "F", 
-    "SUWANEE GA", 
-    411, 
-    9381, 
-    717, 
-    9284
-  ], 
-  [
-    1441, 
-    "GLORIA CARTER", 
-    53, 
-    "F", 
-    "MARIETTA GA", 
-    288, 
-    9387, 
-    717, 
-    9286
-  ], 
-  [
-    1442, 
-    "CELESTE BASFORD", 
-    33, 
-    "F", 
-    "MABLETON GA", 
-    118, 
-    9388, 
-    717, 
-    9288
-  ], 
-  [
-    1443, 
-    "STEPHANIE OLIN", 
-    36, 
-    "F", 
-    "MARIETTA GA", 
-    1366, 
-    9406, 
-    718, 
-    9347
-  ], 
-  [
-    1444, 
-    "ANGELA VAUGHN", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    1886, 
-    9411, 
-    719, 
-    9320
-  ], 
-  [
-    1445, 
-    "LARRY CAMPBELL", 
-    39, 
-    "M", 
-    "SOCIAL CIRCLE GA", 
-    276, 
-    9419, 
-    719, 
-    9325
-  ], 
-  [
-    1446, 
-    "DANA BARTON", 
-    47, 
-    "F", 
-    "FOREST PARK GA", 
-    115, 
-    9421, 
-    720, 
-    9336
-  ], 
-  [
-    1447, 
-    "ALAN EARLS", 
-    52, 
-    "M", 
-    "HAMPTON GA", 
-    542, 
-    9422, 
-    720, 
-    9336
-  ], 
-  [
-    1448, 
-    "JENNIFER MCDONALD", 
-    34, 
-    "F", 
-    "BREMEN GA", 
-    1208, 
-    9430, 
-    720, 
-    9326
-  ], 
-  [
-    1449, 
-    "KARI WARD", 
-    25, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    1920, 
-    9431, 
-    720, 
-    9328
-  ], 
-  [
-    1450, 
-    "MICHELLE FINCH", 
-    41, 
-    "F", 
-    "LEXINGTON GA", 
-    600, 
-    9432, 
-    720, 
-    9343
-  ], 
-  [
-    1451, 
-    "LORI FLEMING", 
-    46, 
-    "F", 
-    "HOSCHTON GA", 
-    609, 
-    9450, 
-    722, 
-    9366
-  ], 
-  [
-    1452, 
-    "MARIA ALBO CARABELLI", 
-    31, 
-    "F", 
-    "CUMMING GA", 
-    25, 
-    9461, 
-    723, 
-    9348
-  ], 
-  [
-    1453, 
-    "BRIGITTE LANDRUM", 
-    43, 
-    "F", 
-    "ACWORTH GA", 
-    1053, 
-    9462, 
-    723, 
-    9351
-  ], 
-  [
-    1454, 
-    "KEVIN SULLIVAN", 
-    30, 
-    "M", 
-    "WOODSTOCK GA", 
-    1781, 
-    9463, 
-    723, 
-    9409
-  ], 
-  [
-    1455, 
-    "HILARIE WALLER", 
-    38, 
-    "F", 
-    "DULUTH GA", 
-    1904, 
-    9469, 
-    723, 
-    9387
-  ], 
-  [
-    1456, 
-    "MARITZA ROSE", 
-    56, 
-    "F", 
-    "SMYRNA GA", 
-    1560, 
-    9489, 
-    725, 
-    9470
-  ], 
-  [
-    1457, 
-    "JULIE HENLY", 
-    49, 
-    "F", 
-    "CUMMING GA", 
-    831, 
-    9500, 
-    726, 
-    9383
-  ], 
-  [
-    1458, 
-    "RACHEL PARISAY", 
-    23, 
-    "F", 
-    "ATLANTA GA", 
-    1392, 
-    9506, 
-    726, 
-    9408
-  ], 
-  [
-    1459, 
-    "JASON LOGAN", 
-    38, 
-    "M", 
-    "WOODSTOCK GA", 
-    1116, 
-    9508, 
-    726, 
-    -1
-  ], 
-  [
-    1460, 
-    "JENNIFER PATTERSON", 
-    42, 
-    "F", 
-    "CANTON GA", 
-    1404, 
-    9517, 
-    727, 
-    9439
-  ], 
-  [
-    1461, 
-    "COLLEEN WRAY WRAY", 
-    45, 
-    "F", 
-    "MANHATTAN IL", 
-    2004, 
-    9517, 
-    727, 
-    9427
-  ], 
-  [
-    1462, 
-    "HEATHER FURLONG", 
-    29, 
-    "F", 
-    "AUSTELL GA", 
-    654, 
-    9525, 
-    728, 
-    9442
-  ], 
-  [
-    1463, 
-    "DANIELLE WEBER", 
-    26, 
-    "F", 
-    "ATLANTA GA", 
-    1938, 
-    9527, 
-    728, 
-    9427
-  ], 
-  [
-    1464, 
-    "KATHARINE SIGLER", 
-    28, 
-    "F", 
-    "KENNESAW GA", 
-    1679, 
-    9528, 
-    728, 
-    9444
-  ], 
-  [
-    1465, 
-    "SONIA LEE", 
-    38, 
-    "F", 
-    "NORCROSS GA", 
-    1080, 
-    9531, 
-    728, 
-    9432
-  ], 
-  [
-    1466, 
-    "KENDRA WRIGHT", 
-    37, 
-    "F", 
-    "AUSTELL GA", 
-    2008, 
-    9547, 
-    729, 
-    9503
-  ], 
-  [
-    1467, 
-    "ALISHA JORDAN", 
-    34, 
-    "F", 
-    "AUSTELL GA", 
-    961, 
-    9547, 
-    729, 
-    9503
-  ], 
-  [
-    1468, 
-    "ELLEN SMITH", 
-    63, 
-    "F", 
-    "LITHIA SPRINGS GA", 
-    1706, 
-    9557, 
-    730, 
-    9450
-  ], 
-  [
-    1469, 
-    "ANDREA BAPST", 
-    43, 
-    "F", 
-    "MABLETON GA", 
-    96, 
-    9566, 
-    731, 
-    9480
-  ], 
-  [
-    1470, 
-    "SANDRA STEWART KRUGER", 
-    47, 
-    "F", 
-    "ATLANTA GA", 
-    1766, 
-    9578, 
-    732, 
-    9469
-  ], 
-  [
-    1471, 
-    "NIKI MCCUTCHEN", 
-    40, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1207, 
-    9590, 
-    732, 
-    9541
-  ], 
-  [
-    1472, 
-    "LAURA CORN", 
-    36, 
-    "F", 
-    "MARIETTA GA", 
-    386, 
-    9602, 
-    733, 
-    9497
-  ], 
-  [
-    1473, 
-    "JEFFREY PAUL", 
-    48, 
-    "M", 
-    "SNELLVILLE GA", 
-    1406, 
-    9626, 
-    735, 
-    9515
-  ], 
-  [
-    1474, 
-    "KATHY PARKER", 
-    43, 
-    "F", 
-    "LILBURN GA", 
-    1394, 
-    9627, 
-    735, 
-    9515
-  ], 
-  [
-    1475, 
-    "GAIL BANG", 
-    51, 
-    "F", 
-    "DECATUR GA", 
-    92, 
-    9633, 
-    736, 
-    9533
-  ], 
-  [
-    1476, 
-    "AMANDA FISHER", 
-    28, 
-    "F", 
-    "ACWORTH GA", 
-    602, 
-    9637, 
-    736, 
-    9604
-  ], 
-  [
-    1477, 
-    "PATTY MCGILL", 
-    53, 
-    "F", 
-    "ATLANTA GA", 
-    1219, 
-    9644, 
-    737, 
-    9498
-  ], 
-  [
-    1478, 
-    "DAVE INFANTE", 
-    41, 
-    "M", 
-    "WOODSTOCK GA", 
-    904, 
-    9649, 
-    737, 
-    9553
-  ], 
-  [
-    1479, 
-    "TRACY COOPER", 
-    31, 
-    "F", 
-    "ATLANTA GA", 
-    383, 
-    9657, 
-    738, 
-    9567
-  ], 
-  [
-    1480, 
-    "DAVID GAVIN", 
-    39, 
-    "M", 
-    "KENNESAW GA", 
-    678, 
-    9657, 
-    738, 
-    9573
-  ], 
-  [
-    1481, 
-    "ALYSSA PARSONS", 
-    28, 
-    "F", 
-    "DECATUR GA", 
-    1399, 
-    9667, 
-    738, 
-    9587
-  ], 
-  [
-    1482, 
-    "PRESTON CLOVER", 
-    25, 
-    "M", 
-    "MOUNTAIN VIEW CA", 
-    344, 
-    9668, 
-    738, 
-    9588
-  ], 
-  [
-    1483, 
-    "BECKY MALCOM", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    1159, 
-    9668, 
-    738, 
-    9563
-  ], 
-  [
-    1484, 
-    "DONNA MILLER", 
-    49, 
-    "F", 
-    "LOGUST GROVE GA", 
-    1274, 
-    9668, 
-    738, 
-    9603
-  ], 
-  [
-    1485, 
-    "KIM BRADLEY", 
-    53, 
-    "F", 
-    "ATHENS GA", 
-    194, 
-    9670, 
-    739, 
-    9546
-  ], 
-  [
-    1486, 
-    "SHANNON CASAJUANA", 
-    35, 
-    "F", 
-    "DALLAS GA", 
-    294, 
-    9671, 
-    739, 
-    9564
-  ], 
-  [
-    1487, 
-    "MARY JANE BATES", 
-    43, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    123, 
-    9671, 
-    739, 
-    9606
-  ], 
-  [
-    1488, 
-    "ERIN SHOEMAKER", 
-    34, 
-    "F", 
-    "ALPHARETTA GA", 
-    1672, 
-    9695, 
-    741, 
-    9660
-  ], 
-  [
-    1489, 
-    "PAULA MACKAY", 
-    34, 
-    "F", 
-    "CUMMING GA", 
-    1146, 
-    9700, 
-    741, 
-    9599
-  ], 
-  [
-    1490, 
-    "ANTHONY FOURNIER", 
-    21, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    627, 
-    9705, 
-    741, 
-    9651
-  ], 
-  [
-    1491, 
-    "ALYS PLEDGER", 
-    19, 
-    "F", 
-    "SMYRNA GA", 
-    1447, 
-    9705, 
-    741, 
-    9651
-  ], 
-  [
-    1492, 
-    "JASON HARMON", 
-    39, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    787, 
-    9706, 
-    741, 
-    9608
-  ], 
-  [
-    1493, 
-    "DANIELLE HARMON", 
-    43, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    786, 
-    9706, 
-    741, 
-    9608
-  ], 
-  [
-    1494, 
-    "KENNETH KEATING", 
-    39, 
-    "M", 
-    "KENNESAW GA", 
-    976, 
-    9709, 
-    742, 
-    9604
-  ], 
-  [
-    1495, 
-    "TOM GOODWIN", 
-    45, 
-    "M", 
-    "ROSWELL GA", 
-    709, 
-    9711, 
-    742, 
-    9610
-  ], 
-  [
-    1496, 
-    "STACEY CHAMBLISS", 
-    36, 
-    "F", 
-    "ROSWELL GA", 
-    314, 
-    9713, 
-    742, 
-    9620
-  ], 
-  [
-    1497, 
-    "BECKY JOHNSON", 
-    29, 
-    "F", 
-    "ALPHARETTA GA", 
-    940, 
-    9713, 
-    742, 
-    9620
-  ], 
-  [
-    1498, 
-    "RACHAEL BURNS", 
-    28, 
-    "F", 
-    "MABLETON GA", 
-    251, 
-    9717, 
-    742, 
-    9684
-  ], 
-  [
-    1499, 
-    "BAILEY KNIGHT", 
-    21, 
-    "F", 
-    "MILLEDGEVILLE GA", 
-    1015, 
-    9731, 
-    743, 
-    9665
-  ], 
-  [
-    1500, 
-    "JARED SMITH", 
-    24, 
-    "M", 
-    "MILLEDGEVILLE GA", 
-    1709, 
-    9731, 
-    743, 
-    9666
-  ], 
-  [
-    1501, 
-    "JENNY THOMPSON", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1828, 
-    9750, 
-    745, 
-    9648
-  ], 
-  [
-    1502, 
-    "BONNIE SEABROOKE", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    1630, 
-    9750, 
-    745, 
-    9648
-  ], 
-  [
-    1503, 
-    "THOMAS CHERNETSKY", 
-    42, 
-    "M", 
-    "SUWANEE GA", 
-    324, 
-    9775, 
-    747, 
-    9733
-  ], 
-  [
-    1504, 
-    "TOM CHERNETSKY", 
-    72, 
-    "M", 
-    "ROSWELL GA", 
-    325, 
-    9775, 
-    747, 
-    9733
-  ], 
-  [
-    1505, 
-    "LISA ROSS-FAUST", 
-    48, 
-    "F", 
-    "SMYRNA GA", 
-    1565, 
-    9778, 
-    747, 
-    9680
-  ], 
-  [
-    1506, 
-    "DARLENE COWAN", 
-    56, 
-    "F", 
-    "DALLAS GA", 
-    394, 
-    9781, 
-    747, 
-    9674
-  ], 
-  [
-    1507, 
-    "KEVIN BARGER", 
-    56, 
-    "M", 
-    "WOODSTOCK GA", 
-    99, 
-    9783, 
-    747, 
-    9699
-  ], 
-  [
-    1508, 
-    "RANDY REAGAN", 
-    32, 
-    "M", 
-    "DAWSONVILLE GA", 
-    1496, 
-    9783, 
-    747, 
-    9698
-  ], 
-  [
-    1509, 
-    "CINDY MILLER", 
-    48, 
-    "F", 
-    "WOODSTOCK GA", 
-    1273, 
-    9793, 
-    748, 
-    9695
-  ], 
-  [
-    1510, 
-    "JAMIE LONG", 
-    39, 
-    "M", 
-    "JACKSON GA", 
-    1121, 
-    9801, 
-    749, 
-    9721
-  ], 
-  [
-    1511, 
-    "FAYE DIMASSIMO", 
-    50, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    493, 
-    9818, 
-    750, 
-    9708
-  ], 
-  [
-    1512, 
-    "SARAH DURLING", 
-    28, 
-    "F", 
-    "ATLANTA GA", 
-    537, 
-    9850, 
-    752, 
-    9695
-  ], 
-  [
-    1513, 
-    "AMMONS BENFORD", 
-    42, 
-    "M", 
-    "ATLANTA GA", 
-    2141, 
-    9852, 
-    753, 
-    9794
-  ], 
-  [
-    1514, 
-    "LAUREN ROTCHFORD", 
-    34, 
-    "F", 
-    "ATLANTA GA", 
-    1566, 
-    9854, 
-    753, 
-    9828
-  ], 
-  [
-    1515, 
-    "ALISON GREEN", 
-    40, 
-    "F", 
-    "ATLANTA GA", 
-    728, 
-    9860, 
-    753, 
-    9749
-  ], 
-  [
-    1516, 
-    "KIRSTEN JONES", 
-    42, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    959, 
-    9861, 
-    753, 
-    9754
-  ], 
-  [
-    1517, 
-    "JEAN MENSE", 
-    51, 
-    "F", 
-    "ROSWELL GA", 
-    1254, 
-    9862, 
-    753, 
-    9765
-  ], 
-  [
-    1518, 
-    "NEIL MCCARTHY", 
-    71, 
-    "M", 
-    "ROSWELL GA", 
-    1195, 
-    9870, 
-    754, 
-    -1
-  ], 
-  [
-    1519, 
-    "MICHELLE DAVIS", 
-    36, 
-    "F", 
-    "ACWORTH GA", 
-    451, 
-    9875, 
-    754, 
-    9762
-  ], 
-  [
-    1520, 
-    "KIM SKIBER", 
-    39, 
-    "F", 
-    "ROSWELL GA", 
-    1693, 
-    9886, 
-    755, 
-    9797
-  ], 
-  [
-    1521, 
-    "LIA KAPLAN", 
-    38, 
-    "F", 
-    "TUCKER GA", 
-    969, 
-    9891, 
-    755, 
-    9803
-  ], 
-  [
-    1522, 
-    "DANA BAHLINGER", 
-    40, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    79, 
-    9894, 
-    756, 
-    9775
-  ], 
-  [
-    1523, 
-    "EDWARD BOYD", 
-    34, 
-    "M", 
-    "DAHLONEGA GA", 
-    185, 
-    9895, 
-    756, 
-    9827
-  ], 
-  [
-    1524, 
-    "REBECCA GRAY", 
-    22, 
-    "F", 
-    "ATLANTA GA", 
-    724, 
-    9899, 
-    756, 
-    9831
-  ], 
-  [
-    1525, 
-    "IRENE SMITH", 
-    41, 
-    "F", 
-    "WHITE GA", 
-    1708, 
-    9899, 
-    756, 
-    9837
-  ], 
-  [
-    1526, 
-    "KEVIN KELLY", 
-    50, 
-    "M", 
-    "KENNESAW GA", 
-    983, 
-    9927, 
-    758, 
-    9863
-  ], 
-  [
-    1527, 
-    "HEATHER KELLY", 
-    26, 
-    "F", 
-    "MARIETTA GA", 
-    982, 
-    9928, 
-    758, 
-    9863
-  ], 
-  [
-    1528, 
-    "KAREN PICKENS", 
-    50, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1441, 
-    9931, 
-    759, 
-    9840
-  ], 
-  [
-    1529, 
-    "NATALIE DAWKINS", 
-    48, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    457, 
-    9932, 
-    759, 
-    9840
-  ], 
-  [
-    1530, 
-    "MEGEN MACOMBER", 
-    36, 
-    "F", 
-    "CANTON GA", 
-    1150, 
-    9942, 
-    759, 
-    9839
-  ], 
-  [
-    1531, 
-    "MICHELLE ANSLEY", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    58, 
-    9953, 
-    760, 
-    9838
-  ], 
-  [
-    1532, 
-    "DANIEL BUCHANAN", 
-    30, 
-    "M", 
-    "ALPHARETTA GA", 
-    233, 
-    9961, 
-    761, 
-    9884
-  ], 
-  [
-    1533, 
-    "AMANDA DEES", 
-    32, 
-    "F", 
-    "MONROE NC", 
-    466, 
-    9968, 
-    761, 
-    9891
-  ], 
-  [
-    1534, 
-    "JOAN LAKE", 
-    42, 
-    "F", 
-    "ACWORTH GA", 
-    1048, 
-    9969, 
-    761, 
-    9857
-  ], 
-  [
-    1535, 
-    "KELLY LUCKETT", 
-    43, 
-    "F", 
-    "ATLANTA GA", 
-    1131, 
-    9981, 
-    762, 
-    9954
-  ], 
-  [
-    1536, 
-    "MATTHEW GRUND", 
-    33, 
-    "M", 
-    "MARIETTA GA", 
-    746, 
-    9989, 
-    763, 
-    9881
-  ], 
-  [
-    1537, 
-    "EMILY GRUND", 
-    33, 
-    "F", 
-    "MARIETTA GA", 
-    745, 
-    9989, 
-    763, 
-    9880
-  ], 
-  [
-    1538, 
-    "VALORIE KETCHUM", 
-    47, 
-    "F", 
-    "PINEHURST NC", 
-    992, 
-    9992, 
-    763, 
-    9905
-  ], 
-  [
-    1539, 
-    "KAREN POWELL", 
-    41, 
-    "F", 
-    "MABLETON GA", 
-    1461, 
-    10008, 
-    764, 
-    9906
-  ], 
-  [
-    1540, 
-    "SHANNON BRYAN", 
-    35, 
-    "F", 
-    "KANNAPOLIS NC", 
-    227, 
-    10017, 
-    765, 
-    9909
-  ], 
-  [
-    1541, 
-    "MEL DODD", 
-    58, 
-    "M", 
-    "JOHNS CREEK GA", 
-    500, 
-    10022, 
-    766, 
-    9941
-  ], 
-  [
-    1542, 
-    "LAURA DODD", 
-    53, 
-    "M", 
-    "JOHNS CREEK GA", 
-    499, 
-    10023, 
-    766, 
-    9941
-  ], 
-  [
-    1543, 
-    "ELLEN JANNETTA", 
-    42, 
-    "F", 
-    "ATLANTA GA", 
-    921, 
-    10032, 
-    766, 
-    9918
-  ], 
-  [
-    1544, 
-    "SHELLY PETERS", 
-    43, 
-    "F", 
-    "MARIETTA GA", 
-    2030, 
-    10041, 
-    767, 
-    10004
-  ], 
-  [
-    1545, 
-    "LISA SANDERS", 
-    30, 
-    "F", 
-    "HOLLY SPRINGS GA", 
-    1589, 
-    10070, 
-    769, 
-    10024
-  ], 
-  [
-    1546, 
-    "MARY CHAMLEE", 
-    40, 
-    "F", 
-    "ROSWELL GA", 
-    315, 
-    10073, 
-    769, 
-    9953
-  ], 
-  [
-    1547, 
-    "KIMBERLY WALDROP", 
-    39, 
-    "F", 
-    "PEACHTREE CITY GA", 
-    1900, 
-    10074, 
-    769, 
-    10025
-  ], 
-  [
-    1548, 
-    "STACEY CHAPMAN", 
-    39, 
-    "F", 
-    "MABLETON GA", 
-    319, 
-    10075, 
-    770, 
-    10027
-  ], 
-  [
-    1549, 
-    "MARIA HANDWORK", 
-    46, 
-    "F", 
-    "MARIETTA GA", 
-    774, 
-    10079, 
-    770, 
-    10001
-  ], 
-  [
-    1550, 
-    "STACY GAVIN", 
-    35, 
-    "F", 
-    "WOODSTOCK GA", 
-    680, 
-    10083, 
-    770, 
-    9989
-  ], 
-  [
-    1551, 
-    "SARAH MULLINS", 
-    30, 
-    "F", 
-    "WOODSTOCK GA", 
-    1323, 
-    10083, 
-    770, 
-    9989
-  ], 
-  [
-    1552, 
-    "KIM SPERLING", 
-    38, 
-    "F", 
-    "ROSWELL GA", 
-    1738, 
-    10086, 
-    770, 
-    9981
-  ], 
-  [
-    1553, 
-    "MICHELLE DIXON", 
-    28, 
-    "F", 
-    "SNELLVILLE GA", 
-    495, 
-    10097, 
-    771, 
-    9991
-  ], 
-  [
-    1554, 
-    "THEJA WICKERSHAM", 
-    32, 
-    "F", 
-    "CUMMING GA", 
-    1965, 
-    10144, 
-    775, 
-    10051
-  ], 
-  [
-    1555, 
-    "ASHLEY ROCQUE", 
-    28, 
-    "F", 
-    "KENNESAW GA", 
-    1549, 
-    10146, 
-    775, 
-    10071
-  ], 
-  [
-    1556, 
-    "TINA BUTTERFIELD", 
-    31, 
-    "F", 
-    "COLUMBIA SC", 
-    258, 
-    10146, 
-    775, 
-    10071
-  ], 
-  [
-    1557, 
-    "TERI DOEPKE", 
-    36, 
-    "F", 
-    "OXFORD GA", 
-    501, 
-    10152, 
-    775, 
-    10032
-  ], 
-  [
-    1558, 
-    "ROBERT JACKSON", 
-    48, 
-    "M", 
-    "ATLANTA GA", 
-    912, 
-    10173, 
-    777, 
-    10071
-  ], 
-  [
-    1559, 
-    "JASON GALLMAN", 
-    39, 
-    "M", 
-    "WINDER GA", 
-    663, 
-    10177, 
-    777, 
-    9980
-  ], 
-  [
-    1560, 
-    "CANDACE BROWN", 
-    44, 
-    "F", 
-    "JOHNS CREEK GA", 
-    213, 
-    10190, 
-    778, 
-    10074
-  ], 
-  [
-    1561, 
-    "TONYA LETT", 
-    41, 
-    "F", 
-    "DULUTH GA", 
-    1087, 
-    10191, 
-    778, 
-    10075
-  ], 
-  [
-    1562, 
-    "ERIKA MILLER", 
-    41, 
-    "F", 
-    "ATLANTA GA", 
-    1275, 
-    10234, 
-    782, 
-    -1
-  ], 
-  [
-    1563, 
-    "STACIE HUSACK", 
-    31, 
-    "F", 
-    "FAYETTEVILLE GA", 
-    895, 
-    10243, 
-    782, 
-    10146
-  ], 
-  [
-    1564, 
-    "JODI DOBY", 
-    41, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    496, 
-    10249, 
-    783, 
-    10191
-  ], 
-  [
-    1565, 
-    "LISA LEGATE", 
-    45, 
-    "F", 
-    "MARIETTA GA", 
-    1083, 
-    10264, 
-    784, 
-    10226
-  ], 
-  [
-    1566, 
-    "JOSEPH ERNEST", 
-    65, 
-    "M", 
-    "NORCROSS GA", 
-    572, 
-    10314, 
-    788, 
-    10231
-  ], 
-  [
-    1567, 
-    "GWEN COTTRELL", 
-    41, 
-    "F", 
-    "ACWORTH GA", 
-    391, 
-    10379, 
-    793, 
-    10261
-  ], 
-  [
-    1568, 
-    "KEVIN TIERNEY", 
-    33, 
-    "M", 
-    "CUMMING GA", 
-    1837, 
-    10385, 
-    793, 
-    10337
-  ], 
-  [
-    1569, 
-    "DEENNA DURHAM", 
-    40, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    536, 
-    10386, 
-    793, 
-    10271
-  ], 
-  [
-    1570, 
-    "JAMIE ANDREWS", 
-    37, 
-    "F", 
-    "WOODSTOCK GA", 
-    56, 
-    10387, 
-    793, 
-    10279
-  ], 
-  [
-    1571, 
-    "HEIDI SHOOK", 
-    39, 
-    "F", 
-    "ALPHARETTA GA", 
-    1674, 
-    10420, 
-    796, 
-    10308
-  ], 
-  [
-    1572, 
-    "ASHLEY GELLIS", 
-    41, 
-    "F", 
-    "MARIETTA GA", 
-    684, 
-    10430, 
-    797, 
-    10319
-  ], 
-  [
-    1573, 
-    "TERRY MILLER", 
-    51, 
-    "M", 
-    "ATLANTA GA", 
-    1284, 
-    10439, 
-    797, 
-    10413
-  ], 
-  [
-    1574, 
-    "MARILEE DORSEY", 
-    53, 
-    "F", 
-    "DULUTH GA", 
-    508, 
-    10448, 
-    798, 
-    10342
-  ], 
-  [
-    1575, 
-    "WYLENE EASON", 
-    69, 
-    "F", 
-    "MCDONOUGH GA", 
-    543, 
-    10451, 
-    798, 
-    10345
-  ], 
-  [
-    1576, 
-    "NATE DEAN", 
-    30, 
-    "M", 
-    "WOODSTOCK GA", 
-    460, 
-    10452, 
-    798, 
-    10349
-  ], 
-  [
-    1577, 
-    "DORI JO LAWRANCE", 
-    40, 
-    "F", 
-    "CHATTANOOGA TN", 
-    1064, 
-    10466, 
-    799, 
-    10358
-  ], 
-  [
-    1578, 
-    "SABRINA MAGEE", 
-    48, 
-    "F", 
-    "CARROLLTON GA", 
-    1151, 
-    10477, 
-    800, 
-    10365
-  ], 
-  [
-    1579, 
-    "LEIGH REED", 
-    44, 
-    "F", 
-    "ATLANTA GA", 
-    1504, 
-    10477, 
-    800, 
-    10361
-  ], 
-  [
-    1580, 
-    "JANET ANDERSON", 
-    54, 
-    "F", 
-    "ATLANTA GA", 
-    49, 
-    10486, 
-    801, 
-    10423
-  ], 
-  [
-    1581, 
-    "DAVID GRIFFIN", 
-    52, 
-    "M", 
-    "MARIETTA GA", 
-    739, 
-    10512, 
-    803, 
-    10484
-  ], 
-  [
-    1582, 
-    "BRANDY AIRALL", 
-    33, 
-    "F", 
-    "ATLANTA GA", 
-    20, 
-    10530, 
-    804, 
-    10414
-  ], 
-  [
-    1583, 
-    "PAUL GRICE", 
-    61, 
-    "M", 
-    "ATLANTA GA", 
-    737, 
-    10533, 
-    805, 
-    10432
-  ], 
-  [
-    1584, 
-    "ANGELA EDGAR", 
-    55, 
-    "F", 
-    "MCDONOUGH GA", 
-    546, 
-    10534, 
-    805, 
-    10430
-  ], 
-  [
-    1585, 
-    "CLARISSA ELS", 
-    22, 
-    "F", 
-    "SUWANEE GA", 
-    569, 
-    10536, 
-    805, 
-    10330
-  ], 
-  [
-    1586, 
-    "KITTI MURRAY", 
-    53, 
-    "F", 
-    "ATLANTA GA", 
-    1326, 
-    10541, 
-    805, 
-    10334
-  ], 
-  [
-    1587, 
-    "KIM FRANKLIN", 
-    29, 
-    "F", 
-    "MARIETTA GA", 
-    632, 
-    10566, 
-    807, 
-    10476
-  ], 
-  [
-    1588, 
-    "SARAH GILBERT", 
-    25, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    694, 
-    10607, 
-    810, 
-    -1
-  ], 
-  [
-    1589, 
-    "ALLISON PERRY", 
-    27, 
-    "F", 
-    "WOODSTOCK GA", 
-    1419, 
-    10607, 
-    810, 
-    10502
-  ], 
-  [
-    1590, 
-    "JULIE LUGAR", 
-    48, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    1133, 
-    10628, 
-    812, 
-    10537
-  ], 
-  [
-    1591, 
-    "LUCIANA TUCCI", 
-    32, 
-    "F", 
-    "ATLANTA GA", 
-    1858, 
-    10656, 
-    814, 
-    10566
-  ], 
-  [
-    1592, 
-    "ROBERT PEARSON", 
-    41, 
-    "M", 
-    "TALLAHASSEE FL", 
-    1410, 
-    10657, 
-    814, 
-    10596
-  ], 
-  [
-    1593, 
-    "AMBER PEARSON", 
-    31, 
-    "F", 
-    "TALLAHASSEE FL", 
-    1409, 
-    10658, 
-    814, 
-    10596
-  ], 
-  [
-    1594, 
-    "BECKY COLDWELL", 
-    53, 
-    "F", 
-    "CARROLLTON GA", 
-    357, 
-    10659, 
-    814, 
-    10566
-  ], 
-  [
-    1595, 
-    "ETHEL LILLO", 
-    54, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1100, 
-    10665, 
-    815, 
-    10569
-  ], 
-  [
-    1596, 
-    "LORA BOCK", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    165, 
-    10668, 
-    815, 
-    10554
-  ], 
-  [
-    1597, 
-    "YVELISE HODO-LOPEZ", 
-    38, 
-    "F", 
-    "ATLANTA GA", 
-    848, 
-    10669, 
-    815, 
-    10554
-  ], 
-  [
-    1598, 
-    "VIC MILLER", 
-    40, 
-    "M", 
-    "SMYRNA GA", 
-    1285, 
-    10680, 
-    816, 
-    10576
-  ], 
-  [
-    1599, 
-    "MATT SHADE", 
-    69, 
-    "M", 
-    "MARIETTA GA", 
-    1646, 
-    10689, 
-    816, 
-    10586
-  ], 
-  [
-    1600, 
-    "LAUREN SAUNDERS", 
-    27, 
-    "F", 
-    "MARIETTA GA", 
-    1597, 
-    10718, 
-    819, 
-    10652
-  ], 
-  [
-    1601, 
-    "AMY MALCOM", 
-    44, 
-    "F", 
-    "ALPHARETTA GA", 
-    1158, 
-    10730, 
-    820, 
-    10692
-  ], 
-  [
-    1602, 
-    "ANDY SHEPPARD", 
-    38, 
-    "M", 
-    "HOSCHTON GA", 
-    1666, 
-    10733, 
-    820, 
-    10674
-  ], 
-  [
-    1603, 
-    "REBECCA GALLMAN", 
-    33, 
-    "F", 
-    "WINDER GA", 
-    664, 
-    10751, 
-    821, 
-    10553
-  ], 
-  [
-    1604, 
-    "SAMANTHA STEPHENS", 
-    38, 
-    "F", 
-    "MARIETTA GA", 
-    1764, 
-    10754, 
-    821, 
-    10643
-  ], 
-  [
-    1605, 
-    "WILLIAM BROCK", 
-    38, 
-    "M", 
-    "KENNESAW GA", 
-    207, 
-    10765, 
-    822, 
-    10676
-  ], 
-  [
-    1606, 
-    "ADAM TOENES", 
-    29, 
-    "M", 
-    "DACULA GA", 
-    1843, 
-    10765, 
-    822, 
-    10660
-  ], 
-  [
-    1607, 
-    "AMANDA REMILLARD", 
-    25, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1510, 
-    10773, 
-    823, 
-    10674
-  ], 
-  [
-    1608, 
-    "AUDREA REASE", 
-    37, 
-    "F", 
-    "DECATUR GA", 
-    1497, 
-    10781, 
-    823, 
-    10740
-  ], 
-  [
-    1609, 
-    "RHEA ASHCRAFT", 
-    45, 
-    "F", 
-    "SAN DIEGO CA", 
-    67, 
-    10801, 
-    825, 
-    10696
-  ], 
-  [
-    1610, 
-    "SANDRA HORAN", 
-    67, 
-    "F", 
-    "SUWANEE GA", 
-    863, 
-    10803, 
-    825, 
-    10687
-  ], 
-  [
-    1611, 
-    "KASHI SEHGAL", 
-    30, 
-    "F", 
-    "ATLANTA GA", 
-    1634, 
-    10820, 
-    826, 
-    10727
-  ], 
-  [
-    1612, 
-    "MELISSA KOVACH", 
-    30, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1022, 
-    10824, 
-    827, 
-    10716
-  ], 
-  [
-    1613, 
-    "KISHA DONAHUE", 
-    35, 
-    "F", 
-    "KENNESAW GA", 
-    504, 
-    10840, 
-    828, 
-    10751
-  ], 
-  [
-    1614, 
-    "LINDA JACKSON", 
-    55, 
-    "F", 
-    "CUMMING GA", 
-    911, 
-    10856, 
-    829, 
-    10747
-  ], 
-  [
-    1615, 
-    "CHRISTOPHER PETERSON", 
-    38, 
-    "M", 
-    "MARIETTA GA", 
-    1421, 
-    10894, 
-    832, 
-    10778
-  ], 
-  [
-    1616, 
-    "JEFF MCNEIL", 
-    31, 
-    "M", 
-    "MARIETTA GA", 
-    1240, 
-    10911, 
-    833, 
-    10793
-  ], 
-  [
-    1617, 
-    "ANJANETTE KEANE-DAWES", 
-    39, 
-    "F", 
-    "MABLETON FM", 
-    974, 
-    10919, 
-    834, 
-    10891
-  ], 
-  [
-    1618, 
-    "MANISHA KULKARNI", 
-    44, 
-    "F", 
-    "ALPHARETTA GA", 
-    1038, 
-    10936, 
-    835, 
-    10893
-  ], 
-  [
-    1619, 
-    "LINDA MONGELL", 
-    63, 
-    "F", 
-    "ATLANTA GA", 
-    1296, 
-    10945, 
-    836, 
-    10835
-  ], 
-  [
-    1620, 
-    "EDNA SALAMO", 
-    41, 
-    "F", 
-    "MABLETON GA", 
-    1582, 
-    10949, 
-    836, 
-    10833
-  ], 
-  [
-    1621, 
-    "LAURA POLO", 
-    37, 
-    "F", 
-    "LAWRENCEVILLE GA", 
-    1452, 
-    10984, 
-    839, 
-    10865
-  ], 
-  [
-    1622, 
-    "CAROL LEWIS", 
-    64, 
-    "F", 
-    "CONYERS GA", 
-    1089, 
-    10985, 
-    839, 
-    10866
-  ], 
-  [
-    1623, 
-    "AMRUT KULKARNI", 
-    14, 
-    "M", 
-    "ALPHARETTA GA", 
-    1037, 
-    11030, 
-    842, 
-    10986
-  ], 
-  [
-    1624, 
-    "DORALEE GORDON", 
-    43, 
-    "F", 
-    "OOLTEWAH TN", 
-    710, 
-    11074, 
-    846, 
-    10965
-  ], 
-  [
-    1625, 
-    "PEGGY ROGERS", 
-    67, 
-    "F", 
-    "ATLANTA GA", 
-    1553, 
-    11103, 
-    848, 
-    10994
-  ], 
-  [
-    1626, 
-    "SHEREE BERK", 
-    51, 
-    "F", 
-    "MARIETTA GA", 
-    146, 
-    11129, 
-    850, 
-    11092
-  ], 
-  [
-    1627, 
-    "STACIE METCALFE", 
-    39, 
-    "F", 
-    "ATLANTA GA", 
-    1268, 
-    11170, 
-    853, 
-    11073
-  ], 
-  [
-    1628, 
-    "KAREN CONNELLY", 
-    46, 
-    "F", 
-    "DALLAS GA", 
-    370, 
-    11174, 
-    853, 
-    11066
-  ], 
-  [
-    1629, 
-    "MARCI BENNAFIELD", 
-    43, 
-    "F", 
-    "ATLANTA GA", 
-    142, 
-    11194, 
-    855, 
-    11074
-  ], 
-  [
-    1630, 
-    "DAVID GARNER", 
-    40, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    671, 
-    11203, 
-    856, 
-    11095
-  ], 
-  [
-    1631, 
-    "GRACE THOMSEN", 
-    12, 
-    "F", 
-    "MABLETON GA", 
-    1830, 
-    11217, 
-    857, 
-    11193
-  ], 
-  [
-    1632, 
-    "ANGELA THOMSEN", 
-    45, 
-    "F", 
-    "MABLETON GA", 
-    1829, 
-    11217, 
-    857, 
-    11193
-  ], 
-  [
-    1633, 
-    "MITCHELL KAO", 
-    40, 
-    "M", 
-    "NORCROSS GA", 
-    968, 
-    11223, 
-    857, 
-    11124
-  ], 
-  [
-    1634, 
-    "MARY KAY BALTZELL", 
-    47, 
-    "F", 
-    "TUCKER GA", 
-    90, 
-    11229, 
-    858, 
-    11130
-  ], 
-  [
-    1635, 
-    "SUSAN BANKE", 
-    55, 
-    "F", 
-    "SMYRNA GA", 
-    94, 
-    11270, 
-    861, 
-    11152
-  ], 
-  [
-    1636, 
-    "JENNIFER SUGGS", 
-    26, 
-    "F", 
-    "SMYRNA GA", 
-    1778, 
-    11270, 
-    861, 
-    11151
-  ], 
-  [
-    1637, 
-    "CHARLENE DETLER", 
-    42, 
-    "F", 
-    "ELLENWOOD GA", 
-    483, 
-    11274, 
-    861, 
-    11167
-  ], 
-  [
-    1638, 
-    "ASHLEY COX", 
-    25, 
-    "F", 
-    "KENNESAW GA", 
-    396, 
-    11303, 
-    863, 
-    11204
-  ], 
-  [
-    1639, 
-    "SHAYNA PEIKEN", 
-    42, 
-    "F", 
-    "MARIETTA GA", 
-    1413, 
-    11369, 
-    868, 
-    11280
-  ], 
-  [
-    1640, 
-    "CHARLOTTE HOOVER", 
-    61, 
-    "F", 
-    "MCDONOUGH GA", 
-    860, 
-    11437, 
-    874, 
-    11332
-  ], 
-  [
-    1641, 
-    "LINDA SUMMERS", 
-    49, 
-    "F", 
-    "SENOIA GA", 
-    1785, 
-    11478, 
-    877, 
-    11363
-  ], 
-  [
-    1642, 
-    "JEFF SUMMERS", 
-    50, 
-    "M", 
-    "SENOIA GA", 
-    1784, 
-    11479, 
-    877, 
-    11363
-  ], 
-  [
-    1643, 
-    "PHYLLIS HALL", 
-    52, 
-    "F", 
-    "SHARPSBURT GA", 
-    764, 
-    11480, 
-    877, 
-    11364
-  ], 
-  [
-    1644, 
-    "AMY FALZONE", 
-    29, 
-    "F", 
-    "ALPHARETTA GA", 
-    587, 
-    11514, 
-    879, 
-    11457
-  ], 
-  [
-    1645, 
-    "DENNIS LEATH", 
-    62, 
-    "M", 
-    "JASPER GA", 
-    1073, 
-    11518, 
-    880, 
-    11402
-  ], 
-  [
-    1646, 
-    "WANDA HALLER", 
-    53, 
-    "F", 
-    "POWDER SPRINGS GA", 
-    767, 
-    11541, 
-    881, 
-    11471
-  ], 
-  [
-    1647, 
-    "KATE BAWDEN", 
-    24, 
-    "F", 
-    "CANTON GA", 
-    126, 
-    11541, 
-    881, 
-    11500
-  ], 
-  [
-    1648, 
-    "BRIAN BAWDEN", 
-    27, 
-    "M", 
-    "CANTON GA", 
-    125, 
-    11542, 
-    881, 
-    11501
-  ], 
-  [
-    1649, 
-    "SARAH BOLING", 
-    40, 
-    "F", 
-    "SANDY SPRINGS GA", 
-    169, 
-    11606, 
-    886, 
-    11495
-  ], 
-  [
-    1650, 
-    "NANCY WAGES", 
-    60, 
-    "F", 
-    "DECATUR GA", 
-    1895, 
-    11618, 
-    887, 
-    11508
-  ], 
-  [
-    1651, 
-    "DIANNE MASON", 
-    49, 
-    "F", 
-    "KNIFEVILLE FL", 
-    1182, 
-    11656, 
-    890, 
-    11560
-  ], 
-  [
-    1652, 
-    "CAROL MARTIN", 
-    60, 
-    "F", 
-    "SMYRNA GA", 
-    1172, 
-    11757, 
-    898, 
-    11659
-  ], 
-  [
-    1653, 
-    "LYDIA WOODS", 
-    57, 
-    "F", 
-    "ATLANTA GA", 
-    2002, 
-    11781, 
-    900, 
-    11750
-  ], 
-  [
-    1654, 
-    "COLLEEN MELONEY", 
-    61, 
-    "F", 
-    "ALPHARETTA GA", 
-    1251, 
-    11819, 
-    903, 
-    -1
-  ], 
-  [
-    1655, 
-    "FARRAR BARKER", 
-    27, 
-    "F", 
-    "ATLANTA GA", 
-    101, 
-    11820, 
-    903, 
-    -1
-  ], 
-  [
-    1656, 
-    "KELLY BARKER", 
-    35, 
-    "M", 
-    "ATLANTA GA", 
-    102, 
-    11820, 
-    903, 
-    -1
-  ], 
-  [
-    1657, 
-    "BRIDGETTE JOHNSON", 
-    55, 
-    "F", 
-    "PANAMA CITY BEA FL", 
-    942, 
-    11821, 
-    903, 
-    -1
-  ], 
-  [
-    1658, 
-    "JOYCE LEATH", 
-    66, 
-    "F", 
-    "JASPER GA", 
-    1074, 
-    11851, 
-    905, 
-    11735
-  ], 
-  [
-    1659, 
-    "SUZANNE FLOWERS", 
-    32, 
-    "F", 
-    "MABLETON GA", 
-    614, 
-    11852, 
-    905, 
-    11765
-  ], 
-  [
-    1660, 
-    "JAN COLLINS", 
-    48, 
-    "F", 
-    "MARIETTA GA", 
-    366, 
-    11855, 
-    905, 
-    11812
-  ], 
-  [
-    1661, 
-    "HARRISON HUNT", 
-    20, 
-    "M", 
-    "WALESKA GA", 
-    2039, 
-    11859, 
-    906, 
-    11756
-  ], 
-  [
-    1662, 
-    "MARC TARTARO", 
-    37, 
-    "M", 
-    "MARIETTA GA", 
-    1802, 
-    11859, 
-    906, 
-    11755
-  ], 
-  [
-    1663, 
-    "SHELLI TREELY", 
-    49, 
-    "F", 
-    "OSCEOLA IN", 
-    1851, 
-    11864, 
-    906, 
-    11742
-  ], 
-  [
-    1664, 
-    "PEGGY SIMPSON", 
-    62, 
-    "F", 
-    "WHITE GA", 
-    1687, 
-    11884, 
-    908, 
-    11789
-  ], 
-  [
-    1665, 
-    "ANDY FREEMAN", 
-    40, 
-    "M", 
-    "POWDER SPRINGS GA", 
-    639, 
-    11897, 
-    909, 
-    11786
-  ], 
-  [
-    1666, 
-    "NEENA JOGLEKAR", 
-    45, 
-    "F", 
-    "ALPHARETTA GA", 
-    935, 
-    11945, 
-    912, 
-    11902
-  ], 
-  [
-    1667, 
-    "MICHELLE BARRON", 
-    47, 
-    "F", 
-    "MARIETTA GA", 
-    109, 
-    11992, 
-    916, 
-    11882
-  ], 
-  [
-    1668, 
-    "TINA LOGAN", 
-    42, 
-    "F", 
-    "MABLETON GA", 
-    1118, 
-    12076, 
-    922, 
-    12050
-  ], 
-  [
-    1669, 
-    "TONYA PHILLIPS", 
-    38, 
-    "F", 
-    "MABLETON GA", 
-    1437, 
-    12077, 
-    922, 
-    12050
-  ], 
-  [
-    1670, 
-    "CHRISTINE OSWALD", 
-    37, 
-    "F", 
-    "LILBURN GA", 
-    1378, 
-    12175, 
-    930, 
-    12060
-  ], 
-  [
-    1671, 
-    "ANITA HARRIS", 
-    50, 
-    "F", 
-    "ATLANTA GA", 
-    793, 
-    12184, 
-    930, 
-    12097
-  ], 
-  [
-    1672, 
-    "SHELIA SCOTT", 
-    53, 
-    "F", 
-    "L:ITHONIA GA", 
-    1628, 
-    12284, 
-    938, 
-    12181
-  ], 
-  [
-    1673, 
-    "MICHELLE COLLIER", 
-    54, 
-    "F", 
-    "ATLANTA GA", 
-    364, 
-    12397, 
-    947, 
-    12346
-  ], 
-  [
-    1674, 
-    "TIFFANY DEBROCK", 
-    34, 
-    "F", 
-    "SMYRNA GA", 
-    464, 
-    12398, 
-    947, 
-    12283
-  ], 
-  [
-    1675, 
-    "ROXANE RUSH", 
-    41, 
-    "F", 
-    "CANTON GA", 
-    1575, 
-    12508, 
-    955, 
-    12403
-  ], 
-  [
-    1676, 
-    "JEANNIE ROKOVITZ", 
-    39, 
-    "F", 
-    "WOODSTOCK GA", 
-    1554, 
-    12534, 
-    957, 
-    12430
-  ], 
-  [
-    1677, 
-    "REE MYERS", 
-    25, 
-    "F", 
-    "WOODSTOCK GA", 
-    1329, 
-    12580, 
-    961, 
-    12460
-  ], 
-  [
-    1678, 
-    "SUSAN MCPHERSON", 
-    52, 
-    "F", 
-    "CANTON GA", 
-    1243, 
-    12606, 
-    963, 
-    12485
-  ], 
-  [
-    1679, 
-    "BETH COPENHAVER", 
-    47, 
-    "F", 
-    "JOHNS CREEK GA", 
-    384, 
-    12626, 
-    964, 
-    12507
-  ], 
-  [
-    1680, 
-    "BENTE SMALL", 
-    46, 
-    "F", 
-    "LITHONIA GA", 
-    1697, 
-    12706, 
-    970, 
-    12557
-  ], 
-  [
-    1681, 
-    "JOHNNYE BAILEY", 
-    51, 
-    "F", 
-    "ATLANTA GA", 
-    81, 
-    12766, 
-    975, 
-    12703
-  ], 
-  [
-    1682, 
-    "BETHANY HARRIS", 
-    30, 
-    "F", 
-    "DECATUR GA", 
-    794, 
-    12766, 
-    975, 
-    12649
-  ], 
-  [
-    1683, 
-    "JAIME HARRIS", 
-    31, 
-    "M", 
-    "DECATUR GA", 
-    795, 
-    12768, 
-    975, 
-    12649
-  ], 
-  [
-    1684, 
-    "ROSEMARY MACMILLAN", 
-    50, 
-    "F", 
-    "ROSWELL GA", 
-    1149, 
-    12785, 
-    976, 
-    12671
-  ], 
-  [
-    1685, 
-    "DIANE ONESTA", 
-    50, 
-    "F", 
-    "ACWORTH GA", 
-    1372, 
-    12785, 
-    976, 
-    12672
-  ], 
-  [
-    1686, 
-    "ANN MANN", 
-    51, 
-    "F", 
-    "MARIETTA GA", 
-    1164, 
-    12786, 
-    976, 
-    12671
-  ], 
-  [
-    1687, 
-    "CATHERINE AGERBECK", 
-    35, 
-    "F", 
-    "BUFORD GA", 
-    16, 
-    12816, 
-    979, 
-    12752
-  ], 
-  [
-    1688, 
-    "KAY ROYCE", 
-    50, 
-    "F", 
-    "LOGANVILLE GA", 
-    1572, 
-    12994, 
-    992, 
-    12928
-  ], 
-  [
-    1689, 
-    "ROXANNE LAWSON", 
-    41, 
-    "F", 
-    "HOSCHTON GA", 
-    1065, 
-    12994, 
-    992, 
-    12930
-  ], 
-  [
-    1690, 
-    "STEPHANIE GOLIAS", 
-    43, 
-    "F", 
-    "WOODSTOCK GA", 
-    705, 
-    13008, 
-    993, 
-    12891
-  ], 
-  [
-    1691, 
-    "GEORGE MALONE", 
-    43, 
-    "M", 
-    "HUNTSVILLE AL", 
-    1162, 
-    13155, 
-    1005, 
-    13048
-  ], 
-  [
-    1692, 
-    "DEBORAH WHITE", 
-    52, 
-    "F", 
-    "WESTERVILLE OH", 
-    1958, 
-    13161, 
-    1005, 
-    13056
-  ], 
-  [
-    1693, 
-    "CHARLES COHN", 
-    79, 
-    "M", 
-    "AUSTELL GA", 
-    356, 
-    13299, 
-    1016, 
-    13188
-  ], 
-  [
-    1694, 
-    "AMIEE TEAL", 
-    37, 
-    "F", 
-    "MARIETTA GA", 
-    1813, 
-    13461, 
-    1028, 
-    13357
-  ], 
-  [
-    1695, 
-    "NICOLE MCCOY", 
-    30, 
-    "F", 
-    "CUMMING GA", 
-    1203, 
-    13522, 
-    1033, 
-    13408
-  ], 
-  [
-    1696, 
-    "TAMIKA PONDER", 
-    34, 
-    "F", 
-    "DOUGLASVILLE GA", 
-    1453, 
-    13522, 
-    1033, 
-    -1
-  ], 
-  [
-    1697, 
-    "NELLY HUNZINGER", 
-    71, 
-    "F", 
-    "HIRAM GA", 
-    891, 
-    13755, 
-    1050, 
-    13633
-  ], 
-  [
-    1698, 
-    "JUDY COOK", 
-    70, 
-    "F", 
-    "ACWORTH GA", 
-    375, 
-    13756, 
-    1051, 
-    13637
-  ], 
-  [
-    1699, 
-    "MAGGIE MERRITT", 
-    61, 
-    "F", 
-    "DECATUR GA", 
-    1263, 
-    14032, 
-    1072, 
-    13969
-  ], 
-  [
-    1700, 
-    "CLAUDIA CRENSHAW", 
-    59, 
-    "F", 
-    "CLARKSTON GA", 
-    404, 
-    14347, 
-    1096, 
-    14301
-  ], 
-  [
-    1701, 
-    "JOANNE CLENDENIN", 
-    59, 
-    "F", 
-    "ATLANTA GA", 
-    342, 
-    15240, 
-    1164, 
-    15119
-  ], 
-  [
-    1702, 
-    "JAMES CLENDENIN", 
-    57, 
-    "M", 
-    "ATLANTA GA", 
-    341, 
-    15240, 
-    1164, 
-    15120
-  ], 
-  [
-    1703, 
-    "LINDA MAHER WILLIAMS", 
-    57, 
-    "F", 
-    "DECATUR GA", 
-    1153, 
-    15240, 
-    1164, 
-    15120
-  ]
-]
diff --git a/elemental/examples/simple/src/elemental/example/ElementalExample.gwt.xml b/elemental/examples/simple/src/elemental/example/ElementalExample.gwt.xml
deleted file mode 100644
index 68828e0..0000000
--- a/elemental/examples/simple/src/elemental/example/ElementalExample.gwt.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<module rename-to="elementalExample">
-  <inherits name="elemental.Elemental"/>
-  <entry-point class="elemental.example.client.ElementalExample" />
-</module>
diff --git a/elemental/examples/simple/src/elemental/example/client/ElementalExample.java b/elemental/examples/simple/src/elemental/example/client/ElementalExample.java
deleted file mode 100644
index 02e96a9..0000000
--- a/elemental/examples/simple/src/elemental/example/client/ElementalExample.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.example.client;
-
-import static elemental.client.Browser.getDocument;
-import static elemental.client.Browser.getWindow;
-
-import com.google.gwt.core.client.EntryPoint;
-
-import elemental.html.Window;
-
-import elemental.dom.XMLHttpRequest;
-import elemental.events.Event;
-import elemental.events.EventListener;
-import elemental.html.ButtonElement;
-import elemental.html.DivElement;
-
-public class ElementalExample implements EntryPoint {
-
-  @Override
-  public void onModuleLoad() {
-    final ButtonElement btn = getDocument().createButtonElement();
-    btn.setInnerHTML("w00t?");
-    btn.getStyle().setColor("red");
-    getDocument().getBody().appendChild(btn);
-
-    final DivElement div = getDocument().createDivElement();
-    getDocument().getBody().appendChild(div);
-
-    EventListener listener = new EventListener() {
-      public void handleEvent(Event evt) {
-        final XMLHttpRequest xhr = getWindow().newXMLHttpRequest();
-        xhr.setOnLoad(new EventListener() {
-          @Override
-          public void handleEvent(Event evt) {
-            div.setInnerHTML(xhr.getResponseText());
-          }
-        });
-        xhr.open("GET", "/snippet.html");
-        xhr.send();
-
-        getWindow().setTimeout(new Window.TimerCallback() {
-          @Override
-          public void fire() {
-            getWindow().alert("timeout fired");
-          }
-        }, 1000);
-
-        btn.removeEventListener(Event.CLICK, this, false);
-      }
-    };
-
-    btn.addEventListener(Event.CLICK, listener, false);
-  }
-}
diff --git a/elemental/idl/README b/elemental/idl/README
deleted file mode 100644
index 549fd91..0000000
--- a/elemental/idl/README
+++ /dev/null
@@ -1,7 +0,0 @@
-GWT bindings generation code adapted from the Dart Project at http://code.google.com/p/dart/source/browse/trunk/dart/lib/
-
-How to update bindings:
-1) Update third_party/WebCore/ from trac.webkit.org or the Dart Project
-2) Modify elemental.idl to fix any issues (usually caused by covariant returns)
-3) Run build script to regenerate the bindings
-4) cp -r generated/src/elemental/* ../src/elemental/
diff --git a/elemental/idl/build b/elemental/idl/build
deleted file mode 100755
index 028ea83..0000000
--- a/elemental/idl/build
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-# Re-builds all the generated code in ../java/elemental/ from the scraped IDL files
-# in w3c/. This will blow away all files labeled "generated code".
-ROOT=`dirname $0`
-python \
-  ${ROOT}/css/generate-style.py \
-  ${ROOT}/css/styles.txt \
-  ${ROOT}/templates/java_interface_CSSStyleDeclaration.darttemplate \
-  ${ROOT}/templates/jso_impl_CSSStyleDeclaration.darttemplate
-
-python ${ROOT}/scripts/elemental_fremontcutbuilder.py
-python ${ROOT}/scripts/elementaldomgenerator.py
-# Keep compatibility with Google's internal build
-if [ -d ${ROOT}/../java/elemental/ ]; then
-  cp -R ${ROOT}/generated/src/elemental/* ${ROOT}/../java/elemental/
-fi
diff --git a/elemental/idl/buildsrcjar b/elemental/idl/buildsrcjar
deleted file mode 100755
index 15acce6..0000000
--- a/elemental/idl/buildsrcjar
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/sh
-# Re-builds all the generated code in ../java/elemental/ from the scraped IDL files
-# Writable dir to do work in
-TMPDIR=$1
-# Where to write the output jar
-OUT=$2
-# where is the IDL directory
-ROOT=`dirname $0`
-
-rm -rf ${TMPDIR}
-mkdir -p ${TMPDIR}
-cp -r ${ROOT} ${TMPDIR}
-
-# all variables are relative to current directory
-export CC="$PWD/$CC"
-export JAR="$PWD/$JAR"
-export OUT="$PWD/$OUT"
-
-cd ${TMPDIR}
-chmod -R 755 .
-# Regenerate CSS templates for list of css properties
-python2.6 \
-  idl/css/generate-style.py \
-  idl/css/styles.txt \
-  idl/templates/java_interface_CSSStyleDeclaration.darttemplate \
-  idl/templates/jso_impl_CSSStyleDeclaration.darttemplate
-
-cd idl/scripts
-export PYTHONPATH=$PYTHONPATH:.
-# Parse WebIDL files, merging them with elemental.idl overlay
-python2.6 elemental_fremontcutbuilder.py
-# Generate interface and JSO implementations of WebIDL bindings
-python2.6 elementaldomgenerator.py
-mkdir -p ../generated/src
-cd ../generated/src
-$JAR cvf $OUT *
diff --git a/elemental/idl/css/CSSPropertyNames.in b/elemental/idl/css/CSSPropertyNames.in
deleted file mode 100644
index 3097b8f..0000000
--- a/elemental/idl/css/CSSPropertyNames.in
+++ /dev/null
@@ -1,372 +0,0 @@
-//
-// CSS property names
-//
-// Some properties are used internally, but are not part of CSS. They are used to get
-// HTML4 compatibility in the rendering engine.
-//
-// Microsoft extensions are documented here:
-// http://msdn.microsoft.com/workshop/author/css/reference/attributes.asp
-//
-
-// high-priority property names have to be listed first, to simplify the check
-// for applying them first.
-color
-direction
-display enum none block inline inline-block
-font
-font-family
-font-size dim
-font-style enum normal italic oblique
-font-weight enum normal bold bolder lighter
-font-variant
-text-rendering
--webkit-font-feature-settings
--webkit-font-kerning
--webkit-font-smoothing
--webkit-font-variant-ligatures
--webkit-locale
--webkit-text-orientation
--webkit-text-size-adjust
--webkit-writing-mode
-zoom
-
-// line height needs to be right after the above high-priority properties
-line-height
-
-// The remaining properties are listed in alphabetical order
-background
-background-attachment
-background-clip
-background-color
-background-image
-background-origin
-background-position
-background-position-x
-background-position-y
-background-repeat
-background-repeat-x
-background-repeat-y
-background-size
-border
-border-bottom
-border-bottom-color
-border-bottom-left-radius
-border-bottom-right-radius
-border-bottom-style
-border-bottom-width
-border-collapse
-border-color
-border-image
-border-image-outset
-border-image-repeat
-border-image-slice
-border-image-source
-border-image-width
-border-left
-border-left-color
-border-left-style
-border-left-width
-border-radius
-border-right
-border-right-color
-border-right-style
-border-right-width
-border-spacing
-border-style enum none hidden dotted dashed solid
-border-top
-border-top-color
-border-top-left-radius
-border-top-right-radius
-border-top-style
-border-top-width
-border-width dim
-bottom dim
-box-shadow
-box-sizing
-// -webkit-box-sizing worked in Safari 4 and earlier.
-caption-side
-clear
-clip
-content
-counter-increment
-counter-reset
-cursor enum default auto crosshair pointer move e-resize ne-resize nw-resize n-resize se-resize sw-resize s-resize w-resize text wait help col-resize row-resize
-empty-cells
-float
-font-stretch
-height dim
-image-rendering
-left dim
-letter-spacing
-list-style
-list-style-type enum none disc circle square decimal lower-alpha upper-alpha lower-roman upper-roman
-list-style-image
-list-style-position
-margin dim
-margin-bottom dim
-margin-left dim
-margin-right dim 
-margin-top dim
-max-height
-max-width
-min-height
-min-width
-opacity double
-// Honor -webkit-opacity as a synonym for opacity. This was the only syntax that worked in Safari 1.1,
-// and may be in use on some websites and widgets.
-orphans
-outline
-outline-color
-outline-offset
-outline-style
-outline-width
-overflow enum visible hidden scroll auto
-overflow-x enum visible hidden scroll auto
-overflow-y enum visible hidden scroll auto
-padding dim
-padding-bottom dim
-padding-left dim
-padding-right dim
-padding-top dim
-page
-page-break-after
-page-break-before
-page-break-inside
-pointer-events
-position enum static relative absolute fixed
-quotes
-resize
-right dim
-size
-src
-speak
-table-layout
-tab-size
-text-align
-text-decoration enum none underline overline line-through
-text-indent
-text-line-through
-text-line-through-color
-text-line-through-mode
-text-line-through-style
-text-line-through-width
-text-overflow
-text-overline
-text-overline-color
-text-overline-mode
-text-overline-style
-text-overline-width
-text-shadow
-text-transform
-text-underline
-text-underline-color
-text-underline-mode
-text-underline-style
-text-underline-width
-top dim
-unicode-bidi
-unicode-range
-vertical-align
-visibility enum visible hidden
-white-space enum pre nowrap pre-wrap pre-line
-widows
-width dim
-word-break
-word-spacing
-word-wrap
-z-index int
--webkit-animation
--webkit-animation-delay
--webkit-animation-direction
--webkit-animation-duration
--webkit-animation-fill-mode
--webkit-animation-iteration-count
--webkit-animation-name
--webkit-animation-play-state
--webkit-animation-timing-function
--webkit-appearance
--webkit-aspect-ratio
--webkit-backface-visibility
--webkit-background-clip
--webkit-background-composite
--webkit-background-origin
-// -webkit-background-size differs from background-size only in the interpretation of
-// a single value: -webkit-background-size: l; is equivalent to background-size: l l;
-// whereas background-size: l; is equivalent to background-size: l auto;
--webkit-background-size
--webkit-border-after
--webkit-border-after-color
--webkit-border-after-style
--webkit-border-after-width
--webkit-border-before
--webkit-border-before-color
--webkit-border-before-style
--webkit-border-before-width
--webkit-border-end
--webkit-border-end-color
--webkit-border-end-style
--webkit-border-end-width
--webkit-border-fit
--webkit-border-horizontal-spacing
--webkit-border-image
-// -webkit-border-radius differs from border-radius only in the interpretation of
-// a value consisting of two lengths: "-webkit-border-radius: l1 l2;" is equivalent
-// to "border-radius: l1 / l2;"
--webkit-border-radius
--webkit-border-start
--webkit-border-start-color
--webkit-border-start-style
--webkit-border-start-width
--webkit-border-vertical-spacing
--webkit-box-align
--webkit-box-direction
--webkit-box-flex
--webkit-box-flex-group
--webkit-box-lines
--webkit-box-ordinal-group
--webkit-box-orient
--webkit-box-pack
--webkit-box-reflect
--webkit-box-shadow
--webkit-color-correction
--webkit-column-axis
--webkit-column-break-after
--webkit-column-break-before
--webkit-column-break-inside
--webkit-column-count
--webkit-column-gap
--webkit-column-rule
--webkit-column-rule-color
--webkit-column-rule-style
--webkit-column-rule-width
--webkit-column-span
--webkit-column-width
--webkit-columns
-#if defined(ENABLE_CSS_FILTERS) && ENABLE_CSS_FILTERS
--webkit-filter
-#endif
--webkit-flex
--webkit-flex-align
--webkit-flex-direction
--webkit-flex-flow
--webkit-flex-item-align
--webkit-flex-line-pack
--webkit-flex-order
--webkit-flex-pack
--webkit-flex-wrap
--webkit-font-size-delta
--webkit-grid-columns
--webkit-grid-rows
--webkit-grid-column
--webkit-grid-row
--webkit-highlight
--webkit-hyphenate-character
--webkit-hyphenate-limit-after
--webkit-hyphenate-limit-before
--webkit-hyphenate-limit-lines
--webkit-hyphens
--webkit-line-box-contain
--webkit-line-align
--webkit-line-break
--webkit-line-clamp
--webkit-line-grid
--webkit-line-snap
--webkit-logical-width
--webkit-logical-height
--webkit-margin-after-collapse
--webkit-margin-before-collapse
--webkit-margin-bottom-collapse
--webkit-margin-top-collapse
--webkit-margin-collapse
--webkit-margin-after
--webkit-margin-before
--webkit-margin-end
--webkit-margin-start
--webkit-marquee
--webkit-marquee-direction
--webkit-marquee-increment
--webkit-marquee-repetition
--webkit-marquee-speed
--webkit-marquee-style
--webkit-mask
--webkit-mask-attachment
--webkit-mask-box-image
--webkit-mask-box-image-outset
--webkit-mask-box-image-repeat
--webkit-mask-box-image-slice
--webkit-mask-box-image-source
--webkit-mask-box-image-width
--webkit-mask-clip
--webkit-mask-composite
--webkit-mask-image
--webkit-mask-origin
--webkit-mask-position
--webkit-mask-position-x
--webkit-mask-position-y
--webkit-mask-repeat
--webkit-mask-repeat-x
--webkit-mask-repeat-y
--webkit-mask-size
--webkit-match-nearest-mail-blockquote-color
--webkit-max-logical-width
--webkit-max-logical-height
--webkit-min-logical-width
--webkit-min-logical-height
--webkit-nbsp-mode
--webkit-padding-after
--webkit-padding-before
--webkit-padding-end
--webkit-padding-start
--webkit-perspective
--webkit-perspective-origin
--webkit-perspective-origin-x
--webkit-perspective-origin-y
--webkit-print-color-adjust
--webkit-rtl-ordering
--webkit-text-combine
--webkit-text-decorations-in-effect
--webkit-text-emphasis
--webkit-text-emphasis-color
--webkit-text-emphasis-position
--webkit-text-emphasis-style
--webkit-text-fill-color
--webkit-text-security
--webkit-text-stroke
--webkit-text-stroke-color
--webkit-text-stroke-width
--webkit-transform
--webkit-transform-origin
--webkit-transform-origin-x
--webkit-transform-origin-y
--webkit-transform-origin-z
--webkit-transform-style
--webkit-transition
--webkit-transition-delay
--webkit-transition-duration
--webkit-transition-property
--webkit-transition-timing-function
--webkit-user-drag
--webkit-user-modify
--webkit-user-select
--webkit-flow-into
--webkit-flow-from
--webkit-region-overflow
--webkit-shape-inside
--webkit-shape-outside
--webkit-wrap-margin
--webkit-wrap-padding
--webkit-region-break-after
--webkit-region-break-before
--webkit-region-break-inside
--webkit-wrap-flow
--webkit-wrap-through
--webkit-wrap
-#if defined(ENABLE_TOUCH_EVENTS) && ENABLE_TOUCH_EVENTS
--webkit-tap-highlight-color
-#endif
-#if defined(ENABLE_DASHBOARD_SUPPORT) && ENABLE_DASHBOARD_SUPPORT
--webkit-dashboard-region
-#endif
-#if defined(ENABLE_OVERFLOW_SCROLLING)
--webkit-overflow-scrolling
-#endif
diff --git a/elemental/idl/css/generate-style.py b/elemental/idl/css/generate-style.py
deleted file mode 100755
index 7cd28d0..0000000
--- a/elemental/idl/css/generate-style.py
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/python2.4
-#
-# Copyright 2008 Google Inc. All Rights Reserved.
-
-"""Generates StyleBase.java based on list of styles in styles.txt.
-
-Usage: $0
-(No args, just run it, with styles.txt in the same directory as the script)
-"""
-
-__author__ = 'danilatos@google.com (Daniel Danilatos)'
-
-import os
-import re
-import string
-import sys
-
-CONST_PREFIX = '  public static final String '
-
-def main(argv):
-  if len(argv) != 4:
-    print 'Usage: input_file interface.java.snippet implementation.java.snippet'
-    sys.exit(-1)
-  input_file = argv[1]
-  output_intf = argv[2]
-  output_impl = argv[3]
-
-  output_intf_stream = open(output_intf, 'w')
-  output_impl_stream = open(output_impl, 'w')
-  input_stream = open(input_file, 'r')
-  GenerateStyleBase(input_stream, output_intf_stream, output_impl_stream)
-
-
-def GenerateStyleBase(input_stream, output_intf_stream, output_impl_stream):
-  """Generate the StyleBase.java file.
-
-  Args:
-    input_stream: A stream containing the configuration input (usually
-        styles.txt)
-    output_stream: A stream to write the output to
-  """
-
-  wintf = output_intf_stream.write
-  wimpl = output_impl_stream.write
-
-  # Write the generic setProperty() that's not in the IDL :-/
-  # Write Unit interface into the interface snippet
-  wintf("""
-package $PACKAGE;
-import elemental.dom.*;
-import elemental.html.*;
-
-/**
-  * $CLASS_JAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-$!MEMBERS
-""")
-
-  wimpl("""package $PACKAGE;
-$IMPORTS
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.js.stylesheets.*;
-import elemental.js.events.*;
-import elemental.js.util.*;
-import elemental.js.dom.*;
-import elemental.js.html.*;
-import elemental.js.css.*;
-import elemental.js.stylesheets.*;
-
-import java.util.Date;
-
-@Deprecated
-public class $ID$EXTENDS $IMPLEMENTS {
-  protected $ID() {}
-$!MEMBERS
-""")
-
-  wintf('public interface Unit {\n')
-  wintf('  public static final String PX = "px";\n')
-  wintf('  public static final String PCT = "%";\n')
-  wintf('  public static final String EM = "em";\n')
-  wintf('  public static final String EX = "ex";\n')
-  wintf('  public static final String PT = "pt";\n')
-  wintf('  public static final String PC = "pc";\n')
-  wintf('  public static final String IN = "in";\n')
-  wintf('  public static final String CM = "cm";\n')
-  wintf('  public static final String MM = "mm";\n')
-  wintf('}\n\n')
-
-
-  for line in input_stream:
-    line = re.sub('#.*$', '', line).strip()
-    if not line or line.startswith("//"): continue
-
-    # prop is the css property name
-    # value_type is the actual high-level type of the property
-    # output_mode is whether it is just a simple constant, or a dimension type,
-    #   or an enum, etc.
-    # params are additional line parameters, currently used for enum values
-    (prop, output_mode, value_type, params) = ParseLine(line)
-
-    method_suffix = PropToCapsCase(prop)
-    js_prop = method_suffix[0].lower() + method_suffix[1:]  # Camel case
-    if js_prop == 'float':
-      js_prop = "this['float']"
-    else:
-      js_prop = "this." + js_prop
-
-    if output_mode == 'enum':
-      wintf('\n@Deprecated\npublic interface %s {\n' % method_suffix)
-      for p in params:
-        wintf(CONST_PREFIX + PropToConstant(p) + ' = "' + p + '";\n')
-      wintf('}\n\n')
-
-    # getter
-    wintf('%s get%s();\n' % (value_type, method_suffix))
-    wimpl('public final native %s get%s() /*-{ return %s; }-*/;\n' % (value_type, method_suffix, js_prop))
-
-    # setter(s) & clearer(s)
-    wintf('void set%s(%s value);\n' % (method_suffix, value_type))
-    wintf('void clear%s();\n' % method_suffix)
-    wimpl('public final native void set%s(%s value) /*-{ %s = value; }-*/;\n' % (method_suffix, value_type, js_prop))
-    wimpl('public final native void clear%s() /*-{ %s = ""; }-*/;\n' % (method_suffix, js_prop))
-    if output_mode == 'dim':
-      wintf('void set%s(double value, String unit);\n' % (method_suffix))
-      wimpl('public final native void set%s(double value, String unit) /*-{ %s = value + unit; }-*/;\n' % (method_suffix, js_prop))
- 
-  wintf('}')
-  wimpl('}')
-  output_intf_stream.close()
-  output_impl_stream.close()
-
-
-def ParseLine(line):
-  """Parses a line of the input file into useful parameters."""
-  bits = re.compile(r'\s+').split(line)
-  if len(bits) == 1:
-    output_mode = 'simple'
-    value_type = 'String'
-  elif bits[1] == 'enum':
-    output_mode = 'enum'
-    value_type = 'String' # PropToCapsCase(bits[0])
-  elif bits[1] == 'dim':
-    output_mode = 'dim'
-    value_type = 'String' # None  # lots of different types for dim properties
-  else:
-    output_mode = 'simple'
-    value_type = bits[1]
-
-  css_prop_name = bits[0]
-  additional_params = bits[2:]
-
-  return (css_prop_name, output_mode, value_type, additional_params)
-
-
-def PropToCapsCase(css_prop):
-  """Converts abc-def to AbcDef."""
-  return re.sub(' ', '', string.capwords(re.sub('-', ' ', css_prop)))
-
-
-def PropToConstant(css_prop):
-  """Converts abc-def to ABC_DEF."""
-  return css_prop.upper().replace('-', '_')
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv))
diff --git a/elemental/idl/css/styles.txt b/elemental/idl/css/styles.txt
deleted file mode 100644
index 0358bc5..0000000
--- a/elemental/idl/css/styles.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-# List of css properties
-# If you add the word 'dim' on the end, then that means it's a dimension property
-# and will get px, em, ex, etc accessors
-# If you add the word 'int' on the end, then that means it has integral type
-# Add the word 'enum' followed by a list of values to generate an enum
-# as an inner class
-
-background-color
-background-image
-border-color
-border-style enum none hidden dotted dashed solid
-border-width dim
-bottom dim
-color
-cursor enum default auto crosshair pointer move e-resize ne-resize nw-resize n-resize se-resize sw-resize s-resize w-resize text wait help col-resize row-resize
-display enum none block inline inline-block
-font-size dim
-font-style enum normal italic oblique
-font-weight enum normal bold bolder lighter
-height dim
-left dim
-list-style-type enum none disc circle square decimal lower-alpha upper-alpha lower-roman upper-roman
-margin dim
-margin-bottom dim
-margin-left dim
-margin-right dim
-margin-top dim
-opacity double
-overflow enum visible hidden scroll auto
-overflow-x enum visible hidden scroll auto
-overflow-y enum visible hidden scroll auto
-padding dim
-padding-bottom dim
-padding-left dim
-padding-right dim
-padding-top dim
-position enum static relative absolute fixed
-right dim
-text-decoration enum none underline overline line-through
-top dim
-visibility enum visible hidden
-white-space enum pre nowrap pre-wrap pre-line
-width dim
-z-index int
-
diff --git a/elemental/idl/docs/README b/elemental/idl/docs/README
deleted file mode 100644
index 0471d05..0000000
--- a/elemental/idl/docs/README
+++ /dev/null
@@ -1 +0,0 @@
-W3C documentation from MDN taken from the Dart project's MDN scraper.
diff --git a/elemental/idl/docs/database.json b/elemental/idl/docs/database.json
deleted file mode 100644
index 5875194..0000000
--- a/elemental/idl/docs/database.json
+++ /dev/null
@@ -1 +0,0 @@
-{"ErrorCallback":{"title":"JS_ReportErrorNumber","members":[],"srcUrl":"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_ReportErrorNumber","skipped":true,"cause":"Suspect title"},"SVGAnimatedLength":{"title":"SVGAnimatedLength","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedLength</code> interface is used for attributes of basic type <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Length\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Length\">&lt;length&gt;</a> which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGAnimatedLength"},"HTMLScriptElement":{"title":"script","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>async</code> attribute</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>3.6 (1.9.2)\n</td> <td>10</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>defer</code> attribute</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>3.5 (1.9.1)\n</td> <td>4</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>async</code> attribute</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>defer</code> attribute</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","examples":["&lt;!-- HTML4 and (x)HTML --&gt;\n&lt;script type=\"text/javascript\" src=\"javascript.js\"&gt;\n\n&lt;!-- HTML5 --&gt;\n&lt;script src=\"javascript.js\"&gt;&lt;/script&gt;"],"srcUrl":"https://developer.mozilla.org/En/HTML/Element/Script","summary":"<p>The <code>script</code> element is used to embed or reference an executable script within an <abbr>HTML</abbr> or <abbr>XHTML</abbr> document.</p>\n<p>Scripts without <code>async</code> or <code>defer</code> attributes are fetched and executed immediately, before the browser continues to parse the page.</p>","members":[{"obsolete":false,"url":"","name":"language","help":"Like the <code>type</code> attribute, this attribute identifies the scripting language in use. Unlike the <code>type</code> attribute, however, this attribute’s possible values were never standardized. The <code>type</code> attribute should be used instead."},{"obsolete":false,"url":"","name":"defer","help":"This Boolean attribute is set to indicate to a browser that the script is meant to be executed after the document has been parsed. Since this feature hasn't yet been implemented by all other major browsers, authors should not assume that the script’s execution will actually be deferred. Never call <code>document.write()</code> from a <code>defer</code> script (since Gecko 1.9.2, this will blow away the document). The <code>defer</code> attribute shouldn't be used on scripts that don't have the <code>src</code> attribute. Since Gecko 1.9.2, the <code>defer</code> attribute is ignored on scripts that don't have the <code>src</code> attribute. However, in Gecko 1.9.1 even inline scripts are deferred if the <code>defer</code> attribute is set."},{"obsolete":false,"url":"","name":"src","help":"This attribute specifies the <abbr>URI</abbr> of an external script; this can be used as an alternative to embedding a script directly within a document. <code>script</code> elements with an <code>src</code> attribute specified should not have a script embedded within its tags."},{"obsolete":false,"url":"","name":"async","help":"Set this Boolean attribute to indicate that the browser should, if possible, execute the script asynchronously. It has no effect on inline scripts (i.e., scripts that don't have the <strong>src</strong> attribute). In older browsers that don't support the <strong>async</strong> attribute, parser-inserted scripts block the parser; script-inserted scripts execute asynchronously in IE and WebKit, but synchronously in Opera and pre-4.0 Firefox. In Firefox 4.0, the <code>async</code> DOM&nbsp;property defaults to <code>true</code> for script-created scripts, so the default behavior matches the behavior of IE&nbsp;and WebKit. To request script-inserted external scripts be executed in the insertion order in browsers where the <code>document.createElement(\"script\").async</code> evaluates to <code>true</code> (such as Firefox 4.0), set <code>.async=false</code> on the scripts you want to maintain order. Never call <code>document.write()</code> from an <code>async</code> script. In Gecko 1.9.2, calling <code>document.write()</code> has an unpredictable effect. In Gecko 2.0, calling <code>document.write()</code> from an <code>async</code> script has no effect (other than printing a warning to the error console)."},{"obsolete":false,"url":"","name":"type","help":"This attribute identifies the scripting language of code embedded within a <code>script</code> element or referenced via the element’s <code>src</code> attribute. This is specified as a <abbr title=\"Multi-purpose Internet Mail Extensions\">MIME</abbr> type; examples of supported <abbr title=\"Multi-purpose Internet Mail Extensions\">MIME</abbr> types include <code>text/javascript</code>, <code>text/ecmascript</code>, <code>application/javascript</code>, and <code>application/ecmascript</code>. If this attribute is absent, the script is treated as JavaScript."}]},"WebKitTransitionEvent":{"title":"Recent changes from mechaxl","members":[],"srcUrl":"https://developer.mozilla.org/Special:Contributions?target=mechaxl","skipped":true,"cause":"Suspect title"},"Int32Array":{"title":"Int32Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Int32Array</code> type represents an array of twos-complement 32-bit signed integers.</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Int32Array <a title=\"en/JavaScript typed arrays/Int32Array#Int32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array#Int32Array()\">Int32Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Int32Array </code><code><a title=\"en/JavaScript typed arrays/Int32Array#Int32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array#Int32Array%28%29\">Int32Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Int32Array </code><code><a title=\"en/JavaScript typed arrays/Int32Array#Int32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array#Int32Array%28%29\">Int32Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Int32Array </code><code><a title=\"en/JavaScript typed arrays/Int32Array#Int32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array#Int32Array%28%29\">Int32Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Int32Array</code> object.</p>\n<pre>Int32Array Int32Array(\n&nbsp; unsigned long length\n);\n\nInt32Array Int32Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nInt32Array Int32Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nInt32Array Int32Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int16Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 32-bit signed integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Int32Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Int32Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Int32Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Int32Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Int32Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Int32Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to one past the last element in the array to be referenced by the new <code>Int32Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Int32Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"MediaQueryList":{"title":"MediaQueryList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/MediaQueryList","specification":"The CSSOM&nbsp;View Module:&nbsp;The&nbsp;MediaQueryList Interface","seeAlso":"<li><a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/En/CSS/Media_queries\">Media queries</a></li> <li><a title=\"en/CSS/Using media queries from code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code\">Using media queries from code</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.matchMedia\">window.matchMedia()</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/MediaQueryListListener\">MediaQueryListListener</a></code>\n</li>","summary":"<div><strong>DRAFT</strong>\n<div>This page is not complete.</div>\n</div>\n\n<p></p>\n<p>A <code>MediaQueryList</code> object maintains a list of <a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/En/CSS/Media_queries\">media queries</a> on a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document\">document</a></code>\n, and handles sending notifications to listeners when the media queries on the document change.</p>\n<p>This makes it possible to observe a document to detect when its media queries change, instead of polling the values periodically, if you need to programmatically detect changes to the values of media queries on a document.</p>","members":[{"name":"addListener","help":"<p>Adds a new listener to the media query list. If the specified listener is already in the list, this method has no effect.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>listener</code></dt> <dd>The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/MediaQueryListListener\">MediaQueryListListener</a></code>\n to invoke when the media query's evaluated result changes.</dd> <div id=\"section_6\"><span id=\"removeListener()\"></span></div></dl></div>","idl":"<pre>void addListener(\n&nbsp; MediaQueryListListener listener\n); \n</pre>","obsolete":false},{"name":"removeListener","help":"<div id=\"section_5\"><dl><div id=\"section_6\"><p>Removes a listener from the media query list. Does nothing if the specified listener isn't already in the list.</p> \n</div></dl>\n</div><div id=\"section_7\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>listener</code></dt> <dd>The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/MediaQueryListListener\">MediaQueryListListener</a></code>\n to stop calling on changes to the media query's evaluated result.</dd>\n</dl>\n</div>","idl":"<pre>void removeListener(\n&nbsp; MediaQueryListListener listener\n); \n</pre>","obsolete":false},{"name":"matches","help":"<code>true</code> if the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document\">document</a></code>\n currently matches the media query list; otherwise <code>false</code>. <strong>Read only.</strong>","obsolete":false},{"name":"media","help":"The serialized media query list.","obsolete":false}]},"DOMPlugin":{"title":"Plugin","summary":"The <code>Plugin</code> interface provides information about a browser plugin.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.item","name":"item","help":"Returns the MIME&nbsp;type of a supported content type, given the index number into a list of supported types."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.namedItem","name":"namedItem","help":"Returns the MIME&nbsp;type of a supported item."},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.description","name":"description","help":"A human readable description of the plugin. <strong>Read only.</strong>","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.filename","name":"filename","help":"The filename of the plugin file. <strong>Read only.</strong>","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.name","name":"name","help":"The name of the plugin. <strong>Read only.</strong>","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Plugin.version","name":"version","help":"The plugin's version number string. <strong>Read only.</strong>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/Plugin"},"HTMLDListElement":{"title":"HTMLDListElement","summary":"DOM&nbsp;definition list elements expose the <a title=\"http://www.w3.org/TR/html5/grouping-content.html#htmldlistelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/grouping-content.html#htmldlistelement\" target=\"_blank\">HTMLDListElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-52368974\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-52368974\" target=\"_blank\"><code>HTMLDListElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating definition list elements. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"compact","help":"Indicates that spacing between list items should be reduced.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLDListElement"},"SVGRect":{"title":"SVGRect","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGRect</code> represents rectangular geometry. Rectangles are defined as consisting of a (x,y) coordinate pair identifying a minimum X value, a minimum Y value, and a width and height, which are usually constrained to be non-negative.</p>\n<p>An <code>SVGRect</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"width","help":"The <em>width</em> coordinate of the rectangle, in user units.","obsolete":false},{"name":"height","help":"The <em>height</em> coordinate of the rectangle, in user units.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGRect"},"HTMLAppletElement":{"title":"applet","examples":["&lt;applet code=\"game.class\" align=\"left\" archive=\"game.zip\" height=\"250\" width=\"350\"&gt;\n\n&lt;param name=\"difficulty\" value=\"easy\"&gt;\n\n&lt;b&gt;Sorry, you need Java to play this game.&lt;/b&gt;\n\n&lt;/applet&gt;\n"],"summary":"Obsolete","members":[{"obsolete":false,"url":"","name":"datafld","help":"This attribute, supported by Internet Explorer 4 and higher, specifies the column name from the data source object that supplies the bound data. This attribute might be used to specify the various&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/param\">&lt;param&gt;</a></code>\n elements passed to the Java applet."},{"obsolete":false,"url":"","name":"width","help":"This attribute specifies in pixels the width that the applet needs."},{"obsolete":false,"url":"","name":"object","help":"This attribute specifies the URL of a serialized representation of an applet."},{"obsolete":false,"url":"","name":"code","help":"This attribute specifies the URL of the applet's class file to be loaded and executed. Applet filenames are identified by a .class filename extension. The URL specified by code might be relative to the <code>codebase</code> attribute."},{"obsolete":false,"url":"","name":"codebase","help":"This attribute gives the absolute or relative URL of the directory where applets' .class files referenced by the code attribute are stored."},{"obsolete":false,"url":"","name":"vspace","help":"This attribute specifies additional vertical space, in pixels, to be reserved above and below the applet."},{"obsolete":false,"url":"","name":"alt","help":"This attribute causes a descriptive text alternate to be displayed on browsers that do not support Java. Page designers should also remember that content enclosed within the <code>&lt;applet&gt;</code> element may also be rendered as alternative text."},{"obsolete":false,"url":"","name":"name","help":"This attribute assigns a name to the applet so that it can be identified by other resources; particularly scripts."},{"obsolete":false,"url":"","name":"align","help":"This attribute is used to position the applet on the page relative to content that might flow around it. The HTML 4.01 specification defines values of bottom, left, middle, right, and top, whereas Microsoft and Netscape also might support <strong>absbottom</strong>, <strong>absmiddle</strong>, <strong>baseline</strong>, <strong>center</strong>, and <strong>texttop</strong>."},{"obsolete":false,"url":"","name":"archive","help":"This attribute refers to an archived or compressed version of the applet and its associated class files, which might help reduce download time."},{"obsolete":false,"url":"","name":"height","help":"This attribute specifies the height, in pixels, that the applet needs."},{"obsolete":false,"url":"","name":"hspace","help":"This attribute specifies additional horizontal space, in pixels, to be reserved on either side of the applet."},{"obsolete":false,"url":"","name":"src","help":"As defined for Internet Explorer 4 and higher, this attribute specifies a URL for an associated file for the applet. The meaning and use is unclear and not part of the HTML standard."},{"obsolete":false,"url":"","name":"datasrc","help":"Like <code>datafld</code>, this attribute is used for data binding under Internet Explorer 4. It indicates the id of the data source object that supplies the data that is bound to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/param\">&lt;param&gt;</a></code>\n elements associated with the applet."},{"obsolete":false,"url":"","name":"mayscript","help":"In the Netscape implementation, this attribute allows access to an applet by programs in a scripting language embedded in the document."}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/applet"},"SVGAnimatedPreserveAspectRatio":{"title":"SVGAnimatedPreserveAspectRatio","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGAnimatedPreserveAspectRatio</code> interface is used for attributes of type <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGPreserveAspectRatio\">SVGPreserveAspectRatio</a></code>\n which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGPreserveAspectRatio\">SVGPreserveAspectRatio</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGPreserveAspectRatio\">SVGPreserveAspectRatio</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> is always distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedPreserveAspectRatio"},"SVGPatternElement":{"title":"SVGPatternElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGPatternElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element.","members":[{"name":"patternUnits","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/patternUnits\" class=\"new\">patternUnits</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>\n.","obsolete":false},{"name":"patternContentUnits","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/patternContentUnits\" class=\"new\">patternContentUnits</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>\n.","obsolete":false},{"name":"patternTransform","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/patternTransform\" class=\"new\">patternTransform</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element.","obsolete":false},{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPatternElement"},"SVGPathSegCurvetoCubicSmoothAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"HTMLMenuElement":{"title":"menu","examples":["&lt;menu type=\"toolbar\"&gt;\n  &lt;li&gt;\n    &lt;menu label=\"File\"&gt;\n      &lt;button type=\"button\" onclick=\"new()\"&gt;New...&lt;/button&gt;\n      &lt;button type=\"button\" onclick=\"save()\"&gt;Save...&lt;/button&gt;\n    &lt;/menu&gt;\n  &lt;/li&gt;\n  &lt;li&gt;\n    &lt;menu label=\"Edit\"&gt;\n      &lt;button type=\"button\" onclick=\"cut()\"&gt;Cut...&lt;/button&gt;\n      &lt;button type=\"button\" onclick=\"copy()\"&gt;Copy...&lt;/button&gt;\n      &lt;button type=\"button\" onclick=\"paste()\"&gt;Paste...&lt;/button&gt;\n    &lt;/menu&gt;\n  &lt;/li&gt;\n&lt;/menu&gt;"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/menu","seeAlso":"<li>Other list-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n and the obsolete <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir\">&lt;dir&gt;</a></code>\n.</li> <li>The <code><a title=\"en/HTML/Global attributes#attr-contextmenu\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Global_attributes#attr-contextmenu\">contextmenu</a></code> <a title=\"en/HTML/Global attributes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Global_attributes\">global attribute</a> can be used on an element to refer to the <code>id</code> of a <code>menu</code> with the <code>context</code> \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu#attr-type\">type</a></code>\n</li>","summary":"<p>The HTML <em>menu</em> element (<code>&lt;menu&gt;</code>) represents an unordered list of menu choices, or commands.</p>\n<p>There is no limitation to the depth and nesting of lists defined with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n elements.</p>\n<div class=\"note\"><strong>Usage note: </strong> The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n both represent an unordered list of items. They differ in the way that the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n element only contains items to display while the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n element contains interactive items, to act on.</div>\n<div class=\"note\"><strong>Note</strong>: This element was deprecated in HTML4, but reintroduced in HTML5.</div>","members":[]},"MessageEvent":{"title":"MessageEvent","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/MessageEvent","seeAlso":"WebSocket","summary":"<div><strong>DRAFT</strong>\n<div>This page is not complete.</div>\n</div>\n\n<p></p>\n<p>A <code>MessageEvent</code> is sent to clients using WebSockets when data is received from the server. This is delivered to the listener indicated by the <code>WebSocket</code> object's <code>onmessage</code> attribute.</p>","members":[{"name":"data","help":"The data from the server.","obsolete":false}]},"SVGFEDiffuseLightingElement":{"title":"feDiffuseLighting","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDistantLight\">&lt;feDistantLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/fePointLight\">&lt;fePointLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpotLight\">&lt;feSpotLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"This filter takes in a light source and applies it to an image, using the alpha channel as a bump map.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/kernelUnitLength","name":"kernelUnitLength","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/surfaceScale","name":"surfaceScale","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/diffuseConstant","name":"diffuseConstant","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting"},"WebGLBuffer":{"title":"Using shaders to apply color in WebGL","members":[],"srcUrl":"https://developer.mozilla.org/en/WebGL/Using_shaders_to_apply_color_in_WebGL","skipped":true,"cause":"Suspect title"},"StorageEvent":{"title":"StorageEvent","seeAlso":"Specification","summary":"<div><div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/storage/nsIDOMStorageEvent.idl\"><code>dom/interfaces/storage/nsIDOMStorageEvent.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>Describes an event occurring on HTML5 client-side storage data.</span><div><div>1.0</div><div>11.0</div><div></div><div>Introduced</div><div>Gecko 2.0</div><div title=\"Introduced in Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\"></div><div title=\"Last changed in Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\"></div></div>\n<div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMEvent\">nsIDOMEvent</a></code>\n<span>Last changed in Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n</span></div></div>\n<p></p>\n<p>A <code>StorageEvent</code> is sent to a window when a storage area changes.</p>\n<div class=\"geckoVersionNote\">\n<p>\n</p><div class=\"geckoVersionHeading\">Gecko 2.0 note<div>(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n</div></div>\n<p></p>\n<p>Although this event existed prior to Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n, it did not match the specification. The old event format is now represented by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMStorageEventObsolete\">nsIDOMStorageEventObsolete</a></code>\n interface.</p>\n</div>","members":[{"name":"initStorageEvent","help":"<p>Initializes the event in a manner analogous to the similarly-named method in the DOM Events interfaces.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>typeArg</code></dt> <dd>The name of the event.</dd> <dt><code>canBubbleArg</code></dt> <dd>A boolean indicating whether the event bubbles up through the DOM or not.</dd> <dt><code>cancelableArg</code></dt> <dd>A boolean indicating whether the event is cancelable.</dd> <dt><code>keyArg</code></dt> <dd>The key whose value is changing as a result of this event.</dd> <dt><code>oldValueArg</code></dt> <dd>The key's old value.</dd> <dt><code>newValueArg</code></dt> <dd>The key's new value.</dd> <dt><code>urlArg</code></dt> <dd>Missing Description</dd> <dt><code>storageAreaArg</code></dt> <dd>The DOM&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Storage\">Storage</a></code>\n object representing the storage area on which this event occurred.</dd>\n</dl></div>","idl":"<pre class=\"eval\">void initStorageEvent(\n  in DOMString typeArg,\n  in boolean canBubbleArg,\n  in boolean cancelableArg,\n  in DOMString keyArg,\n  in DOMString oldValueArg,\n  in DOMString newValueArg,\n  in DOMString urlArg,\n  in nsIDOMStorage storageAreaArg\n);\n</pre>","obsolete":false},{"name":"key","help":"Represents the key changed. The <code>key</code> attribute is <code>null</code> when the change is caused by the storage <code>clear()</code> method. <strong>Read only.</strong>","obsolete":false},{"name":"newValue","help":"The new value of the <code>key</code>. The <code>newValue</code> is <code>null</code> when the change has been invoked by storage <code>clear()</code> method or the <code>key</code> has been removed from the storage. <strong>Read only.</strong>","obsolete":false},{"name":"oldValue","help":"The original value of the <code>key</code>. The <code>oldValue</code> is <code>null</code> when the change has been invoked by storage <code>clear()</code> method or the <code>key</code> has been newly added and therefor doesn't have any previous value. <strong>Read only.</strong>","obsolete":false},{"name":"storageArea","help":"Represents the Storage object that was affected. <strong>Read only.</strong>","obsolete":false},{"name":"url","help":"The URL of the document whose <code>key</code> changed. <strong>Read only.</strong>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/event/StorageEvent"},"SVGFEFloodElement":{"title":"feFlood","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animateColor\">&lt;animateColor&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The filter fills the filter subregion with the color and opacity defined by \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/flood-color\">flood-color</a></code> and \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/flood-opacity\">flood-opacity</a></code>.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feFlood"},"DirectoryReaderSync":{"title":"DirectoryReaderSync","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>`DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>DirectoryReaderSync</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> lets a user list files and directories in a directory.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryReaderSync"},"NotificationCenter":{"title":"Search Results | Mozilla Developer Network","members":[],"srcUrl":"https://developer.mozilla.org/en-US/search?q=NotificationCenter","skipped":true,"cause":"Suspect title"},"HTMLAllCollection":{"title":"Gecko DOM Referenz","members":[],"srcUrl":"https://developer.mozilla.org/de/Gecko-DOM-Referenz","skipped":true,"cause":"Suspect title"},"SVGAnimatedNumber":{"title":"SVGAnimatedNumber","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedNumber</code> interface is used for attributes of basic type <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Number\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Number\">&lt;Number&gt;</a> which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedNumber"},"WorkerContext":{"title":"Using web workers","members":[],"srcUrl":"https://developer.mozilla.org/En/Using_web_workers","skipped":true,"cause":"Suspect title"},"SVGPathSegLinetoVerticalRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"EntityReference":{"title":"EntityReference","summary":"<p><span>NOTE:&nbsp;This is not implemented in Mozilla</span></p>\n<p>Read-only reference to an entity reference in the DOM tree. Has no properties or methods of its own but inherits from <a class=\"internal\" title=\"En/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\"><code>Node</code></a>.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/EntityReference","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-11C98490"},"FileCallback":{"title":"FileEntrySync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileEntrySync","skipped":true,"cause":"Suspect title"},"SVGTests":{"title":"SVGTests","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>12.0 (12)\n</td> <td>9.0</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>12.0 (12)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"Interface <code>SVGTests</code> defines an interface which applies to all elements which have attributes \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/requiredFeatures\">requiredFeatures</a></code>, \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/requiredExtensions\" class=\"new\">requiredExtensions</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/systemLanguage\" class=\"new\">systemLanguage</a></code>.","members":[{"name":"hasExtension","help":"Returns true if the browser supports the given extension, specified by a URI.","obsolete":false},{"name":"requiredFeatures","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/requiredFeatures\">requiredFeatures</a></code> on the given element.","obsolete":false},{"name":"requiredExtensions","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/requiredExtensions\" class=\"new\">requiredExtensions</a></code> on the given element.","obsolete":false},{"name":"systemLanguage","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/systemLanguage\" class=\"new\">systemLanguage</a></code> on the given element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGTests"},"WorkerLocation":{"title":"Using web workers","members":[],"srcUrl":"https://developer.mozilla.org/En/Using_web_workers","skipped":true,"cause":"Suspect title"},"HTMLSelectElement":{"title":"HTMLSelectElement","examples":["<h5 class=\"editable\">Examples</h5>\n<div id=\"section_8\"><span id=\"Creating_Elements_from_Scratch\"></span><h6 class=\"editable\">Creating Elements from Scratch</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.createElement(\"select\");\nvar opt1 = document.createElement(\"option\");\nvar opt2 = document.createElement(\"option\");\n\nopt1.value = \"1\";\nopt1.text = \"Option: Value 1\";\n\nopt2.value = \"2\";\nopt2.text = \"Option: Value 2\";\n\nsel.add(opt1, null);\nsel.add(opt2, null);\n\n/*\n  Produces the following, conceptually:\n\n  &lt;select&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<p>From \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> and <span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Gecko&nbsp;7.0</span> the before parameter is optional. So the following is accepted.</p>\n<pre class=\"deki-transform\">...\nsel.add(opt1);\nsel.add(opt2);\n...\n</pre>\n</div><div id=\"section_9\"><span id=\"Append_to_an_Existing_Collection\"></span><h6 class=\"editable\">Append to an Existing Collection</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\n\nvar opt = document.createElement(\"option\");\nopt.value = \"3\";\nopt.text = \"Option: Value 3\";\n\nsel.add(opt, null);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<p>From \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> and <span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Gecko&nbsp;7.0</span> the before parameter is optional. So the following is accepted.</p>\n<pre class=\"deki-transform\">...\nsel.add(opt);\n...\n</pre>\n</div><div id=\"section_10\"><span id=\"Inserting_to_an_Existing_Collection\"></span><h6 class=\"editable\">Inserting to an Existing Collection</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\n\nvar opt = document.createElement(\"option\");\nopt.value = \"3\";\nopt.text = \"Option: Value 3\";\n\nsel.add(opt, sel.options[1]);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<dl> <dt></dt>\n</dl>\n<p>\n\n</p><div><span>Obsolete since Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n</span><span id=\"blur()\"></span></div></div>","<h5 class=\"editable\">Example</h5>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\nsel.remove(1);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>","<h4 class=\"editable\">Get information about the selected option</h4>\n\n          <pre name=\"code\" class=\"js\">/* assuming we have the following HTML\n&lt;select id='s'&gt;\n    &lt;option&gt;First&lt;/option&gt;\n    &lt;option selected&gt;Second&lt;/option&gt;\n    &lt;option&gt;Third&lt;/option&gt;\n&lt;/select&gt;\n*/\n\nvar select = document.getElementById('s');\n\n// return the index of the selected option\nalert(select.selectedIndex); // 1\n\n// return the value of the selected option\nalert(select.options[select.selectedIndex].value) // Second</pre>"],"summary":"<code>DOM select</code> elements share all of the properties and methods of other HTML elements described in the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n section. They also have the specialized interface <a class=\"external\" title=\"http://dev.w3.org/html5/spec/the-button-element.html#htmlselectelement\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/the-button-element.html#htmlselectelement\" target=\"_blank\">HTMLSelectElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-94282980\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-94282980\" target=\"_blank\">HTMLSelectElement</a>).","members":[{"name":"setCustomValidity","help":"<p><span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> only. Sets the custom validity message for the selection element to the specified message. Use the empty string to indicate that the element does <em>not</em> have a custom validity error.</p>\n\n<div id=\"section_22\"><span id=\"Parameters_8\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>error</code></dt> <dd>The string to use for the custom validity message.</dd>\n</dl></div>","idl":"<pre class=\"eval\">void setCustomValidity(\n  in DOMString error\n);\n</pre>","obsolete":false},{"name":"add","help":"<p>Adds an element to the collection of <code>option</code> elements for this <code>select</code> element.</p>\n\n<div id=\"section_6\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>element</code></dt> <dd>An item to add to the collection of options.</dd> <dt><code>before</code> \n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Optional from Gecko 7.0</span>\n</dt> <dd>An item (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>&nbsp;index of an item) that the new item should be inserted before. If this parameter is <code>null</code> (or the index does not exist), the new element is appended to the end of the collection.</dd>\n</dl>\n<div id=\"section_7\"><span id=\"Examples\"></span><h5 class=\"editable\">Examples</h5>\n<div id=\"section_8\"><span id=\"Creating_Elements_from_Scratch\"></span><h6 class=\"editable\">Creating Elements from Scratch</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.createElement(\"select\");\nvar opt1 = document.createElement(\"option\");\nvar opt2 = document.createElement(\"option\");\n\nopt1.value = \"1\";\nopt1.text = \"Option: Value 1\";\n\nopt2.value = \"2\";\nopt2.text = \"Option: Value 2\";\n\nsel.add(opt1, null);\nsel.add(opt2, null);\n\n/*\n  Produces the following, conceptually:\n\n  &lt;select&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<p>From \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> and <span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Gecko&nbsp;7.0</span> the before parameter is optional. So the following is accepted.</p>\n<pre class=\"deki-transform\">...\nsel.add(opt1);\nsel.add(opt2);\n...\n</pre>\n</div><div id=\"section_9\"><span id=\"Append_to_an_Existing_Collection\"></span><h6 class=\"editable\">Append to an Existing Collection</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\n\nvar opt = document.createElement(\"option\");\nopt.value = \"3\";\nopt.text = \"Option: Value 3\";\n\nsel.add(opt, null);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<p>From \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> and <span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Gecko&nbsp;7.0</span> the before parameter is optional. So the following is accepted.</p>\n<pre class=\"deki-transform\">...\nsel.add(opt);\n...\n</pre>\n</div><div id=\"section_10\"><span id=\"Inserting_to_an_Existing_Collection\"></span><h6 class=\"editable\">Inserting to an Existing Collection</h6>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\n\nvar opt = document.createElement(\"option\");\nopt.value = \"3\";\nopt.text = \"Option: Value 3\";\n\nsel.add(opt, sel.options[1]);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<dl> <dt></dt>\n</dl>\n<p>\n\n</p><div><span>Obsolete since Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n</span><span id=\"blur()\"></span></div></div></div></div>","idl":"<pre class=\"eval\">void add(\n  in nsIDOMHTMLElement element,\n  in nsIDOMHTMLElement before \n<span style=\"border: 1px solid #9ED2A4; background-color: #C0FFC7; font-size: x-small; white-space: nowrap; padding: 2px;\" title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Optional from Gecko 7.0</span>\n\n);\nvoid add(\n  in HTMLElement element,\n  in long before \n<span style=\"border: 1px solid #9ED2A4; background-color: #C0FFC7; font-size: x-small; white-space: nowrap; padding: 2px;\" title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Optional from Gecko 7.0</span>\n\n);\n</pre>","obsolete":false},{"name":"item","help":"<div id=\"section_14\"><p><span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> Gets an item from the options collection for this <code>select</code> element. You can also access an item by specifying the index in array-style brackets or parentheses, without calling this method explicitly.</p>\n\n</div><div id=\"section_15\"><span id=\"Parameters_5\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>index</code></dt> <dd>The zero-based index into the collection of the option to get.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Return_value_2\"></span><h6 class=\"editable\">Return value</h6>\n<p>The node at the specified index, or <code>null</code> if such a node does not exist in the collection.</p>\n<p>\n</p><div>\n<span id=\"namedItem()\"></span></div></div>","idl":"<pre class=\"eval\">nsIDOMNode item(\n  in unsigned long index\n);\n</pre>","obsolete":false},{"name":"remove","help":"<p>Removes the element at the specified index from the options collection for this select element.</p>\n\n<div id=\"section_20\"><span id=\"Parameters_7\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>index</code></dt> <dd>The zero-based index of the option element to remove from the collection.</dd>\n</dl>\n<div id=\"section_21\"><span id=\"Example\"></span><h5 class=\"editable\">Example</h5>\n\n          <pre name=\"code\" class=\"js\">var sel = document.getElementById(\"existingList\");\nsel.remove(1);\n\n/*\n  Takes the existing following select object:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"2\"&gt;Option: Value 2&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n\n  And changes it to:\n\n  &lt;select id=\"existingList\" name=\"existingList\"&gt;\n    &lt;option value=\"1\"&gt;Option: Value 1&lt;/option&gt;\n    &lt;option value=\"3\"&gt;Option: Value 3&lt;/option&gt;\n  &lt;/select&gt;\n*/</pre>\n        \n<p>\n</p><div>\n<span id=\"setCustomValidity()\"></span></div></div></div>","idl":"<pre class=\"eval\">void remove(\n  in long index\n);\n</pre>","obsolete":false},{"name":"focus","help":"<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> Gives input focus to this element. \n\n<span title=\"\">Obsolete since <a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","idl":"<pre class=\"eval\">void focus();\n</pre>","obsolete":false},{"name":"blur","help":"<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> Removes input focus from this element. \n\n<span title=\"\">Obsolete since <a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","idl":"<pre class=\"eval\">void blur();\n</pre>","obsolete":false},{"name":"namedItem","help":"<div id=\"section_16\"><p><span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> Gets the item in the options collection with the specified name. The name string can match either the <strong>id</strong> or the <strong>name</strong> attribute of an option node. You can also access an item by specifying the name in array-style brackets or parentheses, without calling this method explicitly.</p>\n\n</div><div id=\"section_17\"><span id=\"Parameters_6\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>name</code></dt> <dd>The name of the option to get.</dd>\n</dl>\n</div><div id=\"section_18\"><span id=\"Return_value_3\"></span><h6 class=\"editable\">Return value</h6>\n<ul> <li>A node, if there is exactly one match.</li> <li><code>null</code> if there are no matches.</li> <li>A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeList\">NodeList</a></code>\n in tree order of nodes whose <strong>name</strong> or <strong>id</strong> attributes match the specified name.</li>\n</ul>\n</div>","idl":"<pre class=\"eval\">nsIDOMNode namedItem(\n  in DOMString name\n);\n</pre>","obsolete":false},{"name":"checkValidity","help":"<div id=\"section_11\"><p><span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> Checks whether the element has any constraints and whether it satisfies them. If the element fails its constraints, the browser fires a cancelable <code>invalid</code> event at the element (and returns false).</p>\n\n</div><div id=\"section_12\"><span id=\"Parameters_3\"></span>\n\n</div><div id=\"section_13\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A <code>false</code> value if the <code>select</code> element is a candidate for constraint evaluation and it does not satisfy its constraints. Returns true if the element is not constrained, or if it satisfies its constraints.</p>\n<p>\n\n</p><div><span>Obsolete since Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n</span><span id=\"focus()\"></span></div></div>","idl":"<pre class=\"eval\">boolean checkValidity();\n</pre>","obsolete":false},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-autofocus\">autofocus</a></code>\n HTML attribute, which indicates whether the control should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form-associated element in a document can have this attribute specified. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-disabled\">disabled</a></code>\n HTML attribute, which indicates whether the control is disabled. If it is disabled, it does not accept clicks.","obsolete":false},{"name":"form","help":"The form that this element is associated with. If this element is a descendant of a form element, then this attribute is the ID of that form element. If the element is not a descendant of a form element, then: <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> The attribute can be the ID of any form element in the same document.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> The attribute is null.</li> </ul> <strong>Read only.</strong>","obsolete":false},{"name":"labels","help":"A list of label elements associated with this select element.","obsolete":false},{"name":"length","help":"The number of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option\">&lt;option&gt;</a></code>\n elements in this <code>select</code> element.","obsolete":false},{"name":"multiple","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-multiple\">multiple</a></code>\n HTML attribute, whichindicates whether multiple items can be selected.","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-name\">name</a></code>\n HTML attribute, containing the name of this control used by servers and DOM search functions.","obsolete":false},{"name":"options","help":"The set of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option\">&lt;option&gt;</a></code>\n elements contained by this element. <strong>Read only.</strong>","obsolete":false},{"name":"required","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-required\">required</a></code>\n HTML attribute, which indicates whether the user is required to select a value before submitting the form. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"selectedIndex","help":"The index of the first selected <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option\">&lt;option&gt;</a></code>\n element.","obsolete":false},{"name":"selectedOptions","help":"The set of options that are selected. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":false},{"name":"size","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select#attr-size\">size</a></code>\n HTML attribute, which contains the number of visible items in the control. The default is 1, \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> unless <strong>multiple</strong> is true, in which case it is 4.","obsolete":false},{"name":"tabIndex","help":"The element's position in the tabbing order. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> \n\n<span title=\"\">Obsolete since <a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/select.type","name":"type","help":"The form control's type. When <strong>multiple</strong> is true, it returns <code>select-multiple</code>; otherwise, it returns <code>select-one</code>.<strong>Read only.</strong>","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This attribute is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.<strong>Read only.</strong> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"validity","help":"The validity states that this control is in. <strong>Read only.</strong> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"value","help":"The value of this form control, that is, of the first selected option.","obsolete":false},{"name":"willValidate","help":"Indicates whether the button is a candidate for constraint validation. It is false if any conditions bar it from constraint validation. <strong>Read only.</strong> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLSelectElement"},"HTMLFieldSetElement":{"title":"HTMLFieldSetElement","summary":"DOM&nbsp;<code>fieldset</code> elements expose the <a class=\" external\" title=\"http://dev.w3.org/html5/spec/forms.html#htmlfieldsetelement\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/forms.html#htmlfieldsetelement\" target=\"_blank\">HTMLFieldSetElement</a>&nbsp; (\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-7365882\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-7365882\" target=\"_blank\">HTMLFieldSetElement</a>) interface, which provides special properties and methods (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of field-set elements.","members":[{"name":"checkValidity","help":"Always returns true because <code>fieldset</code> objects are never candidates for constraint validation.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the field set. If this message is not the empty string, then the field set is suffering from a custom validity error, and does not validate.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/fieldset#attr-disabled\">disabled</a></code>\n HTML&nbsp;attribute, indicating whether the user can interact with the control.","obsolete":false},{"name":"elements","help":"The elements belonging to this field set.","obsolete":false},{"name":"form","help":"The containing form element, if this element is in a form. Otherwise, the element the <a title=\"en/HTML/Element/fieldset#attr-name\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/fieldset#attr-name\">name content attribute</a> points to \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>. (<code>null</code> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span>.)","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/fieldset#attr-name\">name</a></code>\n HTML&nbsp;attribute, containing the name of the field set, used for submitting the form.","obsolete":false},{"name":"type","help":"Must be the string <code>fieldset</code>.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the element does not satisfy (if any). This is the empty string if the element&nbsp; is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"willValidate","help":"Always false because <code>fieldset</code> objects are never candidates for constraint validation.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLFieldSetElement"},"CompositionEvent":{"title":"CompositionEvent","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/CompositionEvent","specification":"DOM&nbsp;Level 3: Composition Events","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionstart\">compositionstart</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionend\">compositionend</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionupdate\">compositionupdate</a></code>\n</li> <li><a title=\"UIEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Event/UIEvent\">UIEvent</a></li> <li><a title=\"Event\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/event\">Event</a></li>","summary":"<div><div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/events/nsIDOMCompositionEvent.idl\"><code>dom/interfaces/events/nsIDOMCompositionEvent.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>An event interface for composition events</span><div><div>1.0</div><div>11.0</div><div></div><div>Introduced</div><div>Gecko 9.0</div><div title=\"Introduced in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n\"></div><div title=\"Last changed in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n\"></div></div>\n<div>Inherits from: <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIDOMUIEvent&amp;ident=nsIDOMUIEvent\" class=\"new\">nsIDOMUIEvent</a></code>\n<span>Last changed in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n</span></div></div>\n<p></p>\n<p>The DOM <code>CompositionEvent</code> represents events that occur due to the user indirectly entering text.</p>","members":[{"name":"initCompositionEvent","help":"<p>Initializes the attributes of a composition event.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>typeArg</code></dt> <dd>The type of composition event; this will be one of <code>compositionstart</code>, <code>compositionupdate</code>, or <code>compositionend</code>.</dd> <dt><code>canBubbleArg</code></dt> <dd>Whether or not the event can bubble.</dd> <dt><code>cancelableArg</code></dt> <dd>Whether or not the event can be canceled.</dd> <dt><code>viewArg</code></dt> <dd>?</dd> <dt><code>dataArg</code></dt> <dd>The value of the <code>data</code> attribute.</dd> <dt><code>localeArg</code></dt> <dd>The value of the <code>locale</code> attribute.</dd>\n</dl>\n</div>","idl":"<pre>void initCompositionEvent(\n  in DOMString typeArg,\n  in boolean canBubbleArg,\n  in boolean cancelableArg,\n  in views::AbstractView viewArg,\n  in DOMString dataArg,\n  in DOMString localeArg\n);\n</pre>","obsolete":false},{"name":"data","help":"<p>For <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionstart\">compositionstart</a></code>\n events, this is the currently selected text that will be replaced by the string being composed. This value doesn't change even if content changes the selection range; rather, it indicates the string that was selected when composition started.</p> <p>For <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionupdate\">compositionupdate</a></code>\n, this is the string as it stands currently as editing is ongoing.</p> <p>For <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_reference/compositionend\">compositionend</a></code>\n events, this is the string as committed to the editor.</p> <p><strong>Read only</strong>.</p>","obsolete":false},{"name":"locale","help":"The locale of current input method (for example, the keyboard layout locale if the composition is associated with IME). <strong>Read only.</strong>","obsolete":false}]},"SVGRadialGradientElement":{"title":"SVGRadialGradientElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGRadialGradientElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/radialGradient\">&lt;radialGradient&gt;</a></code>\n element.","members":[{"name":"cx","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cx\">cx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/radialGradient\">&lt;radialGradient&gt;</a></code>\n element.","obsolete":false},{"name":"cy","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cy\">cy</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/radialGradient\">&lt;radialGradient&gt;</a></code>\n element.","obsolete":false},{"name":"fx","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/fx\" class=\"new\">fx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/radialGradient\">&lt;radialGradient&gt;</a></code>\n element.","obsolete":false},{"name":"fy","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/fy\" class=\"new\">fy</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/radialGradient\">&lt;radialGradient&gt;</a></code>\n element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGRadialGradientElement"},"TextMetrics":{"title":"TextMetrics","summary":"Returned by <a title=\"CanvasRenderingContext2D\" rel=\"internal\" href=\"https://developer.mozilla.org/CanvasRenderingContext2D\" class=\"new \">CanvasRenderingContext2D</a>'s <a title=\"CanvasRenderingContext2D.measureText\" rel=\"internal\" href=\"https://developer.mozilla.org/CanvasRenderingContext2D.measureText\" class=\"new \">measureText</a> method.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/TextMetrics","specification":"http://www.whatwg.org/specs/web-apps...ml#textmetrics"},"SVGScriptElement":{"title":"SVGScriptElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGScriptElement</code> interface corresponds to the SVG <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/script\">&lt;script&gt;</a></code>\n element.","members":[{"name":"type","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/type\" class=\"new\">type</a></code> on the given element. A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n is raised with code <code>NO_MODIFICATION_ALLOWED_ERR</code> on an attempt to change the value of a read only attribut.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGScriptElement"},"SVGFEBlendElement":{"title":"feBlend","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The <code>feBlend</code> filter composes two objects together ruled by a certain blending mode. This is similar to what is known from image editing software when blending two layers. The mode is defined by the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/mode\" class=\"new\">mode</a></code> attribute.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in2","name":"in2","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/mode","name":"mode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feBlend"},"HTMLAreaElement":{"title":"HTMLAreaElement","summary":"DOM area objects expose the <a class=\" external\" title=\"http://www.w3.org/TR/html5/the-map-element.html#htmlareaelement\" rel=\"external\" href=\"http://www.w3.org/TR/html5/the-map-element.html#htmlareaelement\" target=\"_blank\">HTMLAreaElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26019118\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26019118\" target=\"_blank\"><code>HTMLAreaElement</code></a>) interface, which provides special properties and methods (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of area elements.","members":[{"name":"accessKey","help":"A single character that switches input focus to the control. \n\n<span title=\"\">Obsolete</span>&nbsp;in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"alt","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-alt\">alt</a></code>\n HTML attribute, containing alternative text for the element.","obsolete":false},{"name":"coords","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-coords\">coords</a></code>\n HTML attribute, containing coordinates to define the hot-spot region.","obsolete":false},{"name":"hash","help":"The fragment identifier (including the leading hash mark (#)), if any, in the referenced URL.","obsolete":false},{"name":"host","help":"The hostname and port (if it's not the default port) in the referenced URL.","obsolete":false},{"name":"hostname","help":"The hostname in the referenced URL.","obsolete":false},{"name":"href","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-href\">href</a></code>\n HTML attribute, containing a valid URL&nbsp;of a linked resource.","obsolete":false},{"name":"hreflang","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-hreflang\">hreflang</a></code>\n HTML&nbsp;attribute, indicating the language of the linked resource.","obsolete":false},{"name":"media","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-media\">media</a></code>\n HTML&nbsp;attribute, indicating target media of the linked resource.","obsolete":false},{"name":"noHref","help":"Indicates that this area is inactive. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"pathname","help":"The path name component, if any, of the referenced URL.","obsolete":false},{"name":"port","help":"The port component, if any, of the referenced URL.","obsolete":false},{"name":"protocol","help":"The protocol component (including trailing colon (:)), of the referenced URL.","obsolete":false},{"name":"rel","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-rel\">rel</a></code>\n HTML&nbsp;attribute, indicating relationships of the current document to the linked resource.","obsolete":false},{"name":"relList","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-rel\">rel</a></code>\n HTML&nbsp;attribute, indicating relationships of the current document to the linked resource, as a list of tokens.","obsolete":false},{"name":"search","help":"The search element (including leading question mark (?)), if any, of the referenced URL","obsolete":false},{"name":"shape","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-shape\">shape</a></code>\n HTML&nbsp;attribute, indicating the shape of the hot-spot, limited to known values.","obsolete":false},{"name":"tabIndex","help":"The element's position in the tabbin order. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"target","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-target\">target</a></code>\n HTML&nbsp;attribute, indicating the browsing context in which to open the linked resource.","obsolete":false},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area#attr-type\">type</a></code>\n HTML&nbsp;attribute, indicating the MIME type of the linked resource.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLAreaElement"},"SQLError":{"title":"User talk:sdwilsh","members":[],"srcUrl":"https://developer.mozilla.org/User_talk:sdwilsh","skipped":true,"cause":"Suspect title"},"HTMLTableSectionElement":{"title":"thead","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>align/valign</code> attribute</td> <td>1.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=915\" class=\"external\" title=\"\">\nbug 915</a>\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>char/charoff</code> attribute</td> <td>1.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>bgcolor</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>align/valign</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=915\" class=\"external\" title=\"\">\nbug 915</a>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>char/charoff</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>bgcolor</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody>\n</table>\n</div>","examples":["See <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/table\">&lt;table&gt;</a></code>\n for examples on<code> &lt;thead&gt;</code>."],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/thead","seeAlso":"<li>Other table-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/caption\">&lt;caption&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/col\">&lt;col&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/colgroup\">&lt;colgroup&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/table\">&lt;table&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tbody\">&lt;tbody&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td\">&lt;td&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tfoot\">&lt;tfoot&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/th\">&lt;th&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tr\">&lt;tr&gt;</a></code>\n;</li> <li>CSS properties and pseudo-classes that may be specially useful to style the <span>&lt;thead&gt;</span> element:&nbsp;<br> <ul> <li>the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/%3Anth-child\">:nth-child</a></code>\n pseudo-class to set the alignment on the cells of the column;</li> <li>the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property to align all cells content on the same character, like '.'.</li> </ul> </li>","summary":"The <em>HTML Table Head Element</em> (<code>&lt;thead&gt;</code>) defines a set of rows defining the head of the columns of the table.","members":[{"obsolete":false,"url":"","name":"valign","help":"This attribute specifies the vertical alignment of the text within each row of cells of the table header. Possible values for this attribute are: <ul> <li><span>baseline</span>, which will put the text as close to the bottom of the cell as it is possible, but align it on the <a class=\" external\" title=\"http://en.wikipedia.org/wiki/Baseline_(typography)\" rel=\"external\" href=\"http://en.wikipedia.org/wiki/Baseline_%28typography%29\" target=\"_blank\">baseline</a> of the characters instead of the bottom of them. If characters are all of the size, this has the same effect as <span>bottom</span>.</li> <li><span>bottom</span>, which will put the text as close to the bottom of the cell as it is possible;</li> <li><span>middle</span>, which will center the text in the cell;</li> <li>and <span>top</span>, which will put the text as close to the top of the cell as it is possible.</li> </ul> <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard: instead set the CSS&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/vertical-align\">vertical-align</a></code>\n property on it.</div>"},{"obsolete":false,"url":"","name":"bgcolor","help":"This attribute defines the background color of each cell of the column. It is one of the 6-digit hexadecimal code as defined in <a title=\"http://www.w3.org/Graphics/Color/sRGB\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/Graphics/Color/sRGB\" target=\"_blank\">sRGB</a>, prefixed by a '#'. One of the sixteen predefined color strings may be used: <table width=\"80%\" cellspacing=\"10\" cellpadding=\"0\" border=\"0\" align=\"center\" summary=\"Table of color names and their sRGB values\"> <tbody> <tr> <td>&nbsp;</td> <td><span>black</span> = \"#000000\"</td> <td>&nbsp;</td> <td><span>green</span> = \"#008000\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>silver</span> = \"#C0C0C0\"</td> <td>&nbsp;</td> <td><span>lime</span> = \"#00FF00\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>gray</span> = \"#808080\"</td> <td>&nbsp;</td> <td><span>olive</span> = \"#808000\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>white</span> = \"#FFFFFF\"</td> <td>&nbsp;</td> <td><span>yellow</span> = \"#FFFF00\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>maroon</span> = \"#800000\"</td> <td>&nbsp;</td> <td><span>navy</span> = \"#000080\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>red</span> = \"#FF0000\"</td> <td>&nbsp;</td> <td><span>blue</span> = \"#0000FF\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>purple</span> = \"#800080\"</td> <td>&nbsp;</td> <td><span>teal</span> = \"#008080\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>fuchsia</span> = \"#FF00FF\"</td> <td>&nbsp;</td> <td><span>aqua</span> = \"#00FFFF\"</td> </tr> </tbody> </table> <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it is non-standard and only implemented in some versions of Microsoft Internet Explorer: the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead\">&lt;thead&gt;</a></code>\n element should be styled using <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a>. To give a similar effect to the <strong>bgcolor</strong> attribute, use the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> property <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/background-color\">background-color</a></code>\n, on the relevant <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td\">&lt;td&gt;</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/th\">&lt;th&gt;</a></code>\n elements.</div>"},{"obsolete":false,"url":"","name":"char","help":"This attribute is used to set the character to align the cells in a column on. Typical values for this include a period (.) when attempting to align numbers or monetary values. If \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tr#attr-align\">align</a></code>\n is not set to <span>char</span>, this attribute is ignored. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard. To achieve the same effect as the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-char\">char</a></code>\n, in CSS3, you can use the character set using the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-char\">char</a></code>\n attribute as the value of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property \n<span class=\"unimplementedInlineTemplate\">Unimplemented</span>\n.</div>"},{"obsolete":false,"url":"","name":"align","help":"This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are: <ul> <li><span>left</span>, aligning the content to the left of the cell</li> <li><span>center</span>, centering the content in the cell</li> <li><span>right</span>, aligning the content to the right of the cell</li> <li><span>justify</span>, inserting spaces into the textual content so that the content is justified in the cell</li> <li><span>char</span>, aligning the textual content on a special character with a minimal offset, defined by the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-char\">char</a></code>\n and \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-charoff\">charoff</a></code>\n attributes \n<span class=\"unimplementedInlineTemplate\">Unimplemented (see<a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n)</span>\n.</li> </ul> <p>If this attribute is not set,&nbsp; the <span>left</span> value is assumed.</p> <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (not supported) in the latest standard. <ul> <li>To achieve the same effect as the <span>left</span>, <span>center</span>, <span>right</span> or <span>justify</span> values, use the CSS <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property on it.</li> <li>To achieve the same effect as the <span>char</span> value, in CSS3, you can use the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-char\">char</a></code>\n as the value of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property \n<span class=\"unimplementedInlineTemplate\">Unimplemented</span>\n.</li> </ul> </div>"},{"obsolete":false,"url":"","name":"charoff","help":"This attribute is used to indicate the number of characters to offset the column data from the alignment characters specified by the <strong>char</strong> attribute. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard.</div>"}]},"SVGNumberList":{"title":"SVGNumberList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGNumberList</code> defines a list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGNumber\">SVGNumber</a></code>\n objects.</p>\n<p>An <code>SVGNumberList</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>\n<div class=\"geckoVersionNote\"> <p>\n</p><div class=\"geckoVersionHeading\">Gecko 5.0 note<div>(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n</div></div>\n<p></p> <p>Starting in Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n,the <code>SVGNumberList</code> DOM interface is now indexable and can be accessed like arrays</p>\n</div>","members":[{"name":"clear","help":"<p>Clears all existing current items from the list, with the result being an empty list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"initialize","help":"<p>Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter. If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. The return value is the item inserted into the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"getItem","help":"<p>Returns the specified item from the list. The returned item is the item itself and not a copy. Any changes made to the item are immediately reflected in the list. The first item is number&nbsp;0.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"insertItemBefore","help":"<p>Inserts a new item into the list at the specified position. The first item is number 0. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to insert before is before the removal of the item. If the <code>index</code> is equal to 0, then the new item is inserted at the front of the list. If the index is greater than or equal to <code>numberOfItems</code>, then the new item is appended to the end of the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"replaceItem","help":"<p>Replaces an existing item in the list with a new item. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to replace is before the removal of the item.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"removeItem","help":"<p>Removes an existing item from the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"appendItem","help":"<p>Inserts a new item at the end of the list. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"numberOfItem","help":"The number of items in the list.","obsolete":false},{"name":"length","help":"The number of items in the list.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGNumberList"},"HTMLFrameSetElement":{"title":"frameset","summary":"<code>&lt;frameset&gt;</code> is an HTML element which is used to contain <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/frame\">&lt;frame&gt;</a></code>\n elements.","members":[],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/frameset"},"ClientRectList":{"title":"Interface documentation status","members":[],"srcUrl":"https://developer.mozilla.org/User:trevorh/Interface_documentation_status","skipped":true,"cause":"Suspect title"},"SVGStylable":{"title":"SVGStylable","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGStylable</code> interface is implemented on all objects corresponding to SVG elements that can have \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/style\">style</a></code>, {{SVGAttr(\"class\") and presentation attributes specified on them.","members":[{"name":"getPresentationAttribute","help":"Returns the base (i.e., static) value of a given presentation attribute as an object of type <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/CSSValue\" class=\"new\">CSSValue</a></code>\n. The returned object is live; changes to the objects represent immediate changes to the objects to which the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/CSSValue\" class=\"new\">CSSValue</a></code>\n is attached.","obsolete":false},{"name":"className","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/class\">class</a></code> on the given element.","obsolete":false},{"name":"style","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/style\">style</a></code> on the given element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGStylable"},"SVGPaint":{"title":"Content type","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Content_type","skipped":true,"cause":"Suspect title"},"SVGImageElement":{"title":"SVGImageElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGImageElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/image\">&lt;image&gt;</a></code>\n element.","members":[{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/image\">&lt;image&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/image\">&lt;image&gt;</a></code>\n element.","obsolete":false},{"name":"preserveAspectRatio","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/image\">&lt;image&gt;</a></code>\n element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGImageElement"},"MediaQueryListListener":{"title":"MediaQueryListListener","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/MediaQueryListListener","specification":"The CSSOM&nbsp;View Module:&nbsp;The&nbsp;MediaQueryList Interface","seeAlso":"<li><a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/En/CSS/Media_queries\">Media queries</a></li> <li><a title=\"en/CSS/Using media queries from code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/Using_media_queries_from_code\">Using media queries from code</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/MediaQueryList\">MediaQueryList</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.matchMedia\">window.matchMedia()</a></code>\n</li>","summary":"<div><strong>DRAFT</strong>\n<div>This page is not complete.</div>\n</div>\n\n<p></p>\n<p>A <code>MediaQueryList</code> object maintains a list of <a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/En/CSS/Media_queries\">media queries</a> on a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document\">document</a></code>\n, and handles sending notifications to listeners when the media queries on the document change.</p>\n<p>This makes it possible to observe a document to detect when its media queries change, instead of polling the values periodically, if you need to programmatically detect changes to the values of media queries on a document.</p>","members":[]},"HTMLLinkElement":{"title":"link","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td>Alternative stylesheets</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.0 (1.9)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>disabled</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>methods</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td>4.0</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>sizes</code> attribute</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=441770\" class=\"external\" title=\"\">\nbug 441770</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>load</code> and <code>error</code> events</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td>Alternative stylesheets</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>disabled</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>methods</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td>4.0</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>sizes</code> attribute</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=441770\" class=\"external\" title=\"\">\nbug 441770</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>load</code> and <code>error</code> events</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <em>HTML Link Element</em> (&lt;link&gt;) specifies relationships between the current document and other documents. Possible uses for this element include defining a relational framework for navigation and linking the document to a style sheet.","members":[{"obsolete":false,"url":"","name":"target","help":"Defines the frame or window name that has the defined linking relationship or that will show the rendering of any linked resource."},{"obsolete":false,"url":"","name":"media","help":"This attribute specifies the media which the linked resource applies to. Its value must be a <a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/Media_queries\">media query</a>. This attribute is mainly useful when linking to external stylesheets by allowing the user agent to pick the best adapted one for the device it runs on.<br> <div class=\"note\"><strong>Usage note:&nbsp;</strong> <p>&nbsp;</p> <ul> <li>In HTML 4, this can only be a simple white-space-separated list of media description literals, i.e., <a title=\"https://developer.mozilla.org/en/CSS/@media\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/@media\">media types and groups</a>, where defined and allowed as values for this attribute, such as <span>print</span>, <span>screen</span>, <span>aural</span>, <span>braille.</span> HTML5 extended this to any kind of <a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/Media_queries\">media queries</a>, which are a superset of the allowed values of HTML 4.</li> <li>Browsers not supporting the <a title=\"En/CSS/Media queries\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/Media_queries\">CSS3 Media Queries</a> won't necessary recognized the adequate link; do not forget to set fallback links,&nbsp; the restricted set of media queries defined in HTML 4.</li> </ul> </div>"},{"obsolete":false,"url":"","name":"hreflang","help":"This attribute indicates the language of the linked resource. It is purely advisory. Allowed values are determined by <a class=\"external\" title=\"http://www.ietf.org/rfc/bcp/bcp47.txt\" rel=\"external\" href=\"http://www.ietf.org/rfc/bcp/bcp47.txt\" target=\"_blank\">BCP47</a> for HTML5 and by <a class=\"external\" title=\"http://www.ietf.org/rfc/rfc1766.txt\" rel=\"external\" href=\"http://www.ietf.org/rfc/rfc1766.txt\" target=\"_blank\">RFC1766</a> for HTML 4. Use this attribute only if the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-href\">href</a></code>\n attribute is present."},{"obsolete":false,"url":"","name":"rel","help":"This attribute names a relationship of the linked document to the current document. The attribute must be a space-separated list of the <a title=\"en/HTML/Link types\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Link_types\">link types values</a>. The most common use of this attribute is to specify a link to an external style sheet:&nbsp;the <strong>rel</strong> attribute is set to <code>stylesheet</code>, and the <strong>href</strong> attribute is set to the URL of an external style sheet to format the page. WebTV also supports the use of the value <code>next</code> for <strong>rel</strong> to preload the next page in a document series."},{"obsolete":false,"url":"","name":"sizes","help":"This attribute defines the sizes of the icons for visual media contained in the resource. It must be present only if the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/link#attr-rel\">rel</a></code>\n contains the <span>icon</span> <a title=\"en/HTML/Link types\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Link_types\">link types value</a>. It may have the following values: <ul> <li><span>any</span>, meaning that the icon can be scaled to any size as it is in a vectorial format, like <span>image/svg</span>.</li> <li>a white-space separated list of sizes, each in the format <span><em>&lt;width in pixels&gt;</em>x<em>&lt;height in pixels&gt;</em></span> or <span><em>&lt;width in pixels&gt;</em>X<em>&lt;height in pixels&gt;</em></span>. Each of these sizes must be contained in the resource.</li> </ul> <div class=\"note\"><strong>Usage note:&nbsp;</strong> <p>&nbsp;</p> <ul> <li>Most icon format are only able to store one single icon; therefore most of the time the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element#attr-sizes\">sizes</a></code>\n contains only one entry. Among the major browsers, only the Apple's ICNS format allows the storage of multiple icons, and this format is only supported in WebKit.</li> <li>Apple's iOS does not support this attribute, hence Apple's iPhone and iPad use special, non-standard <a title=\"en/HTML/Link types\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Link_types\">link types values</a> to define icon to be used as Web Clip or start-up placeholder: <span>apple-touch-icon</span> and <span>apple-touch-startup-icon</span>.</li> </ul> </div>"},{"obsolete":false,"url":"","name":"methods","help":"The value of this attribute provides information about the functions that might be performed on an object. The values generally are given by the HTTP protocol when it is used, but it might (for similar reasons as for the <strong>title</strong> attribute) be useful to include advisory information in advance in the link. For example, the browser might choose a different rendering of a link as a function of the methods specified; something that is searchable might get a different icon, or an outside link might render with an indication of leaving the current site. This attribute is not well understood nor supported, even by the defining browser, Internet Explorer 4. See <a class=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms534168%28VS.85%29.aspx\" rel=\"external nofollow\" target=\"_blank\" title=\"http://msdn.microsoft.com/en-us/library/ms534168(VS.85).aspx\">Methods Property (MSDN)</a>."},{"obsolete":false,"url":"","name":"href","help":"This attribute specifies the <a title=\"https://developer.mozilla.org/en/URIs_and_URLs\" rel=\"internal\" href=\"https://developer.mozilla.org/en/URIs_and_URLs\">URL</a> of the linked resource. A URL might be absolute or relative."},{"obsolete":false,"url":"","name":"charset","help":"This attribute defines the character encoding of the linked resource. The value is a space- and/or comma-delimited list of character sets as defined in <a class=\"external\" title=\"http://tools.ietf.org/html/rfc2045\" rel=\"external\" href=\"http://tools.ietf.org/html/rfc2045\" target=\"_blank\">RFC 2045</a>. The default value is ISO-8859-1. <div class=\"note\"><strong>Usage note: </strong>This attribute is obsolete in HTML5 and <span>must</span><strong> not be used by authors</strong>. To achieve its effect, use the <span>Content-Type:</span> HTTP header on the linked resource.</div>"},{"obsolete":false,"url":"","name":"rev","help":"The value of this attribute shows the relationship of the current document to the linked document, as defined by the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/link#attr-href\">href</a></code>\n attribute. The attribute thus defines the reverse relationship compared to the value of the <strong>rel</strong> attribute. <a title=\"en/HTML/Link types\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Link_types\">Link types values</a> for the attribute are similar to the possible values for \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/link#attr-rel\">rel</a></code>\n.<br> <div class=\"note\"><strong>Usage note: </strong>This attribute is obsolete in HTML5. <strong>Do not use it</strong>. To achieve its effect, use the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/link#attr-rel\">rel</a></code>\n attribute with the opposite <a title=\"en/HTML/Link types\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Link_types\">link types values</a>, e.g. <span>made</span> should be replaced by <span>author</span>. Also this attribute doesn't mean <em>revision</em> and must not be used with a version number, which is unfortunately the case on numerous sites.</div>"},{"obsolete":false,"url":"","name":"type","help":"This attribute is used to define the type of the content linked to. The value of the attribute should be a MIME type such as <strong>text/html</strong>, <strong>text/css</strong>, and so on. The common use of this attribute is to define the type of style sheet linked and the most common current value is <strong>text/css</strong>, which indicates a Cascading Style Sheet format."},{"obsolete":false,"url":"","name":"disabled","help":"This attribute is used to disable a link relationship. In conjunction with scripting, this attribute could be used to turn on and off various style sheet relationships. <div class=\"note\"> <p><strong>Note: </strong>While there is no <code>disabled</code> attribute in the HTML standard, there <strong>is</strong> a <code>disabled</code> attribute on the <code>HTMLLinkElement</code> DOM object.</p> <p>The use of&nbsp;<code>disabled</code> as an HTML attribute is non-standard and only used by some Microsoft browsers. <span>Do not use it</span>. To achieve a similar effect, use one of the following techniques:</p> <ul> <li>If the <code>disabled</code> attribute has been added directly to the element on the page, do not include the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/link\">&lt;link&gt;</a></code>\n element instead;</li> <li>Set the <code>disabled</code> <strong>property</strong> of the DOM object via scripting.</li> </ul> </div>"}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/link"},"CanvasPattern":{"title":"CanvasPattern","summary":"This is an opaque object created by <a title=\"en/DOM/CanvasRenderingContext2D\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\">CanvasRenderingContext2D</a>'s <a title=\"en/DOM/CanvasRenderingContext2D.createPattern\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D.createPattern\" class=\"new \">createPattern</a> method (whether based on a image, canvas, or video).","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/CanvasPattern","specification":"http://www.whatwg.org/specs/web-apps...#canvaspattern"},"SVGAnimatedAngle":{"title":"SVGAnimatedAngle","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedAngle</code> interface is used for attributes of basic type <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\">&lt;angle&gt;</a> which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAngle\">SVGAngle</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAngle\">SVGAngle</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> will always be distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedAngle"},"ProgressEvent":{"title":"nsIDOMProgressEvent","seeAlso":"<li><a title=\"En/Using XMLHttpRequest\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest\">Using XMLHttpRequest</a></li> <li><a title=\"En/XMLHttpRequest\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XMLHttpRequest\">XMLHttpRequest</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIXMLHttpRequestEventTarget\">nsIXMLHttpRequestEventTarget</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/nsIXMLHttpRequest\">nsIXMLHttpRequest</a></code>\n</li>","summary":"<div><div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/events/nsIDOMProgressEvent.idl\"><code>dom/interfaces/events/nsIDOMProgressEvent.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>This interface represents the events sent with progress information while uploading data using the <code>XMLHttpRequest</code> object.</span><div><div>1.0</div><div>11.0</div><div></div><div>Introduced</div><div>Gecko 1.9.1</div><div title=\"Introduced in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\"></div><div title=\"Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\"></div></div>\n<div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMEvent\">nsIDOMEvent</a></code>\n<span>Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n</span></div></div>\n<p></p>\n<p>The <code>nsIDOMProgressEvent</code> is used in the media elements (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video\">&lt;video&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n) to inform interested code of the progress of the media download. This implementation is a placeholder until the specification is complete, and is compatible with the WebKit ProgressEvent.</p>","members":[{"name":"initProgressEvent","help":"<p>Initializes the progress event object.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>typeArg</code></dt> <dd>The type of event. Must be one of \"<code>abort</code>\", \"<code>error</code>\", \"<code>load</code>\", \"<code>loadstart</code>\", or \"<code>progress</code>\".</dd> <dt><code>canBubbleArg</code></dt> <dd>Specifies whether or not the created event will bubble.</dd> <dt><code>cancelableArg</code></dt> <dd>Specifies whether or not the created event can be canceled.</dd> <dt><code>lengthComputableArg</code></dt> <dd>If the size of the data to be transferred is known, this should be <code>true</code>. Otherwise, specify <code>false</code>.</dd> <dt><code>loadedArg</code></dt> <dd>The number of bytes already transferred. Must be a non-negative value.</dd> <dt><code>totalArg</code></dt> <dd>The total number of bytes to be transferred. If <code>lengthComputable</code> is <code>false</code>, this must be zero.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void initProgressEvent(\n  in DOMString typeArg,\n  in boolean canBubbleArg,\n  in boolean cancelableArg,\n  in boolean lengthComputableArg,\n  in unsigned long long loadedArg,\n  in unsigned long long totalArg\n);\n</pre>","obsolete":false},{"name":"lengthComputable","help":"Specifies whether or not the total size of the transfer is known. <strong>Read only.</strong>","obsolete":false},{"name":"loaded","help":"The number of bytes transferred since the beginning of the operation. This doesn't include headers and other overhead, but only the content itself. <strong>Read only.</strong>","obsolete":false},{"name":"total","help":"The total number of bytes of content that will be transferred during the operation. If the total size is unknown, this value is zero. <strong>Read only.</strong>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMProgressEvent"},"Screen":{"title":"window.screen","examples":["if (screen.pixelDepth &lt; 8) {\n  // use low-color version of page\n} else { \n  // use regular, colorful page\n}\n"],"summary":"Returns a reference to the screen object associated with the window.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.left","name":"left","help":"Returns the distance in pixels from the left side of the main screen to the left side of the current screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.availWidth","name":"availWidth","help":"Returns the amount of horizontal space in pixels available to the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.top","name":"top","help":"Returns the distance in pixels from the top side of the current screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.colorDepth","name":"colorDepth","help":"Returns the color depth of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.height","name":"height","help":"Returns the height of the screen in pixels."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.availLeft","name":"availLeft","help":"Returns the first available pixel available from the left side of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.pixelDepth","name":"pixelDepth","help":"Gets the bit depth of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.width","name":"width","help":"Returns the width of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.availTop","name":"availTop","help":"Specifies the y-coordinate of the first pixel that is not allocated to permanent or semipermanent user interface features."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen.availHeight","name":"availHeight","help":"Specifies the height of the screen, in pixels, minus permanent or semipermanent user interface features displayed by the operating system, such as the Taskbar on Windows."}],"srcUrl":"https://developer.mozilla.org/en/DOM/window.screen"},"SVGLengthList":{"title":"SVGLengthList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"<p>The <code>SVGLengthList</code> defines a list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGLength\">SVGLength</a></code>\n objects.</p>\n<p>An <code>SVGLengthList</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>\n<div class=\"geckoVersionNote\">\n<p>\n</p><div class=\"geckoVersionHeading\">Gecko 5.0 note<div>(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n</div></div>\n<p></p>\n<p>Starting in Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n,the <code>SVGLengthList</code> DOM interface is now indexable and can be accessed like arrays</p>\n</div>","members":[{"name":"clear","help":"<p>Clears all existing current items from the list, with the result being an empty list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"initialize","help":"<p>Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter. If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. The return value is the item inserted into the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"getItem","help":"<p>Returns the specified item from the list. The returned item is the item itself and not a copy. Any changes made to the item are immediately reflected in the list. The first item is number&nbsp;0.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"insertItemBefore","help":"<p>Inserts a new item into the list at the specified position. The first item is number 0. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to insert before is before the removal of the item. If the <code>index</code> is equal to 0, then the new item is inserted at the front of the list. If the index is greater than or equal to <code>numberOfItems</code>, then the new item is appended to the end of the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"replaceItem","help":"<p>Replaces an existing item in the list with a new item. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to replace is before the removal of the item.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"removeItem","help":"<p>Removes an existing item from the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"appendItem","help":"<p>Inserts a new item at the end of the list. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"numberOfItem","help":"The number of items in the list.","obsolete":false},{"name":"length","help":"The number of items in the list.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGLengthList"},"SVGViewSpec":{"title":"SVGSVGElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSVGElement","skipped":true,"cause":"Suspect title"},"HTMLModElement":{"title":"HTMLModElement","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/del\">&lt;del&gt;</a></code>\n&nbsp;HTML&nbsp;element</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ins\">&lt;ins&gt;</a></code>\n&nbsp;HTML&nbsp;element</li>","summary":"DOM mod (modification)&nbsp;objects expose the <a title=\"http://www.w3.org/TR/html5/edits.html#htmlmodelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/edits.html#htmlmodelement\" target=\"_blank\">HTMLModElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-79359609\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-79359609\" target=\"_blank\"><code>HTMLModElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating modification elements.","members":[{"name":"cite","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/del#attr-cite\">cite</a></code>\n HTML attribute, containing a URI of a resource explaining the change.","obsolete":false},{"name":"datetime","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/del#attr-datetime\">datetime</a></code>\n HTML attribute, containing a date-and-time string representing a timestamp for the change.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLModElement"},"IDBKeyRange":{"title":"IDBKeyRange","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Asynchronous API</td> <td>12 \n<span title=\"prefix\">-webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td>Synchronous API<br> (used with <a title=\"https://developer.mozilla.org/En/Using_web_workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Using_web_workers\">WebWorkers</a>)</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Asynchronous API</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>IDBKeyRange</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a> represents a continuous interval over some data type that is used for keys. Records can be retrieved from object stores and indexes using keys or a range of keys. You can limit the range using lower and upper bounds. For example, you can iterate over all values of a key between x and y.","members":[{"name":"lowerBound","help":"<p>Creates a key range with only a lower bound. By default, it includes the lower endpoint value and is closed.</p>\n<pre>IDBKeyRange lowerBound (\n  in any bound, \n  in optional boolean open\n);\n</pre>\n<div id=\"section_17\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>bound</dt> <dd>The value of the lower bound.</dd> <dt>open</dt> <dd><em>Optional</em>. If false (default value), the range includes the lower-bound value.</dd>\n</dl>\n</div><div id=\"section_18\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>IDBKeyRange</code></dt> <dd>The newly created key range.</dd>\n</dl>\n</div><div id=\"section_19\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStore\">DATA_ERR</a></code></dt> <dd>The value parameter was not passed a valid key.</dd>\n</dl>\n</div>","obsolete":false},{"name":"only","help":"<p>Creates a new key range containing a single value.</p>\n<pre>IDBKeyRange only (\n  in any value\n);\n</pre>\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>value</dt> <dd>The single value in the key range.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>IDBKeyRange</code></dt> <dd>The newly created key range.</dd>\n</dl>\n</div><div id=\"section_15\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></dt> <dd>The value parameter was not passed a valid key.</dd>\n</dl>\n</div>","obsolete":false},{"name":"bound","help":"<p>Creates a key range with upper and lower bounds. The bounds can be open (that is, the bounds excludes the endpoint values) or closed (that is, the bounds includes the endpoint values). By default, the bounds include the endpoints and are closed.</p>\n<pre>IDBKeyRange bound (\n   in any lower,\n   in any upper, \n   in optional boolean lowerOpen, \n   in optional boolean upperOpen\n);\n</pre>\n<div id=\"section_9\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>lower</dt> <dd>The lower bound of the key range.</dd> <dt>upper</dt> <dd>The upper bound of the key range.</dd> <dt>lowerOpen</dt> <dd><em>Optional</em>. If false (default value), the range includes the lower bound value of the key range.</dd> <dt>upperOpen</dt> <dd><em>Optional</em>. If false (default value), the range includes the upper bound value of the key range.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>IDBKeyRange</code></dt> <dd>The newly created key range.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></dt> <dd>The following conditions raise an exception: <ul> <li>The lower or upper parameters were not passed a valid key.</li> <li>The lower key is greater than the upper key.</li> <li>The lower key and upper key match and either of the bounds are open.</li> </ul> </dd>\n</dl>\n</div>","obsolete":false},{"name":"upperBound","help":"<p>Creates a new upper-bound key range. By default, it includes the upper endpoint value and is closed.</p>\n<pre>IDBKeyRange upperBound (\n  in any bound, \n  in optional boolean open\n);\n</pre>\n<div id=\"section_21\"><span id=\"Parameters_4\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>bound</dt> <dd>The value of the upper bound of the range.</dd> <dt>open</dt> <dd><em>Optional</em>. If false (default value), the range includes the lower-bound value.</dd>\n</dl>\n</div><div id=\"section_22\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>IDBKeyRange</code></dt> <dd>The newly created key range.</dd>\n</dl>\n</div><div id=\"section_23\"><span id=\"Exceptions_4\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></dt> <dd>The value parameter was not passed a valid key.</dd>\n</dl>\n</div>","obsolete":false},{"url":"","name":"upperOpen","help":"Returns false if the upper-bound value is included in the key range.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBKeyRange"},"HTMLParagraphElement":{"title":"HTMLParagraphElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/p\">&lt;p&gt;</a></code>\n HTML&nbsp;element","summary":"DOM p (paragraph) objects expose the <a title=\"http://www.w3.org/TR/html5/grouping-content.html#htmlparagraphelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/grouping-content.html#htmlparagraphelement\" target=\"_blank\">HTMLParagraphElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-84675076\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-84675076\" target=\"_blank\"><code>HTMLParagraphElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating div elements. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"align","help":"Enumerated attribute indicating alignment of the element's contents with respect to the surrounding context.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/HTMLParagraphElement"},"Int16Array":{"title":"Int16Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array","seeAlso":"<li><a class=\" link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Int16Array</code> type represents an array of twos-complement 16-bit signed integers.</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Int16Array <a title=\"en/JavaScript typed arrays/Int16Array#Int16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array#Int16Array()\">Int16Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Int16Array </code><code><a title=\"en/JavaScript typed arrays/Int16Array#Int16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array#Int16Array%28%29\">Int16Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Int16Array </code><code><a title=\"en/JavaScript typed arrays/Int16Array#Int16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array#Int16Array%28%29\">Int16Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Int16Array </code><code><a title=\"en/JavaScript typed arrays/Int16Array#Int16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array#Int16Array%28%29\">Int16Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Int16Array</code> object.</p>\n<pre>Int16Array Int16Array(\n&nbsp; unsigned long length\n);\n\nInt16Array Int16Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nInt16Array Int16Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nInt16Array Int16Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int32Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 16-bit signed integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Int16Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Int16Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Int16Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Int16Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Int16Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Int16Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Int16Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Int16Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"FileEntry":{"title":"FileEntry","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>FileEntry</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents a file in a file system.</p>","members":[{"name":"createWriter","help":"<p>Creates a new <code>FileWriter</code> associated with the file that the <code>FileEntry</code> represents.</p>\n<pre>void createWriter (\n in FileWriterCallback successCallback, optional ErrorCallback errorCallback\n);</pre> <div id=\"section_4\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the new <code>FileWriter</code>.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd> </dl> </div><div id=\"section_5\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl> </div>","obsolete":false},{"name":"file","help":"<p>Returns a File that represents the current state of the file that this <code>FileEntry</code> represents.</p>\n<pre>void file (\n  <em>FileCallback successCallback, optional ErrorCallback errorCallback</em>\n);</pre>\n<div id=\"section_7\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the new <code>FileWriter</code>.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd> </dl> </div><div id=\"section_8\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileEntry"},"NodeIterator":{"title":"NodeIterator","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.nextNode","name":"nextNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.previousNode","name":"previousNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.detach","name":"detach","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.expandEntityReferences","name":"expandEntityReferences","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.pointerBeforeReferenceNode","name":"pointerBeforeReferenceNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.filter","name":"filter","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.referenceNode","name":"referenceNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.whatToShow","name":"whatToShow","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NodeIterator.root","name":"root","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/NodeIterator","specification":"DOM Level 2 Traversal: NodeIterator"},"SVGPathSegClosePath":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"FileWriterCallback":{"title":"FileEntrySync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileEntrySync","skipped":true,"cause":"Suspect title"},"CanvasRenderingContext":{"title":"Interface Compatibility","members":[],"srcUrl":"https://developer.mozilla.org/En/Developer_Guide/Interface_Compatibility","skipped":true,"cause":"Suspect title"},"Uint32Array":{"title":"Uint32Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array","seeAlso":"<li><a title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" class=\" link-https\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Uint32Array</code> type represents an array of 32-bit unsigned integers.</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Uint32Array <a title=\"en/JavaScript typed arrays/Uint32Array#Uint32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array#Uint32Array()\">Uint32Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Uint32Array </code><code><a title=\"en/JavaScript typed arrays/Uint32Array#Uint32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array#Uint32Array%28%29\">Uint32Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Uint32Array </code><code><a title=\"en/JavaScript typed arrays/Uint32Array#Uint32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array#Uint32Array%28%29\">Uint32Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Uint32Array </code><code><a title=\"en/JavaScript typed arrays/Uint32Array#Uint32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array#Uint32Array%28%29\">Uint32Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Uint32Array</code> object.</p>\n<pre>Uint32Array Uint32Array(\n&nbsp; unsigned long length\n);\n\nUint32Array Uint32Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nUint32Array Uint32Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nUint32Array Uint32Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int16Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 32-bit unsigned integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Uint32Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Uint32Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Uint32Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Uint32Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Uint32Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Uint32Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Uint32Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Uint32Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"NodeFilter":{"title":"NodeFilter","examples":["<pre name=\"code\" class=\"js\">var nodeIterator = document.createNodeIterator(\n  // Node to use as root\n  document.getElementById('someId'),\n\n  // Onlly consider nodes that are text nodes (nodeType 3)\n  NodeFilter.SHOW_TEXT,\n\n  // Object containing the function to use for the acceptNode method\n  // of the NodeFilter\n    { acceptNode: function(node) {\n      // Logic to determine whether to accept, reject or skip node\n      // In this case, only accept nodes that have content\n      // other than whitespace\n      if ( ! /^\\s*$/.test(node.data) ) {\n        return NodeFilter.FILTER_ACCEPT;\n      }\n    }\n  },\n  false\n);\n\n// Show the content of every non-empty text node that is a child of root\nvar node;\n\nwhile ((node = iterator.nextNode())) {\n  alert(node.data);\n}</pre>\n        \n<p>Note that in order for the iterator to accept a node, the <a href=\"#acceptNode\">acceptNode</a> function must return <a href=\"#FILTER_ACCEPT\">NodeFilter.FILTER_ACCEPT</a>.</p>"],"members":[{"obsolete":false,"url":"","name":"acceptNode","help":"The accept node method used by the filter is supplied as an object property when constructing the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n."},{"name":"SHOW_ALL","help":"Shows all nodes.","obsolete":false},{"name":"SHOW_ATTRIBUTE","help":"Shows attribute <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr\">Attr</a></code>\n nodes. This is meaningful only when creating a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n with an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr\">Attr</a></code>\n node as its root; in this case, it means that the attribute node will appear in the first position of the iteration or traversal. Since attributes are never children of other nodes, they do not appear when traversing over the document tree.","obsolete":false},{"name":"SHOW_CDATA_SECTION","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/CDATASection\">CDATASection</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_COMMENT","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Comment\">Comment</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_DOCUMENT","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_DOCUMENT_FRAGMENT","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentFragment\">DocumentFragment</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_DOCUMENT_TYPE","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentType\">DocumentType</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_ELEMENT","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Element\">Element</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_ENTITY","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Entity\">Entity</a></code>\n&nbsp;nodes. This is meaningful only when creating a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n with an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Entity\">Entity</a></code>\n node as its root; in this case, it means that the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Entity\">Entity</a></code>\n node will appear in the first position of the traversal. Since entities are not part of the document tree, they do not appear when traversing over the document tree.","obsolete":false},{"name":"SHOW_ENTITY_REFERENCE","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/EntityReference\">EntityReference</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_NOTATION","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Notation\">Notation</a></code>\n nodes. This is meaningful only when creating a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n with a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Notation\">Notation</a></code>\n node as its root; in this case, it means that the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Notation\">Notation</a></code>\n node will appear in the first position of the traversal. Since entities are not part of the document tree, they do not appear when traversing over the document tree.","obsolete":false},{"name":"SHOW_PROCESSING_INSTRUCTION","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/ProcessingInstruction\">ProcessingInstruction</a></code>\n&nbsp;nodes.","obsolete":false},{"name":"SHOW_TEXT","help":"Shows <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Text\">Text</a></code>\n&nbsp;nodes.","obsolete":false},{"url":"","name":"FILTER_ACCEPT","help":"Value returned by the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/NodeFilter.acceptNode\" class=\"new\">NodeFilter.acceptNode()</a></code>\n method when a node should be accepted.","obsolete":false},{"name":"FILTER_REJECT","help":"Value to be returned by the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/NodeFilter.acceptNode\" class=\"new\">NodeFilter.acceptNode()</a></code>\n method when a node should be rejected. The children of rejected nodes are not visited by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n object; this value is treated as \"skip this node and all its children\".","obsolete":false},{"name":"FILTER_SKIP","help":"Value to be returned by <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/NodeFilter.acceptNode\" class=\"new\">NodeFilter.acceptNode()</a></code>\n for nodes to be skipped by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeIterator\">NodeIterator</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TreeWalker\">TreeWalker</a></code>\n object. The children of skipped nodes are still considered. This is treated as \"skip this node but not its children\".","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/NodeFilter","specification":"DOM Level 2 Traversal: NodeFilter"},"WebKitCSSKeyframeRule":{"title":"CSSRule","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/cssRule","skipped":true,"cause":"Suspect title"},"RGBColor":{"title":"color value","members":[],"srcUrl":"https://developer.mozilla.org/en/CSS/color_value","skipped":true,"cause":"Suspect title"},"CanvasRenderingContext2D":{"title":"CanvasRenderingContext2D","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td colspan=\"6\">Methods</td> </tr> <tr> <td><code>arc()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>arcTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>beginPath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>bezierCurveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>clearRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>clip()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>closePath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.5 (1.9.1)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createLinearGradient()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createPattern()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createRadialGradient()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawImage()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawCustomFocusRing()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>\n<span class=\"unimplementedInlineTemplate\">Unimplemented (see<a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=540456\" class=\"external\" title=\"\">\nbug 540456</a>\n)</span>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawSystemFocusRing()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>\n<span class=\"unimplementedInlineTemplate\">Unimplemented (see<a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=540456\" class=\"external\" title=\"\">\nbug 540456</a>\n)</span>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fill()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fillRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fillText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.5 (1.9.1)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>getImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>isPointInPath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>lineTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>measureText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.5 (1.9.1)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>moveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>putImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>quadraticCurveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>rect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>restore()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>rotate()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>save()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>scale()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>scrollPathIntoView()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>setTransform()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.0 (1.9.0)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>stroke()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>strokeRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>strokeText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.5 (1.9.1)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>transform()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.0 (1.9.0)</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>translate()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td colspan=\"6\">Attributes</td> </tr> <tr> <td><code>canvas</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>fillstyle</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>font</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>globalAlpha</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>globalCompositeOperation</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>lineCap</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>lineJoin</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>lineWidth</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>miterLimit</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>shadowBlur</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>shadowColor</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>shadowOffsetX</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>shadowOffsetY</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>strokeStyle</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>textAlign</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>textBaseLine</code></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td colspan=\"6\">Methods</td> </tr> <tr> <td><code>arc()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>arcTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>beginPath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>bezierCurveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>clearRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>clip()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>closePath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createLinearGradient()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createPattern()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>createRadialGradient()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawImage()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawCustomFocusRing()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>drawSystemFocusRing()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fill()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fillRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fillText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>getImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>isPointInPath()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>lineTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>measureText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>moveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>putImageData()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>quadraticCurveTo()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>rect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>restore()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>rotate()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>save()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>scale()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>scrollPathIntoView()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>setTransform()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>stroke()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>strokeRect()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>strokeText()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>transform()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>translate()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td colspan=\"6\">Attributes</td> </tr> <tr> <td><code>canvas</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>fillstyle</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>font</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>globalAlpha</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>globalCompositeOperation</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>lineCap</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>lineJoin</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>lineWidth</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>miterLimit</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>shadowBlur</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>shadowColor</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>shadowOffsetX</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>shadowOffsetY</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>strokeStyle</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>textAlign</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>textBaseLine</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D","specification":"http://www.whatwg.org/specs/web-apps...eringcontext2d","summary":"The bulk of the operations available at present with <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n are available through this interface, returned by a call to <code>getContext()</code> on the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n element, with \"2d\" as its argument.","members":[{"name":"measureText","help":"","idl":"<pre class=\"eval\">nsIDOMTextMetrics measureText(\n  in DOMString text\n);\n</pre>","obsolete":false},{"name":"rotate","help":"","idl":"<pre class=\"eval\">void rotate(\n  in float angle\n);\n</pre>","obsolete":false},{"name":"arcTo","help":"<p>Adds an arc with the given control points and radius, connected to the previous point by a straight line.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x1</code></dt> <dd></dd> <dt><code>y1</code></dt> <dd></dd> <dt><code>x2</code></dt> <dd></dd> <dt><code>y2</code></dt> <dd></dd> <dt><code>radius</code></dt> <dd>The arc's radius.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void arcTo(\n  in float x1,\n  in float y1,\n  in float x2,\n  in float y2,\n  in float radius\n);\n</pre>","obsolete":false},{"name":"transform","help":"","idl":"<pre class=\"eval\">void transform(\n  in float m11,\n  in float m12,\n  in float m21,\n  in float m22,\n  in float dx,\n  in float dy\n);\n</pre>","obsolete":false},{"name":"save","help":"Saves the current drawing style state using a stack so you can revert any change you make to it using restore().","idl":"<pre class=\"eval\">void save();\n</pre>","obsolete":false},{"name":"beginPath","help":"","idl":"<pre class=\"eval\">void beginPath();\n</pre>","obsolete":false},{"name":"strokeRect","help":"<p>Paints a rectangle which it starting point is at <em>(x, y)</em> and has a<em> w</em> width and a <em>h</em> height onto the canvas, using the current stroke style.</p>\n\n<div id=\"section_88\"><span id=\"Parameters_33\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis for the starting point of the rectangle.</dd> <dt><code>y</code></dt> <dd>The y axis for the starting point of the rectangle.</dd> <dt><code>w</code></dt> <dd>The rectangle's width.</dd> <dt><code>h</code></dt> <dd>The rectangle's height.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void strokeRect(\n  in float x,\n  in float y,\n  in float w,\n  in float h\n);\n</pre>","obsolete":false},{"name":"createLinearGradient","help":"","idl":"<pre class=\"eval\">nsIDOMCanvasGradient createLinearGradient(\n  in float x0,\n  in float y0,\n  in float x1,\n  in float y1\n);\n</pre>","obsolete":false},{"name":"arc","help":"<p>Adds an arc to the path which it center is at <em>(x, y)</em> position with radius<em> r</em> starting at <em>startAngle</em> and ending at <em>endAngle</em> going in the given direction by <em>anticlockwise</em> (defaulting to clockwise).</p>\n\n<div id=\"section_11\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis of the coordinate for the arc's center</dd> <dt><code>y</code></dt> <dd>The y axis of the coordinate for the arc's center.</dd> <dt><code>radius</code></dt> <dd>The arc's radius</dd> <dt><code>startAngle</code></dt> <dd>The starting point, measured from the x axis , from which it will be drawed expressed as radians.</dd> <dt><code>endAngle</code></dt> <dd>The end arc's angle to which it will be drawed expressed as radians.</dd> <dt><code>anticlockwise</code> \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Optional from Gecko 2.0</span>\n</dt> <dd>When <code>true</code> draws the arc anticlockwise, otherwise in a clockwise direction.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void arc(\n  in float x,\n  in float y,\n  in float radius,\n  in float startAngle,\n  in float endAngle,\n  in boolean anticlockwise [optional]\n);\n</pre>","obsolete":false},{"name":"bezierCurveTo","help":"","idl":"<pre class=\"eval\">void bezierCurveTo(\n  in float cp1x,\n  in float cp1y,\n  in float cp2x,\n  in float cp2y,\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"closePath","help":"","idl":"<pre class=\"eval\">void closePath();\n</pre>","obsolete":false},{"name":"drawSystemFocusRing","help":"","idl":"<pre class=\"eval\">void drawSystemFocusRing(Element element);\n</pre>","obsolete":false},{"name":"scale","help":"","idl":"<pre class=\"eval\">void scale(\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"createRadialGradient","help":"","idl":"<pre class=\"eval\">nsIDOMCanvasGradient createRadialGradient(\n  in float x0,\n  in float y0,\n  in float r0,\n  in float x1,\n  in float y1,\n  in float r1\n);\n</pre>","obsolete":false},{"name":"lineTo","help":"<p>Connects the last point in the subpath to the <code>x, y</code> coordinates with a straight line.</p>\n\n<div id=\"section_60\"><span id=\"Parameters_20\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis of the coordinate for the end of the line.</dd> <dt><code>y</code></dt> <dd>The y axis of the coordinate for the end of the line.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void lineTo(\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"translate","help":"<p>Moves the origin point of the context to (x, y).</p>\n\n<div id=\"section_94\"><span id=\"Parameters_36\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis for the point to be considered as the origin.</dd> <dt><code>y</code></dt> <dd>The x axis for the point to be considered as the origin.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void translate(\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"moveTo","help":"<p>Moves the starting point of a new subpath to the <strong>(x, y)</strong> coordinates.</p>\n\n<div id=\"section_65\"><span id=\"Parameters_22\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis of the point.</dd> <dt><code>y</code></dt> <dd>The y axis of the point.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void moveTo(\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"scrollPathIntoView","help":"","idl":"<pre class=\"eval\">void scrollPathIntoView();\n</pre>","obsolete":false},{"name":"restore","help":"Restores the drawing style state to the last element on the 'state stack' saved by save()","idl":"<pre class=\"eval\">void restore();\n</pre>","obsolete":false},{"name":"createImageData","help":"","idl":"<pre class=\"eval\">void createImageData(in float width, in float height);\nImageData createImageData(ImageData imagedata);\n</pre>","obsolete":false},{"name":"createPattern","help":"<div id=\"section_31\"><span id=\"Parameters_10\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>image</code></dt> <dd>A DOM <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n to use as the source image for the pattern. This can be any element, although typically you'll use an <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Image\" class=\"new\">Image</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n.</dd> <dt><code>repetition</code></dt> <dd>?</dd>\n</dl>\n</div><div id=\"section_32\"><span id=\"Return_value_3\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new DOM canvas pattern object for use in pattern-based operations.</p>\n</div><div id=\"section_33\"><span id=\"Exceptions_thrown\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>NS_ERROR_DOM_INVALID_STATE_ERR</code> \n<span title=\"(Firefox 10.0 / Thunderbird 10.0)\n\">Requires Gecko 10.0</span>\n</dt> <dd>The specified <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n element for the <code>image</code> parameter is zero-sized (that is, one or both of its dimensions are 0 pixels).</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">nsIDOMCanvasPattern createPattern(\n  in nsIDOMHTMLElement image,\n  in DOMString repetition\n);\n</pre>","obsolete":false},{"name":"putImageData","help":"<h6 class=\"editable\">Compatibility notes</h6>\n<ul> <li>Starting in Gecko 10.0 (Firefox 10.0 / Thunderbird 10.0)\n, non-finite values to any of these parameters causes the call to putImageData() to be silently ignored, rather than throwing an exception.</li>\n</ul>","idl":"<pre class=\"eval\">void putImageData(\n  in long x,\n  in long y,\n  in unsigned long width,\n  in unsigned long height,\n  [array, size_is(dataLen)] in octet dataPtr,\n  in unsigned long dataLen,\n  in boolean hasDirtyRect,\n  in long dirtyX, [optional]\n  in long dirtyY, [optional]\n  in long dirtyWidth, [optional]\n  in long dirtyHeight [optional]\n);\n</pre>","obsolete":false},{"name":"clearRect","help":"<p>Clears the rectangle defined by it starting point at <em>(x, y)</em> and has a <em>w</em> width and a <em>h</em> height.</p>\n\n<div id=\"section_19\"><span id=\"Parameters_5\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis of the coordinate for the rectangle starting point.</dd> <dt><code>y</code></dt> <dd>The y axis of the coordinate for the rectangle starting point.</dd> <dt><code>width</code></dt> <dd>The rectangle's width.</dd> <dt><code>height</code></dt> <dd>The rectangle's height.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void clearRect(\n  in float x,\n  in float y,\n  in float width,\n  in float height\n);\n</pre>","obsolete":false},{"name":"fill","help":"Fills the subpaths with the current fill style.","idl":"<pre class=\"eval\">void fill();\n</pre>","obsolete":false},{"name":"clip","help":"","idl":"<pre class=\"eval\">void clip();\n</pre>","obsolete":false},{"name":"rect","help":"","idl":"<pre class=\"eval\">void rect(\n  in float x,\n  in float y,\n  in float w,\n  in float h\n);\n</pre>","obsolete":false},{"name":"drawCustomFocusRing","help":"","idl":"<pre class=\"eval\">boolean drawCustomFocusRing(Element element);\n</pre>","obsolete":false},{"name":"stroke","help":"Strokes the subpaths with the current stroke style.","idl":"<pre class=\"eval\">void stroke();\n</pre>","obsolete":false},{"name":"setTransform","help":"","idl":"<pre class=\"eval\">void setTransform(\n  in float m11,\n  in float m12,\n  in float m21,\n  in float m22,\n  in float dx,\n  in float dy\n);\n</pre>","obsolete":false},{"name":"fillText","help":"","idl":"<pre class=\"eval\">void fillText(\n  in DOMString text,\n  in float x,\n  in float y,\n  in float maxWidth [optional]\n);\n</pre>","obsolete":false},{"name":"getImageData","help":"<p>Returns an <code><a class=\"external\" rel=\"external\" href=\"http://dev.w3.org/html5/2dcontext/Overview.html#imagedata\" title=\"http://dev.w3.org/html5/2dcontext/Overview.html#imagedata\" target=\"_blank\">ImageData</a></code> object representing the underlying pixel data for the area of the canvas denoted by the rectangle which starts at <em>(sx, sy)</em> and has a <em>sw</em> width and <em>sh</em> height.</p>\n\n<div id=\"section_53\"><span id=\"Parameters_18\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>sx</code></dt> <dd>The x axis of the coordinate for the rectangle startpoint from which the ImageData will be extracted.</dd> <dt><code>sy</code></dt> <dd>The x axis of the coordinate for the rectangle endpoint from which the ImageData will be extracted.</dd> <dt><code>sw</code></dt> <dd>The width of the rectangle from which the ImageData will be extracted.</dd> <dt><code>sh</code></dt> <dd>The height of the rectangle from which the ImageData will be extracted.</dd>\n</dl>\n</div><div id=\"section_54\"><span id=\"Return_value_6\"></span><h6 class=\"editable\">Return value</h6>\n<p>Returns an <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/2011/WD-2dcontext-20110405/#imagedata\" title=\"http://www.w3.org/TR/2011/WD-2dcontext-20110405/#imagedata\" target=\"_blank\">ImageData</a></code> object containing the image data for the given rectangle of the canvas.</p>\n</div>","idl":"<pre class=\"eval\">void getImageData(   \n  in double sx, \n  in double sy, \n  in double sw, \n  in double sh\n);\n</pre>","obsolete":false},{"name":"drawImage","help":"<p>Draws the specified image. This method is available in multiple formats, providing a great deal of flexibility in its use.</p>\n\n<div id=\"section_41\"><span id=\"Parameters_13\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>image</code></dt> <dd>An element to draw into the context; the specification permits any image element (that is, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img\">&lt;img&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n, and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video\">&lt;video&gt;</a></code>\n). Some browsers, including Firefox, let you use any arbitrary element.</dd> <dt><code>dx</code></dt> <dd>The X coordinate in the destination canvas at which to place the top-left corner of the source <code>image</code>.</dd> <dt><code>dy</code></dt> <dd>The Y coordinate in the destination canvas at which to place the top-left corner of the source <code>image</code>.</dd> <dt><code>dw</code></dt> <dd>The width to draw the <code>image</code> in the destination canvas. This allows scaling of the drawn image. If not specified, the image is not scaled in width when drawn.</dd> <dt><code>dh</code></dt> <dd>The height to draw the <code>image</code> in the destination canvas. This allows scaling of the drawn image. If not specified, the image is not scaled in height when drawn.</dd> <dt><code>sx</code></dt> <dd>The X coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.</dd> <dt><code>sy</code></dt> <dd>The Y coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.</dd> <dt><code>sw</code></dt> <dd>The width of the sub-rectangle of the source image to draw into the destination context. If not specified, the entire rectangle from the coordinates specified by <code>sx</code> and <code>sy</code> to the bottom-right corner of the image is used. If you specify a negative value, the image is flipped horizontally when drawn.</dd> <dt><code>sh</code></dt> <dd>The height of the sub-rectangle of the source image to draw into the destination context. If you specify a negative value, the image is flipped vertically when drawn.</dd>\n</dl>\n<p>The diagram below illustrates the meanings of the various parameters.</p>\n<p><img alt=\"drawImage.png\" class=\"internal default\" src=\"https://developer.mozilla.org/@api/deki/files/5494/=drawImage.png\"></p>\n</div><div id=\"section_42\"><span id=\"Exceptions_thrown_2\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>INDEX_SIZE_ERR</code></dt> <dd>If the canvas or source rectangle width or height is zero.</dd> <dt><code>INVALID_STATE_ERR</code></dt> <dd>The image has no image data.</dd> <dt><code>TYPE_MISMATCH_ERR</code></dt> <dd>The specified source element isn't supported. This is not thrown by Firefox, since any element may be used as a source image.</dd>\n</dl>\n</div><div id=\"section_43\"><span id=\"Compatibility_notes\"></span><h6 class=\"editable\">Compatibility notes</h6>\n<ul> <li>Prior to Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n, Firefox threw an exception if any of the coordinate values was non-finite or zero. As per the specification, this no longer happens.</li> <li>Support for flipping the image by using negative values for <code>sw</code> and <code>sh</code> was added in Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n.</li> <li>Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n now correctly supports CORS for drawing images across domains without <a title=\"en/CORS_Enabled_Image#What_is_a_.22tainted.22_canvas.3F\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CORS_Enabled_Image#What_is_a_.22tainted.22_canvas.3F\">tainting the canvas</a>.</li>\n</ul>\n</div>","idl":"<pre class=\"eval\">void drawImage(\n  in nsIDOMElement image,\n  in float dx,\n  in float dy\n);\n\nvoid drawImage(\n  in nsIDOMElement image,\n  in float dx,\n  in float dy,\n  in float sw,\n  in float sh\n);\n\nvoid drawImage(\n  in nsIDOMElement image,\n  in float sx,\n  in float sy,\n  in float sw,\n  in float sh,\n  in float dx, \n  in float dy,\n  in float dw,\n  in float dh\n);\n</pre>","obsolete":false},{"name":"fillRect","help":"<p>Draws a filled rectangle at <em>(x, y) </em>position whose size is determined by <em>width</em> and <em>height</em>.</p>\n\n<div id=\"section_49\"><span id=\"Parameters_16\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The x axis of the coordinate for the rectangle starting point.</dd> <dt><code>y</code></dt> <dd>The y axis of the coordinate for the rectangle starting point.</dd> <dt><code>width</code></dt> <dd>The rectangle's width.</dd> <dt><code>height</code></dt> <dd>The rectangle's height.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void fillRect(\n  in float x,\n  in float y,\n  in float width,\n  in float height\n);\n</pre>","obsolete":false},{"name":"isPointInPath","help":"<p>Reports whether or not the specified point is contained in the current path.</p>\n\n<div id=\"section_56\"><span id=\"Parameters_19\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>x</code></dt> <dd>The X coordinate of the point to check.</dd> <dt><code>y</code></dt> <dd>The Y coordinate of the point to check.</dd>\n</dl>\n</div><div id=\"section_57\"><span id=\"Return_value_7\"></span><h6 class=\"editable\">Return value</h6>\n<p><code>true</code> if the specified point is contained in the current path; otherwise <code>false</code>.</p>\n</div><div id=\"section_58\"><span id=\"Compatibility_notes_2\"></span><h6 class=\"editable\">Compatibility notes</h6>\n<ul> <li>Prior to Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n, this method incorrectly failed to multiply the specified point's coordinates by the current transformation matrix before comparing it to the path. Now this method works correctly even if the context is rotated, scaled, or otherwise transformed.</li>\n</ul>\n</div>","idl":"<pre class=\"eval\">boolean isPointInPath(\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"strokeText","help":"","idl":"<pre class=\"eval\">void strokeText(\n  in DOMString text,\n  in float x,\n  in float y,\n  in float maxWidth [optional]\n);\n</pre>","obsolete":false},{"name":"quadraticCurveTo","help":"","idl":"<pre class=\"eval\">void quadraticCurveTo(\n  in float cpx,\n  in float cpy,\n  in float x,\n  in float y\n);\n</pre>","obsolete":false},{"name":"DRAWWINDOW_DRAW_CARET","help":"Show the caret if appropriate when drawing. \n<span title=\"(Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\">Requires Gecko 1.9.1</span>","obsolete":false},{"name":"DRAWWINDOW_DO_NOT_FLUSH","help":"Do not flush pending layout notifications that could otherwise be batched up. \n<span title=\"(Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\">Requires Gecko 1.9.1</span>","obsolete":false},{"name":"DRAWWINDOW_DRAW_VIEW","help":"Draw scrollbars and scroll the viewport if they are present. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"name":"DRAWWINDOW_USE_WIDGET_LAYERS","help":"Use the widget layer manager if available. This means hardware acceleration may be used, but it might actually be slower or lower quality than normal. It will however more accurately reflect the pixels rendered to the screen. \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"DRAWWINDOW_ASYNC_DECODE_IMAGES","help":"Do not synchronously decode images - draw what we have. \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"name":"canvas","help":"Back-reference to the canvas element for which this context was created. <strong>Read only.</strong>","obsolete":false},{"name":"fillStyle","help":"Color or style to use inside shapes. Default <code>#000</code> (black).","obsolete":false},{"name":"font","help":"Default value <code>10px sans-serif</code>.","obsolete":false},{"name":"globalAlpha","help":"Alpha value that is applied to shapes and images before they are composited onto the canvas. Default <code>1.0</code> (opaque).","obsolete":false},{"name":"globalCompositeOperation","help":"With <code>globalAplpha</code> applied this sets how shapes and images are drawn onto the existing bitmap. Possible values: <ul> <li><code>source-atop</code></li> <li><code>source-in</code></li> <li><code>source-out</code></li> <li><code>source-over</code> (default)</li> <li><code>destination-atop</code></li> <li><code>destination-in</code></li> <li><code>destination-out</code></li> <li><code>destination-over</code></li> <li><code>lighter</code></li> <li><code>xor</code></li> </ul>","obsolete":false},{"name":"lineCap","help":"Type of endings on the end of lines. Possible values: <code>butt</code> (default), <code>round</code>, <code>square</code>","obsolete":false},{"name":"lineJoin","help":"Defines the type of corners where two lines meet. Possible values: <code>round</code>, <code>bevel</code>, <code>miter</code> (default)","obsolete":false},{"name":"lineWidth","help":"Width of lines. Default <code>1.0</code>","obsolete":false},{"name":"miterLimit","help":"Default <code>10</code>.","obsolete":false},{"name":"shadowBlur","help":"Specifies the blurring effect. Default <code>0</code>","obsolete":false},{"name":"shadowColor","help":"Color of the shadow. Default fully-transparent black.","obsolete":false},{"name":"shadowOffsetX","help":"Horizontal distance the shadow will be offset. Default 0.","obsolete":false},{"name":"shadowOffsetY","help":"Vertical distance the shadow will be offset. Default 0.","obsolete":false},{"name":"strokeStyle","help":"Color or style to use for the lines around shapes. Default <code>#000</code> (black).","obsolete":false},{"name":"textAlign","help":"Possible values: <code>start</code> (default), <code>end</code>, <code>left</code>, <code>right</code> or <code>center</code>.","obsolete":false},{"name":"textBaseLine","help":"Possible values: <code>top</code>, <code>hanging</code>, <code>middle</code>, <code>alphabetic</code> (default), <code>ideographic</code>, <code>bottom</code>","obsolete":false},{"name":"webkitCurrentTransform","help":"Sets or gets the current transformation matrix. \n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Requires Gecko 7.0</span>","obsolete":false},{"name":"webkitCurrentTransformInverse","help":"Set or gets the current inversed transformation matrix. \n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Requires Gecko 7.0</span>","obsolete":false},{"name":"webkitDash","help":"An array which specifies the lengths of alternating dashes and gaps. \n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Requires Gecko 7.0</span>","obsolete":false},{"name":"webkitDashOffset","help":"Specifies where to start a dasharray on a line. \n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Requires Gecko 7.0</span>","obsolete":false},{"name":"webkitFillRule","help":"The <a class=\"external\" title=\"http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t\" rel=\"external\" href=\"http://cairographics.org/manual/cairo-cairo-t.html#cairo-fill-rule-t\" target=\"_blank\">fill rule</a> to use. This must be one of <code>evenodd</code> or <code>nonzero</code> (default).","obsolete":false},{"name":"webkitImageSmoothingEnabled","help":"Image smoothing mode; if disabled, images will not be smoothed if scaled. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"name":"webkitTextStyle","help":"<span title=\"(Firefox 3)\n\">Requires Gecko 1.9</span>\n \n\n<span class=\"deprecatedInlineTemplate\" title=\"\">Deprecated</span>\n\n Deprecated in favor of the HTML5 <code>font</code> attribute described above.","obsolete":true},{"name":"webkitLineDash","help":"An array which specifies the lengths of alternating dashes and gaps.","obsolete":false},{"name":"webkitLineDashOffset","help":"Specifies where to start a dasharray on a line.","obsolete":false}]},"StyleMedia":{"title":"style.media","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/style.media","skipped":true,"cause":"Suspect title"},"PerformanceTiming":{"title":"Navigation Timing","members":[],"srcUrl":"https://developer.mozilla.org/en/Navigation_timing","skipped":true,"cause":"Suspect title"},"DOMSettableTokenList":{"title":"HTMLOutputElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLOutputElement","skipped":true,"cause":"Suspect title"},"SVGDescElement":{"title":"SVGDescElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGDescElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/desc\">&lt;desc&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGDescElement"},"HTMLEmbedElement":{"title":"HTMLEmbedElement","summary":"<strong>Note:</strong>&nbsp;This topic describes the HTMLEmbedElement interface as defined in the HTML5 standard. It does not address earlier, non-standardized version of the interface.","members":[{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/embed#attr-height\">height</a></code>\n HTML&nbsp;attribute, containing the displayed height of the resource.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/embed#attr-src\">src</a></code>\n HTML&nbsp;attribute, containing the address of the resource.","obsolete":false},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/embed#attr-type\">type</a></code>\n HTML&nbsp;attribute, containing the type of the resource.","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/embed#attr-width\">width</a></code>\n HTML&nbsp;attribute, containing the displayed width of the resource.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLEmbedElement"},"CharacterData":{"title":"CharacterData","summary":"<code><a title=\"En/DOM/Text\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Text\">Text</a></code>, <code><a title=\"En/DOM/Comment\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Comment\">Comment</a></code>, and <code><a title=\"en/DOM/CDATASection\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CDATASection\">CDATASection</a></code> all implement CharacterData, which in turn also implements <code><a class=\"internal\" title=\"En/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>. See <code>Node</code> for the remaining methods, properties, and constants.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/CharacterData.data","name":"data","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/CharacterData.length","name":"length","help":""}],"srcUrl":"https://developer.mozilla.org/En/DOM/CharacterData","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-FF21A306"},"IDBFactory":{"title":"IDBFactory","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td><code>open()</code> old specification</td> <td>12\n<span title=\"prefix\">webkit</span></td> <td>4.0 (2.0)\n\n<span title=\"prefix\">moz</span> until 9.0 (9.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>open()</code> new specification</td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>cmp ()</code></td> <td>16\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>deleteDatabase()</code></td> <td>17\n<span title=\"prefix\">webkit</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<p>In the following code snippet, we open a database asynchronously and make a request. Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nif ('webkitIndexedDB' in window) {\n   window.indexedDB = window.webkitIndexedDB;   \n} else if ('mozIndexedDB' in window) {\n   window.indexedDB = window.mozIndexedDB;\n... \n\n//Open a database called myAwesomeDatabase\nvar request = window.indexedDB.open('myAwesomeDatabase');\n//When a success event happens, do something.\nrequest.onsuccess = function(event) {\n        var db = this.result;\n        var transaction = db.transaction([], IDBTransaction.READ_ONLY);\n        var curRequest = transaction.objectStore('ObjectStore Name').openCursor();\n        curRequest.onsuccess = ...;\n    };\n//When an error event happens, do something else.\nrequest.onerror = function(event) {\n         ...;\n    };</pre>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBFactory","summary":"<p>The <code>IDBFactory</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB&nbsp;API</a> lets applications asynchronously access the indexed databases. The object that implements the interface is&nbsp; <code>window.indexedDB</code>. You open—that is, create and access—and delete a database with the object and not directly with <code>IDBFactory</code>.</p>\n<p>This interface still has vendor prefixes, that is to say, you have to make calls with <code>mozIndexedDB.open()</code> for Firefox and <code>webkitIndexedDB.open()</code> for Chrome.</p>","members":[{"name":"open","help":"<div class=\"warning\"><strong>Warning:</strong> The description documents the old specification. Some browsers still implement this method. The specifications have changed, but the changes have not yet been implemented by all browser. See the compatibility table for more information.</div>\n<p>Request opening a <a title=\"en/IndexedDB#gloss database connection\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_database_connection\">connection to a database</a>. The method returns &nbsp;an IDBRequest object&nbsp;immediately, and performs the opening operation asynchronously.&nbsp;</p>\n<p>The opening operation—which is performed in a separate thread—consists of the following steps:</p>\n<ol> <li>If a database named <code>myAwesomeDatabase</code> already exists: <ul> <li>Wait until any existing <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transactions have finished.</li> <li>If the database has a deletion pending, wait until it has been deleted.</li> </ul> </li> <li>If no database with that name exists, create a database with the provided name, with the empty string as its version, and no object stores.</li> <li>Create a connection to the database.</li>\n</ol>\n<p>If the operation is successful, an <a title=\"en/IndexedDB/IDBSuccessEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent\">IDBSuccessEvent</a> is fired on the request object that is returned from this method, with its <a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a> attribute set to the new <a title=\"en/IndexedDB/IDBDatabase\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase\">IDBDatabase</a> object for the connection.</p>\n<p>If an error occurs while the database connection is being opened, then an <a title=\"en/IndexedDB/IDBErrorEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent\">error event</a> is fired on the request object returned from this method, with its <a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\"><code>code</code></a> and&nbsp; <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code> set to appropriate values.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the database.</dd> <dt>version</dt> <dd>The version of the database.</dd>\n</dl>\n</div><div id=\"section_6\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this request are fired. In the latest draft of the specification, which has not yet been implemented by browsers, the returned object is <code>IDBOpenRequest</code>.</dd>\n</dl>\n</div>","idl":"<pre>IDBRequest open(\n&nbsp; in DOMString name\n);</pre>","obsolete":false},{"name":"cmp","help":"<p>Compares two values as keys to determine equality and ordering for IndexedDB operations, such as storing and iterating. Do not use this method for comparing arbitrary JavaScript values, because many JavaScript values are either not valid IndexedDB keys (booleans and objects, for example) or are treated as equivalent IndexedDB keys (for example, since IndexedDB ignores arrays with non-numeric properties and treats them as empty arrays, so any non-numeric array are treated as equivalent).</p>\n<p>This throws an exception if either of the values is not a valid key. &nbsp;</p>\n\n<div id=\"section_11\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>first</dt> <dd>The first key to compare.</dd> <dt>second</dt> <dd>The second key to compare.</dd>\n</dl>\n</div><div id=\"section_12\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt>Integer</dt> <dd> <table class=\"standard-table\" width=\"434\"> <thead> <tr> <th scope=\"col\" width=\"216\">Returned value</th> <th scope=\"col\" width=\"206\">Description</th> </tr> </thead> <tbody> <tr> <td>-1</td> <td>1st key &lt; 2nd</td> </tr> <tr> <td>0</td> <td>1st key = 2nd</td> </tr> <tr> <td>1</td> <td>1st key &gt; 2nd</td> </tr> </tbody> </table> </dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<br>\n<br>\n<br><table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NON_TRANSIENT_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NON_TRANSIENT_ERR\">NON_TRANSIENT_ERR</a></code></td> <td>One of the supplied keys was not a valid key.</td> </tr> </thead> <tbody> </tbody>\n</table>\n</div>","idl":"<pre>int cmp(\n  in any first, in any second\n);\n</pre>","obsolete":false},{"name":"deleteDatabase","help":"<p>Request deleting a database. The method returns&nbsp;&nbsp;an IDBRequest object&nbsp;immediately, and performs the deletion operation&nbsp;asynchronously.</p>\n<p>The deletion operation (performed in a different thread) consists of the following steps:</p>\n<ol> <li>If there is no database with the given name, exit successfully.</li> <li>Fire an <a title=\"en/IndexedDB/IDBVersionChangeEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeEvent\">IDBVersionChangeEvent</a> at all connection objects connected to the named database, with <code><a title=\"en/IndexedDB/IDBVersionChangeEvent#attr version\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeEvent#attr_version\">version</a></code> set to <code>null</code>.</li> <li>If any connection objects connected to the database are still open, fire a <code>blocked</code> event at the request object returned by the <code>deleteDatabase</code> method, using <a title=\"en/IndexedDB/IDBVersionChangeEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeEvent\">IDBVersionChangeEvent</a> with <code><a title=\"en/IndexedDB/IDBVersionChangeEvent#attr version\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeEvent#attr_version\">version</a></code> set to <code>null</code>.</li> <li>Wait until all open connections to the database are closed.</li> <li>Delete the database.</li>\n</ol>\n<p>If the database is successfully deleted, then an <a title=\"en/IndexedDB/IDBSuccessEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent\">IDBSuccessEvent</a> is fired on the request object returned from this method, with its <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to <code>null</code>.</p>\n<p>If an error occurs while the database is being deleted, then an error event is fired on the request object that is returned from this method, with its <code><a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a></code> and <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code> set to appropriate values.</p>\n<p><strong>Tip:</strong> If the browser you are using hasn't implemented this yet, you can delete the object stores one by one, thus effectively removing the database.</p>\n\n<div id=\"section_8\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the database.</dd>\n</dl>\n</div><div id=\"section_9\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this request are fired. In the latest draft of the specification, which has not yet been implemented by browsers, the returned object is <code>IDBOpenRequest</code>.</dd>\n</dl>\n</div>","idl":"<pre>IDBRequest deleteDatabase(\n  in DOMString name\n);\n</pre>","obsolete":false}]},"SVGLinearGradientElement":{"title":"SVGLinearGradientElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGLinearGradientElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/linearGradient\">&lt;linearGradient&gt;</a></code>\n element.","members":[{"name":"x1","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/x1\">x1</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/linearGradient\">&lt;linearGradient&gt;</a></code>\n element.","obsolete":false},{"name":"y1","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/y1\">y1</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/linearGradient\">&lt;linearGradient&gt;</a></code>\n element.","obsolete":false},{"name":"x2","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/x2\">x2</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/linearGradient\">&lt;linearGradient&gt;</a></code>\n element.","obsolete":false},{"name":"y2","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/y2\">y2</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/linearGradient\">&lt;linearGradient&gt;</a></code>\n element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGLinearGradientElement"},"AudioParam":{"title":"Using the Right Markup to Invoke Plugins","members":[],"srcUrl":"https://developer.mozilla.org/en/using_the_right_markup_to_invoke_plugins","skipped":true,"cause":"Suspect title"},"HTMLFontElement":{"title":"font","summary":"Obsolete","members":[{"obsolete":false,"url":"","name":"face","help":"This attribute contains a comma-sperated list of one or more font names. The document text in the default style is rendered in the first font face that the client's browser supports. If no font listed is installed on the local system, the browser typically defaults to the proportional or fixed-width font for that system."},{"obsolete":false,"url":"","name":"color","help":"This attribute sets the text color using either a named color or a color specified in the hexadecimal #RRGGBB format."},{"obsolete":false,"url":"","name":"size","help":"This attribute specifies the font size as either a numeric or relative value. Numeric values range from <span>1</span> to <span>7</span> with <span>1</span> being the smallest and <span>3</span> the default. It can be defined using a relative value, like <span>+2</span> or <span>-3</span>, which set it relative to the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/basefont#attr-size\">size</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/basefont\">&lt;basefont&gt;</a></code>\n element, or relative to <span>3</span>, the default value, if none does exist."}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/font"},"WebKitFlags":{"title":"JSClass.flags","summary":"<p>The <strong><code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass\">JSClass</a>.flags</code></strong> field allows an application to enable optional <code>JSClass</code> features on a per-class basis. The <code>flags</code> field is of type <code>uint32</code>. Its value is the logical OR of zero or more of the following constants:</p>\n<table class=\"fullwidth-table\"> <tbody> <tr> <th>Flag</th> <th>Meaning</th> </tr> <tr> <td> <p><code>JSCLASS_HAS_PRIVATE</code></p> </td> <td> <p>This class uses private data. If this flag is set, each instance of the class has a field for private data. The field can be accessed using <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_GetPrivate\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetPrivate\">JS_GetPrivate</a></code> and <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_SetPrivate\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_SetPrivate\">JS_SetPrivate</a></code>.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_HAS_PRIVATE\">MXR ID Search for <code>JSCLASS_HAS_PRIVATE</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_NEW_ENUMERATE</code></p> </td> <td> <p>This class's <code>enumerate</code> hook is actually a <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass.enumerate\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.enumerate\">JSNewEnumerateOp</a></code>, not a <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSEnumerateOp\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSEnumerateOp\">JSEnumerateOp</a></code>.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_NEW_ENUMERATE\">MXR ID Search for <code>JSCLASS_NEW_ENUMERATE</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_NEW_RESOLVE</code></p> </td> <td> <p>This class's <code>resolve</code> hook is actually a <code><a title=\"En/SpiderMonkey/JSAPI_Reference/JSNewResolveOp\" rel=\"internal\" href=\"https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Reference/JSNewResolveOp\">JSNewResolveOp</a></code>, not a <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass.resolve\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.resolve\">JSResolveOp</a></code>.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_NEW_RESOLVE\">MXR ID Search for <code>JSCLASS_NEW_RESOLVE</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_PRIVATE_IS_NSISUPPORTS</code></p> </td> <td> <p>Mozilla extension. The private field of each object of this class points to an <a title=\"en/XPCOM\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM\">XPCOM</a> object (see <code><a title=\"en/nsISupports\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports\">nsISupports</a></code>). This is only meaningful if SpiderMonkey is built with <a title=\"en/XPConnect\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPConnect\">XPConnect</a> and the <code>JSCLASS_HAS_PRIVATE</code> flag is also set.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_PRIVATE_IS_NSISUPPORTS\">MXR ID Search for <code>JSCLASS_PRIVATE_IS_NSISUPPORTS</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_SHARE_ALL_PROPERTIES</code></p> </td> <td> <p>Instructs SpiderMonkey to automatically give all properties of objects of this class the <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_GetPropertyAttributes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetPropertyAttributes\">JSPROP_SHARED</a></code> attribute.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_SHARE_ALL_PROPERTIES\">MXR ID Search for <code>JSCLASS_SHARE_ALL_PROPERTIES</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_NEW_RESOLVE_GETS_START</code></p> </td> <td> <p>The <code>resolve</code> hook expects to receive the starting object in the prototype chain passed in via the <code>*objp</code> in/out parameter. (This is meaningful only if the <code>JSCLASS_NEW_RESOLVE</code> flag is also set.)</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_NEW_RESOLVE_GETS_START\">MXR ID Search for <code>JSCLASS_NEW_RESOLVE_GETS_START</code></a>\n</p> </td> </tr> <tr> <td id=\"JSCLASS_CONSTRUCT_PROTOTYPE\"> <p><code>JSCLASS_CONSTRUCT_PROTOTYPE</code></p> </td> <td> <p>Instructs <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_InitClass\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_InitClass\">JS_InitClass</a></code> to invoke the constructor when creating the class prototype.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_CONSTRUCT_PROTOTYPE\">MXR ID Search for <code>JSCLASS_CONSTRUCT_PROTOTYPE</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_HAS_RESERVED_SLOTS(n)</code></p> </td> <td> <p>Indicates that instances of this class have <code>n</code> <em>reserved slots</em>. <code>n</code> is an integer in the range <code>[0..255]</code>. The slots initially contain unspecified valid <code>jsval</code> values. They can be accessed using <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_GetReservedSlot\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetReservedSlot\">JS_GetReservedSlot</a></code> and <code><a title=\"en/JS_SetReservedSlot\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetReservedSlot\">JS_SetReservedSlot</a></code>.</p> <p>(The <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass.reserveSlots\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.reserveSlots\">JSClass.reserveSlots</a></code> hook also allocates reserved slots to objects.)</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_HAS_RESERVED_SLOTS\">MXR ID Search for <code>JSCLASS_HAS_RESERVED_SLOTS</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_IS_EXTENDED</code></p> </td> <td> <p>Indicates that this <code>JSClass</code> is really a <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSExtendedClass\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSExtendedClass\">JSExtendedClass</a></code>.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_IS_EXTENDED\">MXR ID Search for <code>JSCLASS_IS_EXTENDED</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_MARK_IS_TRACE</code></p> </td> <td> <p>Indicates that the <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass.mark\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.mark\">mark</a></code> hook implements the new <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSTraceOp\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSTraceOp\">JSTraceOp</a></code> signature instead of the old <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JSClass.mark\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.mark\">JSMarkOp</a></code> signature. This is recommended for all new code that needs custom marking.</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_MARK_IS_TRACE\">MXR ID Search for <code>JSCLASS_MARK_IS_TRACE</code></a>\n</p> </td> </tr> <tr> <td> <p><code>JSCLASS_GLOBAL_FLAGS</code></p> </td> <td> <p>This flag is only relevant for the class of an object that is used as a global object. (ECMAScript specifies a single global object, but in SpiderMonkey the global object is the last object in the <a title=\"en/SpiderMonkey/JSAPI_Reference/JS_GetScopeChain\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_GetScopeChain\">scope chain</a>, which can be different objects at different times. This is actually quite subtle. <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_ExecuteScript\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_ExecuteScript\">JS_ExecuteScript</a></code> and similar APIs set the global object for the code they execute. <code><a title=\"en/SpiderMonkey/JSAPI_Reference/JS_SetGlobalObject\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_SetGlobalObject\">JS_SetGlobalObject</a></code> sets an object which is sometimes used as the global object, as a last resort.)</p> <p>Enable standard ECMAScript behavior for setting the prototype of certain objects, such as <code>Function</code> objects. If the global object does not have this flag, then scripts may cause nonstandard behavior by replacing standard constructors or prototypes (such as <code>Function.prototype</code>.)</p> <p>Objects that can end up with the wrong prototype object, if this flag is not present, include: <code>arguments</code> objects (\n<a rel=\"custom\" href=\"http://bclary.com/2004/11/07/#a-10.1.8\">§10.1.8</a>\n specifies \"the original <code>Object</code> prototype\"), <code>Function</code> objects (\n<a rel=\"custom\" href=\"http://bclary.com/2004/11/07/#a-13.2\">§13.2</a>\n specifies \"the original <code>Function</code> prototype\"), and objects created by many standard constructors (\n<a rel=\"custom\" href=\"http://bclary.com/2004/11/07/#a-15.4.2.1\">§15.4.2.1</a>\n and others).</p> <p><a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/ident?i=JSCLASS_GLOBAL_FLAGS\">MXR ID Search for <code>JSCLASS_GLOBAL_FLAGS</code></a>\n</p> </td> </tr> </tbody>\n</table>\n<p>SpiderMonkey reserves a few other flags for its internal use. They are <code>JSCLASS_IS_ANONYMOUS</code>, <code>JSCLASS_IS_GLOBAL</code>, and <code>JSCLASS_HAS_CACHED_PROTO</code>. JSAPI applications should not use these flags.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/JSClass.flags"},"SVGTransformList":{"title":"SVGTransformList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>length</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>\n11.5</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>length</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGTransformList</code> defines a list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTransform\">SVGTransform</a></code>\n objects.</p>\n<p>An <code>SVGTransformList</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>\n<div class=\"geckoVersionNote\"> <p>\n</p><div class=\"geckoVersionHeading\">Gecko 9.0 note<div>(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n</div></div>\n<p></p> <p>Starting in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n,the <code>SVGTransformList</code> DOM interface is now indexable and can be accessed like Arrays</p>\n</div>","members":[{"name":"clear","help":"<p>Clears all existing current items from the list, with the result being an empty list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"initialize","help":"<p>Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter. If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. The return value is the item inserted into the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"getItem","help":"<p>Returns the specified item from the list. The returned item is the item itself and not a copy. Any changes made to the item are immediately reflected in the list. The first item is number&nbsp;0.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"insertItemBefore","help":"<p>Inserts a new item into the list at the specified position. The first item is number 0. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to insert before is before the removal of the item. If the <code>index</code> is equal to 0, then the new item is inserted at the front of the list. If the index is greater than or equal to <code>numberOfItems</code>, then the new item is appended to the end of the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"replaceItem","help":"<p>Replaces an existing item in the list with a new item. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to replace is before the removal of the item.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"removeItem","help":"<p>Removes an existing item from the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"appendItem","help":"<p>Inserts a new item at the end of the list. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"numberOfItem","help":"The number of items in the list.","obsolete":false},{"name":"length","help":"The number of items in the list.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGTransformList"},"Metadata":{"title":"metadata","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> \n<tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n8.0</td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","summary":"Metadata is structured data about data. Metadata which is included with SVG content should be specified within <code>metadata</code> elements. The contents of the <code>metadata</code> should be elements from other XML namespaces such as RDF, FOAF, etc.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/metadata"},"HTMLMeterElement":{"title":"meter","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>6.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=555985\" class=\"external\" title=\"\">\nbug 555985</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td>11.0</td> <td>\n<em><a rel=\"custom\" href=\"http://nightly.webkit.org/\">Nightly build</a></em></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=555985\" class=\"external\" title=\"\">\nbug 555985</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td>11.0</td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<div id=\"section_5\"><span id=\"Simple_example\"></span><h4 class=\"editable\">Simple example</h4>\n\n          <pre name=\"code\" class=\"xml\">&lt;p&gt;Heat the oven to &lt;meter min=\"200\" max=\"500\" value=\"350\"&gt;350 degrees&lt;/meter&gt;.&lt;/p&gt;</pre>\n        \n<p>On Google Chrome, the resulting meter looks like this:</p>\n<p><img class=\"internal default\" alt=\"meter1.png\" src=\"https://developer.mozilla.org/@api/deki/files/4940/=meter1.png\"></p>\n</div><div id=\"section_6\"><span id=\"Hilo_Range_example\"></span><span id=\"High_and_Low_range_example\"></span><h4 class=\"editable\">High and Low range example</h4>\n<p>Note that in this example the <strong>min</strong> attribute is omitted; this is allowed, as it will default to 0.</p>\n\n          <pre name=\"code\" class=\"xml\">&lt;p&gt;He got a &lt;meter low=\"69\" high=\"80\" max=\"100\" value=\"84\"&gt;B&lt;/meter&gt; on the exam.&lt;/p&gt;</pre>\n        \n<p>On Google Chrome, the resulting meter looks like this:</p>\n<p><img class=\"internal default\" alt=\"meter2.png\" src=\"https://developer.mozilla.org/@api/deki/files/4941/=meter2.png\"></p>\n</div>"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/meter","summary":"<p>The HTML <em>meter</em> element (<code>&lt;meter&gt;</code>) represents either a scalar value within a known range or a fractional value.</p>\n<div class=\"note\"><strong>Usage note: </strong>Unless the <strong>value</strong> attribute is between 0 and 1 (inclusive), the <strong>min</strong> attribute and <strong>max</strong> attribute should define the range so that the <strong>value</strong> attribute's value is within it.</div>","members":[{"obsolete":false,"url":"","name":"min","help":"The lower numeric bound of the measured range. This must be less than the maximum value (<strong>max</strong> attribute), if specified. If unspecified, the minimum value is 0."},{"obsolete":false,"url":"","name":"form","help":"This attribute associates the element with a <code>form</code> element that has ownership of the <code>meter</code> element. For example, a <code>meter</code> might be displaying a range corresponding to an <code>input</code> element of <strong>type</strong> <em>number</em>. This attribute is only used if the <code>meter</code> element is being used as a form-associated element; even then, it may be omitted if the element appears as a descendant of a <code>form</code> element."},{"obsolete":false,"url":"","name":"max","help":"The upper numeric bound of the measured range. This must be greater than the minimum value (<strong>min</strong> attribute), if specified. If unspecified, the maximum value is 1."},{"obsolete":false,"url":"","name":"optimum","help":"This attribute indicates the optimal numeric value. It must be within the range (as defined by the <strong>min</strong> attribute and <strong>max</strong> attribute). When used with the <strong>low</strong> attribute and <strong>high</strong> attribute, it gives an indication where along the range is considered preferable. For example, if it is between the <strong>min</strong> attribute and the <strong>low</strong> attribute, then the lower range is considered preferred."},{"obsolete":false,"url":"","name":"high","help":"The lower numeric bound of the high end of the measured range. This must be less than the maximum value (<strong>max</strong> attribute), and it also must be greater than the low value and minimum value (<strong>low</strong> attribute and <strong>min</strong> attribute, respectively), if any are specified. If unspecified, or if greater than the maximum value, the <strong>high</strong> value is equal to the maximum value."},{"obsolete":false,"url":"","name":"low","help":"The upper numeric bound of the low end of the measured range. This must be greater than the minimum value (<strong>min</strong> attribute), and it also must be less than the high value and maximum value (<strong>high</strong> attribute and <strong>max</strong> attribute, respectively), if any are specified. If unspecified, or if less than the minimum value, the <strong>low</strong> value is equal to the minimum value."},{"obsolete":false,"url":"","name":"value","help":"The current numeric value. This must be between the minimum and maximum values (<strong>min</strong> attribute and <strong>max</strong> attribute) if they are specified. If unspecified or malformed, the value is 0. If specified, but not within the range given by the <strong>min</strong> attribute and <strong>max</strong> attribute, the value is equal to the nearest end of the range."}]},"SVGStringList":{"title":"SVGStringList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>12.0 (12)\n</td> <td>9.0</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>12.0 (12)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGStringList</code> defines a list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMString\">DOMString</a></code>\n objects.</p>\n<p>An <code>SVGStringList</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"clear","help":"<p>Clears all existing current items from the list, with the result being an empty list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"initialize","help":"<p>Clears all existing current items from the list and re-initializes the list to hold the single item specified by the parameter. If the inserted item is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. The return value is the item inserted into the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"getItem","help":"<p>Returns the specified item from the list. The returned item is the item itself and not a copy. Any changes made to the item are immediately reflected in the list. The first item is number&nbsp;0.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"insertItemBefore","help":"<p>Inserts a new item into the list at the specified position. The first item is number 0. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to insert before is before the removal of the item. If the <code>index</code> is equal to 0, then the new item is inserted at the front of the list. If the index is greater than or equal to <code>numberOfItems</code>, then the new item is appended to the end of the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"replaceItem","help":"<p>Replaces an existing item in the list with a new item. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy. If the item is already in this list, note that the index of the item to replace is before the removal of the item.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"removeItem","help":"<p>Removes an existing item from the list.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>INDEX_SIZE_ERR</code> is raised if the index number is greater than or equal to <code>numberOfItems</code>.</li> </ul>","obsolete":false},{"name":"appendItem","help":"<p>Inserts a new item at the end of the list. If <code>newItem</code> is already in a list, it is removed from its previous list before it is inserted into this list. The inserted item is the item itself and not a copy.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the list corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"numberOfItem","help":"The number of items in the list.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGStringList"},"HTMLDivElement":{"title":"HTMLDivElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/div\">&lt;div&gt;</a></code>\n HTML&nbsp;element","summary":"DOM&nbsp;div (document division) objects expose the <a title=\"http://www.w3.org/TR/html5/grouping-content.html#htmldivelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/grouping-content.html#htmldivelement\" target=\"_blank\">HTMLDivElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-22445964\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-22445964\" target=\"_blank\"><code>HTMLDivElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating div elements. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"align","help":"Enumerated attribute indicating alignment of the element's contents with respect to the surrounding context.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLDivElement"},"SVGAltGlyphItemElement":{"title":"altGlyphItem","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyphRef\">&lt;glyphRef&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/altGlyphDef\">&lt;altGlyphDef&gt;</a></code>\n</li>","summary":"The <code>altGlyphItem</code> element provides a set of candidates for glyph substitution by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/altGlyph\">&lt;altGlyph&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/altGlyphItem"},"TimeRanges":{"title":"TimeRanges","summary":"<p>The <code>TimeRanges</code> interface is used to represent a set of time ranges, primarily for the purpose of tracking which portions of media have been buffered when loading it for use by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video\">&lt;video&gt;</a></code>\n&nbsp;elements.</p>\n<p>A <code>TimeRanges</code> object includes one or more ranges of time, each specified by a starting and ending time offset. You reference each time range by using the <code>start()</code> and <code>end()</code> methods, passing the index number of the time range you want to retrieve.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TimeRanges.start","name":"start","help":"Returns the time for the start of the range with the specified index."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TimeRanges.end","name":"end","help":"Returns the time for the end of the specified range."},{"url":"https://developer.mozilla.org/en/DOM/TimeRanges.length","name":"length","help":"The number of time ranges represented by the time range object. <strong>Read only.</strong>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/TimeRanges","specification":"WHATWG Working Draft"},"ArrayBuffer":{"title":"ArrayBuffer","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>7</td> <td>4.0 (2)\n</td> <td>10</td> <td>11.6</td> <td>5.1</td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>4.0</td> <td>4.0 (2)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td>4.2</td> </tr> </tbody> </table>\n</div>","examples":["<p>In this example, we create a 32-byte buffer:</p>\n\n          <pre name=\"code\" class=\"js\">var buf = new ArrayBuffer(32);</pre>"],"srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"The <code>ArrayBuffer</code> is a data type that is used to represent a generic, fixed-length binary data buffer. You can't directly manipulate the contents of an <code>ArrayBuffer</code>; instead, you create an <a title=\"en/JavaScript typed arrays/ArrayBufferView\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView\"><code>ArrayBufferView</code></a> object which represents the buffer in a specific format, and use that to read and write the contents of the buffer.","members":[{"name":"byteLength","help":"The size, in bytes, of the array. This is established when the array is constructed and cannot be changed. <strong>Read only.</strong>","obsolete":false}]},"SVGElementInstance":{"title":"SVGUseElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGUseElement","skipped":true,"cause":"Suspect title"},"SVGFEMergeNodeElement":{"title":"feMergeNode","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The feMergeNode takes the result of another filter to be processed by its parent <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feMergeNode"},"HTMLOutputElement":{"title":"HTMLOutputElement","members":[{"name":"checkValidity","help":"<p>      in Gecko 2.0. Returns false if the element is a candidate for constraint validation, and it does not satisfy its constraints. In this case, it also fires an <code>invalid</code> event at the element. It returns true if the element is not a candidate for constraint validation, or if it satisfies its constraints.</p> <p>The standard behavior is to always return true because <code>output</code> objects are never candidates for constraint validation.</p>","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"name":"defaultValue","help":"The default value of the element, initially the empty string.","obsolete":false},{"name":"form","help":"Indicates the control's form owner, reflecting the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/output#attr-form\">form</a></code>\n&nbsp;HTML&nbsp;attribute if it is defined.","obsolete":false},{"name":"htmlFor","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/output#attr-for\">for</a></code>\n HTML attribute, containing a list of IDs of other elements in the same document that contribute to (or otherwise affect) the calculated <strong>value</strong>.","obsolete":false},{"name":"labels","help":"A list of label elements associated with this output element.","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/output#attr-name\">name</a></code>\n HTML attribute, containing the name for the control that is submitted with form data.","obsolete":false},{"name":"type","help":"Must be the string <code>output</code>.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"value","help":"The value of the contents of the elements. Behaves like the <strong><a title=\"En/DOM/Node.textContent\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.textContent\">textContent</a></strong> property.","obsolete":false},{"name":"willValidate","help":"<p>      in Gecko 2.0. Indicates whether the element is a candidate for constraint validation. It is false if any conditions bar it from constraint validation. (See <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=604673\" class=\"external\" title=\"\">\nbug 604673</a>\n.)</p> <p>The standard behavior is to always return false because <code>output</code> objects are never candidates for constraint validation.</p>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLOutputElement"},"Comment":{"title":"Comment","summary":"<p>A comment is used to add notations within markup; although it is generally not displayed, it is still available to be read in the source view (in Firefox:&nbsp;View -&gt; Page Source).&nbsp; These are represented in HTML and XML as content between <code>&lt;!--</code> and&nbsp; <code>--&gt; . </code>In XML, the character sequence \"--\" cannot be used within a comment.</p>\n<p>A comment has no special properties or methods of its own, but inherits those of <a title=\"En/DOM/CharacterData\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/CharacterData\">CharacterData</a> (which inherits from <a title=\"en/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a>).</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/Comment","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...#ID-1728279322"},"HashChangeEvent":{"title":"window.onhashchange","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/window.onhashchange","skipped":true,"cause":"Suspect title"},"HTMLLabelElement":{"title":"HTMLLabelElement","summary":"DOM Label objects inherit all of the properties and methods of DOM <a title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a>, and also expose the <a title=\"http://dev.w3.org/html5/spec/forms.html#htmllabelelement\" class=\" external\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/forms.html#htmllabelelement\" target=\"_blank\">HTMLLabelElement</a>(or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-13691394\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-13691394\" target=\"_blank\">HTMLLabelElement</a>) interface.","members":[{"name":"accessKey","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label#attr-accesskey\">accesskey</a></code>\n&nbsp;HTML&nbsp;attribute. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this attribute is inherited from <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLElement\">HTMLElement</a></code>","obsolete":false},{"name":"control","help":"The labeled control.","obsolete":false},{"name":"form","help":"The form owner of this label.","obsolete":false},{"name":"htmlFor","help":"The ID of the labeled control. Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label#attr-for\">for</a></code>\n attribute.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLLabelElement"},"CSSPageRule":{"title":"cssRule","members":[],"srcUrl":"https://developer.mozilla.org/pl/DOM/cssRule","skipped":true,"cause":"Suspect title"},"HTMLLegendElement":{"title":"HTMLLegendElement","summary":"DOM&nbsp;Legend objects inherit all of the properties and methods of DOM <a href=\"https://developer.mozilla.org/en/DOM/HTMLElement\" title=\"en/DOM/HTMLElement\" rel=\"internal\">HTMLElement</a>, and also expose the <a title=\"http://www.w3.org/TR/html5/forms.html#htmllegendelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/forms.html#htmllegendelement\" target=\"_blank\">HTMLLegendElement</a> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> (or <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-21482039\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-21482039\" target=\"_blank\">HTMLLegendElement</a> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span>) interface.","members":[{"name":"form","help":"The form that this legend belongs to. If the legend has a fieldset element as its parent, then this attribute returns the same value as the <strong>form</strong> attribute on the parent fieldset element. Otherwise, it returns null.","obsolete":false},{"name":"accessKey","help":"A single-character access key to give access to the element. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"align","help":"Alignment relative to the form set. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, \n\n<span class=\"deprecatedInlineTemplate\" title=\"\">Deprecated</span>\n\n in \n<span>HTML 4.01</span>","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLLegendElement"},"SVGElement":{"title":"SVGElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGElement","seeAlso":"DOM <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/SVG/Element/element\" class=\"new\">&lt;element&gt;</a></code>\n reference","summary":"All of the SVG DOM interfaces that correspond directly to elements in the SVG language derive from the <code>SVGElement</code> interface.","members":[{"name":"id","help":"The value of the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/id\" class=\"new\">id</a></code> attribute on the given element, or the empty string if <code>id</code> is not present. ","obsolete":false},{"name":"xmlbase","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/xml%3Abase\" class=\"new\">xml:base</a></code> on the given element.","obsolete":false},{"name":"ownerSVGElement","help":"The nearest ancestor <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element. <code>Null</code> if the given element is the outermost svg element.","obsolete":false},{"name":"viewportElement","help":"The element which established the current viewport. Often, the nearest ancestor <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element. <code>Null</code> if the given element is the outermost svg element.","obsolete":false}]},"SVGAnimatedRect":{"title":"SVGAnimatedRect","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedRect</code> interface is used for attributes of basic <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGRect\">SVGRect</a></code>\n which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGRect\">SVGRect</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGRect\">SVGRect</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> will always be distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGAnimatedRect"},"HTMLKeygenElement":{"title":"HTMLKeygenElement","summary":"<strong>Note:</strong>&nbsp;This page describes the Keygen Element interface as specified, not as currently implemented by Gecko. See <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=101019\" class=\"external\" title=\"\">\nbug 101019</a>\n for details and status.","members":[{"name":"checkValidity","help":"Always returns true because <code>keygen</code> objects are never candidates for constraint validation.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-autofocus\">autofocus</a></code>\n&nbsp;HTML attribute, indicating that the form control should have input focus when the page loads.","obsolete":false},{"name":"challenge","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-challenge\">challenge</a></code>\n HTML&nbsp;attribute, containing a challenge string that is packaged with the submitted key.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-disabled\">disabled</a></code>\n&nbsp;HTML attribute, indicating that the control is not available for interaction.","obsolete":false},{"name":"form","help":"Indicates the control's form owner, reflecting the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-form\">form</a></code>\n&nbsp;HTML&nbsp;attribute if it is defined.","obsolete":false},{"name":"keytype","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-keytype\">keytype</a></code>\n HTML&nbsp;attribute, containing the type of key used.","obsolete":false},{"name":"labels","help":"A list of label elements associated with this keygen element.","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen#attr-name\">name</a></code>\n HTML attribute, containing the name for the control that is submitted with form data.","obsolete":false},{"name":"type","help":"Must be the value <code>keygen</code>.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"willValidate","help":"Always false because <code>keygen</code> objects are never candidates for constraint validation.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLKeygenElement"},"SVGFontElement":{"title":"SVGFontElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font\">&lt;font&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGHFontElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font\">&lt;font&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font\">&lt;font&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"HTMLUListElement":{"title":"ul","seeAlso":"<li>Other list-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n and the obsolete <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir\">&lt;dir&gt;</a></code>\n;</li> <li>CSS properties that may be specially useful to style the <span>&lt;ul&gt;</span> element:&nbsp; <ul> <li>the <a title=\"en/CSS/list-style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/list-style\">list-style</a> property, useful to choose the way the ordinal is displayed,</li> <li><a title=\"en/CSS_Counters\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS_Counters\">CSS counters</a>, useful to handle complex nested lists,</li> <li>the <a title=\"en/CSS/line-height\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a> property, useful to simulate the deprecated \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul#attr-compact\">compact</a></code>\n attribute,</li> <li>the <a title=\"en/CSS/margin\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/margin\">margin</a> property, useful to control the indent of the list.</li> </ul> </li>","summary":"<p>The HTML <em>unordered list</em> element (<code>&lt;ul&gt;</code>) represents an unordered list of items, namely a collection of items that do not have a numerical ordering, and their order in the list is meaningless. Typically, unordered-list items are displayed with a bullet, which can be of several forms, like a dot, a circle or a squared. The bullet style is not defined in the HTML description of the page, but in its associated CSS, using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property.</p>\n<p>There is no limitation to the depth and imbrication of lists defined with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n elements.</p>\n<div class=\"note\"><strong>Usage note: </strong> The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n both represent a list of items. They differ in the way that, with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element, the order is meaningful. As a rule of thumb to determine which one to use, try changing the order of the list items; if the meaning is changed, the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element should be used, else the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n is adequate.</div>","members":[{"obsolete":false,"url":"","name":"compact","help":"This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn't work in all browsers. <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it has been deprecated: the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element should be styled using <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a>. To give a similar effect than the <span>compact</span> attribute, the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> property <a title=\"en/CSS/line-height\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a> can be used with a value of <span>80%</span>.</div>"},{"obsolete":false,"url":"","name":"type","help":"Used to set the bullet style for the list. The values defined under <a title=\"en/HTML3.2\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML3.2\" class=\"new \">HTML3.2</a> and the transitional version of <a title=\"en/HTML4.01\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML4.01\" class=\"new \">HTML 4.0/4.01</a> are<span>:</span> <ul> <li><code>circle</code>,</li> <li><code>disc</code>,</li> <li>and <code>square</code>.</li> </ul> <p>A fourth bullet type has been defined in the WebTV interface, but not all browsers support it: <code>triangle.</code></p> <p>If not present and if no <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property does apply to the element, the user agent decide to use a kind of bullets depending on the nesting level of the list.</p> <div class=\"note\"><strong>Usage note:</strong> Do not use this attribute, as it has been deprecated: use the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property instead.</div>"}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/ul"},"SVGMarkerElement":{"title":"marker","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> \n<tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n9.0</td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","examples":["<tr> <th scope=\"col\">Source code</th> <th scope=\"col\">Output result</th> </tr> <tr> <td>\n          <pre name=\"code\" class=\"xml\">&lt;?xml version=\"1.0\"?&gt;\n&lt;svg width=\"120\" height=\"120\" viewBox=\"0 0 120 120\"\n     xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"\n     xmlns:xlink=\"http://www.w3.org/1999/xlink\"&gt;\n\n    &lt;defs&gt;\n        &lt;marker id=\"Triangle\"\n                viewBox=\"0 0 10 10\" \n                refX=\"1\" refY=\"5\"\n                markerWidth=\"6\" \n                markerHeight=\"6\"\n                orient=\"auto\"&gt;\n            &lt;path d=\"M 0 0 L 10 5 L 0 10 z\" /&gt;\n\t    &lt;/marker&gt;\n    &lt;/defs&gt;\n\n    &lt;polyline points=\"10,90 50,80 90,20\"\n              fill=\"none\" stroke=\"black\" \n              stroke-width=\"2\"\n              marker-end=\"url(#Triangle)\" /&gt;\n&lt;/svg&gt;</pre>\n        </td> <td>\n<iframe src=\"https://developer.mozilla.org/@api/deki/services/developer.mozilla.org/39/images/f3ac8fb0-712a-178f-f696-81bc9eecbd0f.svg\" width=\"120px\" height=\"120px\" marginwidth=\"0\" marginheight=\"0\" hspace=\"0\" vspace=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe>\n</td> </tr>"],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/marker","summary":"The <code>marker</code> element defines the graphics that is to be used for drawing arrowheads or polymarkers on a given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/polyline\">&lt;polyline&gt;</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/polygon\">&lt;polygon&gt;</a></code>\n element.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/transform","name":"transform","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/markerHeight","name":"markerHeight","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/viewBox","name":"viewBox","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio","name":"preserveAspectRatio","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/refY","name":"refY","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/refX","name":"refX","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/markerWidth","name":"markerWidth","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/markerUnits","name":"markerUnits","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/orient","name":"orient","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""}]},"KeyboardEvent":{"title":"KeyboardEvent","examples":["&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script&gt;\n  var metaChar = false;\n  var exampleKey = 16;\n  function keyEvent(event) {\n    var key = event.keyCode || event.which;\n    var keychar = String.fromCharCode(key);\n    if (key == exampleKey) {\n      metaChar = true;\n    }\n    if (key != exampleKey) {\n      if (metaChar) {\n        alert(\"Combination of metaKey + \" + keychar);\n        metaChar = false;\n      } else {\n        alert(\"Key pressed \" + key);\n      }\n    }\n  }\n\n  function metaKeyUp (event) {\n    var key = event.keyCode || event.which;\n    if (key==exampleKey) {\n      metaChar = false;\n    }\n  }\n&lt;/script&gt;\n&lt;/head&gt;\n\n&lt;body onkeydown=\"keyEvent(event)\" onkeyup=\"metaKeyUp(event)\"&gt;\n&lt;/body&gt;\n&lt;/html&gt;"],"srcUrl":"https://developer.mozilla.org/en/DOM/KeyboardEvent","specification":"DOM&nbsp;3 Events:&nbsp;KeyboardEvent","summary":"<div class=\"deprecatedHeaderTemplate\"><p>Deprecated</p></div>\n<p></p>\n<p><code>KeyboardEvent</code> objects describe a user interaction with the keyboard. Each event describes a key; the event type (<code>keydown</code>, <code>keypress</code>, or <code>keyup</code>) identifies what kind of activity was performed.</p>\n<div class=\"note\"><strong>Note:</strong> The <code>KeyboardEvent</code> interface is deprecated in DOM&nbsp;Level 3 in favor of the new <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TextInput\" class=\"new\">TextInput</a></code>\n interface and the corresponding <code>textinput</code> event, which have improved support for alternate input methods.&nbsp; However, DOM Level 3 <code>textinput</code> events are <a title=\"https://bugzilla.mozilla.org/show_bug.cgi?id=622245\" class=\" link-https\" rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=622245\" target=\"_blank\">not yet implemented</a> in Gecko (as of version 6.0), so code written for Gecko browsers should continue to use <code>KeyboardEvent</code> for now.</div>","members":[{"name":"initKeyboardEvent","help":"<p>Initializes the attributes of a keyboard event object.</p>\n\n<div id=\"section_11\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>typeArg</code></dt> <dd>The type of keyboard event; this will be one of <code>keydown</code>, <code>keypress</code>, or <code>keyup</code>.</dd> <dt><code>canBubbleArg</code></dt> <dd>Whether or not the event can bubble.</dd> <dt><code>cancelableArg</code></dt> <dd>Whether or not the event can be canceled.</dd> <dt><code>viewArg</code></dt> <dd>?</dd> <dt><code>charArg</code></dt> <dd>The value of the char attribute.</dd> <dt><code>keyArg</code></dt> <dd>The value of the key attribute.</dd> <dt><code>locationArg</code></dt> <dd>The value of the location attribute.</dd> <dt><code>modifiersListArg</code></dt> <dd>A whitespace-delineated list of modifier keys that should be considered to be active on the event's key. For example, specifying \"Control Shift\" indicates that the user was holding down the Control and Shift keys when pressing the key described by the event.</dd> <dt><code>repeatArg</code></dt> <dd>The value of the repeat attribute.</dd> <dt><code>localeArg</code></dt> <dd>The value of the locale attribute.</dd>\n</dl>\n</div>","idl":"<pre>void initKeyboardEvent(\n&nbsp;&nbsp;in DOMString typeArg,\n&nbsp;&nbsp;in boolean canBubbleArg,\n&nbsp;&nbsp;in boolean cancelableArg,\n&nbsp;&nbsp;in views::AbstractView viewArg,\n&nbsp;&nbsp;in DOMString charArg,\n&nbsp;&nbsp;in DOMString keyArg,\n&nbsp;&nbsp;in unsigned long locationArg,\n&nbsp;&nbsp;in DOMString modifiersListArg,\n&nbsp;&nbsp;in boolean repeat,\n&nbsp;&nbsp;in DOMString localeArg\n);\n</pre>","obsolete":false},{"name":"getModifierState","help":"<p>Returns the current state of the specified modifier key.</p>\n\n<div id=\"section_8\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>keyArg</code></dt> <dd>A string identifying the modifier key whose value you wish to determine. This may be an implementation-defined value or one of:&nbsp;\"Alt\", \"AltGraph\", \"CapsLock\", \"Control\", \"Fn\", \"Meta\", \"NumLock\", \"Scroll\", \"Shift\", \"SymbolLock\", or \"Win\".</dd>\n</dl>\n</div><div id=\"section_9\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p><code>true</code> if the specified modifier key is engaged; otherwise <code>false</code>.</p>\n</div>","idl":"<pre>boolean getModifierState(\n&nbsp;&nbsp;in DOMString keyArg\n);\n</pre>","obsolete":false},{"name":"DOM_VK_CANCEL","help":"Cancel key.","obsolete":false},{"name":"DOM_VK_HELP","help":"Help key.","obsolete":false},{"name":"DOM_VK_BACK_SPACE","help":"Backspace key.","obsolete":false},{"name":"DOM_VK_TAB","help":"Tab key.","obsolete":false},{"name":"DOM_VK_CLEAR","help":"Clear key.","obsolete":false},{"name":"DOM_VK_RETURN","help":"Return/enter key on the main keyboard.","obsolete":false},{"name":"DOM_VK_ENTER","help":"Enter key on the numeric keypad.","obsolete":false},{"name":"DOM_VK_SHIFT","help":"Shift key.","obsolete":false},{"name":"DOM_VK_CONTROL","help":"Control key.","obsolete":false},{"name":"DOM_VK_ALT","help":"Alt (Option on Mac)&nbsp;key.","obsolete":false},{"name":"DOM_VK_PAUSE","help":"Pause key.","obsolete":false},{"name":"DOM_VK_CAPS_LOCK","help":"Caps lock.","obsolete":false},{"name":"DOM_VK_ESCAPE","help":"Escape key.","obsolete":false},{"name":"DOM_VK_SPACE","help":"Space bar.","obsolete":false},{"name":"DOM_VK_PAGE_UP","help":"Page Up key.","obsolete":false},{"name":"DOM_VK_PAGE_DOWN","help":"Page Down key.","obsolete":false},{"name":"DOM_VK_END","help":"End key.","obsolete":false},{"name":"DOM_VK_HOME","help":"Home key.","obsolete":false},{"name":"DOM_VK_LEFT","help":"Left arrow.","obsolete":false},{"name":"DOM_VK_UP","help":"Up arrow.","obsolete":false},{"name":"DOM_VK_RIGHT","help":"Right arrow.","obsolete":false},{"name":"DOM_VK_DOWN","help":"Down arrow.","obsolete":false},{"name":"DOM_VK_SELECT","help":"","obsolete":false},{"name":"DOM_VK_PRINT","help":"","obsolete":false},{"name":"DOM_VK_EXECUTE","help":"","obsolete":false},{"name":"DOM_VK_PRINTSCREEN","help":"Print Screen key.","obsolete":false},{"name":"DOM_VK_INSERT","help":"Ins(ert) key.","obsolete":false},{"name":"DOM_VK_DELETE","help":"Del(ete)&nbsp;key.","obsolete":false},{"name":"DOM_VK_SEMICOLON","help":"","obsolete":false},{"name":"DOM_VK_EQUALS","help":"","obsolete":false},{"name":"DOM_VK_A","help":"","obsolete":false},{"name":"DOM_VK_B","help":"","obsolete":false},{"name":"DOM_VK_C","help":"","obsolete":false},{"name":"DOM_VK_D","help":"","obsolete":false},{"name":"DOM_VK_E","help":"","obsolete":false},{"name":"DOM_VK_F","help":"","obsolete":false},{"name":"DOM_VK_G","help":"","obsolete":false},{"name":"DOM_VK_H","help":"","obsolete":false},{"name":"DOM_VK_I","help":"","obsolete":false},{"name":"DOM_VK_J","help":"","obsolete":false},{"name":"DOM_VK_K","help":"","obsolete":false},{"name":"DOM_VK_L","help":"","obsolete":false},{"name":"DOM_VK_M","help":"","obsolete":false},{"name":"DOM_VK_N","help":"","obsolete":false},{"name":"DOM_VK_O","help":"","obsolete":false},{"name":"DOM_VK_P","help":"","obsolete":false},{"name":"DOM_VK_Q","help":"","obsolete":false},{"name":"DOM_VK_R","help":"","obsolete":false},{"name":"DOM_VK_S","help":"","obsolete":false},{"name":"DOM_VK_T","help":"","obsolete":false},{"name":"DOM_VK_U","help":"","obsolete":false},{"name":"DOM_VK_V","help":"","obsolete":false},{"name":"DOM_VK_W","help":"","obsolete":false},{"name":"DOM_VK_X","help":"","obsolete":false},{"name":"DOM_VK_Y","help":"","obsolete":false},{"name":"DOM_VK_Z","help":"","obsolete":false},{"name":"DOM_VK_CONTEXT_MENU","help":"","obsolete":false},{"name":"DOM_VK_MULTIPLY","help":"* on the numeric keypad.","obsolete":false},{"name":"DOM_VK_ADD","help":"+ on the numeric keypad.","obsolete":false},{"name":"DOM_VK_SEPARATOR","help":"","obsolete":false},{"name":"DOM_VK_SUBTRACT","help":"- on the numeric keypad.","obsolete":false},{"name":"DOM_VK_DECIMAL","help":"Decimal point on the numeric keypad.","obsolete":false},{"name":"DOM_VK_DIVIDE","help":"/ on the numeric keypad.","obsolete":false},{"name":"DOM_VK_NUM_LOCK","help":"Num Lock key.","obsolete":false},{"name":"DOM_VK_SCROLL_LOCK","help":"Scroll Lock key.","obsolete":false},{"name":"DOM_VK_COMMA","help":"Comma (\",\") key.","obsolete":false},{"name":"DOM_VK_PERIOD","help":"Period (\".\") key.","obsolete":false},{"name":"DOM_VK_SLASH","help":"Slash (\"/\") key.","obsolete":false},{"name":"DOM_VK_BACK_QUOTE","help":"Back tick (\"`\") key.","obsolete":false},{"name":"DOM_VK_OPEN_BRACKET","help":"Open square bracket (\"[\") key.","obsolete":false},{"name":"DOM_VK_BACK_SLASH","help":"Back slash (\"\\\") key.","obsolete":false},{"name":"DOM_VK_CLOSE_BRACKET","help":"Close square bracket (\"]\") key.","obsolete":false},{"name":"DOM_VK_QUOTE","help":"Quote ('\"') key.","obsolete":false},{"name":"DOM_VK_META","help":"Meta (Command on Mac)&nbsp;key.","obsolete":false},{"name":"DOM_VK_KANA","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_HANGUL","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_JUNJA","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_FINAL","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_HANJA","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_KANJI","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_CONVERT","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_NONCONVERT","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_ACCEPT","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_MODECHANGE","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_SELECT","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_PRINT","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_EXECUTE","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_VK_SLEEP","help":"Linux support for this keycode was added in Gecko 4.0.","obsolete":false},{"name":"DOM_KEY_LOCATION_STANDARD","help":"The key must not be distinguished between the left and right versions of the key, and was not pressed on the numeric keypad or a key that is considered to be part of the keypad.","obsolete":false},{"name":"DOM_KEY_LOCATION_LEFT","help":"The key was the left-hand version of the key; for example, this is the value of the <code>location</code> attribute when the left-hand Control key is pressed on a standard 101 key US&nbsp;keyboard. This value is only used for keys that have more that one possible location on the keyboard.","obsolete":false},{"name":"DOM_KEY_LOCATION_RIGHT","help":"The key was the right-hand version of the key; for example, this is the value of the <code>location</code> attribute when the right-hand Control key is pressed on a standard 101 key US&nbsp;keyboard. This value is only used for keys that have more that one possible location on the keyboard.","obsolete":false},{"name":"DOM_KEY_LOCATION_NUMPAD","help":"The key was on the numeric keypad, or has a virtual key code that corresponds to the numeric keypad.","obsolete":false},{"name":"DOM_KEY_LOCATION_MOBILE","help":"The key was on a mobile device; this can be on either a physical keypad or a virtual keyboard.","obsolete":false},{"name":"DOM_KEY_LOCATION_JOYSTICK","help":"The key was a button on a game controller or a joystick on a mobile device.","obsolete":false},{"name":"altKey","help":"<code>true</code> if the Alt (or Option, on Mac) key was active when the key event was generated. <strong>Read only.</strong>","obsolete":false},{"name":"char","help":"<p>The character value of the key. If the key corresponds to a printable character, this value is a non-empty Unicode string containing that character. If the key doesn't have a printable representation, this is an empty string. <strong>Read only.</strong></p> <div class=\"note\">Not yet implemented in Gecko.</div> <div class=\"note\"><strong>Note:</strong> If the key is used as a macro that inserts multiple characters, this attribute's value is the entire string, not just the first character.</div>","obsolete":false},{"name":"charCode","help":"<p>The Unicode reference number of the key; this attribute is used only by the <code>keypress</code>&nbsp;event. For keys whose <code>char</code> attribute contains multiple characters, this is the Unicode value of the first character in that attribute. <strong>Read only.</strong></p> <div class=\"warning\"><strong>Warning:</strong> This attribute is deprecated; you should use <code>char</code> instead, if available.</div>","obsolete":true},{"name":"ctrlKey","help":"<code>true</code> if the Control key was active when the key event was generated. <strong>Read only.</strong>","obsolete":false},{"name":"key","help":"<p>The key value of the key represented by the event. If the value has a printed representation, this attribute's value is the same as the <code>char</code> attribute. Otherwise, it's one of the key value strings specified in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/KeyboardEvent#Key_values\">Key values</a>. If the key can't be identified, this is the string \"Unidentified\". <strong>Read only.</strong></p> <div class=\"note\">Not yet implemented in Gecko.</div>","obsolete":false},{"name":"keyCode","help":"<p>A system and implementation dependent numerical code identifying the unmodified value of the pressed key. This is usually the decimal ASCII (<a rel=\"custom\" href=\"http://tools.ietf.org/html/20\">RFC 20</a>) or Windows 1252 code corresponding to the key; see <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/KeyboardEvent#Virtual_key_codes\">Virtual key codes</a>&nbsp;for a list of common values. If the key can't be identified, this value is 0. <strong>Read only.</strong></p> <div class=\"warning\"><strong>Warning:</strong> This attribute is deprecated; you should use <code>key</code> instead, if available.</div>","obsolete":true},{"name":"locale","help":"<p>A locale string indicating the locale the keyboard is configured for. This may be the empty string if the browser or device doesn't know the keyboard's locale. <strong>Read only.</strong></p> <div class=\"note\"><strong>Note:</strong> This does not describe the locale of the data being entered. A user may be using one keyboard layout while typing text in a different language.</div>","obsolete":false},{"name":"location","help":"The location of the key on the keyboard or other input device; see <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/KeyboardEvent#Key_location_constants\">Key location constants</a> below. <strong>Read only.</strong>","obsolete":false},{"name":"metaKey","help":"<code>true</code> if the Meta (or Command, on Mac) key was active when the key event was generated. <strong>Read only.</strong>","obsolete":false},{"name":"repeat","help":"true if the key is being held down such that it is automatically repeating. <strong>Read only.</strong>","obsolete":false},{"name":"shiftKey","help":"<code>true</code> if the Shift key was active when the key event was generated. <strong>Read only.</strong>","obsolete":false},{"name":"which","help":"<p>A system and implementation dependent numeric code identifying the unmodified value of the pressed key; this is usually the same as <code>keyCode</code>. <strong>Read only.</strong></p> <div class=\"warning\"><strong>Warning:</strong> This attribute is deprecated; you should use <code>key</code> instead, if available.</div>","obsolete":true}]},"Location":{"title":"window.location","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","examples":["<p>Whenever a property of the location object is modified, a document will be loaded using the URL as if <code>window.location.assign()</code> had been called with the modified URL.</p>\n<div id=\"section_8\"><span id=\"Replace_the_current_document_with_the_one_at_the_given_URL:\"></span><h5 class=\"editable\">Replace the current document with the one at the given URL:</h5>\n\n          <pre name=\"code\" class=\"js\">function goMoz() { \n   window.location = \"http://www.mozilla.org\";\n} \n\n// in html: &lt;button onclick=\"goMoz();\"&gt;Mozilla&lt;/button&gt;</pre>\n        \n<div class=\"note\"><strong>Note:</strong> The example above works in situations where <code>window.location.hash</code>&nbsp;does not need to be retained. However, in Gecko-based browsers, setting <code>window.location.pathname</code> in this manner will erase any information in <code>window.location.hash</code>, whereas in WebKit (and possibly other browsers), setting the pathname will not alter the the hash. If you need to change pathname but keep the hash as is, use the <code>replace()</code> method instead, which should work consistently across browsers.</div>\n<p><br> Consider the following example, which will reload the page by using the <code>replace()</code> method to insert the value of <code>window.location.pathname</code> into the hash (similar to Twitter's reload of <a class=\" external\" rel=\"external\" href=\"http://twitter.com/username\" title=\"http://twitter.com/username\" target=\"_blank\">http://twitter.com/username</a> to <a class=\" external\" rel=\"external\" href=\"http://twitter.com/#!/username\" title=\"http://twitter.com/#!/username\" target=\"_blank\">http://twitter.com/#!/username</a>):</p>\n\n          <pre name=\"code\" class=\"js\">function reloadPageWithHash() {\n  var initialPage = window.location.pathname;\n  window.location.replace('http://example.com/#' + initialPage);\n}</pre>\n        \n</div><div id=\"section_9\"><span id=\"Display_the_properties_of_the_current_URL_in_an_alert_dialog:\"></span><h5 class=\"editable\">Display the properties of the current URL in an alert dialog:</h5>\n\n          <pre name=\"code\" class=\"js\">function showLoc() {\n  var oLocation = window.location, aLog = [\"Property (Typeof): Value\", \"window.location (\" + (typeof oLocation) + \"): \" + oLocation ];\n  for (var sProp in oLocation){\n    aLog.push(sProp + \" (\" + (typeof oLocation[sProp]) + \"): \" +  (oLocation[sProp] || \"n/a\"));\n  }\n  alert(aLog.join(\"\\n\"));\n}\n\n// in html: &lt;button onclick=\"showLoc();\"&gt;Show location properties&lt;/button&gt;</pre>\n        \n</div><div id=\"section_10\"><span id=\"Send_a_string_of_data_to_the_server_by_modifying_the_search_property:\"></span><h5 class=\"editable\">Send a string of data to the server by modifying the <code>search</code> property:</h5>\n\n          <pre name=\"code\" class=\"js\">function sendData (sData) {\n  window.location.search = sData;\n}\n\n// in html: &lt;button onclick=\"sendData('Some data');\"&gt;Send data&lt;/button&gt;</pre>\n        \n<p>The current URL with \"?Some%20data\" appended is sent to the server (if no action is taken by the server, the current document is reloaded with the modified search string).</p>\n</div><div id=\"section_11\"><span id=\"Get_the_value_of_a_single_window.location.search_key:\"></span><h5 class=\"editable\">Get the value of a single <code>window.location.search</code> key:</h5>\n\n          <pre name=\"code\" class=\"js\">function loadPageVar (sVar) {\n  return unescape(window.location.search.replace(new RegExp(\"^(?:.*[&amp;\\\\?]\" + escape(sVar).replace(/[\\.\\+\\*]/g, \"\\\\$&amp;\") + \"(?:\\\\=([^&amp;]*))?)?.*$\", \"i\"), \"$1\"));\n}\n\nalert(loadPageVar(\"name\"));</pre>\n        \n</div><div id=\"section_12\"><span id=\"Nestle_the_variables_obtained_through_the_window.location.search_string_in_an_object_named_oGetVars.2C_also_attempting_to_recognize_their_typeof:\"></span><h5 class=\"editable\">Nestle the variables obtained through the <code>window.location.search</code> string in an object named <code>oGetVars</code>, also attempting to recognize their <code><a title=\"en/JavaScript/Reference/Operators/typeof\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Operators/typeof\">typeof</a></code>:</h5>\n\n          <pre name=\"code\" class=\"js\">var oGetVars = {};\n\nfunction buildValue(sValue) {\n  if (/^\\s*$/.test(sValue)) { return null; }\n  if (/^(true|false)$/i.test(sValue)) { return sValue.toLowerCase() === \"true\"; }\n  if (isFinite(sValue)) { return parseFloat(sValue); }\n  if (isFinite(Date.parse(sValue))) { return new Date(sValue); }\n  return sValue;\n}\n\nif (window.location.search.length &gt; 1) {\n  for (var aItKey, nKeyId = 0, aCouples = window.location.search.substr(1).split(\"&amp;\"); nKeyId &lt; aCouples.length; nKeyId++) {\n    aItKey = aCouples[nKeyId].split(\"=\");\n    oGetVars[unescape(aItKey[0])] = aItKey.length &gt; 1 ? buildValue(unescape(aItKey[1])) : null;\n  }\n}\n\n// alert(oGetVars.yourVar);</pre>\n        \n<p>…the same thing obtained by an anonymous constructor – useful for a global variable declaration:</p>\n\n          <pre name=\"code\" class=\"js\">var oGetVars = new (function (sSearch) {\n  var rNull = /^\\s*$/, rBool = /^(true|false)$/i;\n  function buildValue(sValue) {\n    if (rNull.test(sValue)) { return null; }\n    if (rBool.test(sValue)) { return sValue.toLowerCase() === \"true\"; }\n    if (isFinite(sValue)) { return parseFloat(sValue); }\n    if (isFinite(Date.parse(sValue))) { return new Date(sValue); }\n    return sValue;\n  }\n  if (sSearch.length &gt; 1) {\n    for (var aItKey, nKeyId = 0, aCouples = sSearch.substr(1).split(\"&amp;\"); nKeyId &lt; aCouples.length; nKeyId++) {\n      aItKey = aCouples[nKeyId].split(\"=\");\n      this[unescape(aItKey[0])] = aItKey.length &gt; 1 ? buildValue(unescape(aItKey[1])) : null;\n    }\n  }\n})(window.location.search);\n\n// alert(oGetVars.yourVar);</pre>\n        \n</div><div id=\"section_13\"><span id=\"Using_bookmars_without_changing_the_window.location.hash_property:\"></span><h5 class=\"editable\">Using bookmars without changing the <code>window.location.hash</code> property:</h5>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\" /&gt;\n&lt;title&gt;MDN Example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\nfunction showNode (oNode) {\n  var nLeft = 0, nTop = 0;\n  for (var oItNode = oNode; oItNode; nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent);\n  document.documentElement.scrollTop = nTop;\n  document.documentElement.scrollLeft = nLeft;\n}\n\nfunction showBookmark (sBookmark, bUseHash) {\n  if (bUseHash) { window.location.hash = \"#\" + sBookmark; return; }\n  var oBookmark = document.getElementById(sBookmark);\n  if (oBookmark) { showNode(oBookmark); }\n}\n&lt;/script&gt;\n&lt;style type=\"text/css\"&gt;\nspan.intLink {\n  cursor: pointer;\n  color: #0000ff;\n  text-decoration: underline;\n}\n&lt;/style&gt;\n&lt;/head&gt;\n\n&lt;body&gt;\n&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices dolor ac dolor imperdiet ullamcorper. Suspendisse quam libero, luctus auctor mollis sed, malesuada condimentum magna. Quisque in ante tellus, in placerat est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec a mi magna, quis mattis dolor. Etiam sit amet ligula quis urna auctor imperdiet nec faucibus ante. Mauris vel consectetur dolor. Nunc eget elit eget velit pulvinar fringilla consectetur aliquam purus. Curabitur convallis, justo posuere porta egestas, velit erat ornare tortor, non viverra justo diam eget arcu. Phasellus adipiscing fermentum nibh ac commodo. Nam turpis nunc, suscipit a hendrerit vitae, volutpat non ipsum.&lt;/p&gt;\n&lt;p&gt;Duis lobortis sapien quis nisl luctus porttitor. In tempor semper libero, eu tincidunt dolor eleifend sit amet. Ut nec velit in dolor tincidunt rhoncus non non diam. Morbi auctor ornare orci, non euismod felis gravida nec. Curabitur elementum nisi a eros rutrum nec blandit diam placerat. Aenean tincidunt risus ut nisi consectetur cursus. Ut vitae quam elit. Donec dignissim est in quam tempor consequat. Aliquam aliquam diam non felis convallis suscipit. Nulla facilisi. Donec lacus risus, dignissim et fringilla et, egestas vel eros. Duis malesuada accumsan dui, at fringilla mauris bibendum quis. Cras adipiscing ultricies fermentum. Praesent bibendum condimentum feugiat.&lt;/p&gt;\n&lt;p id=\"myBookmark1\"&gt;[&amp;nbsp;&lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark2');\"&gt;Go to bookmark #2&lt;/span&gt;&amp;nbsp;]&lt;/p&gt;\n&lt;p&gt;Vivamus blandit massa ut metus mattis in fringilla lectus imperdiet. Proin ac ante a felis ornare vehicula. Fusce pellentesque lacus vitae eros convallis ut mollis magna pellentesque. Pellentesque placerat enim at lacus ultricies vitae facilisis nisi fringilla. In tincidunt tincidunt tincidunt. Nulla vitae tempor nisl. Etiam congue, elit vitae egestas mollis, ipsum nisi malesuada turpis, a volutpat arcu arcu id risus.&lt;/p&gt;\n&lt;p&gt;Nam faucibus, ligula eu fringilla pulvinar, lectus tellus iaculis nunc, vitae scelerisque metus leo non metus. Proin mattis lobortis lobortis. Quisque accumsan faucibus erat, vel varius tortor ultricies ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero nunc. Nullam tortor nunc, elementum a consectetur et, ultrices eu orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a nisl eu sem vehicula egestas.&lt;/p&gt;\n&lt;p&gt;Aenean viverra varius mauris, sed elementum lacus interdum non. Phasellus sit amet lectus vitae eros egestas pellentesque fermentum eget magna. Quisque mauris nisl, gravida vitae placerat et, condimentum id metus. Nulla eu est dictum dolor pulvinar volutpat. Pellentesque vitae sollicitudin nunc. Donec neque magna, lobortis id egestas nec, sodales quis lectus. Fusce cursus sollicitudin porta. Suspendisse ut tortor in mauris tincidunt rhoncus. Maecenas tincidunt fermentum facilisis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.&lt;/p&gt;\n&lt;p&gt;Suspendisse turpis nisl, consectetur in lacinia ut, ornare vel mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non lectus eu turpis vulputate cursus. Mauris interdum tincidunt erat id pharetra. Nullam in libero elit, sed consequat lectus. Morbi odio nisi, porta vitae molestie ut, gravida ut nunc. Ut non est dui, id ullamcorper orci. Praesent vel elementum felis. Maecenas ornare, dui quis auctor hendrerit, turpis sem ullamcorper odio, in auctor magna metus quis leo. Morbi at odio ante.&lt;/p&gt;\n&lt;p&gt;Curabitur est ipsum, porta ac viverra faucibus, eleifend sed eros. In sit amet vehicula tortor. Vestibulum viverra pellentesque erat a elementum. Integer commodo ultricies lorem, eget tincidunt risus viverra et. In enim turpis, porttitor ac ornare et, suscipit sit amet nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque vel ultrices nibh. Sed commodo aliquam aliquam. Nulla euismod, odio ut eleifend mollis, nisi dui gravida nibh, vitae laoreet turpis purus id ipsum. Donec convallis, velit non scelerisque bibendum, diam nulla auctor nunc, vel dictum risus ipsum sit amet est. Praesent ut nibh sit amet nibh congue pulvinar. Suspendisse dictum porttitor tempor.&lt;/p&gt;\n&lt;p&gt;Vestibulum dignissim erat vitae lectus auctor ac bibendum eros semper. Integer aliquet, leo non ornare faucibus, risus arcu tristique dolor, a aliquet massa mauris quis arcu. In porttitor, lectus ac semper egestas, ligula magna laoreet libero, eu commodo mauris odio id ante. In hac habitasse platea dictumst. In pretium erat diam, nec consequat eros. Praesent augue mi, consequat sed porttitor at, volutpat vitae eros. Sed pretium pharetra dapibus. Donec auctor interdum erat, lacinia molestie nibh commodo ut. Maecenas vestibulum vulputate felis, ut ullamcorper arcu faucibus in. Curabitur id arcu est. In semper mollis lorem at pellentesque. Sed lectus nisl, vestibulum id scelerisque eu, feugiat et tortor. Pellentesque porttitor facilisis ultricies.&lt;/p&gt;\n&lt;p id=\"myBookmark2\"&gt;[&amp;nbsp;&lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark1');\"&gt;Go to bookmark #1&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark1', true);\"&gt;Go to bookmark #1 using location.hash&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark3');\"&gt;Go to bookmark #3&lt;/span&gt;&amp;nbsp;]&lt;/p&gt;\n&lt;p&gt;Phasellus tempus fringilla nunc, eget sagittis orci molestie vel. Nulla sollicitudin diam non quam iaculis ac porta justo venenatis. Quisque tellus urna, molestie vitae egestas sit amet, suscipit sed sem. Quisque nec lorem eu velit faucibus tristique ut ut dolor. Cras eu tortor ut libero placerat venenatis ut ut massa. Sed quis libero augue, et consequat libero. Morbi rutrum augue sed turpis elementum sed luctus nisl molestie. Aenean vitae purus risus, a semper nisl. Pellentesque malesuada, est id sagittis consequat, libero mauris tincidunt tellus, eu sagittis arcu purus rutrum eros. Quisque eget eleifend mi. Duis pharetra mi ac eros mattis lacinia rutrum ipsum varius.&lt;/p&gt;\n&lt;p&gt;Fusce cursus pulvinar aliquam. Duis justo enim, ornare vitae elementum sed, porta a quam. Aliquam eu enim eu libero mollis tempus. Morbi ornare aliquam posuere. Proin faucibus luctus libero, sed ultrices lorem sagittis et. Vestibulum malesuada, ante nec molestie vehicula, quam diam mollis ipsum, rhoncus posuere mauris lectus in eros. Nullam feugiat ultrices augue, ac sodales sem mollis in.&lt;/p&gt;\n&lt;p id=\"myBookmark3\"&gt;&lt;em&gt;Here is the bookmark #3&lt;/em&gt;&lt;/p&gt;\n&lt;p&gt;Proin vitae sem non lorem pellentesque molestie. Nam tempus massa et turpis placerat sit amet sollicitudin orci sodales. Pellentesque enim enim, sagittis a lobortis ut, tempus sed arcu. Aliquam augue turpis, varius vel bibendum ut, aliquam at diam. Nam lobortis, dui eu hendrerit pellentesque, sem neque porttitor erat, non dapibus velit lectus in metus. Vestibulum sit amet felis enim. In quis est vitae nunc malesuada consequat nec nec sapien. Suspendisse aliquam massa placerat dui lacinia luctus sed vitae risus. Fusce tempus, neque id ultrices volutpat, mi urna auctor arcu, viverra semper libero sem vel enim. Mauris dictum, elit non placerat malesuada, libero elit euismod nibh, nec posuere massa arcu eu risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna velit, dapibus eget varius feugiat, pellentesque sit amet ligula. Maecenas nulla nisl, facilisis eu egestas scelerisque, mollis eget metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi sed congue mi.&lt;/p&gt;\n&lt;p&gt;Fusce metus velit, pharetra at vestibulum nec, facilisis porttitor mi. Curabitur ligula sapien, fermentum vel porttitor id, rutrum sit amet magna. Sed sit amet sollicitudin turpis. Aenean luctus rhoncus dolor, et pulvinar ante egestas et. Donec ac massa orci, quis dapibus augue. Vivamus consectetur auctor pellentesque. Praesent vestibulum tincidunt ante sed consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce purus metus, imperdiet vitae iaculis convallis, bibendum vitae turpis.&lt;/p&gt;\n&lt;p&gt;Fusce aliquet molestie dolor, in ornare dui sodales nec. In molestie sollicitudin felis a porta. Mauris nec orci sit amet orci blandit tristique congue nec nunc. Praesent et tellus sollicitudin mauris accumsan fringilla. Morbi sodales, justo eu sollicitudin lacinia, lectus sapien ullamcorper eros, quis molestie urna elit bibendum risus. Proin eget tincidunt quam. Nam luctus commodo mauris, eu posuere nunc luctus non. Nulla facilisi. Vivamus eget leo rhoncus quam accumsan fringilla. Aliquam sit amet lorem est. Nullam vel tellus nibh, id imperdiet orci. Integer egestas leo eu turpis blandit scelerisque.&lt;/p&gt;\n&lt;p&gt;Etiam in blandit tellus. Integer sed varius quam. Vestibulum dapibus mi gravida arcu viverra blandit. Praesent tristique augue id sem adipiscing pellentesque. Sed sollicitudin, leo sed interdum elementum, nisi ante condimentum leo, eget ornare libero diam semper quam. Vivamus augue urna, porta eget ultrices et, dapibus ut ligula. Ut laoreet consequat faucibus. Praesent at lectus ut lectus malesuada mollis. Nam interdum adipiscing eros, nec sodales mi porta nec. Proin et quam vitae sem interdum aliquet. Proin vel odio at lacus vehicula aliquet.&lt;/p&gt;\n&lt;p&gt;Etiam placerat dui ut sem ornare vel vestibulum augue mattis. Sed semper malesuada mi, eu bibendum lacus lobortis nec. Etiam fringilla elementum risus, eget consequat urna laoreet nec. Etiam mollis quam non sem convallis vel consectetur lectus ullamcorper. Aenean mattis lacus quis ligula mattis eget vestibulum diam hendrerit. In non placerat mauris. Praesent faucibus nunc quis eros sagittis viverra. In hac habitasse platea dictumst. Suspendisse eget nisl erat, ac molestie massa. Praesent mollis vestibulum tincidunt. Fusce suscipit laoreet malesuada. Aliquam erat volutpat. Aliquam dictum elementum rhoncus. Praesent in est massa, pulvinar sodales nunc. Pellentesque gravida euismod mi ac convallis.&lt;/p&gt;\n&lt;p&gt;Mauris vel odio vel nulla facilisis lacinia. Aliquam ultrices est at leo blandit tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse porttitor adipiscing facilisis. Duis cursus quam iaculis augue interdum porttitor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis vulputate magna ac metus pretium condimentum. In tempus, est eget vestibulum blandit, velit massa dignissim nisl, ut scelerisque lorem neque vel velit. Maecenas fermentum commodo viverra. Curabitur a nibh non velit aliquam cursus. Integer semper condimentum tortor a pellentesque. Pellentesque semper, nisl id porttitor vehicula, sem dui feugiat lacus, vitae consequat augue urna vel odio.&lt;/p&gt;\n&lt;p&gt;Vestibulum id neque nec turpis iaculis pulvinar et a massa. Vestibulum sed nibh vitae arcu eleifend egestas. Mauris fermentum ultrices blandit. Suspendisse vitae lorem libero. Aenean et pellentesque tellus. Morbi quis neque orci, eu dignissim dui. Fusce sollicitudin mauris ac arcu vestibulum imperdiet. Proin ultricies nisl sit amet enim imperdiet eu ornare dui tempus. Maecenas lobortis nisi a tortor vestibulum vel eleifend tellus vestibulum. Donec metus sapien, hendrerit a fermentum id, dictum quis libero.&lt;/p&gt;\n&lt;p&gt;Pellentesque a lorem nulla, in tempor justo. Duis odio nisl, dignissim sed consequat sit amet, hendrerit ac neque. Nunc ac augue nec massa tempor rhoncus. Nam feugiat, tellus a varius euismod, justo nisl faucibus velit, ut vulputate justo massa eu nibh. Sed bibendum urna quis magna facilisis in accumsan dolor malesuada. Morbi sit amet nunc risus, in faucibus sem. Nullam sollicitudin magna sed sem mollis id commodo libero condimentum. Duis eu massa et lacus semper molestie ut adipiscing sem.&lt;/p&gt;\n&lt;p&gt;Sed id nulla mi, eget suscipit eros. Aliquam tempus molestie rutrum. In quis varius elit. Nullam dignissim neque nec velit vulputate porttitor. Mauris ac ligula sit amet elit fermentum rhoncus. In tellus urna, pulvinar quis condimentum ut, porta nec justo. In hac habitasse platea dictumst. Proin volutpat elit id quam molestie ac commodo lacus sagittis. Quisque placerat, augue tempor placerat pulvinar, nisi nisi venenatis urna, eget convallis eros velit quis magna. Suspendisse volutpat iaculis quam, ut tristique lacus luctus quis.&lt;/p&gt;\n&lt;p&gt;Nullam commodo suscipit lacus non aliquet. Phasellus ac nisl lorem, sed facilisis ligula. Nam cursus lobortis placerat. Sed dui nisi, elementum eu sodales ac, placerat sit amet mauris. Pellentesque dapibus tellus ut ipsum aliquam eu auctor dui vehicula. Quisque ultrices laoreet erat, at ultrices tortor sodales non. Sed venenatis luctus magna, ultricies ultricies nunc fringilla eget. Praesent scelerisque urna vitae nibh tristique varius consequat neque luctus. Integer ornare, erat a porta tempus, velit justo fermentum elit, a fermentum metus nisi eu ipsum. Vivamus eget augue vel dui viverra adipiscing congue ut massa. Praesent vitae eros erat, pulvinar laoreet magna. Maecenas vestibulum mollis nunc in posuere. Pellentesque sit amet metus a turpis lobortis tempor eu vel tortor. Cras sodales eleifend interdum.&lt;/p&gt;\n&lt;/body&gt;\n&lt;/html&gt;</pre>\n        \n<div class=\"note\"><strong>Note:</strong> The function <code>showNode</code> is also an example of the use of the <code><a title=\"en/JavaScript/Reference/Statements/for\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Statements/for\">for</a></code> cycle without a <code>statement</code> section. In this case <strong>a semicolon is always put immediately after the declaration of the cycle</strong>.</div>\n<p>…the same thing but with a dynamic page scroll:</p>\n\n          <pre name=\"code\" class=\"js\">function showBookmark (sBookmark) {\n  /*\n  * nDuration: the duration in milliseconds of each scroll\n  * nFrames: number of frames for each scroll\n  */ \n  var  nDuration = 500, nFrames = 10,\n    nLeft = 0, nTop = 0, oNode = document.getElementById(sBookmark),\n    nScrTop = document.documentElement.scrollTop,\n    nScrLeft = document.documentElement.scrollLeft;\n\n  for (var oItNode = oNode; oItNode; nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent);\n\n  for (var nItFrame = 1; nItFrame &lt; nFrames + 1; nItFrame++) {\n    setTimeout(\"document.documentElement.scrollTop=\" + Math.round(nScrTop + ((nTop - nScrTop) * nItFrame / nFrames)) + \";document.documentElement.scrollLeft=\" + Math.round(nScrLeft + ((nTop - nScrLeft) * nItFrame / nFrames)) + \";\", Math.round(nDuration * nItFrame / nFrames));\n  }\n}</pre>\n        \n</div>","<p>Whenever a property of the location object is modified, a document will be loaded using the URL as if <code>window.location.assign()</code> had been called with the modified URL.</p>\n<div id=\"section_8\"><span id=\"Replace_the_current_document_with_the_one_at_the_given_URL:\"></span><h5 class=\"editable\">Replace the current document with the one at the given URL:</h5>\n\n          <pre name=\"code\" class=\"js\">function goMoz() { \n   window.location = \"http://www.mozilla.org\";\n} \n\n// in html: &lt;button onclick=\"goMoz();\"&gt;Mozilla&lt;/button&gt;</pre>\n        \n<div class=\"note\"><strong>Note:</strong> The example above works in situations where <code>window.location.hash</code>&nbsp;does not need to be retained. However, in Gecko-based browsers, setting <code>window.location.pathname</code> in this manner will erase any information in <code>window.location.hash</code>, whereas in WebKit (and possibly other browsers), setting the pathname will not alter the the hash. If you need to change pathname but keep the hash as is, use the <code>replace()</code> method instead, which should work consistently across browsers.</div>\n<p><br> Consider the following example, which will reload the page by using the <code>replace()</code> method to insert the value of <code>window.location.pathname</code> into the hash (similar to Twitter's reload of <a class=\" external\" rel=\"external\" href=\"http://twitter.com/username\" title=\"http://twitter.com/username\" target=\"_blank\">http://twitter.com/username</a> to <a class=\" external\" rel=\"external\" href=\"http://twitter.com/#!/username\" title=\"http://twitter.com/#!/username\" target=\"_blank\">http://twitter.com/#!/username</a>):</p>\n\n          <pre name=\"code\" class=\"js\">function reloadPageWithHash() {\n  var initialPage = window.location.pathname;\n  window.location.replace('http://example.com/#' + initialPage);\n}</pre>\n        \n</div><div id=\"section_9\"><span id=\"Display_the_properties_of_the_current_URL_in_an_alert_dialog:\"></span><h5 class=\"editable\">Display the properties of the current URL in an alert dialog:</h5>\n\n          <pre name=\"code\" class=\"js\">function showLoc() {\n  var oLocation = window.location, aLog = [\"Property (Typeof): Value\", \"window.location (\" + (typeof oLocation) + \"): \" + oLocation ];\n  for (var sProp in oLocation){\n    aLog.push(sProp + \" (\" + (typeof oLocation[sProp]) + \"): \" +  (oLocation[sProp] || \"n/a\"));\n  }\n  alert(aLog.join(\"\\n\"));\n}\n\n// in html: &lt;button onclick=\"showLoc();\"&gt;Show location properties&lt;/button&gt;</pre>\n        \n</div><div id=\"section_10\"><span id=\"Send_a_string_of_data_to_the_server_by_modifying_the_search_property:\"></span><h5 class=\"editable\">Send a string of data to the server by modifying the <code>search</code> property:</h5>\n\n          <pre name=\"code\" class=\"js\">function sendData (sData) {\n  window.location.search = sData;\n}\n\n// in html: &lt;button onclick=\"sendData('Some data');\"&gt;Send data&lt;/button&gt;</pre>\n        \n<p>The current URL with \"?Some%20data\" appended is sent to the server (if no action is taken by the server, the current document is reloaded with the modified search string).</p>\n</div><div id=\"section_11\"><span id=\"Get_the_value_of_a_single_window.location.search_key:\"></span><h5 class=\"editable\">Get the value of a single <code>window.location.search</code> key:</h5>\n\n          <pre name=\"code\" class=\"js\">function loadPageVar (sVar) {\n  return unescape(window.location.search.replace(new RegExp(\"^(?:.*[&amp;\\\\?]\" + escape(sVar).replace(/[\\.\\+\\*]/g, \"\\\\$&amp;\") + \"(?:\\\\=([^&amp;]*))?)?.*$\", \"i\"), \"$1\"));\n}\n\nalert(loadPageVar(\"name\"));</pre>\n        \n</div><div id=\"section_12\"><span id=\"Nestle_the_variables_obtained_through_the_window.location.search_string_in_an_object_named_oGetVars.2C_also_attempting_to_recognize_their_typeof:\"></span><h5 class=\"editable\">Nestle the variables obtained through the <code>window.location.search</code> string in an object named <code>oGetVars</code>, also attempting to recognize their <code><a title=\"en/JavaScript/Reference/Operators/typeof\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Operators/typeof\">typeof</a></code>:</h5>\n\n          <pre name=\"code\" class=\"js\">var oGetVars = {};\n\nfunction buildValue(sValue) {\n  if (/^\\s*$/.test(sValue)) { return null; }\n  if (/^(true|false)$/i.test(sValue)) { return sValue.toLowerCase() === \"true\"; }\n  if (isFinite(sValue)) { return parseFloat(sValue); }\n  if (isFinite(Date.parse(sValue))) { return new Date(sValue); }\n  return sValue;\n}\n\nif (window.location.search.length &gt; 1) {\n  for (var aItKey, nKeyId = 0, aCouples = window.location.search.substr(1).split(\"&amp;\"); nKeyId &lt; aCouples.length; nKeyId++) {\n    aItKey = aCouples[nKeyId].split(\"=\");\n    oGetVars[unescape(aItKey[0])] = aItKey.length &gt; 1 ? buildValue(unescape(aItKey[1])) : null;\n  }\n}\n\n// alert(oGetVars.yourVar);</pre>\n        \n<p>…the same thing obtained by an anonymous constructor – useful for a global variable declaration:</p>\n\n          <pre name=\"code\" class=\"js\">var oGetVars = new (function (sSearch) {\n  var rNull = /^\\s*$/, rBool = /^(true|false)$/i;\n  function buildValue(sValue) {\n    if (rNull.test(sValue)) { return null; }\n    if (rBool.test(sValue)) { return sValue.toLowerCase() === \"true\"; }\n    if (isFinite(sValue)) { return parseFloat(sValue); }\n    if (isFinite(Date.parse(sValue))) { return new Date(sValue); }\n    return sValue;\n  }\n  if (sSearch.length &gt; 1) {\n    for (var aItKey, nKeyId = 0, aCouples = sSearch.substr(1).split(\"&amp;\"); nKeyId &lt; aCouples.length; nKeyId++) {\n      aItKey = aCouples[nKeyId].split(\"=\");\n      this[unescape(aItKey[0])] = aItKey.length &gt; 1 ? buildValue(unescape(aItKey[1])) : null;\n    }\n  }\n})(window.location.search);\n\n// alert(oGetVars.yourVar);</pre>\n        \n</div><div id=\"section_13\"><span id=\"Using_bookmars_without_changing_the_window.location.hash_property:\"></span><h5 class=\"editable\">Using bookmars without changing the <code>window.location.hash</code> property:</h5>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\" /&gt;\n&lt;title&gt;MDN Example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\nfunction showNode (oNode) {\n  var nLeft = 0, nTop = 0;\n  for (var oItNode = oNode; oItNode; nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent);\n  document.documentElement.scrollTop = nTop;\n  document.documentElement.scrollLeft = nLeft;\n}\n\nfunction showBookmark (sBookmark, bUseHash) {\n  if (bUseHash) { window.location.hash = \"#\" + sBookmark; return; }\n  var oBookmark = document.getElementById(sBookmark);\n  if (oBookmark) { showNode(oBookmark); }\n}\n&lt;/script&gt;\n&lt;style type=\"text/css\"&gt;\nspan.intLink {\n  cursor: pointer;\n  color: #0000ff;\n  text-decoration: underline;\n}\n&lt;/style&gt;\n&lt;/head&gt;\n\n&lt;body&gt;\n&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ultrices dolor ac dolor imperdiet ullamcorper. Suspendisse quam libero, luctus auctor mollis sed, malesuada condimentum magna. Quisque in ante tellus, in placerat est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec a mi magna, quis mattis dolor. Etiam sit amet ligula quis urna auctor imperdiet nec faucibus ante. Mauris vel consectetur dolor. Nunc eget elit eget velit pulvinar fringilla consectetur aliquam purus. Curabitur convallis, justo posuere porta egestas, velit erat ornare tortor, non viverra justo diam eget arcu. Phasellus adipiscing fermentum nibh ac commodo. Nam turpis nunc, suscipit a hendrerit vitae, volutpat non ipsum.&lt;/p&gt;\n&lt;p&gt;Duis lobortis sapien quis nisl luctus porttitor. In tempor semper libero, eu tincidunt dolor eleifend sit amet. Ut nec velit in dolor tincidunt rhoncus non non diam. Morbi auctor ornare orci, non euismod felis gravida nec. Curabitur elementum nisi a eros rutrum nec blandit diam placerat. Aenean tincidunt risus ut nisi consectetur cursus. Ut vitae quam elit. Donec dignissim est in quam tempor consequat. Aliquam aliquam diam non felis convallis suscipit. Nulla facilisi. Donec lacus risus, dignissim et fringilla et, egestas vel eros. Duis malesuada accumsan dui, at fringilla mauris bibendum quis. Cras adipiscing ultricies fermentum. Praesent bibendum condimentum feugiat.&lt;/p&gt;\n&lt;p id=\"myBookmark1\"&gt;[&amp;nbsp;&lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark2');\"&gt;Go to bookmark #2&lt;/span&gt;&amp;nbsp;]&lt;/p&gt;\n&lt;p&gt;Vivamus blandit massa ut metus mattis in fringilla lectus imperdiet. Proin ac ante a felis ornare vehicula. Fusce pellentesque lacus vitae eros convallis ut mollis magna pellentesque. Pellentesque placerat enim at lacus ultricies vitae facilisis nisi fringilla. In tincidunt tincidunt tincidunt. Nulla vitae tempor nisl. Etiam congue, elit vitae egestas mollis, ipsum nisi malesuada turpis, a volutpat arcu arcu id risus.&lt;/p&gt;\n&lt;p&gt;Nam faucibus, ligula eu fringilla pulvinar, lectus tellus iaculis nunc, vitae scelerisque metus leo non metus. Proin mattis lobortis lobortis. Quisque accumsan faucibus erat, vel varius tortor ultricies ac. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec libero nunc. Nullam tortor nunc, elementum a consectetur et, ultrices eu orci. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a nisl eu sem vehicula egestas.&lt;/p&gt;\n&lt;p&gt;Aenean viverra varius mauris, sed elementum lacus interdum non. Phasellus sit amet lectus vitae eros egestas pellentesque fermentum eget magna. Quisque mauris nisl, gravida vitae placerat et, condimentum id metus. Nulla eu est dictum dolor pulvinar volutpat. Pellentesque vitae sollicitudin nunc. Donec neque magna, lobortis id egestas nec, sodales quis lectus. Fusce cursus sollicitudin porta. Suspendisse ut tortor in mauris tincidunt rhoncus. Maecenas tincidunt fermentum facilisis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.&lt;/p&gt;\n&lt;p&gt;Suspendisse turpis nisl, consectetur in lacinia ut, ornare vel mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non lectus eu turpis vulputate cursus. Mauris interdum tincidunt erat id pharetra. Nullam in libero elit, sed consequat lectus. Morbi odio nisi, porta vitae molestie ut, gravida ut nunc. Ut non est dui, id ullamcorper orci. Praesent vel elementum felis. Maecenas ornare, dui quis auctor hendrerit, turpis sem ullamcorper odio, in auctor magna metus quis leo. Morbi at odio ante.&lt;/p&gt;\n&lt;p&gt;Curabitur est ipsum, porta ac viverra faucibus, eleifend sed eros. In sit amet vehicula tortor. Vestibulum viverra pellentesque erat a elementum. Integer commodo ultricies lorem, eget tincidunt risus viverra et. In enim turpis, porttitor ac ornare et, suscipit sit amet nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque vel ultrices nibh. Sed commodo aliquam aliquam. Nulla euismod, odio ut eleifend mollis, nisi dui gravida nibh, vitae laoreet turpis purus id ipsum. Donec convallis, velit non scelerisque bibendum, diam nulla auctor nunc, vel dictum risus ipsum sit amet est. Praesent ut nibh sit amet nibh congue pulvinar. Suspendisse dictum porttitor tempor.&lt;/p&gt;\n&lt;p&gt;Vestibulum dignissim erat vitae lectus auctor ac bibendum eros semper. Integer aliquet, leo non ornare faucibus, risus arcu tristique dolor, a aliquet massa mauris quis arcu. In porttitor, lectus ac semper egestas, ligula magna laoreet libero, eu commodo mauris odio id ante. In hac habitasse platea dictumst. In pretium erat diam, nec consequat eros. Praesent augue mi, consequat sed porttitor at, volutpat vitae eros. Sed pretium pharetra dapibus. Donec auctor interdum erat, lacinia molestie nibh commodo ut. Maecenas vestibulum vulputate felis, ut ullamcorper arcu faucibus in. Curabitur id arcu est. In semper mollis lorem at pellentesque. Sed lectus nisl, vestibulum id scelerisque eu, feugiat et tortor. Pellentesque porttitor facilisis ultricies.&lt;/p&gt;\n&lt;p id=\"myBookmark2\"&gt;[&amp;nbsp;&lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark1');\"&gt;Go to bookmark #1&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark1', true);\"&gt;Go to bookmark #1 using location.hash&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"showBookmark('myBookmark3');\"&gt;Go to bookmark #3&lt;/span&gt;&amp;nbsp;]&lt;/p&gt;\n&lt;p&gt;Phasellus tempus fringilla nunc, eget sagittis orci molestie vel. Nulla sollicitudin diam non quam iaculis ac porta justo venenatis. Quisque tellus urna, molestie vitae egestas sit amet, suscipit sed sem. Quisque nec lorem eu velit faucibus tristique ut ut dolor. Cras eu tortor ut libero placerat venenatis ut ut massa. Sed quis libero augue, et consequat libero. Morbi rutrum augue sed turpis elementum sed luctus nisl molestie. Aenean vitae purus risus, a semper nisl. Pellentesque malesuada, est id sagittis consequat, libero mauris tincidunt tellus, eu sagittis arcu purus rutrum eros. Quisque eget eleifend mi. Duis pharetra mi ac eros mattis lacinia rutrum ipsum varius.&lt;/p&gt;\n&lt;p&gt;Fusce cursus pulvinar aliquam. Duis justo enim, ornare vitae elementum sed, porta a quam. Aliquam eu enim eu libero mollis tempus. Morbi ornare aliquam posuere. Proin faucibus luctus libero, sed ultrices lorem sagittis et. Vestibulum malesuada, ante nec molestie vehicula, quam diam mollis ipsum, rhoncus posuere mauris lectus in eros. Nullam feugiat ultrices augue, ac sodales sem mollis in.&lt;/p&gt;\n&lt;p id=\"myBookmark3\"&gt;&lt;em&gt;Here is the bookmark #3&lt;/em&gt;&lt;/p&gt;\n&lt;p&gt;Proin vitae sem non lorem pellentesque molestie. Nam tempus massa et turpis placerat sit amet sollicitudin orci sodales. Pellentesque enim enim, sagittis a lobortis ut, tempus sed arcu. Aliquam augue turpis, varius vel bibendum ut, aliquam at diam. Nam lobortis, dui eu hendrerit pellentesque, sem neque porttitor erat, non dapibus velit lectus in metus. Vestibulum sit amet felis enim. In quis est vitae nunc malesuada consequat nec nec sapien. Suspendisse aliquam massa placerat dui lacinia luctus sed vitae risus. Fusce tempus, neque id ultrices volutpat, mi urna auctor arcu, viverra semper libero sem vel enim. Mauris dictum, elit non placerat malesuada, libero elit euismod nibh, nec posuere massa arcu eu risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer urna velit, dapibus eget varius feugiat, pellentesque sit amet ligula. Maecenas nulla nisl, facilisis eu egestas scelerisque, mollis eget metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi sed congue mi.&lt;/p&gt;\n&lt;p&gt;Fusce metus velit, pharetra at vestibulum nec, facilisis porttitor mi. Curabitur ligula sapien, fermentum vel porttitor id, rutrum sit amet magna. Sed sit amet sollicitudin turpis. Aenean luctus rhoncus dolor, et pulvinar ante egestas et. Donec ac massa orci, quis dapibus augue. Vivamus consectetur auctor pellentesque. Praesent vestibulum tincidunt ante sed consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce purus metus, imperdiet vitae iaculis convallis, bibendum vitae turpis.&lt;/p&gt;\n&lt;p&gt;Fusce aliquet molestie dolor, in ornare dui sodales nec. In molestie sollicitudin felis a porta. Mauris nec orci sit amet orci blandit tristique congue nec nunc. Praesent et tellus sollicitudin mauris accumsan fringilla. Morbi sodales, justo eu sollicitudin lacinia, lectus sapien ullamcorper eros, quis molestie urna elit bibendum risus. Proin eget tincidunt quam. Nam luctus commodo mauris, eu posuere nunc luctus non. Nulla facilisi. Vivamus eget leo rhoncus quam accumsan fringilla. Aliquam sit amet lorem est. Nullam vel tellus nibh, id imperdiet orci. Integer egestas leo eu turpis blandit scelerisque.&lt;/p&gt;\n&lt;p&gt;Etiam in blandit tellus. Integer sed varius quam. Vestibulum dapibus mi gravida arcu viverra blandit. Praesent tristique augue id sem adipiscing pellentesque. Sed sollicitudin, leo sed interdum elementum, nisi ante condimentum leo, eget ornare libero diam semper quam. Vivamus augue urna, porta eget ultrices et, dapibus ut ligula. Ut laoreet consequat faucibus. Praesent at lectus ut lectus malesuada mollis. Nam interdum adipiscing eros, nec sodales mi porta nec. Proin et quam vitae sem interdum aliquet. Proin vel odio at lacus vehicula aliquet.&lt;/p&gt;\n&lt;p&gt;Etiam placerat dui ut sem ornare vel vestibulum augue mattis. Sed semper malesuada mi, eu bibendum lacus lobortis nec. Etiam fringilla elementum risus, eget consequat urna laoreet nec. Etiam mollis quam non sem convallis vel consectetur lectus ullamcorper. Aenean mattis lacus quis ligula mattis eget vestibulum diam hendrerit. In non placerat mauris. Praesent faucibus nunc quis eros sagittis viverra. In hac habitasse platea dictumst. Suspendisse eget nisl erat, ac molestie massa. Praesent mollis vestibulum tincidunt. Fusce suscipit laoreet malesuada. Aliquam erat volutpat. Aliquam dictum elementum rhoncus. Praesent in est massa, pulvinar sodales nunc. Pellentesque gravida euismod mi ac convallis.&lt;/p&gt;\n&lt;p&gt;Mauris vel odio vel nulla facilisis lacinia. Aliquam ultrices est at leo blandit tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse porttitor adipiscing facilisis. Duis cursus quam iaculis augue interdum porttitor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis vulputate magna ac metus pretium condimentum. In tempus, est eget vestibulum blandit, velit massa dignissim nisl, ut scelerisque lorem neque vel velit. Maecenas fermentum commodo viverra. Curabitur a nibh non velit aliquam cursus. Integer semper condimentum tortor a pellentesque. Pellentesque semper, nisl id porttitor vehicula, sem dui feugiat lacus, vitae consequat augue urna vel odio.&lt;/p&gt;\n&lt;p&gt;Vestibulum id neque nec turpis iaculis pulvinar et a massa. Vestibulum sed nibh vitae arcu eleifend egestas. Mauris fermentum ultrices blandit. Suspendisse vitae lorem libero. Aenean et pellentesque tellus. Morbi quis neque orci, eu dignissim dui. Fusce sollicitudin mauris ac arcu vestibulum imperdiet. Proin ultricies nisl sit amet enim imperdiet eu ornare dui tempus. Maecenas lobortis nisi a tortor vestibulum vel eleifend tellus vestibulum. Donec metus sapien, hendrerit a fermentum id, dictum quis libero.&lt;/p&gt;\n&lt;p&gt;Pellentesque a lorem nulla, in tempor justo. Duis odio nisl, dignissim sed consequat sit amet, hendrerit ac neque. Nunc ac augue nec massa tempor rhoncus. Nam feugiat, tellus a varius euismod, justo nisl faucibus velit, ut vulputate justo massa eu nibh. Sed bibendum urna quis magna facilisis in accumsan dolor malesuada. Morbi sit amet nunc risus, in faucibus sem. Nullam sollicitudin magna sed sem mollis id commodo libero condimentum. Duis eu massa et lacus semper molestie ut adipiscing sem.&lt;/p&gt;\n&lt;p&gt;Sed id nulla mi, eget suscipit eros. Aliquam tempus molestie rutrum. In quis varius elit. Nullam dignissim neque nec velit vulputate porttitor. Mauris ac ligula sit amet elit fermentum rhoncus. In tellus urna, pulvinar quis condimentum ut, porta nec justo. In hac habitasse platea dictumst. Proin volutpat elit id quam molestie ac commodo lacus sagittis. Quisque placerat, augue tempor placerat pulvinar, nisi nisi venenatis urna, eget convallis eros velit quis magna. Suspendisse volutpat iaculis quam, ut tristique lacus luctus quis.&lt;/p&gt;\n&lt;p&gt;Nullam commodo suscipit lacus non aliquet. Phasellus ac nisl lorem, sed facilisis ligula. Nam cursus lobortis placerat. Sed dui nisi, elementum eu sodales ac, placerat sit amet mauris. Pellentesque dapibus tellus ut ipsum aliquam eu auctor dui vehicula. Quisque ultrices laoreet erat, at ultrices tortor sodales non. Sed venenatis luctus magna, ultricies ultricies nunc fringilla eget. Praesent scelerisque urna vitae nibh tristique varius consequat neque luctus. Integer ornare, erat a porta tempus, velit justo fermentum elit, a fermentum metus nisi eu ipsum. Vivamus eget augue vel dui viverra adipiscing congue ut massa. Praesent vitae eros erat, pulvinar laoreet magna. Maecenas vestibulum mollis nunc in posuere. Pellentesque sit amet metus a turpis lobortis tempor eu vel tortor. Cras sodales eleifend interdum.&lt;/p&gt;\n&lt;/body&gt;\n&lt;/html&gt;</pre>\n        \n<div class=\"note\"><strong>Note:</strong> The function <code>showNode</code> is also an example of the use of the <code><a title=\"en/JavaScript/Reference/Statements/for\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Statements/for\">for</a></code> cycle without a <code>statement</code> section. In this case <strong>a semicolon is always put immediately after the declaration of the cycle</strong>.</div>\n<p>…the same thing but with a dynamic page scroll:</p>\n\n          <pre name=\"code\" class=\"js\">function showBookmark (sBookmark) {\n  /*\n  * nDuration: the duration in milliseconds of each scroll\n  * nFrames: number of frames for each scroll\n  */ \n  var  nDuration = 500, nFrames = 10,\n    nLeft = 0, nTop = 0, oNode = document.getElementById(sBookmark),\n    nScrTop = document.documentElement.scrollTop,\n    nScrLeft = document.documentElement.scrollLeft;\n\n  for (var oItNode = oNode; oItNode; nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent);\n\n  for (var nItFrame = 1; nItFrame &lt; nFrames + 1; nItFrame++) {\n    setTimeout(\"document.documentElement.scrollTop=\" + Math.round(nScrTop + ((nTop - nScrTop) * nItFrame / nFrames)) + \";document.documentElement.scrollLeft=\" + Math.round(nScrLeft + ((nTop - nScrLeft) * nItFrame / nFrames)) + \";\", Math.round(nDuration * nItFrame / nFrames));\n  }\n}</pre>\n        \n</div>"],"srcUrl":"https://developer.mozilla.org/en/DOM/window.location","specification":"HTML Specification: window . location","seeAlso":"Manipulating the browser history","summary":"Returns a <a href=\"#Location_object\"> <code>Location</code> object</a>, which contains information about the URL of the document and provides methods for changing that URL. You can also assign to this property to load another URL.","members":[{"name":"assign","help":"Load the document at the provided URL.","obsolete":false},{"name":"reload","help":"Reload the document from the current URL. <code>forceget</code> is a boolean, which, when it is <code>true</code>, causes the page to always be reloaded from the server. If it is <code>false</code> or not specified, the browser may reload the page from its cache.","obsolete":false},{"name":"replace","help":"Replace the current document with the one at the provided URL. The difference from the <code>assign()</code> method is that after using <code>replace()</code> the current page will not be saved in session history, meaning the user won't be able to use the Back button to navigate to it.","obsolete":false},{"name":"toString","help":"Returns the string representation of the <code>Location</code> object's URL. See the <a title=\"en/Core_JavaScript_1.5_Reference/Global_Objects/Object/toString\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/toString\">JavaScript reference</a> for details.","obsolete":false},{"name":"hash","help":"the part of the URL that follows the # symbol, including the # symbol.<br> You can listen for the <a title=\"en/DOM/window.onhashchange\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.onhashchange\">hashchange event</a> to get notified of changes to the hash in supporting browsers.","obsolete":false},{"name":"host","help":"the host name and port number.","obsolete":false},{"name":"hostname","help":"the host name (without the port number or square brackets).","obsolete":false},{"name":"href","help":"the entire URL.","obsolete":false},{"name":"pathname","help":"the path (relative to the host).","obsolete":false},{"name":"port","help":"the port number of the URL.","obsolete":false},{"name":"protocol","help":"the protocol of the URL.","obsolete":false},{"name":"search","help":"the part of the URL that follows the&nbsp;? symbol, including the&nbsp;? symbol.","obsolete":false},{"name":"assign","help":"Load the document at the provided URL.","obsolete":false},{"name":"reload","help":"Reload the document from the current URL. <code>forceget</code> is a boolean, which, when it is <code>true</code>, causes the page to always be reloaded from the server. If it is <code>false</code> or not specified, the browser may reload the page from its cache.","obsolete":false},{"name":"replace","help":"Replace the current document with the one at the provided URL. The difference from the <code>assign()</code> method is that after using <code>replace()</code> the current page will not be saved in session history, meaning the user won't be able to use the Back button to navigate to it.","obsolete":false},{"name":"toString","help":"Returns the string representation of the <code>Location</code> object's URL. See the <a title=\"en/Core_JavaScript_1.5_Reference/Global_Objects/Object/toString\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/toString\">JavaScript reference</a> for details.","obsolete":false},{"name":"hash","help":"the part of the URL that follows the # symbol, including the # symbol.<br> You can listen for the <a title=\"en/DOM/window.onhashchange\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.onhashchange\">hashchange event</a> to get notified of changes to the hash in supporting browsers.","obsolete":false},{"name":"host","help":"the host name and port number.","obsolete":false},{"name":"hostname","help":"the host name (without the port number or square brackets).","obsolete":false},{"name":"href","help":"the entire URL.","obsolete":false},{"name":"pathname","help":"the path (relative to the host).","obsolete":false},{"name":"port","help":"the port number of the URL.","obsolete":false},{"name":"protocol","help":"the protocol of the URL.","obsolete":false},{"name":"search","help":"the part of the URL that follows the&nbsp;? symbol, including the&nbsp;? symbol.","obsolete":false}]},"OverflowEvent":{"title":"XUL Events","members":[],"srcUrl":"https://developer.mozilla.org/en/XUL/Events","skipped":true,"cause":"Suspect title"},"SVGPathSegMovetoAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGSymbolElement":{"title":"SVGSymbolElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGSymbolElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/symbol\">&lt;symbol&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSymbolElement"},"HTMLDetailsElement":{"title":"details","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>12</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=591737\" class=\"external\" title=\"\">\nbug 591737</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>4.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=591737\" class=\"external\" title=\"\">\nbug 591737</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["&lt;details&gt;\n  &lt;summary&gt;Some details&lt;/summary&gt;\n  &lt;p&gt;More info about the details.&lt;/p&gt;\n&lt;/details&gt;"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/details","seeAlso":"&lt;summary&gt;","summary":"The HTML <em>details</em> element (<code>&lt;details&gt;</code>) is used as a disclosure widget from which the user the retrieve additional information.","members":[{"obsolete":false,"url":"","name":"open","help":"This Boolean attribute indicates whether the details will be shown to the user on page load. If omitted the details will be hidden."}]},"SVGTextPathElement":{"title":"textPath","examples":["&lt;?xml version=\"1.0\" standalone=\"no\"?&gt;\n&lt;!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"&gt;\n&lt;svg width=\"12cm\" height=\"3.6cm\" viewBox=\"0 0 1000 300\" version=\"1.1\"\n     xmlns=\"http://www.w3.org/2000/svg\" \n     xmlns:xlink=\"http://www.w3.org/1999/xlink\"&gt;\n  &lt;defs&gt;\n    &lt;path id=\"MyPath\"\n          d=\"M 100 200 \n             C 200 100 300   0 400 100\n             C 500 200 600 300 700 200\n             C 800 100 900 100 900 100\" /&gt;\n  &lt;/defs&gt;\n\n  &lt;use xlink:href=\"#MyPath\" fill=\"none\" stroke=\"red\"  /&gt;\n\n  &lt;text font-family=\"Verdana\" font-size=\"42.5\" fill=\"blue\" &gt;\n    &lt;textPath xlink:href=\"#MyPath\"&gt;\n      We go up, then we go down, then up again\n    &lt;/textPath&gt;\n  &lt;/text&gt;\n\n  &lt;!-- Show outline of canvas using 'rect' element --&gt;\n  &lt;rect x=\"1\" y=\"1\" width=\"998\" height=\"298\"\n        fill=\"none\" stroke=\"blue\" stroke-width=\"2\" /&gt;\n&lt;/svg&gt;"],"summary":"In addition to text drawn in a straight line, SVG also includes the ability to place text along the shape of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n element. To specify that a block of text is to be rendered along the shape of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n, include the given text within a <code>textPath</code> element which includes an <code>xlink:href</code> attribute with a reference to a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n element.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/startOffset","name":"startOffset","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/spacing","name":"spacing","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/method","name":"method","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/textPath"},"SVGTextPositioningElement":{"title":"SVGTextPositioningElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGTextPositioningElement</code> interface is inherited by text-related interfaces: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTextElement\">SVGTextElement</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTSpanElement\">SVGTSpanElement</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTRefElement\">SVGTRefElement</a></code>\n and <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGAltGlyphElement\" class=\"new\">SVGAltGlyphElement</a></code>\n.","members":[{"name":"dx","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/dx\" class=\"new\">dx</a></code> on the given element.","obsolete":false},{"name":"dy","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/dy\" class=\"new\">dy</a></code> on the given element.","obsolete":false},{"name":"rotate","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/rotate\" class=\"new\">rotate</a></code> on the given element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGTextPositioningElement"},"SVGSwitchElement":{"title":"SVGSwitchElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGSwitchElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/switch\">&lt;switch&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSwitchElement"},"SVGEllipseElement":{"title":"SVGEllipseElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGEllipseElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n SVG Element","summary":"The <code>SVGEllipseElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"cx","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cx\">cx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n element.","obsolete":false},{"name":"cy","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cy\">cy</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n element.","obsolete":false},{"name":"rx","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/rx\">rx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n element.","obsolete":false},{"name":"ry","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/ry\">ry</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/ellipse\">&lt;ellipse&gt;</a></code>\n element.","obsolete":false}]},"Database":{"title":"The Places database","summary":"<div><p>This content covers features introduced in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/Firefox_3_for_developers\">Firefox 3</a>.</p></div>\n<p></p>\n<p>This document provides a high-level overview of the overall database design of the <a title=\"en/Places\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Places\">Places</a> system. Places is designed to be a complete replacement for the Firefox bookmarks and history systems using <a title=\"en/Storage\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Storage\">Storage.</a></p>\n<p>View the <a class=\" external\" rel=\"external\" href=\"http://people.mozilla.org/~dietrich/places-erd.png\" title=\"http://people.mozilla.org/~dietrich/places-erd.png\" target=\"_blank\">schema diagram</a>.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/The_Places_database"},"DOMException":{"title":"DOMException","summary":"<p>The following are the <strong>DOMException</strong> codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\">Code</th> <th scope=\"col\">'Abstract' Constant name</th> </tr> </thead> <tbody> <tr> <th colspan=\"2\">Level 1</th> </tr> <tr> <td><code>1</code></td> <td><code>INDEX_SIZE_ERR</code></td> </tr> <tr> <td><code>2</code></td> <td><code>DOMSTRING_SIZE_ERR</code></td> </tr> <tr> <td><code>3</code></td> <td><code>HIERARCHY_REQUEST_ERR</code></td> </tr> <tr> <td><code>4</code></td> <td><code>WRONG_DOCUMENT_ERR</code></td> </tr> <tr> <td><code>5</code></td> <td><code>INVALID_CHARACTER_ERR</code></td> </tr> <tr> <td><code>6</code></td> <td><code>NO_DATA_ALLOWED_ERR</code></td> </tr> <tr> <td><code>7</code></td> <td><code>NO_MODIFICATION_ALLOWED_ERR</code></td> </tr> <tr> <td><code>8</code></td> <td><code>NOT_FOUND_ERR</code></td> </tr> <tr> <td><code>9</code></td> <td><code>NOT_SUPPORTED_ERR</code></td> </tr> <tr> <td><code>10</code></td> <td><code>INUSE_ATTRIBUTE_ERR</code></td> </tr> <tr> <th colspan=\"2\">Level 2</th> </tr> <tr> <td><code>11</code></td> <td><code>INVALID_STATE_ERR</code></td> </tr> <tr> <td><code>12</code></td> <td><code>SYNTAX_ERR</code></td> </tr> <tr> <td><code>13</code></td> <td><code>INVALID_MODIFICATION_ERR</code></td> </tr> <tr> <td><code>14</code></td> <td><code>NAMESPACE_ERR</code></td> </tr> <tr> <td><code>15</code></td> <td><code>INVALID_ACCESS_ERR</code></td> </tr> <tr> <th colspan=\"2\"><strong>Level 3</strong></th> </tr> <tr> <td><code>16</code></td> <td><code>VALIDATION_ERR</code></td> </tr> <tr> <td><code>17</code></td> <td><code>TYPE_MISMATCH_ERR</code></td> </tr> </tbody>\n</table>","members":[],"srcUrl":"https://developer.mozilla.org/En/DOM/DOMException","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-17189187"},"Navigator":{"title":"window.navigator","examples":["alert(\"You're using \" + navigator.appName);\n"],"srcUrl":"https://developer.mozilla.org/en/DOM/window.navigator","specification":"Defined in <a class=\"external\" title=\"http://www.whatwg.org/html/#navigator\" rel=\"external\" href=\"http://www.whatwg.org/html/#navigator\" target=\"_blank\">HTML</a>.","seeAlso":"DOM Client Object Cross-Reference:navigator","summary":"Returns a reference to the navigator object, which can be queried for information about the application running the script.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.javaEnabled","name":"javaEnabled","help":"Indicates whether the host browser is Java-enabled or not."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.navigator.taintEnabled","name":"taintEnabled","help":"Returns <code>false</code>. JavaScript taint/untaint functions removed in JavaScript 1.2. Removed from Firefox 9."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.registerContentHandler","name":"registerContentHandler","help":"Allows web sites to register themselves as a possible handler for a given MIME type."},{"name":"webkitIsLocallyAvailable","help":"Lets code check to see if the document at a given URI is available without using the network.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.navigator.registerProtocolHandler","name":"registerProtocolHandler","help":"Allows web sites to register themselves as a possible handler for a given protocol."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.navigator.preference","name":"preference","help":"Sets a user preference. This method is <a class=\"external\" rel=\"external\" href=\"http://www.faqts.com/knowledge_base/view.phtml/aid/1608/fid/125/lang/en\" title=\"http://www.faqts.com/knowledge_base/view.phtml/aid/1608/fid/125/lang/en\" target=\"_blank\">only available to privileged code</a> and is obsolete; you should use the XPCOM <a title=\"en/Preferences_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Preferences_API\">Preferences API</a> instead."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.appVersion","name":"appVersion","help":"Returns the version of the browser as a string. Do not rely on this property to return the correct value."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.appName","name":"appName","help":"Returns the official name of the browser. Do not rely on this property to return the correct value."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.cookieEnabled","name":"cookieEnabled","help":"Returns a boolean indicating whether cookies are enabled in the browser or not."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.productSub","name":"productSub","help":"Returns the build number of the current browser (e.g. \"20060909\")"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.userAgent","name":"userAgent","help":"Returns the user agent string for the current browser."},{"name":"webkitBattery","help":"Returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.navigator.mozBattery\">battery</a></code>\n object you can use to get information about the battery charging status.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.navigator.securitypolicy","name":"securitypolicy","help":"Returns an empty string. In Netscape 4.7x, returns \"US &amp; CA domestic policy\" or \"Export policy\"."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.buildID","name":"buildID","help":"Returns the build identifier of the browser (e.g. \"2006090803\")"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.vendor","name":"vendor","help":"Returns the vendor name of the current browser (e.g. \"Netscape6\")"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/navigator.doNotTrack","name":"doNotTrack","help":"Reports the value of the user's do-not-track preference. When this value is \"yes\", your web site or application should not track the user."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.appCodeName","name":"appCodeName","help":"Returns the internal \"code\" name of the current browser. Do not rely on this property to return the correct value."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/navigator.id","name":"id","help":"Returns the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.navigator.id\" class=\"new\">id</a></code>\n object which you can use to add support for <a title=\"BrowserID\" rel=\"internal\" href=\"https://developer.mozilla.org/en/BrowserID\">BrowserID</a> to your web site."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.onLine","name":"onLine","help":"Returns a boolean indicating whether the browser is working online."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.vendorSub","name":"vendorSub","help":"Returns the vendor version number (e.g. \"6.1\")"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.mimeTypes","name":"mimeTypes","help":"Returns a list of the MIME types supported by the browser."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.plugins","name":"plugins","help":"Returns an array of the plugins installed in the browser."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.platform","name":"platform","help":"Returns a string representing the platform of the browser."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.language","name":"language","help":"Returns a string representing the language version of the browser."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.product","name":"product","help":"Returns the product name of the current browser. (e.g. \"Gecko\")"},{"obsolete":false,"url":"https://developer.mozilla.org/en/API/Mouse_Lock_API","name":"webkitPointer","help":"Returns a PointerLock object for the <a title=\"Mouse Lock API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/API/Mouse_Lock_API\">Mouse Lock API</a>."},{"name":"webkitNotification","help":"<dt><code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/navigator.webkitNotification\" class=\"new\">navigator.webkitNotification</a></code>\n</dt> <dd>Returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/navigator.mozNotification\">notification</a></code>\n object you can use to deliver notifications to the user from your web application.</dd>","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator.oscpu","name":"oscpu","help":"Returns a string that represents the current operating system."}]},"SVGViewElement":{"title":"SVGViewElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGViewElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n SVG Element","summary":"The <code>SVGViewElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"viewTarget","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n element. A list of DOMString values which contain the names listed in the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> attribute. Each of the DOMString values can be associated with the corresponding element using the getElementById() method call.","obsolete":false}]},"Text":{"title":"Text","summary":"<p>In the <a title=\"en/DOM\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM\">DOM</a>, the Text interface represents the textual content of an <a class=\"internal\" title=\"En/DOM/Element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">Element</a> or <a class=\"internal\" title=\"En/DOM/Attr\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Attr\">Attr</a>.&nbsp; If an element has no markup within its content, it has a single child implementing Text that contains the element's text.&nbsp; However, if the element contains markup, it is parsed into information items and Text nodes that form its children.</p>\n<p>New documents have a single Text node for each block of text.&nbsp; Over time, more Text nodes may be created as the document's content changes.&nbsp; The <code>Node.normalize()</code>&nbsp;method merges adjacent Text objects back into a single node for each block of text.</p>\n<p>Text also implements the <a title=\"En/DOM/CharacterData\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/CharacterData\">CharacterData</a> interface (which implements the Node interface).</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Text.replaceWholeText","name":"replaceWholeText","help":"Replaces the text of the current node and all logically adjacent nodes with the specified text. <div class=\"note\"><strong>Note: </strong>Do not use this method as it has been removed from the standard and is no longer implemented in recent browsers, like Firefox 10.</div>"},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Text.splitText","name":"splitText","help":"Breaks the node into two nodes at a specified offset."},{"url":"https://developer.mozilla.org/En/DOM/Text.isElementContentWhitespace","name":"isElementContentWhitespace","help":"<p>Returns whether or not the text node contains only whitespace.&nbsp; Read only.</p> <div class=\"note\"><strong>Note: </strong>Do not use this property as it has been removed from the standard and is no longer implemented in recent browsers, like Firefox 10.</div>","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/Text.wholeText","name":"wholeText","help":"Returns all text of all Text nodes logically adjacent to this node, concatenated in document order.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/Text","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...#ID-1312295772"},"SVGAnimatedTransformList":{"title":"SVGAnimatedTransformList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>9.0 (9.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGAnimatedTransformList</code> interface is used for attributes which take a list of numbers and which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTransformList\">SVGTransformList</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTransformList\">SVGTransformList</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> will always be distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedTransformList"},"PerformanceNavigation":{"title":"Navigation Timing","members":[],"srcUrl":"https://developer.mozilla.org/en/Navigation_timing","skipped":true,"cause":"Suspect title"},"SVGPathElement":{"title":"SVGPathElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n SVG Element","summary":"The <code>SVGPathElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n element.","members":[{"name":"getTotalLength","help":"Returns the computed value for the total length of the path using the browser's distance-along-a-path algorithm, as a distance in the current user coordinate system.","obsolete":false},{"name":"getPointAtLength","help":"Returns the (x,y) coordinate in user space which is distance units along the path, utilizing the browser's distance-along-a-path algorithm.","obsolete":false},{"name":"getPathSegAtLength","help":"Returns the index into <code>pathSegList</code> which is <code>distance</code> units along the path, utilizing the user agent's distance-along-a-path algorithm.","obsolete":false},{"name":"createSVGPathSegClosePath","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegClosePath\" class=\"new\">SVGPathSegClosePath</a></code>\n object.","obsolete":false},{"name":"createSVGPathSegMovetoAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegMovetoAbs\" class=\"new\">SVGPathSegMovetoAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The absolute Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegMovetoRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegMovetoRel\" class=\"new\">SVGPathSegMovetoRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The relative Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoAbs\" class=\"new\">SVGPathSegLinetoAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The absolute Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoRel\" class=\"new\">SVGPathSegLinetoRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The relative Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoCubicAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoCubicAbs\" class=\"new\">SVGPathSegCurvetoCubicAbs</a></code>\n object.<br> <br> Parameters: <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The absolute Y coordinate for the end point of this path segment.</li> <li><code>float <em>x1</em></code><br> The absolute X coordinate for the first control point.</li> <li><code>float <em>y1</em></code><br> The absolute Y coordinate for the first control point.</li> <li><code>float <em>x2</em></code><br> The absolute X coordinate for the second control point.</li> <li><code>float <em>y2</em></code><br> The absolute Y coordinate for the second control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoCubicRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoCubicRel\" class=\"new\">SVGPathSegCurvetoCubicRel</a></code>\n object.<br> <br> Parameters: <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The relative Y coordinate for the end point of this path segment.</li> <li><code>float <em>x1</em></code><br> The relative X coordinate for the first control point.</li> <li><code>float <em>y1</em></code><br> The relative Y coordinate for the first control point.</li> <li><code>float <em>x2</em></code><br> The relative X coordinate for the second control point.</li> <li><code>float <em>y2</em></code><br> The relative Y coordinate for the second control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoQuadraticAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoQuadraticAbs\" class=\"new\">SVGPathSegCurvetoQuadraticAbs</a></code>\n object.<br> <br> Parameters: <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The absolute Y coordinate for the end point of this path segment.</li> <li><code>float <em>x1</em></code><br> The absolute X coordinate for the first control point.</li> <li><code>float <em>y1</em></code><br> The absolute Y coordinate for the first control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoQuadraticRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoQuadraticRel\" class=\"new\">SVGPathSegCurvetoQuadraticRel</a></code>\n object.<br> <br> Parameters: <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The relative Y coordinate for the end point of this path segment.</li> <li><code>float <em>x1</em></code><br> The relative X coordinate for the first control point.</li> <li><code>float <em>y1</em></code><br> The relative Y coordinate for the first control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegArcAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegArcAbs\" class=\"new\">SVGPathSegArcAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The absolute Y coordinate for the end point of this path segment.</li> <li><code>float <em>r1</em></code><br> The x-axis radius for the ellipse.</li> <li><code>float <em>r2 </em></code><br> The y-axis radius for the ellipse.</li> <li><code>float <em>angle </em></code><br> The rotation angle in degrees for the ellipse's x-axis relative to the x-axis of the user coordinate system.</li> <li><code>boolean <em>largeArcFlag </em></code><br> The value of the large-arc-flag parameter.</li> <li><code>boolean <em>sweepFlag </em></code><br> The value of the large-arc-flag parameter.</li> </ul>","obsolete":false},{"name":"createSVGPathSegArcRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegArcRel\" class=\"new\">SVGPathSegArcRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em> </code><br> The relative Y coordinate for the end point of this path segment.</li> <li><code>float <em>r1</em></code><br> The x-axis radius for the ellipse.</li> <li><code>float <em>r2 </em></code><br> The y-axis radius for the ellipse.</li> <li><code>float <em>angle </em></code><br> The rotation angle in degrees for the ellipse's x-axis relative to the x-axis of the user coordinate system.</li> <li><code>boolean <em>largeArcFlag </em></code><br> The value of the large-arc-flag parameter.</li> <li><code>boolean <em>sweepFlag </em></code><br> The value of the large-arc-flag parameter.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoHorizontalAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoHorizontalAbs\" class=\"new\">SVGPathSegLinetoHorizontalAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoHorizontalRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoHorizontalRel\" class=\"new\">SVGPathSegLinetoHorizontalRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The relative X coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoVerticalAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoVerticalAbs\" class=\"new\">SVGPathSegLinetoVerticalAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>y</em></code><br> The absolute Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegLinetoVerticalRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegLinetoVerticalRel\" class=\"new\">SVGPathSegLinetoVerticalRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>y</em></code><br> The relative Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoCubicSmoothAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoCubicSmoothAbs\" class=\"new\">SVGPathSegCurvetoCubicSmoothAbs</a></code>\n object.<br> <br> Parameters <ul> <li><code>float <em>x </em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y </em></code><br> The absolute Y coordinate for the end point of this path segment.</li> <li><code>float <em>x2 </em></code><br> The absolute X coordinate for the second control point.</li> <li><code>float <em>y2 </em></code><br> The absolute Y coordinate for the second control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoCubicSmoothRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoCubicSmoothRel\" class=\"new\">SVGPathSegCurvetoCubicSmoothRel</a></code>\n object.<br> <br> Parameters <ul> <li><code>float <em>x </em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y </em></code><br> The absolute Y coordinate for the end point of this path segment.</li> <li><code>float <em>x2 </em></code><br> The absolute X coordinate for the second control point.</li> <li><code>float <em>y2 </em></code><br> The absolute Y coordinate for the second control point.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoQuadraticSmoothAbs","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoQuadraticSmoothAbs\" class=\"new\">SVGPathSegCurvetoQuadraticSmoothAbs</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The absolute Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"createSVGPathSegCurvetoQuadraticSmoothRel","help":"Returns a stand-alone, parentless <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGPathSegCurvetoQuadraticSmoothRel\" class=\"new\">SVGPathSegCurvetoQuadraticSmoothRel</a></code>\n object.<br> <br> <strong>Parameters:</strong> <ul> <li><code>float <em>x</em></code><br> The absolute X coordinate for the end point of this path segment.</li> <li><code>float <em>y</em></code><br> The absolute Y coordinate for the end point of this path segment.</li> </ul>","obsolete":false},{"name":"pathLength","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/pathLength\">pathLength</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/path\">&lt;path&gt;</a></code>\n element.","obsolete":false}]},"HTMLCanvasElement":{"title":"HTMLCanvasElement","examples":["<p>First do your drawing on the canvas, then call <code>canvas.toDataURL()</code> to get the data: URL for the canvas.</p>\n\n          <pre name=\"code\" class=\"js\">function test() {\n var canvas = document.getElementById(\"canvas\");\n var url = canvas.toDataURL();\n \n var newImg = document.createElement(\"img\");\n newImg.src = url;\n document.body.appendChild(newImg);\n}</pre>","<p>Once you've drawn content into a canvas, you can convert it into a file of any supported image format. The code snippet below, for example, takes the image in the canvas element whose ID&nbsp;is \"canvas\", obtains a copy of it as a PNG&nbsp;image, then appends a new <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img\">&lt;img&gt;</a></code>\n element to the document, whose source image is the one created using the canvas.</p>\n\n          <pre name=\"code\" class=\"js\">function test() {\n var canvas = document.getElementById(\"canvas\");\n canvas.toBlob(function(blob) {\n    var newImg = document.createElement(\"img\"),\n        url = URL.createObjectURL(blob);\n    newImg.onload = function() {\n        // no longer need to read the blob so it's revoked\n        URL.revokeObjectURL(url);\n    };\n    newImg.src = url;\n    document.body.appendChild(newImg);\n });\n}</pre>\n        \n<p>You can use this technique in association with mouse events in order to dynamically change images (grayscale versus color in this example):</p>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /&gt;\n&lt;title&gt;MDC Example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\nfunction showColorImg() {\n    this.style.display = \"none\";\n    this.nextSibling.style.display = \"inline\";\n}\n\nfunction showGrayImg() {\n    this.previousSibling.style.display = \"inline\";\n    this.style.display = \"none\";\n}\n\nfunction removeColors() {\n    var aImages = document.getElementsByClassName(\"grayscale\"), nImgsLen = aImages.length, oCanvas = document.createElement(\"canvas\"), oCtx = oCanvas.getContext(\"2d\");\n    for (var nWidth, nHeight, oImgData, oGrayImg, nPixel, aPix, nPixLen, nImgId = 0; nImgId &lt; nImgsLen; nImgId++) {\n        oColorImg = aImages[nImgId];\n        nWidth = oColorImg.offsetWidth;\n        nHeight = oColorImg.offsetHeight;\n        oCanvas.width = nWidth;\n        oCanvas.height = nHeight;\n        oCtx.drawImage(oColorImg, 0, 0);\n        oImgData = oCtx.getImageData(0, 0, nWidth, nHeight);\n        aPix = oImgData.data;\n        nPixLen = aPix.length;\n        for (nPixel = 0; nPixel &lt; nPixLen; nPixel += 4) {\n            aPix[nPixel + 2] = aPix[nPixel + 1] = aPix[nPixel] = (aPix[nPixel] + aPix[nPixel + 1] + aPix[nPixel + 2]) / 3;\n        }\n        oCtx.putImageData(oImgData, 0, 0);\n        oGrayImg = new Image();\n        oGrayImg.src = oCanvas.toDataURL();\n        oGrayImg.onmouseover = showColorImg;\n        oColorImg.onmouseout = showGrayImg;\n        oCtx.clearRect(0, 0, nWidth, nHeight);\n        oColorImg.style.display = \"none\";\n        oColorImg.parentNode.insertBefore(oGrayImg, oColorImg);\n    }\n}\n&lt;/script&gt;\n&lt;/head&gt;\n\n&lt;body onload=\"removeColors();\"&gt;\n&lt;p&gt;&lt;img class=\"grayscale\" src=\"chagall.jpg\" alt=\"\" /&gt;&lt;/p&gt;\n&lt;/body&gt;\n&lt;/html&gt;</pre>\n        \n<p>Note that here we're creating a PNG&nbsp;image; if you add a second parameter to the <code>toBlob()</code>&nbsp;call, you can specify the image type. For example, to get the image in JPEG format:</p>\n<pre class=\"deki-transform\"> canvas.toBlob(function(blob){...}, \"image/jpeg\", 0.95); // JPEG at 95% quality</pre>\n<p>\n<a rel=\"internal\" href=\"https://developer.mozilla.org/samples/domref/mozGetAsFile.html\" title=\"samples/domref/mozGetAsFile.html\" class=\" new\"><span>View the live example</span></a> (uses <code>mozGetAsFile()</code>)</p>"],"summary":"DOM&nbsp;canvas elements expose the <code><a class=\"external\" href=\"http://www.w3.org/TR/html5/the-canvas-element.html#htmlcanvaselement\" rel=\"external nofollow\" target=\"_blank\" title=\"http://www.w3.org/TR/html5/the-canvas-element.html#htmlcanvaselement\">HTMLCanvasElement</a></code> interface, which provides properties and methods for manipulating the layout and presentation of canvas elements. The <code>HTMLCanvasElement</code> interface inherits the properties and methods of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n object interface.","members":[{"name":"getContext","help":"Returns a drawing context on the canvas, or null if the context ID is not supported. A drawing context lets you draw on the canvas. The currently accepted values are \"2d\" and \"experimental-webgl\". The \"experimental-webgl\" context is only available on browsers that implement <a title=\"En/WebGL\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebGL\">WebGL</a>. Calling getContext with \"2d\" returns a <code><a href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\" rel=\"internal\">CanvasRenderingContext2D</a></code> Object, whereas calling it with \"experimental-webgl\" returns a <code>WebGLRenderingContext</code> Object.","obsolete":false},{"name":"toDataURL","help":"<p>Returns a <code>data:</code> URL containing a representation of the image in the format specified by <code>type</code> (defaults to PNG).</p> <ul> <li>If the height or width of the canvas is 0, <code>\"data:,</code>\" representing the empty string, is returned.</li> <li>If the type requested is not <code>image/png</code>, and the returned value starts with <code>data:image/png</code>, then the requested type is not supported.</li> <li>Chrome supports the&nbsp;<code>image/webp&nbsp;</code>type.</li> <li>If the requested type is <code>image/jpeg&nbsp;</code>or&nbsp;<code>image/webp</code>, then the second argument, if it is between 0.0 and 1.0, is treated as indicating image quality; if the second argument is anything else, the default value for image quality is used. Other arguments are ignored.</li> </ul>","obsolete":false},{"name":"webkitGetAsFile","help":"Returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n object representing the image contained in the canvas; this file is a memory-based file, with the specified <code>name</code> and. If <code>type</code> is not specified, the image type is <code>image/png</code>.","obsolete":false},{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas#attr-height\">height</a></code>\n HTML attribute, specifying the height of the coordinate space in CSS pixels.","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas#attr-width\">width</a></code>\n HTML attribute, specifying the width of the coordinate space in CSS pixels.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLCanvasElement"},"SVGAltGlyphElement":{"title":"altGlyph","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr>\n\n</tr><tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr><td>Basic support</td> <td>1.0</td> <td>4.0 (2.0)\n <a href=\"#supportGecko\">[1]</a></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>\n10.6</td> <td>\n4.0</td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n <a href=\"#supportGecko\">[1]</a></td> <td><span title=\"Not supported.\">--</span></td> <td>11.0\n</td> <td>\n4.0</td> </tr> </tbody> </table>\n</div>\n<p id=\"supportGecko\">[1] partial support, see <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=456286\" rel=\"external\">bug 456286</a> and <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=571808\" rel=\"external\">bug 571808</a>.</p>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","srcUrl":"https://developer.mozilla.org/en/SVG/Element/altGlyph","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/tspan\">&lt;tspan&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/altGlyphDef\">&lt;altGlyphDef&gt;</a></code>\n</li>","summary":"The <code>altGlyph</code> element allows sophisticated selection of the glyphs used to render its child character data.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/format","name":"format","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/rotate","name":"rotate","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/dx","name":"dx","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/glyphRef","name":"glyphRef","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/dy","name":"dy","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""}]},"DeviceOrientationEvent":{"title":"DeviceOrientationEvent","examples":["if (window.DeviceOrientationEvent) {\n    window.addEventListener(\"deviceorientation\", function( event ) {\n\t//alpha: rotation around z-axis\n\tvar rotateDegrees = event.alpha;\n\t//gamma: left to right\n\tvar leftToRight = event.gamma;\n\t//beta: front back motion\n\tvar frontToBack = event.beta;\n\t\t\t\t \n\thandleOrientationEvent( frontToBack, leftToRight, rotateDegrees );\n    }, false);\n}\n\nvar handleOrientationEvent = function( frontToBack, leftToRight, rotateDegrees ){\n    //do something amazing\n};"],"srcUrl":"https://developer.mozilla.org/en/DOM/DeviceOrientationEvent","specification":"DeviceOrientation specification","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DeviceMotionEvent\">DeviceMotionEvent</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.ondeviceorientation\">window.ondeviceorientation</a></code>\n</li> <li><a title=\"Detecting device orientation\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Detecting_device_orientation\">Detecting device orientation</a></li> <li><a title=\"Orientation and motion data explained\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Orientation_and_motion_data_explained\">Orientation and motion data explained</a></li>","summary":"A <code>DeviceOrientationEvent</code> object describes an event that provides information about the current orientation of the device as compared to the Earth coordinate frame. See <a title=\"Orientation and motion data explained\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Orientation_and_motion_data_explained\">Orientation and motion data explained</a> for details.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceOrientationEvent.alpha","name":"alpha","help":"The current orientation of the device around the Z axis; that is, how far the device is rotated around a line perpendicular to the device. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceOrientationEvent.absolute","name":"absolute","help":"This attribute's value is <code>true</code> if the orientation is provided as a difference between the device coordinate frame and the Earth coordinate frame; if the device can't detect the Earth coordinate frame, this value is <code>false</code>. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceOrientationEvent.beta","name":"beta","help":"The current orientation of the device around the X axis; that is, how far the device is tipped forward or backward. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceOrientationEvent.gamma","name":"gamma","help":"<dl><dd>The current orientation of the device around the Y axis; that is, how far the device is turned left or right. <strong>Read only.</strong></dd>\n</dl>\n<div class=\"note\"><strong>Note:</strong> If the browser is not able to provide notification information, all values are 0.</div>"}]},"Geolocation":{"title":"nsIDOMGeoGeolocation","members":[{"name":"getCurrentPosition","help":"<p>Acquires the user's current position via a new position object. If this fails, <code>errorCallback</code> is invoked with an <code>nsIDOMGeoPositionError</code> argument.</p>\n\n<div id=\"section_8\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>successCallback</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionCallback\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionCallback\">nsIDOMGeoPositionCallback</a></code> to be called when the current position is available.</dd>\n</dl>\n<dl> <dt><code>errorCallback</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionErrorCallback\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionErrorCallback\"> nsIDOMGeoPositionErrorCallback</a></code> that is called if an error occurs while retrieving the position; this parameter is optional.</dd>\n</dl>\n<dl> <dt><code>options</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionOptions\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionOptions\">nsIDOMGeoPositionOptions</a></code> object specifying options; this parameter is optional.</dd>\n</dl>\n</div>","idl":"<pre>void getCurrentPosition(\n&nbsp;&nbsp;in nsIDOMGeoPositionCallback successCallback,\n&nbsp;&nbsp;[optional] in nsIDOMGeoPositionErrorCallback errorCallback, \n &nbsp;[optional] in nsIDOMGeoPositionOptions options\n);</pre>","obsolete":false},{"name":"clearWatch","help":"When the <code>clearWatch()</code> method is called, the <code>watch()</code> process stops calling for new position identifiers and cease invoking callbacks.","idl":"<pre>void clearWatch(\n&nbsp;&nbsp;in unsigned short watchId\n);</pre>","obsolete":false},{"name":"watchPosition","help":"<p>Similar to <a title=\"En/NsIDOMGeoGeolocation#getCurrentPosition()\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoGeolocation#getCurrentPosition()\"><code>getCurrentPosition()</code></a>, except it continues to call the callback with updated position information periodically until <a title=\"En/NsIDOMGeoGeolocation#clearWatch()\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoGeolocation#clearWatch()\"><code>clearWatch()</code></a>&nbsp;is called.</p>\n\n<div id=\"section_10\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>successCallback</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionCallback\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionCallback\">nsIDOMGeoPositionCallback</a></code> that is to be called whenever new position information is available.</dd>\n</dl>\n<dl> <dt><code>errorCallback</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionErrorCallback\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionErrorCallback\"> nsIDOMGeoPositionErrorCallback</a></code> to call when an error occurs; this is an optional parameter.</dd>\n</dl>\n<dl> <dt><code>options</code></dt> <dd>An <code><a class=\"internal\" title=\"En/NsIDOMGeoPositionOptions\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoPositionOptions\">nsIDOMGeoPositionOptions</a></code> object specifying options; this parameter is optional.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>An ID&nbsp;number that can be used to reference the watcher in the future when calling <code><a title=\"en/nsIDOMGeolocation#clearWatch()\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIDOMGeoGeolocation#clearWatch()\">clearWatch()</a></code>.</p>\n</div>","idl":"<pre>unsigned short watchPosition(\n&nbsp;&nbsp;in nsIDOMGeoPositionCallback successCallback,\n&nbsp;&nbsp;[optional] in nsIDOMGeoPositionErrorCallback errorCallback,\n&nbsp;&nbsp;[optional] in nsIDOMGeoPositionOptions options\n);</pre>","obsolete":false},{"name":"lastPosition","help":"The most recently retrieved location as seen by the provider. May be <code>null</code>. <strong>Read only.</strong>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/nsIDOMGeolocation;"},"SVGPathSegCurvetoQuadraticRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGFitToViewBox":{"title":"SVGPatternElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPatternElement","skipped":true,"cause":"Suspect title"},"SVGAnimatedLengthList":{"title":"SVGAnimatedLengthList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedLengthList</code> interface is used for attributes of type <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGLengthList\">SVGLengthList</a></code>\n which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGLengthList\">SVGLengthList</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGLengthList\">SVGLengthList</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> will always be distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedLengthList"},"HTMLTableCellElement":{"title":"td","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>align/valign</code> attribute</td> <td>1.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=915\" class=\"external\" title=\"\">\nbug 915</a>\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>char/charoff</code> attribute</td> <td>1.0</td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>bgcolor</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>align/valign</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=915\" class=\"external\" title=\"\">\nbug 915</a>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>char/charoff</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>bgcolor</code> attribute      </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["Please see the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/table\">&lt;table&gt;</a></code>\n page for examples on <code>&lt;td&gt;</code>."],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/td","seeAlso":"Other table-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/caption\">&lt;caption&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/col\">&lt;col&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/colgroup\">&lt;colgroup&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/table\">&lt;table&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tbody\">&lt;tbody&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tfoot\">&lt;tfoot&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/th\">&lt;th&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead\">&lt;thead&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tr\">&lt;tr&gt;</a></code>\n.","summary":"The <em>HTML Table Cell Element</em> (<code>&lt;td&gt;</code>) defines a cell that content data.","members":[{"obsolete":false,"url":"","name":"rowspan","help":"This attribute contains a non-negative integer value that indicates for how many rows the cell extends. Its default value is <span>1</span>; if its value is set to <span>0</span>, it extends until the end of the table section (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead\">&lt;thead&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tbody\">&lt;tbody&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/tfoot\">&lt;tfoot&gt;</a></code>\n, even if implicitly defined, that the cell belongs to. Values higher than 65534 are clipped down to 65534."},{"obsolete":false,"url":"","name":"valign","help":"This attribute specifies the vertical alignment of the text within each row of cells of the table header. Possible values for this attribute are: <ul> <li><span>baseline</span>, which will put the text as close to the bottom of the cell as it is possible, but align it on the <a class=\"external\" title=\"http://en.wikipedia.org/wiki/Baseline_(typography)\" rel=\"external\" href=\"http://en.wikipedia.org/wiki/Baseline_%28typography%29\" target=\"_blank\">baseline</a> of the characters instead of the bottom of them. If characters are all of the size, this has the same effect as <span>bottom</span>.</li> <li><span>bottom</span>, which will put the text as close to the bottom of the cell as it is possible;</li> <li><span>middle</span>, which will center the text in the cell;</li> <li>and <span>top</span>, which will put the text as close to the top of the cell as it is possible.</li> </ul> <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard: instead set the CSS&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/vertical-align\">vertical-align</a></code>\n property on it.</div>"},{"obsolete":false,"url":"","name":"bgcolor","help":"This attribute defines the background color of each cell of the column. It is one of the 6-digit hexadecimal codes as defined in <a class=\"external\" title=\"http://www.w3.org/Graphics/Color/sRGB\" rel=\"external\" href=\"http://www.w3.org/Graphics/Color/sRGB\" target=\"_blank\">sRGB</a>, prefixed by a '#'. One of the sixteen predefined color strings may be used: <table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"10\" summary=\"Table of color names and their sRGB values\" width=\"80%\"> <tbody> <tr> <td>&nbsp;</td> <td><span>black</span> = \"#000000\"</td> <td>&nbsp;</td> <td><span>green</span> = \"#008000\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>silver</span> = \"#C0C0C0\"</td> <td>&nbsp;</td> <td><span>lime</span> = \"#00FF00\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>gray</span> = \"#808080\"</td> <td>&nbsp;</td> <td><span>olive</span> = \"#808000\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>white</span> = \"#FFFFFF\"</td> <td>&nbsp;</td> <td><span>yellow</span> = \"#FFFF00\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>maroon</span> = \"#800000\"</td> <td>&nbsp;</td> <td><span>navy</span> = \"#000080\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>red</span> = \"#FF0000\"</td> <td>&nbsp;</td> <td><span>blue</span> = \"#0000FF\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>purple</span> = \"#800080\"</td> <td>&nbsp;</td> <td><span>teal</span> = \"#008080\"</td> </tr> <tr> <td>&nbsp;</td> <td><span>fuchsia</span> = \"#FF00FF\"</td> <td>&nbsp;</td> <td><span>aqua</span> = \"#00FFFF\"</td> </tr> </tbody> </table> <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it is non-standard and only implemented some versions of Microsoft Internet Explorer: the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td\">&lt;td&gt;</a></code>\n element should be styled using <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a>. To give a similar effect to the <strong>bgcolor</strong> attribute, use the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> property <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/background-color\">background-color</a></code>\n instead.</div>"},{"obsolete":false,"url":"","name":"headers","help":"This attributes a list of space-separated strings, each corresponding to the <strong>id</strong> attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/th\">&lt;th&gt;</a></code>\n elements that applies to this element."},{"obsolete":false,"url":"","name":"align","help":"This enumerated attribute specifies how horizontal alignment of each cell content will be handled. Possible values are: <ul> <li><span>left</span>, aligning the content to the left of the cell</li> <li><span>center</span>, centering the content in the cell</li> <li><span>right</span>, aligning the content to the right of the cell</li> <li><span>justify</span>, inserting spaces into the textual content so that the content is justified in the cell</li> <li><span>char</span>, aligning the textual content on a special character with a minimal offset, defined by the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td#attr-char\">char</a></code>\n and \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td#attr-charoff\">charoff</a></code>\n attributes \n<span class=\"unimplementedInlineTemplate\">Unimplemented (see<a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=2212\" class=\"external\" title=\"\">\nbug 2212</a>\n)</span>\n.</li> </ul> <p>If this attribute is not set,&nbsp; the <span>left</span> value is assumed.</p> <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (not supported) in the latest standard. <ul> <li>To achieve the same effect as the <span>left</span>, <span>center</span>, <span>right</span> or <span>justify</span> values, use the CSS <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property on it.</li> <li>To achieve the same effect as the <span>char</span> value, in CSS3, you can use the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td#attr-char\">char</a></code>\n as the value of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property \n<span class=\"unimplementedInlineTemplate\">Unimplemented</span>\n.</li> </ul> </div>"},{"obsolete":false,"url":"","name":"scope","help":""},{"obsolete":false,"url":"","name":"axis","help":"This attribute contains a list of space-separated strings. Each string is the ID of a group of cells that this header applies to. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete in the latest standard: instead use the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td#attr-scope\">scope</a></code>\n attribute.</div>"},{"obsolete":false,"url":"","name":"abbr","help":"This attribute contains a short abbreviated description of the content of the cell. Some user-agents, such as speech readers, may present this description before the content itself. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete in the latest standard: instead either consider starting the cell content by an independent abbreviated content itself or use the abbreviated content as the cell content and use the long content as the description of the cell by putting it in the <strong>title</strong> attribute.</div>"},{"obsolete":false,"url":"","name":"char","help":"This attribute is used to set the character to align the cells in a column on. Typical values for this include a period (.) when attempting to align numbers or monetary values. If \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/td#attr-align\">align</a></code>\n is not set to <span>char</span>, this attribute is ignored. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard. To achieve the same effect as the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/thead#attr-char\">char</a></code>\n, in CSS3, you can use the character set using the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/th#attr-char\">char</a></code>\n attribute as the value of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/text-align\">text-align</a></code>\n property \n<span class=\"unimplementedInlineTemplate\">Unimplemented</span>\n.</div>"},{"obsolete":false,"url":"","name":"colspan","help":"This attribute contains a non-negative integer value that indicates for how many columns the cell extends. Its default value is <span>1</span>; if its value is set to <span>0</span>, it extends until the end of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/colgroup\">&lt;colgroup&gt;</a></code>\n, even if implicitly defined, that the cell belongs to. Values higher than 1000 are clipped down to 1000."},{"obsolete":false,"url":"","name":"charoff","help":"This attribute is used to indicate the number of characters to offset the column data from the alignment characters specified by the <strong>char</strong> attribute. <div class=\"note\"><strong>Note: </strong>Do not use this attribute as it is obsolete (and not supported) in the latest standard.</div>"}]},"DOMWindow":{"title":"window","seeAlso":"Working with windows in chrome code","summary":"<p>This section provides a brief reference for all of the methods, properties, and events available through the DOM <code>window</code> object. The <code>window</code> object implements the <code>Window</code> interface, which in turn inherits from the <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Views/views.html#Views-AbstractView\" title=\"http://www.w3.org/TR/DOM-Level-2-Views/views.html#Views-AbstractView\" target=\"_blank\">AbstractView</a></code> interface. Some additional global functions, namespaces objects, and constructors, not typically associated with the window, but available on it, are listed in the <a title=\"https://developer.mozilla.org/en/JavaScript/Reference\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference\">JavaScript Reference</a>.</p>\n<p>The <code>window</code> object represents the window itself. The <code>document</code> property of a <code>window</code> points to the <a title=\"en/DOM/document\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document\">DOM document</a> loaded in that window. A window for a given document can be obtained using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document.defaultView\">document.defaultView</a></code>\n property.</p>\n<p>In a tabbed browser, such as Firefox, each tab contains its own <code>window</code> object (and if you're writing an extension, the browser window itself is a separate window too - see <a title=\"en/Working_with_windows_in_chrome_code#Content_windows\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Working_with_windows_in_chrome_code#Content_windows\">Working with windows in chrome code</a> for more information). That is, the <code>window</code> object is not shared between tabs in the same window. Some methods, namely <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.resizeTo\">window.resizeTo</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.resizeBy\">window.resizeBy</a></code>\n apply to the whole window and not to the specific tab the <code>window</code> object belongs to. Generally, anything that can't reasonably pertain to a tab pertains to the window instead.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.captureEvents","name":"captureEvents","help":"Registers the window to capture all events of the specified type."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.showModalDialog","name":"showModalDialog","help":"Displays a modal dialog."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.routeEvent","name":"routeEvent","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.sizeToContent","name":"sizeToContent","help":"Sizes the window according to its content."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollTo","name":"scrollTo","help":"Scrolls to a particular set of coordinates in the document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.setTimeout","name":"setTimeout","help":"Sets a delay for executing a function."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.matchMedia","name":"matchMedia","help":"Returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/MediaQueryList\">MediaQueryList</a></code>\n object representing the specified media query string."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.minimize","name":"minimize","help":"Minimizes the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scroll","name":"scroll","help":"Scrolls the window to a particular place in the document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.clearTimeout","name":"clearTimeout","help":"Cancels the repeated execution set using <code>setTimeout</code>."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.setInterval","name":"setInterval","help":"Execute a function each X milliseconds."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.moveTo","name":"moveTo","help":"Moves the window to the specified coordinates."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollByLines","name":"scrollByLines","help":"Scrolls the document by the given number of lines."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.alert","name":"alert","help":"Displays an alert dialog."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.dispatchEvent","name":"dispatchEvent","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.moveBy","name":"moveBy","help":"Moves the current window by a specified amount."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.btoa","name":"btoa","help":"Creates a base-64 encoded ASCII string from a string of binary data."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.releaseEvents","name":"releaseEvents","help":"Releases the window from trapping events of a specific type."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.find","name":"find","help":"Searches for a given string in a window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.postMessage","name":"postMessage","help":"Provides a secure means for one window to send a string of data to another window, which need not be within the same domain as the first, in a secure manner."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.maximize","name":"maximize","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.escape","name":"escape","help":"Encodes a string."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.blur","name":"blur","help":"Sets focus away from the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.home","name":"home","help":"Returns the browser to the home page."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.disableExternalCapture","name":"disableExternalCapture","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.updateCommands","name":"updateCommands","help":"<dd>Updates the state of commands of the current chrome window (UI).</dd> <dt><a class=\"internal\" title=\"En/DOM/window.XPCNativeWrapper\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCNativeWrapper\">window.XPCNativeWrapper</a></dt> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.XPCSafeJSObjectWrapper\">window.XPCSafeJSObjectWrapper</a></code>\n</dt>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.stop","name":"stop","help":"This method stops window loading."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.clearImmediate","name":"clearImmediate","help":"Cancels the repeated execution set using <code>setImmediate</code>."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.atob","name":"atob","help":"Decodes a string of data which has been encoded using base-64 encoding."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.focus","name":"focus","help":"Sets focus on the current window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.prompt","name":"prompt","help":"<dd>Returns the text entered by the user in a prompt dialog.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.QueryInterface\">window.QueryInterface</a></code>\n</dt>"},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.setResizable","name":"setResizable","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.getComputedStyle","name":"getComputedStyle","help":"Gets computed style for the specified element. Computed style indicates the computed values of all CSS properties of the element."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.clearInterval","name":"clearInterval","help":"Cancels the repeated execution set using <code>setInterval</code>."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollBy","name":"scrollBy","help":"Scrolls the document in the window by the given amount."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.getAttention","name":"getAttention","help":"Flashes the application icon."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.openDialog","name":"openDialog","help":"Opens a new dialog window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.open","name":"open","help":"Opens a new window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.resizeTo","name":"resizeTo","help":"Dynamically resizes window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.restore","name":"restore","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.getAttentionWithCycleCount","name":"getAttentionWithCycleCount","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.close","name":"close","help":"Closes the current window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.print","name":"print","help":"Opens the Print Dialog to print the current document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.dump","name":"dump","help":"Writes a message to the console."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.enableExternalCapture","name":"enableExternalCapture","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.forward","name":"forward","help":"<dd>Moves the window one document forward in the history.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.GeckoActiveXObject\">window.GeckoActiveXObject</a></code>\n</dt>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":"Removes an event listener from the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.setImmediate","name":"setImmediate","help":"Execute a function after the browser has finished other heavy tasks"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.setCursor","name":"setCursor","help":"Changes the cursor for the current window"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.back","name":"back","help":"Moves back one in the window history."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollByPages","name":"scrollByPages","help":"Scrolls the current document by the specified number of pages."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":"Register an event handler to a specific event type on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.unescape","name":"unescape","help":"Unencodes a value that has been encoded in hexadecimal (e.g. a cookie)."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.confirm","name":"confirm","help":"Displays a dialog with a message that the user needs to respond to."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.getSelection","name":"getSelection","help":"Returns the selection object representing the selected item(s)."},{"name":"webkitRequestAnimationFrame","help":"Tells the browser that an animation is in progress, requesting that the browser schedule a repaint of the window for the next animation frame. This will cause a <code>MozBeforePaint</code> event to fire before that repaint occurs.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.resizeBy","name":"resizeBy","help":"Resizes the current window by a certain amount."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollX","name":"scrollX","help":"Returns the number of pixels that the document has already been scrolled horizontally."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Storage#sessionStorage","name":"sessionStorage","help":"A storage object for storing data within a single page session."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.self","name":"self","help":"Returns an object reference to the window object itself."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.statusbar","name":"statusbar","help":"Returns the statusbar object, whose visibility can be toggled in the window."},{"name":"webkitAnimationStartTime","help":"The time in milliseconds since epoch at which the current animation cycle began.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.fullScreen","name":"fullScreen","help":"This property indicates whether the window is displayed in full screen or not."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.dialogArguments","name":"dialogArguments","help":"Gets the arguments passed to the window (if it's a dialog box) at the time <code><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.showModalDialog\">window.showModalDialog()</a></code>\n</code> was called. This is an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIArray\">nsIArray</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.history","name":"history","help":"Returns a reference to the history object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.outerWidth","name":"outerWidth","help":"Gets the width of the outside of the browser window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.closed","name":"closed","help":"<dd>This property indicates whether the current window is closed or not.</dd> <dt><a title=\"en/Components_object\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Components_object\">window.Components</a></dt> <dd>The entry point to many <a title=\"en/XPCOM\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM\">XPCOM</a> features. Some properties, e.g. <a title=\"en/Components.classes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Components.classes\">classes</a>, are only available to sufficiently privileged code.</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.directories","name":"directories","help":"Synonym of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.personalbar\">window.personalbar</a></code>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollX","name":"pageXOffset","help":"An alias for <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.scrollX\">window.scrollX</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.top","name":"top","help":"<dd>Returns a reference to the topmost window in the window hierarchy. This property is read only.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.URL\">window.URL</a></code>\n \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>\n</dt> <dd>A DOM&nbsp;URL&nbsp;object, which provides the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.URL.createObjectURL\">window.URL.createObjectURL()</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.URL.revokeObjectURL\">window.URL.revokeObjectURL()</a></code>\n methods.</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screenX","name":"screenX","help":"Returns the horizontal distance of the left border of the user's browser from the left side of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.content","name":"content","help":"Returns a reference to the content element in the current window. The variant with underscore is deprecated."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollbars","name":"scrollbars","help":"Returns the scrollbars object, whose visibility can be toggled in the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.personalbar","name":"personalbar","help":"Returns the personalbar object, whose visibility can be toggled in the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screen","name":"screen","help":"Returns a reference to the screen object associated with the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.defaultStatus","name":"defaultStatus","help":"Gets/sets the status bar text for the given window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.screenY","name":"screenY","help":"Returns the vertical distance of the top border of the user's browser from the top side of the screen."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.messageManager","name":"messageManager","help":"Returns the <a title=\"en/The message manager\" rel=\"internal\" href=\"https://developer.mozilla.org/en/The_message_manager\">message manager</a> object for this window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.toolbar","name":"toolbar","help":"Returns the toolbar object, whose visibility can be toggled in the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.length","name":"length","help":"Returns the number of frames in the window. See also <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.frames\">window.frames</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.outerHeight","name":"outerHeight","help":"Gets the height of the outside of the browser window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollMaxY","name":"scrollMaxY","help":"The maximum offset that the window can be scrolled to vertically (i.e., the document height minus the viewport height)."},{"name":"webkitPaintCount","help":"Returns the number of times the current document has been rendered to the screen in this window. This can be used to compute rendering performance.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Storage#localStorage","name":"localStorage","help":"Returns a reference to the local storage object used to store data that may only be accessed by the origin that created it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.innerHeight","name":"innerHeight","help":"Gets the height of the content area of the browser window including, if rendered, the horizontal scrollbar."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.name","name":"name","help":"Gets/sets the name of the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.parent","name":"parent","help":"Returns a reference to the parent of the current window or subframe."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.innerWidth","name":"innerWidth","help":"Gets the width of the content area of the browser window including, if rendered, the vertical scrollbar."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.opener","name":"opener","help":"Returns a reference to the window that opened this current window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.status","name":"status","help":"Gets/sets the text in the statusbar at the bottom of the browser."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.globalStorage","name":"globalStorage","help":"Multiple storage objects that are used for storing data across multiple pages. Note that this is non-standard; it is recommended that you use <a class=\"internal\" title=\"en/DOM/Storage#localStorage\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Storage#localStorage\">window.localStorage</a> instead."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.returnValue","name":"returnValue","help":"The return value to be returned to the function that called <code><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.showModalDialog\">window.showModalDialog()</a></code>\n</code> to display the window as a modal dialog."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.locationbar","name":"locationbar","help":"Returns the locationbar object, whose visibility can be toggled in the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.navigator","name":"navigator","help":"Returns a reference to the navigator object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.document","name":"document","help":"Returns a reference to the document that the window contains."},{"name":"webkitInnerScreenX","help":"Returns the horizontal (X)&nbsp;coordinate of the top-left corner of the window's viewport, in screen coordinates. This value is reported in CSS&nbsp;pixels. See <code>mozScreenPixelsPerCSSPixel</code> in <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMWindowUtils\">nsIDOMWindowUtils</a></code>\n for a conversion factor to adapt to screen pixels if needed.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.frames","name":"frames","help":"Returns an array of the subframes in the current window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.menubar","name":"menubar","help":"Returns the menubar object, whose visibility can be toggled in the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.location","name":"location","help":"Gets/sets the location, or current URL, of the window object."},{"name":"webkitInnerScreenY","help":"Returns the vertical (Y)&nbsp;coordinate of the top-left corner of the window's viewport, in screen coordinates. This value is reported in CSS&nbsp;pixels. See <code>mozScreenPixelsPerCSSPixel</code> for a conversion factor to adapt to screen pixels if needed.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.applicationCache","name":"applicationCache","help":"An <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/nsIDOMOfflineResourceList\">nsIDOMOfflineResourceList</a></code>\n object providing access to the offline resources for the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.window","name":"window","help":"<dd>Returns a reference to the current window.</dd> <dt>window[0], window[1], etc.</dt> <dd>Returns a reference to the <code>window</code> object in the frames. See <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.frames\">window.frames</a></code>\n for more details.</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.controllers","name":"controllers","help":"Returns the XUL controller objects for the current chrome window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.frameElement","name":"frameElement","help":"Returns the element in which the window is embedded, or null if the window is not embedded."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollY","name":"scrollY","help":"Returns the number of pixels that the document has already been scrolled vertically."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollMaxX","name":"scrollMaxX","help":"<dd>The maximum offset that the window can be scrolled to horizontally.</dd> <dd>(i.e., the document width minus the viewport width)</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.sidebar","name":"sidebar","help":"Returns a reference to the window object of the sidebar."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.pkcs11","name":"pkcs11","help":"Formerly provided access to install and remove PKCS11 modules. Now this property is always null."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.crypto","name":"crypto","help":"Returns the browser crypto object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.scrollY","name":"pageYOffset","help":"An alias for <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.scrollY\">window.scrollY</a></code>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onabort","name":"onabort","help":"An event handler property for abort events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onclose","name":"onclose","help":"An event handler property for handling the window close event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmousemove","name":"onmousemove","help":"An event handler property for mousemove events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.onpageshow","name":"onpageshow","help":"An event handler property for pageshow events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onunload","name":"onunload","help":"An event handler property for unload events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeydown","name":"onkeydown","help":"An event handler property for keydown events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onsubmit","name":"onsubmit","help":"An event handler property for submits on window forms."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onblur","name":"onblur","help":"An event handler property for blur events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseout","name":"onmouseout","help":"An event handler property for mouseout events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onload","name":"onload","help":"An event handler property for window loading."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onscroll","name":"onscroll","help":"An event handler property for window scrolling."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onresize","name":"onresize","help":"An event handler property for window resizing."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.ondragdrop","name":"ondragdrop","help":"An event handler property for drag and drop events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onpopstate","name":"onpopstate","help":"An event handler property for popstate events, which are fired when navigating to a session history entry representing a state object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onbeforeunload","name":"onbeforeunload","help":"An event handler property for before-unload events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmousedown","name":"onmousedown","help":"An event handler property for mousedown events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseup","name":"onmouseup","help":"An event handler property for mouseup events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onhashchange","name":"onhashchange","help":"An event handler property for hash change events on the window; called when the part of the URL after the hash mark (\"#\") changes."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onchange","name":"onchange","help":"An event handler property for change events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onerror","name":"onerror","help":"An event handler property for errors raised on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onselect","name":"onselect","help":"An event handler property for window selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onreset","name":"onreset","help":"An event handler property for reset events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseover","name":"onmouseover","help":"An event handler property for mouseover events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeypress","name":"onkeypress","help":"An event handler property for keypress events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmozbeforepaint","name":"onmozbeforepaint","help":"An event handler property for the <code>MozBeforePaint</code> event, which is sent before repainting the window if the event has been requested by a call to the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.mozRequestAnimationFrame\" class=\"new\">window.mozRequestAnimationFrame()</a></code>\n method."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onclick","name":"onclick","help":"An event handler property for click events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.ondevicemotion","name":"ondevicemotion","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onpaint","name":"onpaint","help":"An event handler property for paint events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.onpagehide","name":"onpagehide","help":"An event handler property for pagehide events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onfocus","name":"onfocus","help":"An event handler property for focus events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeyup","name":"onkeyup","help":"An event handler property for keyup events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.ondeviceorientation","name":"ondeviceorientation","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.oncontextmenu","name":"oncontextmenu","help":"An event handler property for right-click events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onabort","name":"onabort","help":"An event handler property for abort events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmousemove","name":"onmousemove","help":"An event handler property for mousemove events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.onpageshow","name":"onpageshow","help":"An event handler property for pageshow events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onunload","name":"onunload","help":"An event handler property for unload events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeydown","name":"onkeydown","help":"An event handler property for keydown events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onsubmit","name":"onsubmit","help":"An event handler property for submits on window forms."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onblur","name":"onblur","help":"An event handler property for blur events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseout","name":"onmouseout","help":"An event handler property for mouseout events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onload","name":"onload","help":"An event handler property for window loading."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onscroll","name":"onscroll","help":"An event handler property for window scrolling."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onresize","name":"onresize","help":"An event handler property for window resizing."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onpopstate","name":"onpopstate","help":"An event handler property for popstate events, which are fired when navigating to a session history entry representing a state object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onbeforeunload","name":"onbeforeunload","help":"An event handler property for before-unload events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmousedown","name":"onmousedown","help":"An event handler property for mousedown events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseup","name":"onmouseup","help":"An event handler property for mouseup events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onhashchange","name":"onhashchange","help":"An event handler property for hash change events on the window; called when the part of the URL after the hash mark (\"#\") changes."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onchange","name":"onchange","help":"An event handler property for change events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onerror","name":"onerror","help":"An event handler property for errors raised on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onselect","name":"onselect","help":"An event handler property for window selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onreset","name":"onreset","help":"An event handler property for reset events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onmouseover","name":"onmouseover","help":"An event handler property for mouseover events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeypress","name":"onkeypress","help":"An event handler property for keypress events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onclick","name":"onclick","help":"An event handler property for click events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.ondevicemotion","name":"ondevicemotion","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/window.onpagehide","name":"onpagehide","help":"An event handler property for pagehide events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onfocus","name":"onfocus","help":"An event handler property for focus events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.onkeyup","name":"onkeyup","help":"An event handler property for keyup events on the window."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.ondeviceorientation","name":"ondeviceorientation","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/window.oncontextmenu","name":"oncontextmenu","help":"An event handler property for right-click events on the window."}],"srcUrl":"https://developer.mozilla.org/en/DOM/window"},"HTMLOListElement":{"title":"ol","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p> <div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td>1.0</td> <td>1.0</td> <td>1.0</td> </tr> <tr> <td><code>reversed</code> attribute</td> <td><span title=\"Not supported.\">--</span> \n<a rel=\"external\" href=\"https://bugs.webkit.org/show_bug.cgi?id=36724\" class=\"external\" title=\"RESOLVED FIXED - Add support for &lt;ol reversed&gt;\">\nWebKit bug 36724</a></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=601912\" class=\"external\" title=\"\">\nbug 601912</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span> \n<a rel=\"external\" href=\"https://bugs.webkit.org/show_bug.cgi?id=36724\" class=\"external\" title=\"RESOLVED FIXED - Add support for &lt;ol reversed&gt;\">\nWebKit bug 36724</a></td> </tr> </tbody> </table> </div> <div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> <tr> <td><code>reversed</code> attribute</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span> <a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=601912\" class=\"external\" title=\"\">\nbug 601912</a>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table> </div>","examples":["<div id=\"section_6\"><span id=\"Simple_example\"></span><h4 class=\"editable\">Simple example</h4> \n          <pre name=\"code\" class=\"xml\">&lt;ol&gt;\n  &lt;li&gt;first item&lt;/li&gt;\n  &lt;li&gt;second item&lt;/li&gt;\n  &lt;li&gt;third item&lt;/li&gt;\n&lt;/ol&gt;</pre>\n         <p>Above HTML will output:</p> <ol> <li>first item</li> <li>second item</li> <li>third item</li> </ol> </div><div id=\"section_7\"><span id=\"Using_the_start_attribute\"></span><h4 class=\"editable\">Using the <span><code>start</code></span> attribute</h4> \n          <pre name=\"code\" class=\"xml\">&lt;ol start=\"7\"&gt;\n  &lt;li&gt;first item&lt;/li&gt;\n  &lt;li&gt;second item&lt;/li&gt;\n  &lt;li&gt;third item&lt;/li&gt;\n&lt;/ol&gt;</pre>\n         <p>Above HTML will output:</p> <ol start=\"7\"> <li>first item</li> <li>second item</li> <li>third item</li> </ol> </div><div id=\"section_8\"><span id=\"Nesting_lists\"></span><h4 class=\"editable\">Nesting lists</h4> \n          <pre name=\"code\" class=\"xml\">&lt;ol&gt;\n  &lt;li&gt;first item&lt;/li&gt;\n  &lt;li&gt;second item      &lt;!-- Look, the closing &lt;/li&gt; tag is not placed here! --&gt;\n    &lt;ol&gt;\n      &lt;li&gt;second item first subitem&lt;/li&gt;\n      &lt;li&gt;second item second subitem&lt;/li&gt;\n      &lt;li&gt;second item third subitem&lt;/li&gt;\n    &lt;/ol&gt;\n  &lt;/li&gt;                &lt;!-- Here is the closing &lt;/li&gt; tag --&gt;\n  &lt;li&gt;third item&lt;/li&gt;\n&lt;/ol&gt;</pre>\n         <p>Above HTML will output:</p> <ol> <li>first item</li> <li>second item <ol> <li>second item first subitem</li> <li>second item second subitem</li> <li>second item third subitem</li> </ol> </li> <li>third item</li> </ol> </div><div id=\"section_9\"><span id=\"Nested_.3Col.3E_and_.3Cul.3E\"></span><h4 class=\"editable\">Nested &lt;ol&gt; and &lt;ul&gt;</h4> \n          <pre name=\"code\" class=\"xml\">&lt;ol&gt;\n  &lt;li&gt;first item&lt;/li&gt;\n  &lt;li&gt;second item      &lt;!-- Look, the closing &lt;/li&gt; tag is not placed here! --&gt;\n    &lt;ul&gt;\n      &lt;li&gt;second item first subitem&lt;/li&gt;\n      &lt;li&gt;second item second subitem&lt;/li&gt;\n      &lt;li&gt;second item third subitem&lt;/li&gt;\n    &lt;/ul&gt;\n  &lt;/li&gt;                &lt;!-- Here is the closing &lt;/li&gt; tag --&gt;\n  &lt;li&gt;third item&lt;/li&gt;\n&lt;/ol&gt;</pre>\n         <p>Above HTML will output:</p> <ol> <li>first item</li> <li>second item <ul> <li>second item first subitem</li> <li>second item second subitem</li> <li>second item third subitem</li> </ul> </li> <li>third item</li> </ol> </div>"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/ol","seeAlso":"<li>Other list-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n and the obsolete <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir\">&lt;dir&gt;</a></code>\n;</li> <li>CSS properties that may be specially useful to style the <span>&lt;ol&gt;</span> element:&nbsp; <ul> <li>the <a title=\"en/CSS/list-style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/list-style\">list-style</a> property, useful to choose the way the ordinal is displayed,</li> <li><a title=\"en/CSS_Counters\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS_Counters\">CSS counters</a>, useful to handle complex nested lists,</li> <li>the <a title=\"en/CSS/line-height\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a> property, useful to simulate the deprecated \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol#attr-compact\">compact</a></code>\n attribute,</li> <li>the <a title=\"en/CSS/margin\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/margin\">margin</a> property, useful to control the indent of the list.</li> </ul> </li>","summary":"<p>The HTML <em>ordered list</em> element (<code>&lt;ol&gt;</code>) represents an ordered list of items. Typically, ordered-list items are displayed with a preceding numbering, which can be of any form, like numerals, letters or Romans numerals or even simple bullets. This numbered style is not defined in the HTML description of the page, but in its associated CSS, using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property.</p>\n<p>There is no limitation to the depth and imbrication of lists defined with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n elements.</p>\n<div class=\"note\"><strong>Usage note: </strong> The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n both represent a list of items. They differ in the way that, with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element, the order is meaningful. As a rule of thumb to determine which one to use, try changing the order of the list items; if the meaning is changed, the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element should be used, else the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n is adequate.</div>","members":[{"obsolete":false,"url":"","name":"compact","help":"This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn't work in all browsers. <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it has been deprecated: the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element should be styled using <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a>. To give a similar effect than the <span>compact</span> attribute, the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> property <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a></code>\n can be used with a value of <span>80%</span>.</div>"},{"obsolete":false,"url":"","name":"reversed","help":"This Boolean attribute specifies that the items of the item are specified in the reverse order, i.e. that the least important one is listed first. Browsers, by default, numbered the items in the reverse order too."},{"obsolete":false,"url":"","name":"start","help":"This integer attribute specifies the start value for numbering the individual list items. Although the ordering type of list elements might be Roman numerals, such as XXXI, or letters, the value of start is always represented as a number. To start numbering elements from the letter \"C\", use <code>&lt;ol start=\"3\"&gt;</code>. <div class=\"note\"><strong>Note</strong>: that attribute was deprecated in HTML4, but reintroduced in HTML5.</div>"},{"obsolete":false,"url":"","name":"type","help":"Indicates the numbering type: <ul> <li><span><code>'a'</code></span> indicates lowercase letters,</li> <li><span id=\"1284454877507S\">&nbsp;</span><span><code>'<span id=\"1284454878023E\">&nbsp;</span>A'</code></span> indicates uppercase letters,</li> <li><span><code>'i'</code></span> indicates lowercase Roman numerals,</li> <li><span><code>'I'</code></span> indicates uppercase Roman numerals,</li> <li>and <span><code>'1'</code></span> indicates numbers.</li> </ul> <p>The type set is used for the entire list unless a different \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li#attr-type\">type</a></code>\n attribute is used within an enclosed <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n element.</p> <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it has been deprecated: use the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property instead.</div>"}]},"IDBRequest":{"title":"IDBRequest","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12 \n<span title=\"prefix\">-webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<p>In the following code snippet, we open a database asynchronously and make a request. Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">var request = window.indexedDB.open('Database Name');\nrequest.onsuccess = function(event) {\n        var db = this.result;\n        var transaction = db.transaction([], IDBTransaction.READ_ONLY);\n        var curRequest = transaction.objectStore('ObjectStore Name').openCursor();\n        curRequest.onsuccess = ...;\n    };\nrequest.onerror = function(event) {\n         ...;\n    };</pre>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBRequest","summary":"<p>The <code>IDBRequest</code> interface of the IndexedDB&nbsp;API provides access to results of asynchronous requests to databases and database objects using event handler attributes. Each reading and writing operation on a database is done using a request.</p>\n<p>The request object does not initially contain any information about the result of the operation, but once information becomes available, an event is fired on the request, and the information becomes available through the properties of the <code>IDBRequest</code> instance.</p>\n<p>Inherits from: <a title=\"en/DOM/EventTarget\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/EventTarget\">EventTarget</a></p>","members":[{"url":"","name":"DONE","help":"The request has completed or an error has occurred. Initially false","obsolete":false},{"url":"","name":"LOADING","help":"The request has been started, but its result is not yet available.","obsolete":false},{"name":"onerror","help":"","obsolete":false},{"name":"onsuccess","help":"","obsolete":false}]},"SVGFEComponentTransferElement":{"title":"feComponentTransfer","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncA\">&lt;feFuncA&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncB\">&lt;feFuncB&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncG\">&lt;feFuncG&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncR\">&lt;feFuncR&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The color of each pixel is modified by changing each channel (R, G, B, and A) to the result of what the children <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncR\">&lt;feFuncR&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncB\">&lt;feFuncB&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncG\">&lt;feFuncG&gt;</a></code>\n, and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFuncA\">&lt;feFuncA&gt;</a></code>\n return.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer"},"HTMLQuoteElement":{"title":"HTMLQuoteElement","summary":"DOM quote objects expose the <a class=\" external\" title=\"http://www.w3.org/TR/html5/grouping-content.html#htmlquoteelement\" rel=\"external\" href=\"http://www.w3.org/TR/html5/grouping-content.html#htmlquoteelement\" target=\"_blank\">HTMLQuoteElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-70319763\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-70319763\" target=\"_blank\"><code>HTMLQuoteElement</code></a>) interface, which provides special properties&nbsp; (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating quote elements.","members":[{"name":"cite","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/blockquote#attr-cite\">cite</a></code>\n HTML attribute, containing a URL for the source of the quotation.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLQuoteElement"},"HTMLOptionElement":{"title":"HTMLOptionElement","summary":"<p>DOM&nbsp;<em>option</em> elements elements share all of the properties and methods of other HTML elements described in the <a title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section. They also have the specialized interface <a title=\"http://dev.w3.org/html5/spec/the-button-element.html#htmloptionelement\" class=\" external\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/the-button-element.html#htmloptionelement\" target=\"_blank\">HTMLOptionElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-70901257\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-70901257\" target=\"_blank\">HTMLOptionElement</a>).</p>\n<p>No methods are defined on this interface.</p>","members":[{"name":"defaultSelected","help":"Reflects the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option#attr-selected\">selected</a></code>\n HTML attribute. which indicates whether the option is selected by default.","obsolete":false},{"name":"disabled","help":"Reflects the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option#attr-disabled\">disabled</a></code>\n HTML&nbsp;attribute, which indicates that the option is unavailable to be selected. An option can also be disabled if it is a child of an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/optgroup\">&lt;optgroup&gt;</a></code>\n element that is disabled.","obsolete":false},{"name":"form","help":"If the option is a descendent of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select\">&lt;select&gt;</a></code>\n element, then this property has the same value as the <code>form</code> property of the corresponding {{DomXref(\"HTMLSelectElement\") object; otherwise, it is null.","obsolete":false},{"name":"index","help":"The position of the option within the list of options it belongs to, in tree-order. If the option is not part of a list of options, the value is 0.","obsolete":false},{"name":"label","help":"Reflects the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option#attr-label\">label</a></code>\n HTML attribute, which provides a label for the option. If this attribute isn't specifically set, reading it returns the element's text content.","obsolete":false},{"name":"selected","help":"Indicates whether the option is selected.","obsolete":false},{"name":"text","help":"Contains the text content of the element.","obsolete":false},{"name":"value","help":"Reflects the value of the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option#attr-value\">value</a></code>\n HTML attribute, if it exists; otherwise reflects value of the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/textContent\" class=\"new\">textContent</a></code>\n&nbsp;IDL&nbsp;attribute.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLOptionElement"},"SVGFETileElement":{"title":"feTile","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"An input image is tiled and the result used to fill a target. The effect is similar to the one of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/pattern\">&lt;pattern&gt;</a></code>\n.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feTile"},"SVGPathSegList":{"title":"User talk:Jeff Schiller","members":[],"srcUrl":"https://developer.mozilla.org/User_talk:Jeff_Schiller","skipped":true,"cause":"Suspect title"},"XSLTProcessor":{"title":"XSLTProcessor","summary":"<p>XSLTProcesor is an object providing an interface to XSLT engine in Mozilla. It is available to unprivileged JavaScript.</p>\n<ul> <li><a title=\"en/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_the_Mozilla_JavaScript_interface_to_XSL_Transformations\">Using the Mozilla JavaScript interface to XSL Transformations</a></li> <li><a title=\"en/The_XSLT//JavaScript_Interface_in_Gecko\" rel=\"internal\" href=\"https://developer.mozilla.org/en/The_XSLT%2F%2FJavaScript_Interface_in_Gecko\">The XSLT/JavaScript Interface in Gecko</a></li>\n</ul>","members":[],"srcUrl":"https://developer.mozilla.org/en/XSLTProcessor"},"WebKitPoint":{"title":"Point","summary":"The <code>Point</code> class offers methods for performing common geometry operations on two dimensional points.","constructor":"<p>Creates a new <code>Point</code> object.</p>\n<pre>let p = new Point(x, y);\n</pre>\n<p>The new point, <code>p</code>, has the specified X&nbsp;and Y&nbsp;coordinates.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/JavaScript_code_modules/Geometry.jsm/Point"},"NamedNodeMap":{"title":"NamedNodeMap","summary":"A collection of nodes returned by <a title=\"En/DOM/Element.attributes\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.attributes\"><code>Element.attributes</code></a> (also potentially for <code><a title=\"En/DOM/DocumentType.entities\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DocumentType.entities\" class=\"new internal\">DocumentType.entities</a></code>, <code><a title=\"En/DOM/DocumentType.notations\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DocumentType.notations\" class=\"new internal\">DocumentType.notations</a></code>). <code>NamedNodeMap</code>s are not in any particular order (unlike <code><a title=\"En/DOM/NodeList\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/NodeList\">NodeList</a></code>), although they may be accessed by an index as in an array (they may also be accessed with the <code>item</code>() method). A NamedNodeMap object are live and will thus be auto-updated if changes are made to their contents internally or elsewhere.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/NamedNodeMap.length","name":"length","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/NamedNodeMap","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...#ID-1780488922"},"DOMParser":{"title":"DOMParser","summary":"This page redirects to a page that no longer exists <a rel=\"internal\" class=\"new\" href=\"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/DOMParser\">en/Document_Object_Model_(DOM)/DOMParser</a>.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOMParser"},"HTMLObjectElement":{"title":"HTMLObjectElement","summary":"DOM <code>Object</code> objects expose the <a title=\"http://dev.w3.org/html5/spec/the-iframe-element.html#htmlobjectelement\" class=\" external\" rel=\"external nofollow\" href=\"http://dev.w3.org/html5/spec/the-iframe-element.html#htmlobjectelement\" target=\"_blank\">HTMLObjectElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-9893177\" title=\"http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-9893177\" target=\"_blank\">HTMLObjectElement</a>) interface, which provides special properties and methods (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of Object element, representing external resources.","members":[{"name":"checkValidity","help":"Always returns true, because <code>object</code> objects are never candidates for constraint validation.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"name":"align","help":"Alignment of the object relative to its context. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"archive","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-archive\">archive</a></code>\n&nbsp;HTML attribute, containing a list of archives for resources for this object. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"border","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-border\">border</a></code>\n&nbsp;HTML attribute, specifying the width of a border around the object. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"code","help":"The name of an applet class file, containing either the applet's subclass, or the path to get to the class, including the class file itself. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"codeBase","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-codebase\">codebase</a></code>\n&nbsp;HTML attribute, specifying the base path to use to resolve relative URIs. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"codeType","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-codetype\">codetype</a></code>\n&nbsp;HTML attribute, specifying the content type of the data. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"contentDocument","help":"The active document of the object element's nested browsing context, if any; otherwise null.","obsolete":false},{"name":"contentWindow","help":"The window proxy of the object element's nested browsing context, if any; otherwise null.","obsolete":false},{"name":"data","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-data\">data</a></code>\n HTML&nbsp;attribute, specifying the address of a resource's data.","obsolete":false},{"name":"declare","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-declare\">declare</a></code>\n HTML&nbsp;attribute, indicating that this is a declaration, not an instantiation, of the object. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"form","help":"The object element's form owner, or null if there isn't one.","obsolete":false},{"name":"height","help":"Reflects the {{htmlattrxref(\"height\", \"object)}}&nbsp;HTML attribute, specifying the displayed height of the resource in CSS pixels.","obsolete":false},{"name":"hspace","help":"Horizontal space in pixels around the control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-name\">name</a></code>\n&nbsp;HTML attribute, specifying the name of the object (\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span>, or of a browsing context (\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":false},{"name":"standby","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-standby\">standby</a></code>\n HTML&nbsp;attribute, specifying a message to display while the object loads. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"tabIndex","help":"he position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"type","help":"Reflects the {{htmlattrxref(\"type\", \"object)}}&nbsp;HTML attribute, specifying the MIME type of the resource.","obsolete":false},{"name":"useMap","help":"Reflects the {{htmlattrxref(\"usemap\", \"object)}}&nbsp;HTML attribute, specifying a {{HTMLElement(\"map\")}} element to use.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"vspace","help":"Horizontal space in pixels around the control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>.","obsolete":true},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object#attr-width\">width</a></code>\n&nbsp;HTML attribute, specifying the displayed width of the resource in CSS pixels.","obsolete":false},{"name":"willValidate","help":"Indicates whether the element is a candidate for constraint validation. Always false for <code>object</code> objects.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLObjectElement"},"HTMLPreElement":{"title":"pre","examples":["<pre name=\"code\" class=\"xml\">&lt;!-- Some example CSS code --&gt;\n&lt;pre&gt;\nbody {\n  color:red;\n}\n&lt;/pre&gt;</pre>\n        \n<div id=\"section_4\"><span id=\"Result\"></span><h4 class=\"editable\">Result</h4>\n<p>&nbsp;</p>\n<pre>body {\n  color:red;\n}\n</pre>\n</div>"],"summary":"This element represents preformatted text. Text within this element is typically displayed in a non-proportional font exactly as it is laid out in the file. Whitespaces inside this element are displayed as typed.","members":[],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/pre"},"TouchList":{"title":"TouchList","examples":["See the <a title=\"en/DOM/Touch events#Example\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events#Example\">example on the main Touch events article</a>."],"srcUrl":"https://developer.mozilla.org/en/DOM/TouchList","seeAlso":"<li><a title=\"en/DOM/Touch events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events\">Touch events</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchEvent\">TouchEvent</a></code>\n</li>","summary":"A <code>TouchList</code> represents a list of all of the points of contact with a touch surface; for example, if the user has three fingers on the screen (or trackpad), the corresponding <code>TouchList</code> would have one <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n object for each finger, for a total of three entries.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchList.identifiedTouch","name":"identifiedTouch","help":"Returns the first <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n&nbsp;item in the list whose identifier matches a specified value."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchList.item","name":"item","help":"Returns the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n object at the specified index in the list. You can also simply reference the <code>TouchList</code> using array syntax (<code>touchList[x]</code>)."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchList.length","name":"length","help":"The number of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n&nbsp;objects in the <code>TouchList</code>. <strong>Read only.</strong>"}]},"History":{"title":"window.history","examples":["history.back();     // equivalent to clicking back button\nhistory.go(-1);     // equivalent to history.back();\n"],"srcUrl":"https://developer.mozilla.org/en/DOM/window.history","specification":"HTML5 History interface","summary":"Returns a reference to the <code>History</code> object, which provides an interface for manipulating the browser <em>session history</em> (pages visited in the tab or frame that the current page is loaded in).","members":[{"name":"back","help":"<p>Goes to the previous page in session history, the same action as when the user clicks the browser's Back button. Equivalent to <code>history.go(-1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the first page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"forward","help":"<p>Goes to the next page in session history, the same action as when the user clicks the browser's Forward button; this is equivalent to <code>history.go(1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the last page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"go","help":"Loads a page from the session history, identified by its relative location to the current page, for example <code>-1</code> for the previous page or <code>1</code> for the next page. When <code><em>integerDelta</em></code> is out of bounds (e.g. -1 when there are no previously visited pages in the session history), the method doesn't do anything and doesn't raise an exception. Calling <code>go()</code> without parameters or with a non-integer argument has no effect (unlike Internet Explorer, <a class=\"external\" title=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" rel=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" target=\"_blank\">which supports string URLs as the argument</a>).","obsolete":false},{"name":"pushState","help":"<p>Pushes the given data onto the session history stack with the specified title and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"replaceState","help":"<p>Updates the most recent entry on the history stack to have the specified data, title, and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"length","help":"Read-only. Returns the number of elements in the session history, including the currently loaded page. For example, for a page loaded in a new tab this property returns <code>1</code>.","obsolete":false},{"name":"current","help":"Returns the URL of the active item of the session history. This property is not available to web content and is not supported by other browsers. Use <code><a title=\"en/DOM/window.location\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.location\">location.href</a></code> instead.","obsolete":false},{"name":"next","help":"Returns the URL of the next item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"previous","help":"Returns the URL of the previous item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"state","help":"Returns the state at the top of the history stack. This is a way to look at the state without having to wait for a <code>popstate</code> event. <strong>Read only.</strong>","obsolete":false},{"name":"back","help":"<p>Goes to the previous page in session history, the same action as when the user clicks the browser's Back button. Equivalent to <code>history.go(-1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the first page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"forward","help":"<p>Goes to the next page in session history, the same action as when the user clicks the browser's Forward button; this is equivalent to <code>history.go(1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the last page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"go","help":"Loads a page from the session history, identified by its relative location to the current page, for example <code>-1</code> for the previous page or <code>1</code> for the next page. When <code><em>integerDelta</em></code> is out of bounds (e.g. -1 when there are no previously visited pages in the session history), the method doesn't do anything and doesn't raise an exception. Calling <code>go()</code> without parameters or with a non-integer argument has no effect (unlike Internet Explorer, <a class=\"external\" title=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" rel=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" target=\"_blank\">which supports string URLs as the argument</a>).","obsolete":false},{"name":"pushState","help":"<p>Pushes the given data onto the session history stack with the specified title and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"replaceState","help":"<p>Updates the most recent entry on the history stack to have the specified data, title, and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"length","help":"Read-only. Returns the number of elements in the session history, including the currently loaded page. For example, for a page loaded in a new tab this property returns <code>1</code>.","obsolete":false},{"name":"current","help":"Returns the URL of the active item of the session history. This property is not available to web content and is not supported by other browsers. Use <code><a title=\"en/DOM/window.location\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.location\">location.href</a></code> instead.","obsolete":false},{"name":"next","help":"Returns the URL of the next item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"previous","help":"Returns the URL of the previous item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"state","help":"Returns the state at the top of the history stack. This is a way to look at the state without having to wait for a <code>popstate</code> event. <strong>Read only.</strong>","obsolete":false},{"name":"back","help":"<p>Goes to the previous page in session history, the same action as when the user clicks the browser's Back button. Equivalent to <code>history.go(-1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the first page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"forward","help":"<p>Goes to the next page in session history, the same action as when the user clicks the browser's Forward button; this is equivalent to <code>history.go(1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the last page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"go","help":"Loads a page from the session history, identified by its relative location to the current page, for example <code>-1</code> for the previous page or <code>1</code> for the next page. When <code><em>integerDelta</em></code> is out of bounds (e.g. -1 when there are no previously visited pages in the session history), the method doesn't do anything and doesn't raise an exception. Calling <code>go()</code> without parameters or with a non-integer argument has no effect (unlike Internet Explorer, <a class=\"external\" title=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" rel=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" target=\"_blank\">which supports string URLs as the argument</a>).","obsolete":false},{"name":"pushState","help":"<p>Pushes the given data onto the session history stack with the specified title and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"replaceState","help":"<p>Updates the most recent entry on the history stack to have the specified data, title, and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"length","help":"Read-only. Returns the number of elements in the session history, including the currently loaded page. For example, for a page loaded in a new tab this property returns <code>1</code>.","obsolete":false},{"name":"current","help":"Returns the URL of the active item of the session history. This property is not available to web content and is not supported by other browsers. Use <code><a title=\"en/DOM/window.location\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.location\">location.href</a></code> instead.","obsolete":false},{"name":"next","help":"Returns the URL of the next item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"previous","help":"Returns the URL of the previous item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"state","help":"Returns the state at the top of the history stack. This is a way to look at the state without having to wait for a <code>popstate</code> event. <strong>Read only.</strong>","obsolete":false},{"name":"back","help":"<p>Goes to the previous page in session history, the same action as when the user clicks the browser's Back button. Equivalent to <code>history.go(-1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the first page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"forward","help":"<p>Goes to the next page in session history, the same action as when the user clicks the browser's Forward button; this is equivalent to <code>history.go(1)</code>.</p> <div class=\"note\"><strong>Note:</strong> Calling this method to go back beyond the last page in the session history has no effect and doesn't raise an exception.</div>","obsolete":false},{"name":"go","help":"Loads a page from the session history, identified by its relative location to the current page, for example <code>-1</code> for the previous page or <code>1</code> for the next page. When <code><em>integerDelta</em></code> is out of bounds (e.g. -1 when there are no previously visited pages in the session history), the method doesn't do anything and doesn't raise an exception. Calling <code>go()</code> without parameters or with a non-integer argument has no effect (unlike Internet Explorer, <a class=\"external\" title=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" rel=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms536443(VS.85).aspx\" target=\"_blank\">which supports string URLs as the argument</a>).","obsolete":false},{"name":"pushState","help":"<p>Pushes the given data onto the session history stack with the specified title and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"replaceState","help":"<p>Updates the most recent entry on the history stack to have the specified data, title, and, if provided, URL. The data is treated as opaque by the DOM; you may specify any JavaScript object that can be serialized.&nbsp; Note that Firefox currently ignores the title parameter; for more information, see <a title=\"en/DOM/Manipulating the browser history\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history\">manipulating the browser history</a>.</p> <div class=\"note\"><strong>Note:</strong> In Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n through Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, the passed object is serialized using JSON. Starting in Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n, the object is serialized using <a title=\"en/DOM/The structured clone algorithm\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/The_structured_clone_algorithm\">the structured clone algorithm</a>. This allows a wider variety of objects to be safely passed.</div>","obsolete":false},{"name":"length","help":"Read-only. Returns the number of elements in the session history, including the currently loaded page. For example, for a page loaded in a new tab this property returns <code>1</code>.","obsolete":false},{"name":"current","help":"Returns the URL of the active item of the session history. This property is not available to web content and is not supported by other browsers. Use <code><a title=\"en/DOM/window.location\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.location\">location.href</a></code> instead.","obsolete":false},{"name":"next","help":"Returns the URL of the next item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"previous","help":"Returns the URL of the previous item in the session history. This property is not available to web content and is not supported by other browsers.","obsolete":false},{"name":"state","help":"Returns the state at the top of the history stack. This is a way to look at the state without having to wait for a <code>popstate</code> event. <strong>Read only.</strong>","obsolete":false}]},"SVGPathSegCurvetoQuadraticSmoothRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGFEMorphologyElement":{"title":"feMorphology","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"This filter is used to erode or dilate the input image. It's usefulness lies especially in fattening or thinning effects.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/radius","name":"radius","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/operator","name":"operator","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feMorphology"},"HTMLSpanElement":{"title":"span","examples":["<pre name=\"code\" class=\"xml\">&lt;p&gt;&lt;span&gt;Some text&lt;/span&gt;&lt;/p&gt;</pre>\n        \n<div id=\"section_6\"><span id=\"Result\"></span><h4 class=\"editable\">Result</h4>\n<p><span>Some text</span></p></div>"],"summary":"This HTML element is a generic inline container for phrasing content, which does not inherently represent anything. It can be used to group elements for styling purposes (using the <strong>class</strong> or <strong>id</strong> attributes), or because they share attribute values, such as <strong>lang</strong>. It should be used only when no other semantic element is appropriate. &lt;span&gt; is very much like a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/div\">&lt;div&gt;</a></code>\n element, but <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/div\">&lt;div&gt;</a></code>\n is a block-level element whereas a &lt;span&gt; is an inline element.","members":[],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/span"},"SVGAnimateElement":{"title":"SVGAnimateElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimateElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimateElement"},"MetadataCallback":{"title":"EntrySync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/EntrySync","skipped":true,"cause":"Suspect title"},"EntriesCallback":{"title":"DirectoryReaderSync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryReaderSync","skipped":true,"cause":"Suspect title"},"UIEvent":{"title":"UIEvent","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/UIEvent","specification":"DOM&nbsp;3 Events: UIEvent","seeAlso":"Event","summary":"<div><div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/events/nsIDOMUIEvent.idl\"><code>dom/interfaces/events/nsIDOMUIEvent.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>A basic event interface for all user interface events</span><div><div>1.0</div><div>11.0</div><div title=\"Introduced in Gecko 1.0 \n\"></div><div title=\"Last changed in Gecko 9.0 \n\"></div></div>\n<div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMEvent\">nsIDOMEvent</a></code>\n<span>Last changed in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n</span></div></div>\n<p></p>\n<p>The DOM <code>UIEvent</code> represents simple user interface events.</p>","members":[{"name":"initUIEvent","help":"<p>Initializes the UIEvent object.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>typeArg</code></dt> <dd>The type of UI event.</dd> <dt><code>canBubbleArg</code></dt> <dd>Whether or not the event can bubble.</dd> <dt><code>cancelableArg</code></dt> <dd>Whether or not the event can be canceled.</dd> <dt><code>viewArg</code></dt> <dd>Specifies the <code>view</code> attribute value. This may be <code>null</code>.</dd> <dt><code>detailArg</code></dt> <dd>Specifies the detail attribute value.</dd>\n</dl>\n</div>","idl":"<pre><code>void initUIEvent(\n  in DOMString typeArg,\n  in boolean canBubbleArg,\n  in boolean cancelableArg,\n  in views::AbstractView viewArg,\n  in long detailArg\n);</code>\n</pre>","obsolete":false},{"name":"detail","help":"Detail about the event, depending on the type of event. <strong>Read only.</strong>","obsolete":false},{"name":"view","help":"A view which generated the event. <strong>Read only.</strong>","obsolete":false}]},"SVGStopElement":{"title":"SVGStopElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGStopElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/stop\">&lt;stop&gt;</a></code>\n element.","members":[{"name":"offset","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/offset\" class=\"new\">offset</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/stop\">&lt;stop&gt;</a></code>\n element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGStopElement"},"SVGGradientElement":{"title":"SVGGradientElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGGradient</code> interface is a base interface used by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGLinearGradientElement\">SVGLinearGradientElement</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGRadialGradientElement\">SVGRadialGradientElement</a></code>\n.","members":[{"name":"SVG_SPREADMETHOD_UNKNOWN","help":"The type is not one of predefined types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_SPREADMETHOD_PAD","help":"Corresponds to value <em>pad</em>.","obsolete":false},{"name":"SVG_SPREADMETHOD_REFLECT","help":"Corresponds to value <em>reflect</em>.","obsolete":false},{"name":"SVG_SPREADMETHOD_REPEAT","help":"Corresponds to value <em>repeat</em>.","obsolete":false},{"name":"gradientUnits","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/gradientUnits\" class=\"new\">gradientUnits</a></code> on the given element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>\n.","obsolete":false},{"name":"gradientTransform","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/gradientTransform\" class=\"new\">gradientTransform</a></code> on the given element.","obsolete":false},{"name":"spreadMethod","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/spreadMethod\" class=\"new\">spreadMethod</a></code> on the given element. One of the Spread Method Types defined on this interface.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGGradientElement"},"SVGMatrix":{"title":"SVGMatrix","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>Many of SVG's graphics operations utilize 2x3 matrices of the form:</p>\n<pre>[a c e]\n[b d f]</pre>\n<p>which, when expanded into a 3x3 matrix for the purposes of matrix arithmetic, become:</p>\n<pre>[a c e]\n[b d f]\n[0 0 1]\n</pre>\n<p>An <code>SVGMatrix</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"multiply","help":"Performs matrix multiplication. This matrix is post-multiplied by another matrix, returning the resulting new matrix.","obsolete":false},{"name":"inverse","help":"<p>Return the inverse matrix</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>SVG_MATRIX_NOT_INVERTABLE</code> is raised if the matrix is not invertable.</li> </ul>","obsolete":false},{"name":"translate","help":"Post-multiplies a translation transformation on the current matrix and returns the resulting matrix.","obsolete":false},{"name":"scale","help":"Post-multiplies a uniform scale transformation on the current matrix and returns the resulting matrix.","obsolete":false},{"name":"scaleNonUniform","help":"Post-multiplies a non-uniform scale transformation on the current matrix and returns the resulting matrix.","obsolete":false},{"name":"rotate","help":"Post-multiplies a rotation transformation on the current matrix and returns the resulting matrix.","obsolete":false},{"name":"rotateFromVector","help":"<p>Post-multiplies a rotation transformation on the current matrix and returns the resulting matrix. The rotation angle is determined by taking (+/-) atan(y/x). The direction of the vector (x,&nbsp;y) determines whether the positive or negative angle value is used.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>SVG_INVALID_VALUE_ERR</code> is raised if one of the parameters has an invalid value.</li> </ul>","obsolete":false},{"name":"flipX","help":"Post-multiplies the transformation [-1&nbsp;0&nbsp;0&nbsp;1&nbsp;0&nbsp;0] and returns the resulting matrix.","obsolete":false},{"name":"flipY","help":"Post-multiplies the transformation [1&nbsp;0&nbsp;0&nbsp;-1&nbsp;0&nbsp;0] and returns the resulting matrix.","obsolete":false},{"name":"skewX","help":"Post-multiplies a skewX transformation on the current matrix and returns the resulting matrix.","obsolete":false},{"name":"skewY","help":"Post-multiplies a skewY transformation on the current matrix and returns the resulting matrix.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGMatrix"},"IDBTransaction":{"title":"IDBTransaction","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12\n<span title=\"prefix\">-webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<p>In the following code snippet, we open a transaction and add data to the object store.&nbsp;&nbsp;Because the specification is still evolving, Chrome uses prefixes in the methods.&nbsp;Chrome uses the&nbsp;<code>webkit</code>&nbsp;prefix.&nbsp;<span>For example,&nbsp;</span><span>instead of just&nbsp;</span><span><code>IDBTransaction.READ_WRITE</code>, </span><span>use <code>webkitIDBTransaction.READ_WRITE</code>.&nbsp;</span><span>Firefox does not use prefixes, except in the opening method (<code>mozIndexedDB</code>)</span><span>. </span><span>Event handlers are registered for responding to various situations.</span></p>\n\n          <pre name=\"code\" class=\"js\">// Take care of the browser prefixes.\nif (window.indexedDb) {\n} else if (window.webkitIndexedDB) {\n    window.indexedDB = window.webkitIndexedDB;\n    window.IDBTransaction = window.webkitIDBTransaction;\n} else if (window.mozIndexedDB) {\n    window.indexedDB = window.mozIndexedDB;\n} else {\n   /* Browser not supported. */\n}\n   \n...   \n\nvar idbReq = window.indexedDB.open('Database Name');\nidbReq.onsuccess = function(event) {\n   var db = this.result;\n   var trans = db.transaction(['monster_store','hero_store'], IDBTransaction.READ_WRITE);\n   var store = trans.objectStore('monster_store');\n   var req = store.put(value, key);\n   req.onsuccess = ...\n   req.onerror = ...\n};\nidbReq.onerror = function(event) {\n    ...\n};</pre>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBTransaction","summary":"<p>The <code>IDBTransaction</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB&nbsp;API</a> provides a static, asynchronous transaction on a database using event handler attributes. All reading and writing of data are done within transactions. You actually use <code><a title=\"en/IndexedDB/IDBDatabase\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase\">IDBDatabase</a></code> to start transactions and use <code>IDBTransaction</code> to set the mode of the transaction and access an object store and make your request. You can also use it to abort transactions.</p>\n<p>Inherits from: <a title=\"en/DOM/EventTarget\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/EventTarget\">EventTarget</a></p>","members":[{"name":"abort","help":"<p>Returns immediately, and undoes all the changes to objects in the database associated with this transaction. If this transaction has been aborted or completed, then this method throws an <a title=\"en/IndexedDB/IDBErrorEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent\">error event</a>, with its <a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a> set to <code><a title=\"en/IndexedDB/IDBDatabaseException#ABORT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#ABORT_ERR\">ABORT_ERR</a></code> and a suitable <a title=\"en/IndexedDB/IDBEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBEvent#attr_message\">message</a>.</p>\n\n<p>All pending <a title=\"IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\"><code>IDBRequest</code></a> objects created during this transaction have their <code>errorCode</code> set to <code>ABORT_ERR</code>.</p>\n<div id=\"section_12\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a>, with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>The transaction has already been committed or aborted.</dd>\n</dl>\n</div>","idl":"<pre>void abort(\n);\n</pre>","obsolete":false},{"name":"objectStore","help":"<p>Returns an object store that has already been added to the scope of this transaction. Every call to this method on the same transaction object, with the same name, returns the same <a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStore\">IDBObjectStore</a> instance. If this method is called on a different transaction object, a different IDBObjectStore instance is returned.</p>\n\n<div id=\"section_14\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the requested object store.</dd>\n</dl>\n</div><div id=\"section_15\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStore\">IDBObjectStore</a></code></dt> <dd>An object for accessing the requested object store.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>The method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></dt> <dd>The requested object store is not in this transaction's scope.</dd> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>request is made on a source object that has been deleted or removed..</dd>\n</dl>\n</div>","idl":"<pre><code>IDBObjectStore objectStore(\n&nbsp; in DOMString name\n) raises (IDBDatabaseException);</code>\n</pre>","obsolete":false},{"url":"","name":"READ_ONLY","help":"Allows data to be read but not changed.&nbsp;","obsolete":false},{"url":"","name":"READ_WRITE","help":"Allows reading and writing of data in existing data stores to be changed.","obsolete":false},{"url":"","name":"VERSION_CHANGE","help":"Allows any operation to be performed, including ones that delete and create object stores and indexes. This mode is for updating the version number of transactions that were started using the <a title=\"en/IndexedDB/IDBDatabase#setVersion\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase#setVersion\"><code>setVersion()</code></a> method of <a title=\"en/IndexedDB/IDBDatabase\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase\">IDBDatabase</a> objects. Transactions of this mode cannot run concurrently with other transactions.","obsolete":false},{"url":"","name":"db","help":"The database connection that this transaction is associated with.","obsolete":false},{"url":"","name":"mode","help":"The mode for isolating access to data in the object stores that are in the scope of the transaction. For possible values, see Constants. The default value is <code><a href=\"#const_read_only\" title=\"#const read only\">READ_ONLY</a></code>.","obsolete":false},{"url":"","name":"onabort","help":"The event handler for the <code>onabort</code> event.","obsolete":false},{"url":"","name":"oncomplete","help":"The event handler for the <code>oncomplete</code> event.","obsolete":false},{"url":"","name":"onerror","help":"The event handler for the <code>error </code>event.","obsolete":false},{"name":"onabort","help":"","obsolete":false},{"name":"oncomplete","help":"","obsolete":false},{"name":"onerror","help":"","obsolete":false}]},"Entry":{"title":"Entry","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>Entry</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents entries in a file system. The entries can be a file&nbsp;or a <a href=\"https://developer.mozilla.org/en/DOM/File_API/File_system_API/DirectoryEntry\" rel=\"internal\" title=\"en/DOM/File_API/File_system_API/DirectoryEntry\">DirectoryEntry</a>.</p>","members":[{"name":"getMetadata","help":"<p>Look up metadata about this entry.</p>\n<pre>void getMetada (\n  in MetadataCallback ErrorCallback\n);</pre>\n<div id=\"section_6\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the time of the last modification.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"getParent","help":"<p>Look up the parent <code>DirectoryEntry</code> containing this entry. If this entry is the root of its filesystem, its parent is itself.</p>\n<pre>void getParent (\n  <em>(in EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_21\"><span id=\"Parameter_6\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCellback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_22\"><span id=\"Returns_6\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"remove","help":"<p>Deletes a file or directory. You cannot delete an empty directory or the root directory of a filesystem.</p>\n<pre>void remove (\n  <em>(in VoidCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_18\"><span id=\"Parameter_5\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_19\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"copyTo","help":"<p>Copy an entry to a different location on the file system. You cannot copy an entry inside itself if it is a directory nor can you copy it into its parent if a name different from its current one isn't provided. Directory copies are always recursive—that is, they copy all contents of the directory.</p>\n<pre>void vopyTo (\n  <em>(in DirectoryEntry parent, optional DOMString newName, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_12\"><span id=\"Parameter_3\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"moveTo","help":"<p>Move an entry to a different location on the file system. You cannot do the following:</p>\n<ul> <li>move a directory inside itself or to any child at any depth;</li> <li>move an entry into its parent if a name different from its current one isn't provided;</li> <li>move a file to a path occupied by a directory;</li> <li>move a directory to a path occupied by a file;</li> <li>move any element to a path occupied by a directory which is not empty.</li>\n</ul>\n<p>Moving a file over an existing file&nbsp;replaces that existing file. A move of a directory on top of an existing empty directory&nbsp;replaces that directory.</p>\n<pre>void moveTo (\n  <em>(in DirectoryEntry parent, optional DOMString newName, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_9\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"toURL","help":"<p>Returns a URL that can be used to identify this entry. It has no specific expiration. Bcause it describes a location on disk, it is valid for as long as that location exists. Users can supply&nbsp;<code>mimeType</code>&nbsp;to simulate the optional mime-type header associated with HTTP downloads.</p>\n<pre>DOMString toURL (\n  <em>(in </em>optional DOMString mimeType<em>);</em>\n);</pre>\n<div id=\"section_15\"><span id=\"Parameter_4\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>mimeType</dt> <dd>For a FileEntry, the mime type to be used to interpret the file, when loaded through this URL.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>DOMString</code></dt>\n</dl>\n</div>","obsolete":false},{"url":"","name":"filesystem","help":"The file system on which the entry resides.","obsolete":false},{"url":"","name":"fullpath","help":"The full&nbsp;absolute path&nbsp;from the root to the entry. An&nbsp;absolute path&nbsp;is a&nbsp;relative path&nbsp;from the root directory, prepended with a '/'. A relative path describes how to get from a particular directory to a file or directory. All methods that accept paths are on DirectoryEntry or DirectoryEntrySync objects; the paths, if relative, are interpreted as being relative to the directories represented by these objects.","obsolete":false},{"url":"","name":"isDirectory","help":"The entry is a directory.","obsolete":false},{"url":"","name":"isFile","help":"The entry is a file.","obsolete":false},{"url":"","name":"name","help":"The name of the entry, excluding the path leading to it.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/Entry"},"WheelEvent":{"title":"nsIDOMMouseScrollEvent","members":[],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMMouseScrollEvent","skipped":true,"cause":"Suspect title"},"Coordinates":{"title":"Drawing shapes","members":[],"srcUrl":"https://developer.mozilla.org/en/Canvas_tutorial/Drawing_shapes","skipped":true,"cause":"Suspect title"},"HTMLDocument":{"title":"HTMLDocument","summary":"<p><code>HTMLDocument</code> is an abstract interface of the <a title=\"en/DOM\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM\">DOM</a> which provides access to special properties and methods not present by default on a regular (XML) document.</p>\n<p>Its methods and properties are noted (as asterisks) on the <a title=\"en/DOM/document\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document\">document</a> page.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLDocument","specification":"http://www.w3.org/TR/DOM-Level-2-HTM...ml#ID-26809268"},"SVGDefsElement":{"title":"SVGDefsElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>SVGDefsElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/defs\">&lt;defs&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGDefsElement"},"Touch":{"title":"Touch","examples":["See the <a title=\"en/DOM/Touch events#Example\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events#Example\">example on the main Touch events article</a>."],"srcUrl":"https://developer.mozilla.org/en/DOM/Touch","specification":"Touch Events Specification","seeAlso":"<li><a title=\"en/DOM/Touch events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events\">Touch events</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchEvent\">TouchEvent</a></code>\n</li>","summary":"A <code>Touch</code> object represents a single point of contact between the user and a touch-sensitive interface device (which may be, for example, a touchscreen or a trackpad).","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.screenY","name":"screenY","help":"The Y coordinate of the touch point relative to the screen, not including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.pageY","name":"pageY","help":"The Y coordinate of the touch point relative to the viewport, including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.identifier","name":"identifier","help":"A unique identifier for this <code>Touch</code> object. A given touch (say, by a finger) will have the same identifier for the duration of its movement around the surface. This lets you ensure that you're tracking the same touch all the time. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.clientY","name":"clientY","help":"The Y coordinate of the touch point relative to the viewport, not including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.pageX","name":"pageX","help":"The X coordinate of the touch point relative to the viewport, including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.clientX","name":"clientX","help":"The X coordinate of the touch point relative to the viewport, not including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.radiusX","name":"radiusX","help":"The X radius of the ellipse that most closely circumscribes the area of contact with the screen. The value is in pixels of the same scale as <code>screenX</code>. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.rotationAngle","name":"rotationAngle","help":"The angle (in degrees)&nbsp;that the ellipse described by radiusX and radiusY must be rotated, clockwise, to most accurately cover the area of contact between the user and the surface. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.screenX","name":"screenX","help":"The X coordinate of the touch point relative to the screen, not including any scroll offset. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.force","name":"force","help":"The amount of pressure being applied to the surface by the user, as a float between 0.0 (no pressure) and 1.0 (maximum pressure). <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Touch.radiusY","name":"radiusY","help":"The Y radius of the ellipse that most closely circumscribes the area of contact with the screen. The value is in pixels of the same scale as <code>screenY</code>. <strong>Read only.</strong>"}]},"HTMLDataListElement":{"title":"HTMLDataListElement","seeAlso":"The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/datalist\">&lt;datalist&gt;</a></code>\n element, which implements this interface.","summary":"DOM Datalist objects expose the <a class=\" external\" title=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element\" target=\"_blank\">HTMLDataListElement</a> interface, which provides special properties (beyond the <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) to manipulate <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/datalist\">&lt;datalist&gt;</a></code>\n elements and their content.","members":[{"name":"options","help":"A collection of the contained option elements.","obsolete":false},{"name":"options","help":"A collection of the contained option elements.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLDataListElement"},"CSSValue":{"title":"text-overflow","members":[],"srcUrl":"https://developer.mozilla.org/en/CSS/text-overflow","skipped":true,"cause":"Suspect title"},"HTMLBaseElement":{"title":"HTMLBaseElement","summary":"The <code>base</code> object exposes the <a class=\" external\" title=\"http://www.w3.org/TR/html5/semantics.html#htmlbaseelement\" rel=\"external\" href=\"http://www.w3.org/TR/html5/semantics.html#htmlbaseelement\" target=\"_blank\">HTMLBaseElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\"external\" target=\"_blank\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-73629039\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-73629039\">HTMLBaseElement</a>) interface which contains the base URI&nbsp;for a document.&nbsp; This object inherits all of the properties and methods as described in the <a class=\"internal\" title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section.","members":[{"name":"href","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/base#attr-href\">href</a></code>\n HTML attribute, containing a base URL for relative URLs in the document.","obsolete":false},{"name":"target","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/base#attr-target\">target</a></code>\n HTML attribute, containing a default target browsing context or frame for elements that do not have a target reference specified.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLBaseElement"},"CanvasGradient":{"title":"CanvasGradient","summary":"This is an opaque object representing a gradient and returned by <a title=\"en/DOM/CanvasRenderingContext2D\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\">CanvasRenderingContext2D</a>'s <a title=\"en/DOM/CanvasRenderingContext2D.createLinearGradient\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\">createLinearGradient</a> or <a title=\"en/DOM/CanvasRenderingContext2D.createRadialGradient\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\">createRadialGradient</a> methods.","members":[{"name":"addColorStop","help":"","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/CanvasGradient","specification":"http://www.whatwg.org/specs/web-apps...canvasgradient"},"HTMLLIElement":{"title":"li","examples":["<pre name=\"code\" class=\"xml\">&lt;ol&gt;\n    &lt;li&gt;first item&lt;/li&gt;\n    &lt;li&gt;second item&lt;/li&gt;\n    &lt;li&gt;third item&lt;/li&gt;\n&lt;/ol&gt;</pre>\n        \n<p>The above HTML will output:</p>\n<ol> <li>first item</li> <li>second item</li> <li>third item</li>\n</ol>\n\n          <pre name=\"code\" class=\"xml\">&lt;ul&gt;\n    &lt;li&gt;first item&lt;/li&gt;\n    &lt;li&gt;second item&lt;/li&gt;\n    &lt;li&gt;third item&lt;/li&gt;\n&lt;/ul&gt;</pre>\n        \n<ul> <li>first item</li> <li>second item</li> <li>third item</li>\n</ul>\n<p>For more detailed examples, see the <a title=\"en/HTML/Element/ol#Examples\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/ol#Examples\">&lt;ol&gt;</a> and <a title=\"en/HTML/Element/ul#Examples\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/ul#Examples\">&lt;ul&gt;</a> pages.</p>"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/li","seeAlso":"<li>Other list-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n and the obsolete <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir\">&lt;dir&gt;</a></code>\n;</li> <li>CSS properties that may be specially useful to style the <span>&lt;li&gt;</span> element: <ul> <li>the <a title=\"en/CSS/list-style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/list-style\">list-style</a> property, to choose the way the ordinal is displayed,</li> <li><a title=\"en/CSS_Counters\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS_Counters\">CSS counters</a>, to handle complex nested lists,</li> <li>the <a title=\"en/CSS/margin\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/margin\">margin</a> property, to control the indent of the list item.</li> </ul> </li>","summary":"The <em>HTML List item element</em> (<code>&lt;li&gt;</code>) is used to represent a list item. It should be contained in an ordered list (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n), an unordered list (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n) or a menu (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n), where it represents a single entity in that list. In menus and unordered lists, list items are ordinarily displayed using bullet points. In order lists, they are usually displayed with some ascending counter on the left such as a number or letter","members":[{"obsolete":false,"url":"","name":"type","help":"This character attributes indicates the numbering type: <ul> <li><code>a</code>: lowercase letters</li> <li><code>A</code>: uppercase letters</li> <li><code>i</code>: lowercase Roman numerals</li> <li><code>I</code>: uppercase Roman numerals</li> <li><code>1</code>: numbers</li> </ul> This type overrides the one used by its parent <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element, if any.<br> <div class=\"note\"><strong>Usage note:</strong> This attribute has been deprecated: use the CSS <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/list-style-type\">list-style-type</a></code>\n property instead.</div>"},{"obsolete":false,"url":"","name":"value","help":"This integer attributes indicates the current ordinal value of the item in the list as defined by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n element. The only allowed value for this attribute is a number, even if the list is displayed with Roman numerals or letters. List items that follow this one continue numbering from the value set. The <strong>value</strong> attribute has no meaning for unordered lists (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n) or for menus (<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n). <div class=\"note\"><strong>Note</strong>: This attribute was deprecated in HTML4, but reintroduced in HTML5.</div> <div class=\"geckoVersionNote\"> <p>\n</p><div class=\"geckoVersionHeading\">Gecko 9.0 note<div>(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n</div></div>\n<p></p> <p>Prior to <span title=\"(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n\">Gecko&nbsp;9.0</span>, negative values were incorrectly converted to 0. Starting in <span title=\"(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n\">Gecko&nbsp;9.0</span> all integer values are correctly parsed.</p> </div>"}]},"HTMLImageElement":{"title":"HTMLImageElement","examples":["var img1 = new Image(); // DOM 0\nimg1.src = 'image1.png';\nimg1.alt = 'alt';\ndocument.body.appendChild(img1);\n\nvar img2 = document.createElement('img'); // use DOM <a href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/html/nsIDOMHTMLImageElement.idl\" title=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/html/nsIDOMHTMLImageElement.idl\">HTMLImageElement</a>\nimg2.src = 'image2.jpg';\nimg2.alt = 'alt text';\ndocument.body.appendChild(img2);\n\n// using first image in the document\nalert(document.images[0].src);\n"],"summary":"DOM image objects expose the <a title=\"http://www.w3.org/TR/html5/embedded-content-1.html#htmlimageelement\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/html5/embedded-content-1.html#htmlimageelement\" target=\"_blank\">HTMLImageElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-17701901\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-17701901\" target=\"_blank\"><code>HTMLImageElement</code></a>) interface, which provides special properties and methods (beyond the regular <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n object interface they also have available to them by inheritance) for manipulating the layout and presentation of input elements.","members":[{"name":"align","help":"Indicates the alignment of the image with respect to the surrounding context.","obsolete":true},{"name":"alt","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img#attr-alt\">alt</a></code>\n HTML attribute, indicating fallback context for the image.","obsolete":false},{"name":"border","help":"Width of the border around the image.","obsolete":true},{"name":"complete","help":"True if the browser has fetched the image, and it is in a <a title=\"en/HTML/Element/Img#Image Format\" rel=\"internal\" href=\"https://developer.mozilla.org/En/HTML/Element/Img#Image_Format\">supported image type</a> that was decoded without errors.","obsolete":false},{"name":"crossOrigin","help":"The CORS setting for this image element. See <a title=\"en/HTML/CORS settings attributes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/CORS_settings_attributes\">CORS&nbsp;settings attributes</a> for details.","obsolete":false},{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img#attr-height\">height</a></code>\n HTML attribute, indicating the rendered height of the image in CSS&nbsp;pixels.","obsolete":false},{"name":"hspace","help":"Space to the left and right of the image.","obsolete":true},{"name":"isMap","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img#attr-ismap\">ismap</a></code>\n HTML attribute, indicating that the image is part of a server-side image map.","obsolete":false},{"name":"longDesc","help":"URI of a long description of the image.","obsolete":true},{"name":"naturalHeight","help":"Intrinsic height of the image in CSS&nbsp;pixels, if it is available; otherwise, 0.","obsolete":false},{"name":"naturalWidth","help":"Intrinsic width of the image in CSS&nbsp;pixels, if it is available; otherwise, 0.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element#attr-src\">src</a></code>\n HTML attribute, containing the URL of the image.","obsolete":false},{"name":"useMap","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img#attr-usemap\">usemap</a></code>\n HTML attribute, containing a partial URL of a map element.","obsolete":false},{"name":"vspace","help":"Space above and below the image.","obsolete":true},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/img#attr-width\">width</a></code>\n HTML attribute, indicating the rendered width of the image in CSS&nbsp;pixels.","obsolete":false},{"name":"lowsrc","help":"A reference to a low-quality (but faster to load) copy of the image.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLImageElement"},"StringCallback":{"title":"HTTP server for unit tests","members":[],"srcUrl":"https://developer.mozilla.org/En/Httpd.js/HTTP_server_for_unit_tests","skipped":true,"cause":"Suspect title"},"SVGAngle":{"title":"SVGAngle","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGAngle</code> interface correspond to the <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\">&lt;angle&gt;</a> basic data type.</p>\n<p>An <code>SVGAngle</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"newValueSpecifiedUnits","help":"<p>Reset the value as a number with an associated unitType, thereby replacing the values for all of the attributes on the object.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NOT_SUPPORTED_ERR</code> is raised if <code>unitType</code> is <code>SVG_ANGLETYPE_UNKNOWN</code> or not a valid unit type constant (one of the other <code>SVG_ANGLETYPE_*</code> constants defined on this interface).</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"convertToSpecifiedUnits","help":"Preserve the same underlying stored value, but reset the stored unit identifier to the given <code><em>unitType</em></code>. Object attributes <code>unitType</code>, <code>valueInSpecifiedUnits</code> and <code>valueAsString</code> might be modified as a result of this method.","obsolete":false},{"name":"SVG_ANGLETYPE_UNKNOWN","help":"The unit type is not one of predefined unit types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_ANGLETYPE_UNSPECIFIED","help":"No unit type was provided (i.e., a unitless value was specified). For angles, a unitless value is treated the same as if degrees were specified.","obsolete":false},{"name":"SVG_ANGLETYPE_DEG","help":"The unit type was explicitly set to degrees.","obsolete":false},{"name":"SVG_ANGLETYPE_RAD","help":"The unit type is radians.","obsolete":false},{"name":"SVG_ANGLETYPE_GRAD","help":"The unit type is gradians.","obsolete":false},{"name":"unitType","help":"The type of the value as specified by one of the SVG_ANGLETYPE_* constants defined on this interface.","obsolete":false},{"name":"value","help":"<p>The value as a floating point value, in user units. Setting this attribute will cause <code>valueInSpecifiedUnits</code> and <code>valueAsString</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong> a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</p>","obsolete":false},{"name":"valueInSpecifiedUnits","help":"<p>The value as a floating point value, in the units expressed by <code>unitType</code>. Setting this attribute will cause <code>value</code> and <code>valueAsString</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong> a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</p>","obsolete":false},{"name":"valueAsString","help":"<p>The value as a string value, in the units expressed by <code>unitType</code>. Setting this attribute will cause <code>value</code>, <code>valueInSpecifiedUnits</code> and <code>unitType</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>SYNTAX_ERR</code> is raised if the assigned string cannot be parsed as a valid <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Angle\">&lt;angle&gt;</a>.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAngle"},"DocumentType":{"title":"DocumentType","summary":"<p><span>NOTE:&nbsp;This interface is not fully supported in Mozilla at present, including for indicating internalSubset information which Gecko generally does otherwise support.</span></p>\n<p><code>DocumentType</code> inherits <a title=\"en/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a>'s properties, methods, and constants as well as the following properties of its own:</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/DocumentType.name","name":"name","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/DocumentType.systemId","name":"systemId","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/DocumentType.publicId","name":"publicId","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/DocumentType.internalSubset","name":"internalSubset","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/DocumentType","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...l#ID-412266927"},"HTMLTableElement":{"title":"HTMLTableElement","summary":"<code>table</code> objects expose the <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-64060425\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-64060425\" target=\"_blank\">HTMLTableElement</a></code> interface, which provides special properties and methods (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\" title=\"en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of tables in HTML.\n","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.deleteTHead","name":"deleteTHead","help":"<b>deleteTHead</b> removes the table header.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.createTFoot","name":"createTFoot","help":"<b>createTFoot</b> creates a table footer.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.insertRow","name":"insertRow","help":"<b>insertRow</b> inserts a new row.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.deleteCaption","name":"deleteCaption","help":"<b>deleteCaption</b> removes the table caption.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.createCaption","name":"createCaption","help":"<b>createCaption</b> creates a new caption for the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.deleteTFoot","name":"deleteTFoot","help":"<b>deleteTFoot</b> removes a table footer.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.createTHead","name":"createTHead","help":"<b>createTHead</b> creates a table header.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.deleteRow","name":"deleteRow","help":"<b>deleteRow</b> removes a row.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.caption","name":"caption","help":"<b>caption</b> returns the table caption.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.tFoot","name":"tFoot","help":"<b>tFoot</b> returns the table footer.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.rows","name":"rows","help":"<b>rows</b> returns the rows in the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.width","name":"width","help":"<b>width</b> gets/sets the width of the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.cellSpacing","name":"cellSpacing","help":"<b>cellSpacing</b> gets/sets the spacing around the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.tHead","name":"tHead","help":"<b>tHead</b> returns the table head.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.bgColor","name":"bgColor","help":"<b>bgColor</b> gets/sets the background color of the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.align","name":"align","help":"<b>align</b> gets/sets the alignment of the table.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.cellPadding","name":"cellPadding","help":"<b>cellPadding</b> gets/sets the cell padding.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.tBodies","name":"tBodies","help":"<b>tBodies</b> returns the table bodies.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.summary","name":"summary","help":"<b>summary</b> gets/sets the table summary.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.frame","name":"frame","help":"<b>frame</b> specifies which sides of the table have borders.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.rules","name":"rules","help":"<b>rules</b> specifies which interior borders are visible.\n"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/table.border","name":"border","help":"<b>border</b> gets/sets the table border.\n"}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTableElement"},"CSSRuleList":{"title":"CSSRuleList","examples":["// get the first style sheet’s first rule\nvar first_rule = document.styleSheets[0].cssRules[0];"],"srcUrl":"https://developer.mozilla.org/en/DOM/CSSRuleList","specification":"<li><a title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\" target=\"_blank\">DOM Level 2 Style: <code>CSSRuleList</code> interface</a></li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\" title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\" target=\"_blank\">DOM Level 2 Style: <code>CSSStyleSheet</code> attribute <code>cssRules</code></a></li> <li><a title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\" target=\"_blank\">DOM Level 2 Style: <code>CSSMediaRule</code> attribute </a><code><a title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\" target=\"_blank\">cssRules</a></code></li> <li><a title=\"http://dev.w3.org/csswg/css3-animations/#DOM-CSSKeyframesRule\" class=\" external\" rel=\"external\" href=\"http://dev.w3.org/csswg/css3-animations/#DOM-CSSKeyframesRule\" target=\"_blank\">CSS Animations: <code>CSSKeyframesRule</code> interface</a></li>","seeAlso":"CSSRule","summary":"A <code>CSSRuleList</code> is an array-like object containing an ordered collection of <code><a title=\"en/DOM/cssRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/cssRule\">CSSRule</a></code> objects.","members":[]},"SVGSVGElement":{"title":"SVGSVGElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGSVGElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/circle\">&lt;circle&gt;</a></code>\n SVG Element","summary":"The <code>SVGSVGElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n elements, as well as methods to manipulate them. This interface contains also various miscellaneous commonly-used utility methods, such as matrix operations and the ability to control the time of redraw on visual rendering devices.","members":[{"name":"suspendRedraw","help":"<p>Takes a time-out value which indicates that redraw shall not occur until:</p> <ol> <li>the corresponding unsuspendRedraw() call has been made,</li> <li>an unsuspendRedrawAll() call has been made, or</li> <li>its timer has timed out.</li> </ol> <p>In environments that do not support interactivity (e.g., print media), then redraw shall not be suspended. Calls to <code>suspendRedraw()</code> and <code>unsuspendRedraw()</code> should, but need not be, made in balanced pairs.</p> <p>To suspend redraw actions as a collection of SVG DOM changes occur, precede the changes to the SVG DOM with a method call similar to:</p> <p><code>suspendHandleID = suspendRedraw(maxWaitMilliseconds);</code></p> <p>and follow the changes with a method call similar to:</p> <p><code>unsuspendRedraw(suspendHandleID);</code></p> <p>Note that multiple suspendRedraw calls can be used at once and that each such method call is treated independently of the other suspendRedraw method calls.</p>","obsolete":false},{"name":"unsuspendRedraw","help":"Cancels a specified <code>suspendRedraw()</code> by providing a unique suspend handle ID that was returned by a previous <code>suspendRedraw()</code> call.","obsolete":false},{"name":"unsuspendRedrawAll","help":"Cancels all currently active <code>suspendRedraw()</code> method calls. This method is most useful at the very end of a set of SVG DOM calls to ensure that all pending <code>suspendRedraw()</code> method calls have been cancelled.","obsolete":false},{"name":"forceRedraw","help":"In rendering environments supporting interactivity, forces the user agent to immediately redraw all regions of the viewport that require updating.","obsolete":false},{"name":"pauseAnimations","help":"Suspends (i.e., pauses) all currently running animations that are defined within the SVG document fragment corresponding to this <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element, causing the animation clock corresponding to this document fragment to stand still until it is unpaused.","obsolete":false},{"name":"unpauseAnimations","help":"Unsuspends (i.e., unpauses) currently running animations that are defined within the SVG document fragment, causing the animation clock to continue from the time at which it was suspended.","obsolete":false},{"name":"animationsPaused","help":"Returns true if this SVG document fragment is in a paused state.","obsolete":false},{"name":"getCurrentTime","help":"Returns the current time in seconds relative to the start time for the current SVG document fragment. If getCurrentTime is called before the document timeline has begun (for example, by script running in a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/script\">&lt;script&gt;</a></code>\n element before the document's SVGLoad event is dispatched), then 0 is returned.","obsolete":false},{"name":"setCurrentTime","help":"Adjusts the clock for this SVG document fragment, establishing a new current time. If <code>setCurrentTime</code> is called before the document timeline has begun (for example, by script running in a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/script\">&lt;script&gt;</a></code>\n element before the document's SVGLoad event is dispatched), then the value of seconds in the last invocation of the method gives the time that the document will seek to once the document timeline has begun.","obsolete":false},{"name":"getIntersectionList","help":"Returns the list of graphics elements whose rendered content intersects the supplied rectangle. Each candidate graphics element is to be considered a match only if the same graphics element can be a target of pointer events as defined in \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/pointer-events\">pointer-events</a></code> processing.","obsolete":false},{"name":"getEnclosureList","help":"Returns the list of graphics elements whose rendered content is entirely contained within the supplied rectangle. Each candidate graphics element is to be considered a match only if the same graphics element can be a target of pointer events as defined in \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/pointer-events\">pointer-events</a></code> processing.","obsolete":false},{"name":"checkIntersection","help":"Returns true if the rendered content of the given element intersects the supplied rectangle. Each candidate graphics element is to be considered a match only if the same graphics element can be a target of pointer events as defined in \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/pointer-events\">pointer-events</a></code> processing.","obsolete":false},{"name":"checkEnclosure","help":"Returns true if the rendered content of the given element is entirely contained within the supplied rectangle. Each candidate graphics element is to be considered a match only if the same graphics element can be a target of pointer events as defined in \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/pointer-events\">pointer-events</a></code> processing.","obsolete":false},{"name":"deselectAll","help":"Unselects any selected objects, including any selections of text strings and type-in bars.","obsolete":false},{"name":"createSVGNumber","help":"Creates an <code>SVGNumber</code> object outside of any document trees. The object is initialized to a value of zero.","obsolete":false},{"name":"createSVGLength","help":"Creates an <code>SVGLength</code> object outside of any document trees. The object is initialized to a value of zero user units.","obsolete":false},{"name":"createSVGAngle","help":"Creates an <code>SVGAngle</code> object outside of any document trees. The object is initialized to a value of zero degrees (unitless).","obsolete":false},{"name":"createSVGPoint","help":"Creates an <code>SVGPoint</code> object outside of any document trees. The object is initialized to the point (0,0) in the user coordinate system.","obsolete":false},{"name":"createSVGMatrix","help":"Creates an <code>SVGMatrix</code> object outside of any document trees. The object is initialized to the identity matrix.","obsolete":false},{"name":"createSVGRect","help":"Creates an <code>SVGRect</code> object outside of any document trees. The object is initialized such that all values are set to 0 user units.","obsolete":false},{"name":"createSVGTransform","help":"Creates an <code>SVGTransform</code> object outside of any document trees. The object is initialized to an identity matrix transform (<code>SVG_TRANSFORM_MATRIX</code>).","obsolete":false},{"name":"createSVGTransformFromMatrix","help":"Creates an <code>SVGTransform</code> object outside of any document trees. The object is initialized to the given matrix transform (i.e., <code>SVG_TRANSFORM_MATRIX</code>). The values from the parameter matrix are copied, the matrix parameter is not adopted as <code>SVGTransform::matrix</code>.","obsolete":false},{"name":"getElementById","help":"Searches this SVG document fragment (i.e., the search is restricted to a subset of the document tree) for an Element whose id is given by <em>elementId</em>. If an Element is found, that Element is returned. If no such element exists, returns null. Behavior is not defined if more than one element has this id.","obsolete":false},{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element.","obsolete":false},{"name":"contentScriptType","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/contentScriptType\">contentScriptType</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element.","obsolete":false},{"name":"contentStyleType","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/contentStyleType\">contentStyleType</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element.","obsolete":false},{"name":"viewport","help":"The position and size of the viewport (implicit or explicit) that corresponds to this <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element. When the browser is actually rendering the content, then the position and size values represent the actual values when rendering. The position and size values are unitless values in the coordinate system of the parent element. If no parent element exists (i.e., <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element represents the root of the document tree), if this SVG document is embedded as part of another document (e.g., via the HTML <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object\">&lt;object&gt;</a></code>\n element), then the position and size are unitless values in the coordinate system of the parent document. (If the parent uses CSS or XSL layout, then unitless values represent pixel units for the current CSS or XSL viewport.)","obsolete":false},{"name":"pixelUnitToMillimeterX","help":"Size of a pixel units (as defined by CSS2) along the x-axis of the viewport, which represents a unit somewhere in the range of 70dpi to 120dpi, and, on systems that support this, might actually match the characteristics of the target medium. On systems where it is impossible to know the size of a pixel, a suitable default pixel size is provided.","obsolete":false},{"name":"pixelUnitToMillimeterY","help":"Corresponding size of a pixel unit along the y-axis of the viewport.","obsolete":false},{"name":"screenPixelToMillimeterX","help":"User interface (UI) events in DOM Level 2 indicate the screen positions at which the given UI event occurred. When the browser actually knows the physical size of a \"screen unit\", this attribute will express that information; otherwise, user agents will provide a suitable default value such as .28mm.","obsolete":false},{"name":"screenPixelToMillimeterY","help":"Corresponding size of a screen pixel along the y-axis of the viewport.","obsolete":false},{"name":"useCurrentView","help":"The initial view (i.e., before magnification and panning) of the current innermost SVG document fragment can be either the \"standard\" view (i.e., based on attributes on the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element such as \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewBox\" class=\"new\">viewBox</a></code>) or to a \"custom\" view (i.e., a hyperlink into a particular <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n or other element). If the initial view is the \"standard\" view, then this attribute is false. If the initial view is a \"custom\" view, then this attribute is true.","obsolete":false},{"name":"currentView","help":"The definition of the initial view (i.e., before magnification and panning) of the current innermost SVG document fragment. The meaning depends on the situation:<br> <ul> <li>If the initial view was a \"standard\" view, then: <ul> <li>the values for \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewBox\" class=\"new\">viewBox</a></code>, \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/zoomAndPan\" class=\"new\">zoomAndPan</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will match the values for the corresponding DOM attributes that are on <code>SVGSVGElement</code> directly</li> <li>the values for \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will be null</li> </ul> </li> <li>If the initial view was a link into a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n element, then: <ul> <li>the values for \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewBox\" class=\"new\">viewBox</a></code>, \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/zoomAndPan\" class=\"new\">zoomAndPan</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will correspond to the corresponding attributes for the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n element</li> <li>the values for \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will be null</li> </ul> </li> <li>If the initial view was a link into another element (i.e., other than a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/view\">&lt;view&gt;</a></code>\n), then: <ul> <li>the values for \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewBox\" class=\"new\">viewBox</a></code>, \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/zoomAndPan\" class=\"new\">zoomAndPan</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will match the values for the corresponding DOM attributes that are on <code>SVGSVGElement</code> directly for the closest ancestor <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element</li> <li>the values for \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will be null</li> <li>the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will represent the target of the link</li> </ul> </li> <li>If the initial view was a link into the SVG document fragment using an SVG view specification fragment identifier (i.e., #svgView(...)), then: <ul> <li>the values for \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewBox\" class=\"new\">viewBox</a></code>, \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>, \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/zoomAndPan\" class=\"new\">zoomAndPan</a></code>, \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/viewTarget\" class=\"new\">viewTarget</a></code> within \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/currentView\" class=\"new\">currentView</a></code> will correspond to the values from the SVG view specification fragment identifier</li> </ul> </li> </ul>","obsolete":false},{"name":"currentTranslate","help":"On an outermost <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element, the corresponding translation factor that takes into account user \"magnification\".","obsolete":false},{"name":"currentScale","help":"On an outermost <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element, this attribute indicates the current scale factor relative to the initial view to take into account user magnification and panning operations. DOM attributes <code>currentScale</code> and <code>currentTranslate</code> are equivalent to the 2x3 matrix <code>[a b c d e f] = [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]</code>. If \"magnification\" is enabled (i.e., <code>zoomAndPan=\"magnify\"</code>), then the effect is as if an extra transformation were placed at the outermost level on the SVG document fragment (i.e., outside the outermost <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/svg\">&lt;svg&gt;</a></code>\n element).","obsolete":false}]},"SVGPreserveAspectRatio":{"title":"SVGPreserveAspectRatio","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>SVGPreserveAspectRatio</code> interface corresponds to the \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code> attribute, which is available for some of SVG's elements.</p>\n<p>An <code>SVGPreserveAspectRatio</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"SVG_PRESERVEASPECTRATIO_UNKNOWN","help":"The enumeration was set to a value that is not one of predefined types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_NONE","help":"Corresponds to value <code>none</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMINYMIN","help":"Corresponds to value <code>xMinYMin</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMIDYMIN","help":"Corresponds to value <code>xMidYMin</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMAXYMIN","help":"Corresponds to value <code>xMaxYMin</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMINYMID","help":"Corresponds to value <code>xMinYMid</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMIDYMID","help":"Corresponds to value <code>xMidYMid</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMAXYMID","help":"Corresponds to value <code>xMaxYMid</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMINYMAX","help":"Corresponds to value <code>xMinYMax</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMIDYMAX","help":"Corresponds to value <code>xMidYMax</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_PRESERVEASPECTRATIO_XMAXYMAX","help":"Corresponds to value <code>xMaxYMax</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_MEETORSLICE_UNKNOWN","help":"The enumeration was set to a value that is not one of predefined types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_MEETORSLICE_MEET","help":"Corresponds to value <code>meet</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"SVG_MEETORSLICE_SLICE","help":"Corresponds to value <code>slice</code> for attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio\">preserveAspectRatio</a></code>.","obsolete":false},{"name":"align","help":"The type of the alignment value as specified by one of the SVG_PRESERVEASPECTRATIO_* constants defined on this interface.","obsolete":false},{"name":"meetOrSlice","help":"The type of the meet-or-slice value as specified by one of the SVG_MEETORSLICE_* constants defined on this interface.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPreserveAspectRatio"},"MediaError":{"title":"HTMLMediaElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLMediaElement","skipped":true,"cause":"Suspect title"},"WebSocket":{"title":"WebSocket","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td>Sub-protocol support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>7.0 (7.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td>Sub-protocol support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>7.0 (7.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/WebSocket","seeAlso":"<li><a title=\"en/WebSockets/Writing WebSocket client applications\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets/Writing_WebSocket_client_applications\">Writing WebSocket client applications</a></li> <li><a class=\"external\" title=\"http://dev.w3.org/html5/websockets/\" rel=\"external\" href=\"http://dev.w3.org/html5/websockets/\" target=\"_blank\">HTML5:&nbsp;WebSockets</a></li>","summary":"<div><p><strong>This is an experimental feature</strong><br>Because this feature is still in development in some browsers, check the <a href=\"#AutoCompatibilityTable\">compatibility table</a> for the proper prefixes to use in various browsers.</p></div>\n<p></p>\n<p>The <code>WebSocket</code> object provides the API&nbsp;for creating and managing a <a title=\"en/WebSockets\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets\">WebSocket</a> connection to a server, as well as for sending and receiving data on the connection.</p>","members":[{"name":"send","help":"<p>Transmits data to the server over the WebSocket connection.</p>\n\n<div id=\"section_11\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>data</code></dt> <dd>A text string to send to the server.</dd>\n</dl>\n</div><div id=\"section_12\"><span id=\"Exceptions_thrown_2\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>INVALID_STATE_ERR</code></dt> <dd>The connection is not currently <code>OPEN</code>.</dd> <dt><code>SYNTAX_ERR</code></dt> <dd>The data is a string that has unpaired surrogates.</dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Remarks\"></span><h6 class=\"editable\">Remarks</h6>\n<div class=\"geckoVersionNote\"> <p>\n</p><div class=\"geckoVersionHeading\">Gecko 6.0 note<div>(Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n</div></div>\n<p></p> <p>Gecko's implementation of the <code>send()</code>&nbsp;method differs somewhat from the specification in Gecko 6.0; Gecko returns a <code>boolean</code> indicating whether or not the connection is still open (and, by extension, that the data was successfully queued or transmitted); this is corrected in Gecko 8.0 (Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)\n. In addition, at this time, Gecko does not support <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code> or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n data types.</p>\n</div>\n</div>","idl":"<pre class=\"eval\">void send(\n  in DOMString data\n);\n\nvoid send(\n&nbsp; in ArrayBuffer data\n);\n\nvoid send(\n&nbsp; in Blob data\n); \n</pre>","obsolete":false},{"name":"close","help":"<p>Closes the WebSocket connection or connection attempt, if any. If the connection is already <code>CLOSED</code>, this method does nothing.</p>\n\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>code</code> \n<span title=\"\">Optional</span>\n</dt> <dd>A numeric value indicating the status code explaining why the connection is being closed. If this parameter is not specified, a default value of 1000 (indicating a normal \"transaction complete\"&nbsp;closure)&nbsp;is assumed. See the <a title=\"en/WebSockets/WebSockets reference/CloseEvent#Status codes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/CloseEvent#Status_codes\">list of status codes</a> on the <a title=\"en/WebSockets/WebSockets reference/CloseEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/CloseEvent\"><code>CloseEvent</code></a> page for permitted values.</dd> <dt><code>reason</code> \n<span title=\"\">Optional</span>\n</dt> <dd>A human-readable string explaining why the connection is closing. This string must be no longer than 123 UTF-8 characters.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Exceptions_thrown\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>INVALID_ACCESS_ERR</code></dt> <dd>An invalid <code>code</code> was specified.</dd> <dt><code>SYNTAX_ERR</code></dt> <dd>The <code>reason</code> string is too long or contains unpaired surrogates.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void close(\n&nbsp; in optional unsigned short code,\n&nbsp;&nbsp;in optional DOMString reason\n);\n</pre>","obsolete":false},{"name":"CONNECTING","help":"The connection is not yet open.","obsolete":false},{"name":"OPEN","help":"The connection is open and ready to communicate.","obsolete":false},{"name":"CLOSING","help":"The connection is in the process of closing.","obsolete":false},{"name":"CLOSED","help":"The connection is closed or couldn't be opened.","obsolete":false},{"name":"binaryType","help":"A string indicating the type of binary data being transmitted by the connection. This should be either \"blob\"&nbsp;if DOM&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n&nbsp;objects are being used or \"arraybuffer\" if <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> objects are being used.","obsolete":false},{"name":"bufferedAmount","help":"The number of bytes of data that have been queued using calls to  but not yet transmitted to the network. This value does not reset to zero when the connection is closed; if you keep calling , this will continue to climb. <strong>Read only.</strong>","obsolete":false},{"name":"extensions","help":"The extensions selected by the server. This is currently only the empty string or a list of extensions as negotiated by the connection.","obsolete":false},{"name":"onclose","help":"An event listener to be called when the WebSocket connection's <code>readyState</code> changes to <code>CLOSED</code>. The listener receives a <a title=\"en/WebSockets/WebSockets reference/CloseEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/CloseEvent\"><code>CloseEvent</code></a> named \"close\".","obsolete":false},{"name":"onerror","help":"An event listener to be called when an error occurs. This is a simple event named \"error\".","obsolete":false},{"name":"onmessage","help":"An event listener to be called when a message is received from the server. The listener receives a <a title=\"en/WebSockets/WebSockets reference/MessageEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/MessageEvent\"><code>MessageEvent</code></a> named \"message\".","obsolete":false},{"name":"onopen","help":"An event listener to be called when the WebSocket connection's <code>readyState</code> changes to <code>OPEN</code>; this indicates that the connection is ready to send and receive data. The event is a simple one with the name \"open\".","obsolete":false},{"name":"protocol","help":"A string indicating the name of the sub-protocol the server selected; this will be one of the strings specified in the <code>protocols</code> parameter when creating the WebSocket object.","obsolete":false},{"name":"readyState","help":"The current state of the connection; this is one of the <a rel=\"custom\" href=\"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/WebSocket#Ready_state_constants\">Ready state constants</a>. <strong>Read only.</strong>","obsolete":false},{"name":"url","help":"The URL&nbsp;as resolved by the constructor. This is always an absolute URL. <strong>Read only.</strong>","obsolete":false}]},"SVGAnimatedInteger":{"title":"SVGAnimatedInteger","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedInteger</code> interface is used for attributes of basic type <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Integer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Integer\">&lt;integer&gt;</a> which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedInteger"},"PositionError":{"title":"Using geolocation","members":[],"srcUrl":"https://developer.mozilla.org/en/Using_geolocation","skipped":true,"cause":"Suspect title"},"Worker":{"title":"Worker","srcUrl":"https://developer.mozilla.org/En/DOM/Worker","seeAlso":"<li><a class=\"internal\" title=\"en/Using DOM workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Using_web_workers\">Using web workers</a></li> <li><a title=\"https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\">Functions available to workers</a></li> <li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/workers/\">Web Workers - W3C</a><span title=\"Working Draft\">WD</span></li> <li><a class=\"external\" title=\"http://www.whatwg.org/specs/web-workers/current-work/\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-workers/current-work/\" target=\"_blank\">Web Workers specification - WHATWG</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SharedWorker\">SharedWorker</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/ChromeWorker\">ChromeWorker</a></code>\n</li>","summary":"<p>Workers are background tasks that can be easily created and can send messages back to their creators. Creating a worker is as simple as calling the <code>Worker()</code>&nbsp;constructor, specifying a script to be run in the worker thread.</p>\n<p>Of note is the fact that workers may in turn spawn new workers as long as those workers are hosted within the same origin as the parent page.&nbsp; In addition, workers may use <a title=\"En/XMLHttpRequest\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest\"><code>XMLHttpRequest</code></a> for network I/O, with the exception that the <code>responseXML</code> and <code>channel</code> attributes on <code>XMLHttpRequest</code> always return <code>null</code>.</p>\n<p>For a list of global functions available to workers, see <a title=\"En/DOM/Worker/Functions available to workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\">Functions available to workers</a>.</p>\n<div class=\"geckoVersionNote\">\n<p>\n</p><div class=\"geckoVersionHeading\">Gecko 2.0 note<div>(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n</div></div>\n<p></p>\n<p>If you want to use workers in extensions, and would like to have access to <a title=\"en/js-ctypes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/js-ctypes\">js-ctypes</a>, you should use the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/ChromeWorker\">ChromeWorker</a></code>\n object instead.</p>\n</div>\n<p>See <a class=\"internal\" title=\"en/Using DOM workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Using_web_workers\">Using web workers</a> for examples and details.</p>","constructor":"<p>The constructor creates a web worker that executes the script at the specified URL. This script must obey the <a title=\"Same origin policy for JavaScript\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript\">same-origin policy</a>. Note that there is a disagreement among browser manufacturers about whether a data URI is of the same origin or not. Though Gecko 10.0 (Firefox 10.0 / Thunderbird 10.0)\n and later accept data URIs, that's not the case in all other browsers.</p>\n<pre>Worker(\n&nbsp;&nbsp;in DOMString aStringURL\n);\n</pre>\n<div id=\"section_6\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt><code>aStringURL</code></dt> <dd>The URL of the script the worker is to execute. It must obey the same-origin policy (or be a data URI for Gecko 10.0 or later).</dd>\n</dl>\n<div id=\"section_7\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Worker</code>.</p>\n</div></div>","members":[{"name":"postMessage","help":"<p>Sends a message to the worker's inner scope. This accepts a single parameter, which is the data to send to the worker. The data may be any value or JavaScript object that does not contain functions or cyclical references (since the object is converted to <a class=\"internal\" title=\"En/JSON\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JSON\">JSON</a> internally).</p>\n\n<div id=\"section_10\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aMessage<br> </code></dt> <dd>The object to deliver to the worker; this will be in the data field in the event delivered to the <code>onmessage</code> handler. This may be any value or JavaScript object that does not contain functions or cyclical references (since the object is converted to <a class=\"internal\" title=\"En/JSON\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JSON\">JSON</a> internally).</dd>\n</dl>\n</div>","idl":"<pre>void postMessage(\n&nbsp;&nbsp;in JSObject aMessage\n);\n</pre>","obsolete":false},{"name":"terminate","help":"<p>Immediately terminates the worker. This does not offer the worker an opportunity to finish its operations; it is simply stopped at once.</p>\n<pre>void terminate();\n</pre>","obsolete":false},{"name":"onmessage","help":"An event listener that is called whenever a <code>MessageEvent</code> with type <code>message</code> bubbles through the worker. The message is stored in the event's <code>data</code> member.","obsolete":false},{"name":"onerror","help":"An event listener that is called whenever an <code>ErrorEvent</code> with type <code>error</code> bubbles through the worker.","obsolete":false}]},"Rect":{"title":"rect","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\nFeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari <table class=\"compat-table\"> <tbody> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n8.0</td> <td>\n3.0.4</td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody> </table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","srcUrl":"https://developer.mozilla.org/en/SVG/Element/rect","seeAlso":"&lt;path&gt;","summary":"The <code>rect</code> element is an SVG basic shape, used to create rectangles based on the position of a corner and their width and height. It may also be used to create rectangles with rounded corners.","members":[]},"SVGPathSegMovetoRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"HTMLDirectoryElement":{"title":"dir","seeAlso":"<li>Other list-related HTML&nbsp;Elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ol\">&lt;ol&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/ul\">&lt;ul&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/li\">&lt;li&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/menu\">&lt;menu&gt;</a></code>\n;</li> <li>CSS properties that may be specially useful to style the <span>&lt;dir&gt;</span> element:&nbsp; <ul> <li>the <a title=\"en/CSS/list-style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/list-style\">list-style</a> property, useful to choose the way the ordinal is displayed,</li> <li><a title=\"en/CSS_Counters\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS_Counters\">CSS counters</a>, useful to handle complex nested lists,</li> <li>the <a title=\"en/CSS/line-height\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a> property, useful to simulate the deprecated \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir#attr-compact\">compact</a></code>\n attribute,</li> <li>the <a title=\"en/CSS/margin\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/margin\">margin</a> property, useful to control the indent of the list.</li> </ul> </li>","summary":"Obsolete","members":[{"obsolete":false,"url":"","name":"compact","help":"This Boolean attribute hints that the list should be rendered in a compact style. The interpretation of this attribute depends on the user agent and it doesn't work in all browsers. <div class=\"note\"><strong>Usage note:&nbsp;</strong>Do not use this attribute, as it has been deprecated: the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/dir\">&lt;dir&gt;</a></code>\n element should be styled using <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a>. To give a similar effect than the <span>compact</span> attribute, the <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> property <a title=\"en/CSS/line-height\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/line-height\">line-height</a> can be used with a value of <span>80%</span>.</div>"}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/dir"},"SVGPointList":{"title":"SVGAnimatedPoints","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedPoints","skipped":true,"cause":"Suspect title"},"SVGFESpecularLightingElement":{"title":"feSpecularLighting","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDistantLight\">&lt;feDistantLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/fePointLight\">&lt;fePointLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpotLight\">&lt;feSpotLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/kernelUnitLength","name":"kernelUnitLength","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/surfaceScale","name":"surfaceScale","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/specularExponent","name":"specularExponent","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/specularConstant","name":"specularConstant","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting"},"NodeSelector":{"title":"Locating DOM elements using selectors","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/Locating_DOM_elements_using_selectors","skipped":true,"cause":"Suspect title"},"FileException":{"title":"FileException","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<strong>DRAFT</strong> <div>This page is not complete.</div>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileException"},"SVGAnimationElement":{"title":"SVGAnimationElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimationElement</code> interface is the base interface for all of the animation element interfaces: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAnimateElement\">SVGAnimateElement</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGSetElement\">SVGSetElement</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAnimateColorElement\">SVGAnimateColorElement</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAnimateMotionElement\">SVGAnimateMotionElement</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGAnimateTransformElement\">SVGAnimateTransformElement</a></code>\n.","members":[{"name":"getStartTime","help":"Returns the begin time, in seconds, for this animation element's current interval, if it exists, regardless of whether the interval has begun yet. If there is no current interval, then a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code INVALID_STATE_ERR is thrown.","obsolete":false},{"name":"getCurrentTime","help":"Returns the current time in seconds relative to time zero for the given time container.","obsolete":false},{"name":"getSimpleDuration","help":"Returns the number of seconds for the simple duration for this animation. If the simple duration is undefined (e.g., the end time is indefinite), then a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code NOT_SUPPORTED_ERR is raised.","obsolete":false},{"name":"targetElement","help":"The element which is being animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimationElement"},"SVGAnimatedBoolean":{"title":"SVGAnimatedBoolean","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedBoolean</code> interface is used for attributes of type boolean which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGAnimatedBoolean"},"XPathExpression":{"title":"XPathExpression","summary":"An XPathExpression is a compiled XPath query returned from <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.createExpression\" title=\"en/DOM/document.createExpression\">document.createExpression()</a>. It has a method <code>evaluate()</code> which can be used to execute the compiled XPath.\n","members":[],"srcUrl":"https://developer.mozilla.org/en/XPathExpression"},"HTMLCollection":{"title":"HTMLCollection","compatibility":"Different browsers behave differently when there are more than one elements matching the string used as an index (or <code>namedItem</code>'s argument). Firefox 8 behaves as specified in DOM 2 and DOM4, returning the first matching element. WebKit browsers and Internet Explorer in this case return another <code>HTMLCollection</code> and Opera returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeList\">NodeList</a></code>\n of all matching elements.","srcUrl":"https://developer.mozilla.org/en/DOM/HTMLCollection","specification":"<li><a class=\"external\" title=\"http://www.w3.org/TR/html5/common-dom-interfaces.html#htmlcollection-0\" rel=\"external\" href=\"http://www.w3.org/TR/html5/common-dom-interfaces.html#htmlcollection-0\" target=\"_blank\">HTML 5, Section 2.7.2, Collections</a></li> <li><a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-75708506\" target=\"_blank\">DOM&nbsp;Level 2 HTML, Section 1.4, Miscellaneous Object Definitions</a></li> <li><a class=\"external\" title=\"http://www.w3.org/TR/domcore/#interface-htmlcollection\" rel=\"external\" href=\"http://www.w3.org/TR/domcore/#interface-htmlcollection\" target=\"_blank\">DOM4: HTMLCollection</a></li>","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/NodeList\">NodeList</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLOptionsCollection\">HTMLOptionsCollection</a></code>\n</li>","summary":"<p><code>HTMLCollection</code> is an interface representing a generic collection of elements (in document order) and offers methods and properties for traversing the list.</p>\n<div class=\"note\"><strong>Note:</strong> This interface is called <code>HTMLCollection</code> for historical reasons (before DOM4, collections implementing this interface could only have HTML elements as their items).</div>\n<p><code>HTMLCollection</code>s in the HTML DOM are live; they are automatically updated when the underlying document is changed.</p>","members":[{"name":"item","help":"Returns the specific node at the given zero-based <code>index</code> into the list. Returns <code>null</code> if the <code>index</code> is out of range.","obsolete":false},{"name":"namedItem","help":"Returns the specific node whose ID or, as a fallback, name matches the string specified by <code>name</code>. Matching by name is only done as a last resort, only in HTML, and only if the referenced element supports the <code>name</code> attribute. Returns <code>null</code> if no node exists by the given name.","obsolete":false},{"name":"length","help":"The number of items in the collection. <strong>Read only</strong>.","obsolete":false}]},"HTMLFrameElement":{"title":"frame","examples":["&lt;frameset cols=\"50%,50%\"&gt;\n  &lt;frame src=\"https://developer.mozilla.org/en/HTML/Element/iframe\" /&gt;\n  &lt;frame src=\"https://developer.mozilla.org/en/HTML/Element/frame\" /&gt;\n&lt;/frameset&gt;"],"summary":"<p><code>&lt;frame&gt;</code> is an HTML element which defines a particular area in which another HTML document can be displayed. A frame should be used within a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/frameset\">&lt;frameset&gt;</a></code>\n.</p>\n<p>Using the <code>&lt;frame&gt;</code> element is not encouraged because of certain disadvantages such as performance problems and lack of accessibility for users with screen readers. Instead of the <code>&lt;frame&gt;</code> element, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe\">&lt;iframe&gt;</a></code>\n&nbsp;may be preferred.</p>","members":[{"obsolete":false,"url":"","name":"src","help":"This attribute is specify document which will be displayed by frame."},{"obsolete":false,"url":"","name":"name","help":"This attribute is used to labeling frames. Without labeling all links will open in the frame that they are in."},{"obsolete":false,"url":"","name":"scrolling","help":"This attribute defines existence of scrollbar. If this attribute is not used, browser put a scrollbar when necessary. There are two choices; \"yes\" for showing a scrollbar even when it is not necessary and \"no\" for do not showing a scrollbar even when it is necessary."},{"obsolete":false,"url":"","name":"noresize","help":"This attribute avoid resizing of frames by users."},{"obsolete":false,"url":"","name":"marginheight","help":"This attribute defines how tall the margin between frames will be."},{"obsolete":false,"url":"","name":"frameborder","help":"This attribute allows you to put borders for frames."},{"obsolete":false,"url":"","name":"marginwidth","help":"This attribute defines how wide the margin between frames will be."}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/frame"},"SVGTRefElement":{"title":"SVGTRefElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGTRefElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/tref\">&lt;tref&gt;</a></code>\n SVG Element","summary":"The <code>SVGTRefElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/tref\">&lt;tref&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[]},"Counter":{"title":"CSS Counters","srcUrl":"https://developer.mozilla.org/en/CSS_Counters","specification":"CSS 2.1","seeAlso":"<ul> <li><a title=\"en/CSS/counter-reset\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/counter-reset\">counter-reset</a></li> <li><a title=\"en/CSS/counter-increment\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/counter-increment\">counter-increment</a></li>\n</ul>\n<p><em>There is an additional example available at <a class=\" external\" rel=\"external\" href=\"http://www.mezzoblue.com/archives/2006/11/01/counter_intu/\" title=\"http://www.mezzoblue.com/archives/2006/11/01/counter_intu/\" target=\"_blank\">http://www.mezzoblue.com/archives/20.../counter_intu/</a>. This blog entry was posted on November 01, 2006, but appears to be accurate.</em></p>","summary":"CSS counters are an implementation of <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/CSS21/generate.html#counters\" title=\"http://www.w3.org/TR/CSS21/generate.html#counters\" target=\"_blank\">Automatic counters and numbering</a> in CSS 2.1. The value of a counter is manipulated through the use of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/counter-reset\">counter-reset</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/counter-increment\">counter-increment</a></code>\n and is displayed on a page using the <code>counter()</code> or <code>counters()</code> function of the <code><a title=\"en/CSS/content\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/content\">content</a></code> property.","members":[]},"WebKitAnimation":{"title":"CSS animations","examples":["<strong>Note:</strong> The examples here use the <code>-moz-</code> prefix on the animation CSS properties for brevity; the live examples you can click to see in your browser also include the <code>-webkit-</code> prefixed versions."],"srcUrl":"https://developer.mozilla.org/en/CSS/CSS_animations","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Event/AnimationEvent\">AnimationEvent</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation\">animation</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-delay\">animation-delay</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-direction\">animation-direction</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-duration\">animation-duration</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-fill-mode\">animation-fill-mode</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-iteration-count\">animation-iteration-count</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-name\">animation-name</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-play-state\">animation-play-state</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-timing-function\">animation-timing-function</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/@keyframes\">@keyframes</a></code>\n</li> <li><a title=\"en/CSS/CSS animations/Detecting CSS animation support\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/CSS_animations/Detecting_CSS_animation_support\">Detecting CSS animation support</a></li> <li>This <a class=\"external\" title=\"http://hacks.mozilla.org/2011/06/add-on-sdk-and-the-beta-of-add-on-builder-now-available/\" rel=\"external\" href=\"http://hacks.mozilla.org/2011/06/add-on-sdk-and-the-beta-of-add-on-builder-now-available/\" target=\"_blank\">post</a> from Mozilla hacks, provides two additional examples: <ul> <li><a class=\" external\" rel=\"external\" href=\"http://jsfiddle.net/T88X5/3/light/\" title=\"http://jsfiddle.net/T88X5/3/light/\" target=\"_blank\">http://jsfiddle.net/T88X5/3/light/</a></li> <li><a class=\" external\" rel=\"external\" href=\"http://jsfiddle.net/RtvCB/9/light/\" title=\"http://jsfiddle.net/RtvCB/9/light/\" target=\"_blank\">http://jsfiddle.net/RtvCB/9/light/</a></li> </ul> </li>","summary":"<p>CSS&nbsp;animations make it possible to animate transitions from one CSS style configuration to another. Animations consist of two components:&nbsp;A style describing the animation and a set of keyframes that indicate the start and end states of the animation's CSS style, as well as possible intermediate waypoints along the way.</p>\n<p>There are three key advantages to CSS&nbsp;animations over traditional script-driven animation techniques:</p>\n<ol> <li>They're easy to use for simple animations; you can create them without even having to know JavaScript.</li> <li>The animations run well, even under moderate system load. Simple animations can often perform poorly in JavaScript (unless they're well made). The rendering engine can use frame-skipping and other techniques to keep the performance as smooth as possible.</li> <li>Letting the browser control the animation sequence lets the browser optimize performance and efficiency by, for example, reducing the update frequency of animations running in tabs that aren't currently visible.</li>\n</ol>","members":[]},"SVGGlyphElement":{"title":"SVGGlyphElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGGlyphElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGGlyphElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"SVGPathSegCurvetoQuadraticSmoothAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"HTMLTableCaptionElement":{"title":"HTMLTableCaptionElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/caption\">&lt;caption&gt;</a></code>\n&nbsp;HTML&nbsp;element","summary":"DOM table caption elements expose the <a title=\"http://www.w3.org/TR/html5/tabular-data.html#htmltablecaptionelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/tabular-data.html#htmltablecaptionelement\" target=\"_blank\">HTMLTableCaptionElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-12035137\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-12035137\" target=\"_blank\"><code>HTMLTableCaptionElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating definition list elements. In <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML 5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"align","help":"Enumerated attribute indicating alignment of the caption with respect to the table.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTableCaptionElement"},"Crypto":{"title":"JavaScript crypto","summary":"Non-standard","members":[],"srcUrl":"https://developer.mozilla.org/en/JavaScript_crypto"},"Entity":{"title":"Entity","summary":"<p><span>NOTE:&nbsp;This is not implemented in Mozilla</span></p>\n<p>Read-only reference to a DTD entity. Also inherits the methods and properties of <a title=\"En/DOM/Node\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\"><code>Node</code></a>.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.xmlEncoding","name":"xmlEncoding","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.systemId","name":"systemId","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.inputEncoding","name":"inputEncoding","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.xmlVersion","name":"xmlVersion","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.notationName","name":"notationName","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Entity.publicId","name":"publicId","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/Entity","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-527DCFF2"},"CloseEvent":{"title":"CloseEvent","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>8.0 (8.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>8.0 (8.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/WebSockets/WebSockets_reference/CloseEvent","seeAlso":"WebSocket","summary":"A <code>CloseEvent</code> is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the <code>WebSocket</code> object's <code>onclose</code> attribute.","members":[{"name":"code","help":"The WebSocket connection close code provided by the server. See <a title=\"en/XPCOM_Interface_Reference/nsIWebSocketChannel#Status_codes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWebSocketChannel#Status_codes\">Status codes</a> for possible values.","obsolete":false},{"name":"reason","help":"A string indicating the reason the server closed the connection. This is specific to the particular server and sub-protocol.","obsolete":false},{"name":"wasClean","help":"Indicates whether or not the connection was cleanly closed.","obsolete":false}]},"TextEvent":{"title":"document.createEvent","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/document.createEvent","skipped":true,"cause":"Suspect title"},"SVGTSpanElement":{"title":"SVGTSpanElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGTSpanElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/tspan\">&lt;tspan&gt;</a></code>\n SVG Element","summary":"The <code>SVGTSpanElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/tspan\">&lt;tspan&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[]},"Event":{"title":"Event","seeAlso":"<ul> <li><a class=\"internal\" title=\"En/Listening to events\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Listening_to_events\">Listening to events</a></li> <li><a class=\"internal\" title=\"En/Listening to events on all tabs\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Listening_to_events_on_all_tabs\">Listening to events on all tabs</a></li> <li><a title=\"Creating and triggering custom events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Creating_and_triggering_events\">Creating and triggering custom events</a></li> <li><a class=\"internal\" title=\"En/DOM/Mouse gesture events\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Mouse_gesture_events\">Mouse gesture events</a></li> <li><a title=\"https://wiki.mozilla.org/Events\" class=\" link-https\" rel=\"external\" href=\"https://wiki.mozilla.org/Events\" target=\"_blank\">Mozilla related events</a></li>\n</ul>\n<p></p>\n<div><img alt=\"Replacing Emoji...\" src=\"data:image/gif;base64,R0lGODlhEAAQAOYAAP////7+/qOjo/39/enp6bW1tfn5+fr6+vX19fz8/Kurq+3t7cDAwLGxscfHx+Xl5fT09LS0tPf398HBwc/Pz+bm5gMDA+Tk5N/f38TExO7u7pqamsLCwtTU1OLi4jw8PKioqLCwsPLy8q2trbKystvb26qqqtnZ2dfX17u7uyYmJs3NzdjY2Lm5uZ6ensvLy66urvv7++zs7FJSUurq6oWFhfb29kpKStzc3AwMDNHR0aSkpCkpKefn511dXb29vaenp8zMzLe3t/Hx8dDQ0FlZWWZmZsrKyqampvDw8ODg4Li4uL+/v+jo6PPz88jIyHp6eqWlpb6+vk5OTsPDw8bGxsXFxRQUFGpqat3d3fj4+NbW1rq6ury8vJCQkG5ubhwcHN7e3paWloKCgoyMjImJiWFhYXR0dFRUVIeHh5OTk0ZGRo6OjldXV39/fzIyMnd3d9ra2nx8fDY2NnFxcUFBQWxsbJSUlHh4eKGhoaKioi0tLSMjI4CAgNLS0qysrCH/C05FVFNDQVBFMi4wAwEAAAAh+QQEBQAAACwAAAAAEAAQAAAHyIAAggADgi1oCYOKghVfHQAbVwkHLSWLAE1vPgBqYAAUAj2KFQQAETw/ZXwrOy8ABwQBA2NFPwg+XjoFUSE2FREgEgAYNTNwNlqCk08CBReKL1GFih0sgyk7USAelxAOEwxHQGxeYmGXIi0kDVKDFzoBixjPgxIZG38xiz8CVCIAAZYICOKtA4QhSrogYAHEhAEAJSoAICDgxIsCDwRsAZDkxDQABkhECJBhBAArUTRcIqDgAQAOCgIggIHiUgBhAFakiGcgkaBAACH5BAQFAAAALAAAAAANAAsAAAdvgACCAAOCG3SFg4IXcDgAX3MDWjdMgzI+bgBnHwB3Fg4ADxoAHGgcUDcnFnSEYmNBEnIuOgwgKjIVABUCcmISB4IHIksCg1tcAYoAHSxBP0IFPcoAEA4TDQ0FTdMiLYMLYcmKGBcABhRIITHKPwKBACH5BAQFAAAALAAAAAAQAAgAAAdkgACCAAOCCmSFg4oAPWIPAGVmA04+XYsASWMuAGxGnDxUigROAERQHRtYKDw1AAZZAQMRIHEGG1wYQQ1rMh1FORoAGgwCEQYxggkQchZvBQGDF0TQiml3gysME1ULl00bTAxHgQAh+QQEBQAAACwDAAAADQAKAAAHZ4AAAQAAUkADhIkAMgUEAEhpAwhjRIkIJgUAIGUAAlM6ihh6KCNkODMuABAYATgHXFQXKEx2MlZTdTYCQjEJhAkIbjwzPwEXRIOKG0CJVQuKhBdpZGIwBU3QADgfPCpTC2HJiSFdiYEAIfkEBAUAAAAsBQAAAAsADgAAB3mAAAA6TAGChwALABwmARIuHYcpABlAAC1QOIcCHg55F3IFADYeAVwUMjhBXkkUXz42MQmCA1piM2dBAYaII6KIiE1jX1hkwAAeRTdrX7yHJA6HMYgBN3x5ig4dEEMsRhd3V21aAicvBQ96UgBbGwkRARkjAFZRioKBACH5BAQFAAAALAgAAQAIAA8AAAdigAoBBy0lAIcjABQCFYcAITI7LwBaFwEPWSFOcWpjNgADBiNQYiyOABxPp4cLG2U1Lo49UF92ZY4FVqsBZipnSgAXJm0EAm9vNmRLFgUAcSQDiT58BI6CF2DNhykBACIJjoEAIfkEBAUAAAAsBgACAAoADgAAB22AABkjABQCPQCJHg4hMjsvAAcEARQyD1khNhURIBIJiQMHTwIhGImnAEeQqKcaI0g7BawyG15eSKwcK6yJAWMzZA8AO0pxQmYEBUVmWiFfbQ4qLgAeRwMDPlMAZzwoqGhTARVrUqhQcAMAnqeBACH5BAQFAAAALAMABQANAAsAAAdygAJCMQkAAAMHTwIFFwAXRAGGkh0sklULkpIQDhMMRwVNmYYaJgohUgsskZlEKJJIbQiZAXpQIDIALR5GYhcYGW4aR301WgATYBFjaCszIQAERAMaPHADZ3UAajNhlh84AF9zAzJGVZIDsgBeWIVahYaBACH5BAQFAAAALAAACAAQAAgAAAdlgBMNDUAoAIeIIi0kDVKIFAIDiIcYF5NDUDl7NpMAKQJUIgAJHzkbBFAbND0dGyIoQCYGAEtZAEcqChtnJ1AcAEknkodDN1MDXmYAI3IVnQAdcxMAZD4BSWUvzwEQhztjkloJiIEAIfkEBAUAAAAsAAAGAA0ACgAAB2SAAIJWGwOChx0sUDMzZkGHhxAOfUVtRRmQgiIthywkhpAYFwBDZHt1Epk/AgNGfGU9Yn8LMihdCCwAR5gdM0shaiV5W5AQX3QBIGUAP1EahxdGKwBINQEiMCiHAakAKS6GBgmBACH5BAQFAAAALAAAAwALAA0AAAdygABPGAA6Ah4OITI7Az5XLiJYGTIPWSEATWx8c04xAAADB58ADmQDo59eWF9wHaifeGs3aEevqCUMp68QSG1GBq8DblMuCw0MQ0NKXQAUFAAYUA5MBQ8CozZeagE/IwBWow81JwATCgEIowESnyspAQCBACH5BAQFAAAALAAAAAAIAA8AAAdhgACCAAmCOoM4b4ccg0N8dQAZACgeAFUWIQ0DM3MKCGhQJ5NYKmgIB4MAHF4DgjtlZGolg2RYWGcoqYIXRAGDEiluZagAAxtQBUkZHRAAfnEAPQInL4MGJBEBkoIECg+qgQA7\" title=\"Replacing Emoji...\"></div>","summary":"<p>This chapter describes the DOM Event Model. The <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event\" title=\"http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-Event\" target=\"_blank\">Event</a> interface itself is described, as well as the interfaces for event registration on nodes in the DOM, and <a title=\"en/DOM/element.addEventListener\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element.addEventListener\">event listeners</a>, and several longer examples that show how the various event interfaces relate to one another.</p>\n<p>There is an excellent diagram that clearly explains the three phases of event flow through the DOM in the <a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture\" target=\"_blank\">DOM Level 3 Events draft</a>.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.stopPropagation","name":"stopPropagation","help":"Stops the propagation of events further along in the DOM."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.preventDefault","name":"preventDefault","help":"Cancels the event (if it is cancelable)."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/event.preventCapture","name":"preventCapture","help":"Obsolete, use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/event.stopPropagation\">event.stopPropagation</a></code>\n instead."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.stopImmediatePropagation","name":"stopImmediatePropagation","help":"For this particular event, no other listener will be called. Neither those attached on the same element, nor those attached on elements which will be traversed later (in capture phase, for instance)"},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/event.preventBubble","name":"preventBubble","help":"Prevents the event from bubbling. Obsolete, use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/event.stopPropagation\">event.stopPropagation</a></code>\n instead."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.initEvent","name":"initEvent","help":"Initializes the value of an Event created through the <code>DocumentEvent</code> interface."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.originalTarget","name":"originalTarget","help":"The original target of the event, before any retargetings (Mozilla-specific)."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.timeStamp","name":"timeStamp","help":"The time that the event was created."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.bubbles","name":"bubbles","help":"A boolean indicating whether the event bubbles up through the DOM or not."},{"name":"webkitInputSource","help":"The type of device that generated the event. This is a Gecko-specific value.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.defaultPrevented","name":"defaultPrevented","help":"Indicates whether or not <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/event.preventDefault\">event.preventDefault()</a></code>\n has been called on the event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.target","name":"target","help":"A reference to the target to which the event was originally dispatched."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.currentTarget","name":"currentTarget","help":"A reference to the currently registered target for the event."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/event.isTrusted","name":"isTrusted","help":"Indicates whether or not the event was initiated by the browser (after a user click for instance) or by a script (using an event creation method, like <a title=\"event.initEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/event.initEvent\">event.initEvent</a>)"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.eventPhase","name":"eventPhase","help":"Indicates which phase of the event flow is being processed."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.explicitOriginalTarget","name":"explicitOriginalTarget","help":"The explicit original target of the event (Mozilla-specific)."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.cancelBubble","name":"cancelBubble","help":"A boolean indicating whether the bubbling of the event has been canceled or not."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.cancelable","name":"cancelable","help":"A boolean indicating whether the event is cancelable."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.type","name":"type","help":"The name of the event (case-insensitive)."}],"srcUrl":"https://developer.mozilla.org/en/DOM/event"},"SVGTransform":{"title":"SVGTransform","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"<p><code>SVGTransform</code> is the interface for one of the component transformations within an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGTransformList\">SVGTransformList</a></code>\n; thus, an <code>SVGTransform</code> object corresponds to a single component (e.g., <code>scale(…)</code> or <code>matrix(…)</code>) within a \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> attribute.</p>\n<p>An <code>SVGTransform</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"setMatrix","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_MATRIX</code>, with parameter matrix defining the new transformation. Note that the values from the parameter <code>matrix</code> are copied.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"setTranslate","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_TRANSLATE</code>, with parameters <code>tx</code> and <code>ty</code> defining the translation amounts.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"setScale","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_SCALE</code>, with parameters <code>sx</code> and <code>sy</code> defining the scale amounts.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"setRotate","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_ROTATE</code>, with parameter <code>angle</code> defining the rotation angle and parameters <code>cx</code> and <code>cy</code> defining the optional center of rotation.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"setSkewX","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_SKEWX</code>, with parameter <code>angle</code> defining the amount of skew.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"setSkewY","help":"<p>Sets the transform type to <code>SVG_TRANSFORM_SKEWY</code>, with parameter <code>angle</code> defining the amount of skew.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when attempting to modify a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"SVG_TRANSFORM_UNKNOWN","help":"The unit type is not one of predefined unit types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_TRANSFORM_MATRIX","help":"A <code>matrix(…)</code> transformation","obsolete":false},{"name":"SVG_TRANSFORM_TRANSLATE","help":"A <code>translate(…)</code> transformation","obsolete":false},{"name":"SVG_TRANSFORM_SCALE","help":"A <code>scale(…)</code> transformation","obsolete":false},{"name":"SVG_ANGLETYPE_ROTATE","help":"A <code>rotate(…)</code> transformation","obsolete":false},{"name":"SVG_ANGLETYPE_SKEWX","help":"A <code>skewx(…)</code> transformation","obsolete":false},{"name":"SVG_ANGLETYPE_SKEWY","help":"A <code>skewy(…)</code> transformation","obsolete":false},{"name":"type","help":"The type of the value as specified by one of the SVG_TRANSFORM_* constants defined on this interface.","obsolete":false},{"name":"angle","help":"A convenience attribute for <code>SVG_TRANSFORM_ROTATE</code>, <code>SVG_TRANSFORM_SKEWX</code> and <code>SVG_TRANSFORM_SKEWY</code>. It holds the angle that was specified.<br> <br> For <code>SVG_TRANSFORM_MATRIX</code>, <code>SVG_TRANSFORM_TRANSLATE</code> and <code>SVG_TRANSFORM_SCALE</code>, <code>angle</code> will be zero.","obsolete":false},{"name":"matrix","help":"<p>The matrix that represents this transformation. The matrix object is live, meaning that any changes made to the <code>SVGTransform</code> object are immediately reflected in the matrix object and vice versa. In case the matrix object is changed directly (i.e., without using the methods on the <code>SVGTransform</code> interface itself) then the type of the <code>SVGTransform</code> changes to <code>SVG_TRANSFORM_MATRIX</code>.</p> <ul> <li>For <code>SVG_TRANSFORM_MATRIX</code>, the matrix contains the a, b, c, d, e, f values supplied by the user.</li> <li>For <code>SVG_TRANSFORM_TRANSLATE</code>, e and f represent the translation amounts (a=1, b=0, c=0 and d=1).</li> <li>For <code>SVG_TRANSFORM_SCALE</code>, a and d represent the scale amounts (b=0, c=0, e=0 and f=0).</li> <li>For <code>SVG_TRANSFORM_SKEWX</code> and <code>SVG_TRANSFORM_SKEWY</code>, a, b, c and d represent the matrix which will result in the given skew (e=0 and f=0).</li> <li>For <code>SVG_TRANSFORM_ROTATE</code>, a, b, c, d, e and f together represent the matrix which will result in the given rotation. When the rotation is around the center point (0, 0), e and f will be zero.</li> </ul>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGTransform"},"SVGFEConvolveMatrixElement":{"title":"feConvolveMatrix","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The filter modifies a pixel by means of a convolution matrix, that also takes neighboring pixels into account.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/targetY","name":"targetY","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/edgeMode","name":"edgeMode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/kernelUnitLength","name":"kernelUnitLength","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/preserveAlpha","name":"preserveAlpha","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/divisor","name":"divisor","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/targetX","name":"targetX","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/kernelMatrix","name":"kernelMatrix","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/bias","name":"bias","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/order","name":"order","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix"},"HTMLFormElement":{"title":"HTMLFormElement","examples":["<p>The following example shows how to create a new form element, modify its attributes and submit it.</p>\n<pre class=\"deki-transform\">// Create a form\nvar f = document.createElement(\"form\");\n\n// Add it to the document body\ndocument.body.appendChild(f);\n\n// Add action and method attributes\nf.action = \"/cgi-bin/some.cgi\";\nf.method = \"POST\"\n\n// Call the form's submit method\nf.submit();\n</pre>\n<p>In addition, the following complete HTML document shows how to extract information from a form element and to set some of its attributes.</p>\n<pre class=\"deki-transform\">&lt;title&gt;Form example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\n  function getFormInfo() {\n    var info;\n\n    // Get a reference using the forms collection\n    var f = document.forms[\"formA\"];\n    info = \"f.elements: \" + f.elements + \"\\n\"\n         + \"f.length: \" + f.length + \"\\n\"\n         + \"f.name: \" + f.name + \"\\n\"\n         + \"f.acceptCharset: \" + f.acceptCharset + \"\\n\"\n         + \"f.action: \" + f.action + \"\\n\"\n         + \"f.enctype: \" + f.enctype + \"\\n\"\n         + \"f.encoding: \" + f.encoding + \"\\n\"\n         + \"f.method: \" + f.method + \"\\n\"\n         + \"f.target: \" + f.target;\n    document.forms[\"formA\"].elements['tex'].value = info;\n  }\n\n  // A reference to the form is passed from the\n  // button's onclick attribute using 'this.form'\n  function setFormInfo(f) {\n    f.method = \"GET\";\n    f.action = \"/cgi-bin/evil_executable.cgi\";\n    f.name   = \"totally_new\";\n  }\n&lt;/script&gt;\n\n&lt;h1&gt;Form  example&lt;/h1&gt;\n\n&lt;form name=\"formA\" id=\"formA\"\n action=\"/cgi-bin/test\" method=\"POST\"&gt;\n &lt;p&gt;Click \"Info\" to see information about the form.\n    Click set to change settings, then info again\n    to see their effect&lt;/p&gt;\n &lt;p&gt;\n  &lt;input type=\"button\" value=\"info\"\n   onclick=\"getFormInfo();\"&gt;\n  &lt;input type=\"button\" value=\"set\"\n   onclick=\"setFormInfo(this.form);\"&gt;\n  &lt;input type=\"reset\" value=\"reset\"&gt;\n  &lt;br&gt;\n  &lt;textarea id=\"tex\" style=\"height:15em; width:20em\"&gt;\n  &lt;/textarea&gt;\n &lt;/p&gt;\n&lt;/form&gt;\n</pre>"],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLFormElement","specification":"<p><a class=\" external\" title=\"http://www.w3.org/TR/html5/forms.html#the-form-element\" rel=\"external\" href=\"http://www.w3.org/TR/html5/forms.html#the-form-element\" target=\"_blank\">HTML 5, Section 4.10.3, The form Element</a></p>\n<p><a class=\" external\" title=\"http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-40002357\" rel=\"external\" href=\"http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-40002357\" target=\"_blank\">DOM&nbsp;Level 2 HTML, Section 1.6.5, Object definitions</a></p>","summary":"<p><code>FORM</code> elements share all of the properties and methods of other HTML elements described in the <a title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section.</p>\n<p>This interface provides methods to create and modify <code>FORM</code> elements using the DOM.</p>","members":[{"name":"dispatchFormChange","help":"Broadcasts form change events. That is, for each item in the <strong>elements</strong> collection, fire an event named formchange at the item.","obsolete":false},{"name":"dispatchFormInput","help":"Broadcasts form input events. That is, for each item in the <strong>elements</strong> collection, fire an event named <code>forminput</code> at the item.","obsolete":false},{"name":"item","help":"Gets the item in the <strong>elements</strong> collection at the specified index, or null if there is no item at that index. You can also specify the index in array-style brackets or parentheses after the form object name, without calling this method explicitly.","obsolete":false},{"name":"namedItem","help":"Gets the item or list of items in <strong>elements</strong> collection whose <strong>name</strong> or <strong>id</strong> match the specified name, or null if no items match. You can also specify the name in array-style brackets or parentheses after the form object name, without calling this method explicitly.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.submit","name":"submit","help":"Submits the form to the server.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.reset","name":"reset","help":"Resets the forms to its initial state.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.acceptCharset","name":"acceptCharset","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-accept-charset\">accept-charset</a></code>\n&nbsp;HTML&nbsp;attribute, containing a list of character encodings that the server accepts.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.action","name":"action","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-action\">action</a></code>\n&nbsp;HTML&nbsp;attribute, containing the URI&nbsp;of a program that processes the information submitted by the form.","obsolete":false},{"name":"autocomplete","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-autocomplete\">autocomplete</a></code>\n HTML&nbsp;attribute, containing a string that indicates whether the controls in this form can have their values automatically populated by the browser.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.elements","name":"elements","help":"All the form controls belonging to this form element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.encoding","name":"encoding","help":"Synonym for <strong>enctype</strong>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.enctype","name":"enctype","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-enctype\">enctype</a></code>\n&nbsp;HTML&nbsp;attribute, indicating the type of content that is used to transmit the form to the server. Only specified values can be set.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.length","name":"length","help":"The number of controls in the form.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.method","name":"method","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-method\">method</a></code>\n&nbsp;HTML&nbsp;attribute, indicating the HTTP&nbsp;method used to submit the form. Only specified values can be set.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.name","name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-name\">name</a></code>\n&nbsp;HTML&nbsp;attribute, containing the name of the form.","obsolete":false},{"name":"noValidate","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-novalidate\">novalidate</a></code>\n HTML attribute, indicating that the form should not be validated.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/form.target","name":"target","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-target\">target</a></code>\n HTML attribute, indicating where to display the results received from submitting the form.","obsolete":false}]},"SVGPathSegLinetoHorizontalRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"Range":{"title":"range","summary":"<p>The <code>Range</code> object represents a fragment of a document that can contain nodes and parts of text nodes in a given document.</p>\n<p>A range can be created using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document.createRange\">Document.createRange</a></code>\n&nbsp;method of the&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n&nbsp;object. Range objects can also be retrieved by using the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Selection.getRangeAt\" class=\"new\">Selection.getRangeAt</a></code>\n&nbsp;method of the&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Selection\">Selection</a></code>\n&nbsp;object.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.comparePoint","name":"comparePoint","help":"Returns -1, 0, or 1 indicating whether the point occurs before, inside, or after the range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.intersectsNode","name":"intersectsNode","help":"Returns a <code>boolean</code> indicating whether the given node intersects the range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.selectNode","name":"selectNode","help":"Sets the Range to contain the&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n&nbsp;and its contents."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.compareNode","name":"compareNode","help":"Returns a constant representing whether the&nbsp;<a title=\"en/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a>&nbsp;is before, after, inside, or surrounding the range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setEndAfter","name":"setEndAfter","help":"Sets the end position of a Range relative to another&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setEndBefore","name":"setEndBefore","help":"Sets the end position of a Range relative to another&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.extractContents","name":"extractContents","help":"Moves contents of a Range from the document tree into a&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentFragment\">DocumentFragment</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.insertNode","name":"insertNode","help":"Insert a&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n&nbsp;at the start of a Range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.getClientRects","name":"getClientRects","help":"Returns a list of <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/ClientRect\" class=\"new\">ClientRect</a></code>\n objects that aggregates the results of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Element.getClientRects\">Element.getClientRects()</a></code>\n for all the elements in the range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.cloneContents","name":"cloneContents","help":"Returns a&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentFragment\">DocumentFragment</a></code>\n&nbsp;copying the nodes of a Range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.deleteContents","name":"deleteContents","help":"Removes the contents of a Range from the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.compareBoundaryPoints","name":"compareBoundaryPoints","help":"Compares the boundary points of two Ranges."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setStartBefore","name":"setStartBefore","help":"Sets the start position of a Range relative to another&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.detach","name":"detach","help":"Releases Range from use to improve performance."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.getBoundingClientRect","name":"getBoundingClientRect","help":"Returns a <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/ClientRect\" class=\"new\">ClientRect</a></code>\n object which bounds the entire contents of the range; this would be the union of all the rectangles returned by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/range.getClientRects\">range.getClientRects()</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.isPointInRange","name":"isPointInRange","help":"Returns a <code>boolean</code> indicating whether the given point is in the range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.selectNodeContents","name":"selectNodeContents","help":"Sets the Range to contain the contents of a&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.cloneRange","name":"cloneRange","help":"Returns a Range object with boundary points identical to the cloned Range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.toString","name":"toString","help":"Returns the text of the Range"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setStart","name":"setStart","help":"Sets the start position of a Range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setStartAfter","name":"setStartAfter","help":"Sets the start position of a Range relative to another&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.createContextualFragment","name":"createContextualFragment","help":"Returns a&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentFragment\">DocumentFragment</a></code>\n&nbsp;created from a given string of code."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.setEnd","name":"setEnd","help":"Sets the end position of a Range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.collapse","name":"collapse","help":"Collapses the Range to one of its boundary points."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.surroundContents","name":"surroundContents","help":"Moves content of a Range into a new&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.startOffset","name":"startOffset","help":"Returns a number representing where in the startContainer the Range starts."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.startContainer","name":"startContainer","help":"Returns the&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n&nbsp;within which the Range starts."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.endOffset","name":"endOffset","help":"Returns a number representing where in the endContainer the Range ends."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.collapsed","name":"collapsed","help":"Returns a&nbsp;<code>boolean</code>&nbsp;indicating whether the range's start and end points are at the same position."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.endContainer","name":"endContainer","help":"Returns the&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n&nbsp;within which the Range ends."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/range.commonAncestorContainer","name":"commonAncestorContainer","help":"Returns the deepest&nbsp;<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n&nbsp;that contains the startContainer and endContainer Nodes."}],"srcUrl":"https://developer.mozilla.org/en/DOM/range"},"HTMLIFrameElement":{"title":"HTMLIFrameElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe\">&lt;iframe&gt;</a></code>\n&nbsp;HTML&nbsp;Element","summary":"DOM iframe objects expose the <a class=\"external\" href=\"http://www.w3.org/TR/html5/the-iframe-element.html#htmliframeelement\" rel=\"external nofollow\" target=\"_blank\" title=\"http://www.w3.org/TR/html5/the-iframe-element.html#htmliframeelement\">HTMLIFrameElement</a> (or <span><a href=\"https://developer.mozilla.org/en/HTML\" rel=\"custom nofollow\">HTML 4</a></span> <a class=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-50708718\" rel=\"external nofollow\" target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-50708718\"><code>HTMLIFrameElement</code></a>) interface, which provides special properties and methods (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of inline frame elements.","members":[{"name":"align","help":"Specifies the alignment of the frame with respect to the surrounding context.","obsolete":true},{"name":"contentDocument","help":"The active document in the inline frame's nested browsing context.","obsolete":false},{"name":"contentWindow","help":"The window proxy for the nested browsing context.","obsolete":false},{"name":"frameborder","help":"Indicates whether to create borders between frames.","obsolete":false},{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-height\">height</a></code>\n HTML&nbsp;attribute, indicating the height of the frame.","obsolete":false},{"name":"longDesc","help":"URI of a long description of the frame.","obsolete":false},{"name":"marginHeight","help":"Height of the frame margin.","obsolete":false},{"name":"marginWidth","help":"Width of the frame margin.","obsolete":false},{"name":"webkitallowfullscreen","help":"Indicates whether or not the inline frame is willing to be placed into full screen mode. See <a title=\"https://developer.mozilla.org/en/DOM/Using_full-screen_mode\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Using_full-screen_mode\">Using full-screen mode</a> for details.","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-name\">name</a></code>\n HTML&nbsp;attribute, containing a name by which to refer to the frame.","obsolete":false},{"name":"sandbox","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-sandbox\">sandbox</a></code>\n HTML&nbsp;attribute, indicating extra restrictions on the behavior of the nested content.","obsolete":false},{"name":"scrolling","help":"Indicates whether the browser should provide scrollbars for the frame.","obsolete":false},{"name":"seamless","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-seamless\">seamless</a></code>\n HTML&nbsp;attribute, indicating that the inline frame should be rendered seamlessly with the parent document.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-src\">src</a></code>\n HTML&nbsp;attribute, containing the address of the content to be embedded.","obsolete":false},{"name":"srcdoc","help":"The content to display in the frame.","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/iframe#attr-width\">width</a></code>\n&nbsp;HTML&nbsp;attribute, indicating the width of the frame.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLIFrameElement"},"IDBDatabaseException":{"title":"IDBDatabaseException","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12 \n<span title=\"prefix\">-webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>VER_ERR</code></td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>VER_ERR</code></td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"In the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a>, an <code>IDBDatabaseException</code> object represents exception conditions that can be encountered while performing database operations.","members":[{"url":"","name":"ABORT_ERR","help":"A request was aborted, for example, through a call to<a title=\"en/IndexedDB/IDBTransaction#abort\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#abort\"> <code>IDBTransaction.abort</code></a>.","obsolete":false},{"url":"","name":"CONSTRAINT_ERR","help":"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object, such as an object store or index, already exists and a request attempted to create a new one.","obsolete":false},{"url":"","name":"DATA_ERR","help":"Data provided to an operation does not meet requirements.","obsolete":false},{"url":"","name":"NON_TRANSIENT_ERR","help":"An operation was not allowed on an object. Unless the cause of the error is corrected, retrying the same operation would result in failure.","obsolete":false},{"url":"","name":"NOT_ALLOWED_ERR","help":"<p>An operation was called on an object where it is not allowed or at a time when it is not allowed. It also occurs if a request is made on a source object that has been deleted or removed.</p> <p>More specific variants of this error includes: <code> TRANSACTION_INACTIVE_ERR</code> and <code>READ_ONLY_ERR</code>.</p>","obsolete":false},{"url":"","name":"NOT_FOUND_ERR","help":"The operation failed, because the requested database object could not be found; for example, an object store did not exist but was being opened.","obsolete":false},{"url":"","name":"QUOTA_ERR","help":"Either there's not enough remaining storage space or the storage quota was reached and the user declined to give more space to the database.","obsolete":false},{"url":"","name":"READ_ONLY_ERR","help":"A mutation operation was attempted in a <code>READ_ONLY</code>&nbsp;transaction.","obsolete":false},{"url":"","name":"TIMEOUT_ERR","help":"A lock for the transaction could not be obtained in a reasonable time.","obsolete":false},{"url":"","name":"TRANSACTION_INACTIVE_ERR","help":"A request was made against a transaction that is either not currently active or is already finished.","obsolete":false},{"url":"","name":"UNKNOWN_ERR","help":"The operation failed for reasons unrelated to the database itself, and it is not covered by any other error code; for example, a failure due to disk IO errors.","obsolete":false},{"url":"","name":"VER_ERR","help":"A request to open a database with a version lower than the one it already has. This can only happen with <a title=\"en/IndexedDB/IDBOpenDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBOpenDBRequest\"><code>IDBOpenDBRequest</code></a>.","obsolete":false},{"url":"","name":"code","help":"The most appropriate error code for the condition.","obsolete":false},{"url":"","name":"message","help":"Error message describing the exception raised.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException"},"DirectoryEntry":{"title":"DirectoryEntry","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>DirectoryEntry</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents a directory in a file system.</p>","members":[{"name":"getFile","help":"<p>Creates or looks up a file.</p>\n<pre>void moveTo (\n  <em>(in DOMString path, optional Flags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_9\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>path</dt> <dd>Either an absolute path or a relative path from this DirectoryEntry to the file to be looked up or created. It is an error to attempt to create a file whose immediate parent does not yet exist.</dd> <dt>options</dt>\n</dl>\n<ul> <li>If create and exclusive are both true, and the path already exists, getFile must fail.</li> <li> If create is true, the path doesn't exist, and no other error occurs, getFile must create it as a zero-length file and return a corresponding FileEntry. </li> <li>If create is not true and the path doesn't exist, getFile must fail. </li> <li>If create is not true and the path exists, but is a directory, getFile must fail. </li> <li>Otherwise, if no other error occurs, getFile must return a FileEntry corresponding to path.</li>\n</ul>\n<dl> <dt>successCallback</dt> <dd>A callback that is called to return the file selected or created.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd> </dl> </div><div id=\"section_10\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl> </div>","obsolete":false},{"name":"getDirectory","help":"<p>Creates or looks up a directory.</p>\n<pre>void vopyTo (\n  <em>(in DOMString path, optional Flags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_12\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>path</dt> <dd>Either an absolute path or a relative path from this DirectoryEntry to the file to be looked up or created. It is an error to attempt to create a file whose immediate parent does not yet exist.</dd> <dt>options</dt>\n</dl>\n<ul> <li>If create and exclusive are both true, and the path already exists, getDirectory must fail.</li> <li> If create is true, the path doesn't exist, and no other error occurs, getDirectory must create it as a zero-length file and return a corresponding getDirectory. </li> <li>If create is not true and the path doesn't exist, getDirectory must fail. </li> <li>If create is not true and the path exists, but is a directory, getDirectory must fail. </li> <li>Otherwise, if no other error occurs, getFile must return a getDirectory corresponding to path.</li>\n</ul> <dt>successCallback</dt> <dd>A callback that is called to return the DirectoryEntry selected or created.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n </div><div id=\"section_13\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl> </div>","obsolete":false},{"name":"removeRecursively","help":"<p>Deletes a directory and all of its contents, if any. If you are deleting a directory that contains a file that cannot be removed, some of the contents of the directory might be deleted. You cannot delete the root directory of a file system.</p>\n<pre>DOMString toURL (\n  <em>(in </em>VoidCallback successCallback, optional ErrorCallback errorCallback<em>);</em>\n);</pre>\n<div id=\"section_15\"><span id=\"Parameter_3\"></span><h5 class=\"editable\">Parameter</h5>\n<dl>\n<dt>successCallback</dt> <dd>A callback that is called to return the DirectoryEntry selected or created.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl> </div><div id=\"section_16\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"createReader","help":"<p>Creates a new DirectoryReader to read entries from this Directory.</p>\n<pre>void getMetada ();</pre> <div id=\"section_7\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>DirectoryReader</code></dt>\n</dl> </div>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryEntry"},"HTMLOptGroupElement":{"title":"optgroup","examples":["<pre name=\"code\" class=\"xml\">&lt;select&gt;\n  &lt;optgroup label=\"Group 1\"&gt;\n    &lt;option&gt;Option 1.1&lt;/option&gt;\n  &lt;/optgroup&gt; \n  &lt;optgroup label=\"Group 2\"&gt;\n    &lt;option&gt;Option 2.1&lt;/option&gt;\n    &lt;option&gt;Option 2.2&lt;/option&gt;\n  &lt;/optgroup&gt;\n  &lt;optgroup label=\"Group 3\" disabled&gt;\n    &lt;option&gt;Option 3.1&lt;/option&gt;\n    &lt;option&gt;Option 3.2&lt;/option&gt;\n    &lt;option&gt;Option 3.3&lt;/option&gt;\n  &lt;/optgroup&gt;\n&lt;/select&gt;</pre>\n        \n<p>&lt;form&gt; <select> <optgroup label=\"Group 1\">\n<option>Option 1.1</option>\n</optgroup> <optgroup label=\"Group 2\">\n<option>Option 2.1</option>\n<option>Option 2.2</option>\n</optgroup> <optgroup disabled=\"\" label=\"Group 3\">\n<option>Option 3.1</option>\n<option>Option 3.2</option>\n<option>Option 3.3</option>\n</optgroup> </select> &lt;/form&gt;</p>"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/optgroup","seeAlso":"Other form-related elements: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/legend\">&lt;legend&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/button\">&lt;button&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select\">&lt;select&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/datalist\">&lt;datalist&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/option\">&lt;option&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/fieldset\">&lt;fieldset&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea\">&lt;textarea&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/keygen\">&lt;keygen&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/output\">&lt;output&gt;</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/progress\">&lt;progress&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/meter\">&lt;meter&gt;</a></code>\n.","summary":"In a web form, the HTML <em>optgroup</em> element (&lt;optgroup&gt;) creates a grouping of options within a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/select\">&lt;select&gt;</a></code>\n element.","members":[{"obsolete":false,"url":"","name":"label","help":"The name of the group of options, which the browser can use when labeling the options in the user interface. This attribute is mandatory if this element is used."},{"obsolete":false,"url":"","name":"disabled","help":"If this Boolean attribute is set, none of the items in this option group is selectable. Often browsers grey out such control and it won't received any browsing events, like mouse clicks or focus-related ones."}]},"SVGZoomAndPan":{"title":"SVGViewElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGViewElement","skipped":true,"cause":"Suspect title"},"Console":{"title":"Using the Web Console","examples":["<p>Let's say you have a DOM&nbsp;node with the ID&nbsp;\"title\". In fact, this page you're reading right now has one, so you can open up the Web Console and try this right now.</p>\n<p>Let's take a look at the contents of that node by using the <code>$()</code>&nbsp;and <code>inspect()</code>&nbsp;functions:</p>\n<p><code>inspect($(\"title\"))</code></p>\n<p>This automatically opens up the object inspector, showing you the contents of the DOM&nbsp;node with the ID \"title\".</p>","<p>Let's say you have a DOM&nbsp;node with the ID&nbsp;\"title\". In fact, this page you're reading right now has one, so you can open up the Web Console and try this right now.</p>\n<p>Let's take a look at the contents of that node by using the <code>$()</code>&nbsp;and <code>inspect()</code>&nbsp;functions:</p>\n<p><code>inspect($(\"title\"))</code></p>\n<p>This automatically opens up the object inspector, showing you the contents of the DOM&nbsp;node with the ID \"title\".</p>","<p>That's well and good if you happen to be sitting at the browser exhibiting some problem, but let's say you're debugging remotely for a user, and need a look at the contents of a node. You can have your user open up the Web Console and dump the contents of the node into the log, then copy and paste it into an email to you, using the <code>pprint()</code>&nbsp;function:</p>\n<pre>pprint($(\"title\"))\n</pre>\n<p>This spews out the contents of the node so you can take a look. Of course, this may be more useful with other objects than a DOM&nbsp;node, but you get the idea.</p>","<p>That's well and good if you happen to be sitting at the browser exhibiting some problem, but let's say you're debugging remotely for a user, and need a look at the contents of a node. You can have your user open up the Web Console and dump the contents of the node into the log, then copy and paste it into an email to you, using the <code>pprint()</code>&nbsp;function:</p>\n<pre>pprint($(\"title\"))\n</pre>\n<p>This spews out the contents of the node so you can take a look. Of course, this may be more useful with other objects than a DOM&nbsp;node, but you get the idea.</p>"],"srcUrl":"https://developer.mozilla.org/en/Using_the_Web_Console","seeAlso":"Web Console Helpers","summary":"<p>Beginning with Firefox 4, the old <a title=\"en/Error Console\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Error_Console\">Error Console</a> has been deprecated in favor of the new, improved Web&nbsp;Console. The Web Console is something of a heads-up display for the web, letting you view error messages and other logged information. In addition, there are methods you can call to output information to the console, making it a useful debugging aid, and you can evaluate JavaScript on the fly.</p>\n<p><a title=\"webconsole.png\" rel=\"internal\" href=\"https://developer.mozilla.org/@api/deki/files/4748/=webconsole.png\"><img alt=\"webconsole.png\" class=\"internal default\" src=\"https://developer.mozilla.org/@api/deki/files/4748/=webconsole.png\"></a></p>\n<p>The Web Console won't replace more advanced debugging tools like <a class=\"external\" title=\"http://getfirebug.com/\" rel=\"external\" href=\"http://getfirebug.com/\" target=\"_blank\">Firebug</a>; what it does give you, however, is a way to let remote users of your site or web application gather and report console logs and other information to you. It also provides a lightweight way to debug content if you don't happen to have Firebug installed when something goes wrong.</p>\n<div class=\"note\"><strong>Note:</strong> The Error Console is still available; you can re-enable it by changing the <code>devtools.errorconsole.enabled</code> preference to <code>true</code> and restarting the browser.</div>","members":[]},"EntrySync":{"title":"EntrySync","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>EntrySync</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents entries in a file system. The entries can be a file&nbsp;or a <a href=\"https://developer.mozilla.org/en/DOM/File_API/File_system_API/DirectoryEntry\" rel=\"internal\" title=\"en/DOM/File_API/File_system_API/DirectoryEntry\">DirectoryEntry</a>.</p>","members":[{"name":"getMetadata","help":"<p>Look up metadata about this entry.</p>\n<pre>void getMetada (\n  in MetadataCallback ErrorCallback\n);</pre>\n<div id=\"section_4\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the time of the last modification.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_5\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"getParent","help":"<p>Look up the parent <code>DirectoryEntry</code> containing this entry. If this entry is the root of its filesystem, its parent is itself.</p>\n<pre>void getParent (\n  <em>(in EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_19\"><span id=\"Parameter_6\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCellback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_20\"><span id=\"Returns_6\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl> </div>","obsolete":false},{"name":"remove","help":"<p>Deletes a file or directory. You cannot delete an empty directory or the root directory of a filesystem.</p>\n<pre>void remove (\n  <em>(in VoidCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_16\"><span id=\"Parameter_5\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_17\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"copyTo","help":"<p>Copy an entry to a different location on the file system. You cannot copy an entry inside itself if it is a directory nor can you copy it into its parent if a name different from its current one isn't provided. Directory copies are always recursive—that is, they copy all contents of the directory.</p>\n<pre>void vopyTo (\n  <em>(in DirectoryEntry parent, optional DOMString newName, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_10\"><span id=\"Parameter_3\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"moveTo","help":"<p>Move an entry to a different location on the file system. You cannot do the following:</p>\n<ul> <li>move a directory inside itself or to any child at any depth;</li> <li>move an entry into its parent if a name different from its current one isn't provided;</li> <li>move a file to a path occupied by a directory;</li> <li>move a directory to a path occupied by a file;</li> <li>move any element to a path occupied by a directory which is not empty.</li>\n</ul>\n<p>Moving a file over an existing file&nbsp;replaces that existing file. A move of a directory on top of an existing empty directory&nbsp;replaces that directory.</p>\n<pre>void moveTo (\n  <em>(in DirectoryEntry parent, optional DOMString newName, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_7\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>parent</dt> <dd>The directory to which to move the entry.</dd> <dt>newName</dt> <dd>The new name of the entry. Defaults to the entry's current name if unspecified.</dd> <dt>successCallback</dt> <dd>A callback that is called with the entry for the new object.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"toURL","help":"<p>Returns a URL that can be used to identify this entry. It has no specific expiration. Bcause it describes a location on disk, it is valid for as long as that location exists. Users can supply&nbsp;<code>mimeType</code>&nbsp;to simulate the optional mime-type header associated with HTTP downloads.</p>\n<pre>DOMString toURL (\n  <em>(in </em>optional DOMString mimeType<em>);</em>\n);</pre>\n<div id=\"section_13\"><span id=\"Parameter_4\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>mimeType</dt> <dd>For a FileEntry, the mime type to be used to interpret the file, when loaded through this URL.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>DOMString</code></dt>\n</dl>\n</div>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/EntrySync"},"SVGException":{"title":"User talk:Jeff Schiller","members":[],"srcUrl":"https://developer.mozilla.org/User_talk:Jeff_Schiller","skipped":true,"cause":"Suspect title"},"XPathEvaluator":{"title":"nsIDOMXPathEvaluator","seeAlso":"<li><a title=\"en/Introduction to using XPath in JavaScript\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript\">Introduction to using XPath in JavaScript</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document.evaluate\">document.evaluate</a></code>\n</li> <li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/DOM-Level-3-XPath\">DOM Level 3 XPath Specification</a></li> <li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/xpath\">XML Path Language (XPath)</a><span title=\"Recommendation\">REC</span></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathResult\">nsIDOMXPathResult</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathException\">nsIDOMXPathException</a></code>\n</li>","summary":"<div><div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/xpath/nsIDOMXPathEvaluator.idl\"><code>dom/interfaces/xpath/nsIDOMXPathEvaluator.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>This interface is used to evaluate XPath expressions against a DOM node.</span><div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports\">nsISupports</a></code>\n<span>Last changed in Gecko 1.7 \n</span></div></div>\n<p></p>\n<p>Implemented by: <code>@mozilla.org/dom/xpath-evaluator;1</code>. To create an instance, use:</p>\n<pre class=\"eval\">var domXPathEvaluator = Components.classes[\"@mozilla.org/dom/xpath-evaluator;1\"]\n                        .createInstance(Components.interfaces.nsIDOMXPathEvaluator);\n</pre>","members":[{"name":"createExpression","help":"<p>Creates an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathExpression\">nsIDOMXPathExpression</a></code>\n which can then be used for (repeated) evaluations.</p>\n<div class=\"geckoVersionNote\">\n<p>\n</p><div class=\"geckoVersionHeading\">Gecko 1.9 note<div>(Firefox 3)\n</div></div>\n<p></p>\n<p>Prior to Gecko 1.9, you could call this method on documents other than the one you planned to run the XPath against; starting with Gecko 1.9, however, you must call it on the same document.</p>\n</div>\n\n<div id=\"section_4\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>expression</code></dt> <dd>A string representing the XPath to be created.</dd> <dt><code>resolver</code></dt> <dd>A name space resolver created by , or a user defined name space resolver. Read more on <a title=\"en/Introduction to using XPath in JavaScript#Implementing a User Defined Namespace Resolver\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver\">Implementing a User Defined Namespace Resolver</a> if you wish to take the latter approach.</dd>\n</dl>\n</div><div id=\"section_5\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>An XPath expression, as an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathExpression\">nsIDOMXPathExpression</a></code>\n object.</p>\n</div>","idl":"<pre class=\"eval\"> nsIDOMXPathExpression createExpression(\n   in DOMString expression,\n   in nsIDOMXPathNSResolver resolver\n );\n</pre>","obsolete":false},{"name":"createNSResolver","help":"<p>Creates an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathExpression\">nsIDOMXPathExpression</a></code>\n which resolves name spaces with respect to the definitions in scope for a specified node. It is used to resolve prefixes within the XPath itself, so that they can be matched with the document. <code>null</code> is common for HTML documents or when no name space prefixes are used.</p>\n\n<div id=\"section_7\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>nodeResolver</code></dt> <dd>The node to be used as a context for name space resolution.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value_2\"></span><h6 class=\"editable\">Return value</h6>\n<p>A name space resolver.</p>\n</div>","idl":"<pre class=\"eval\">nsIDOMXPathNSResolver createNSResolver(\n  in nsIDOMNode nodeResolver\n);\n</pre>","obsolete":false},{"name":"evaluate","help":"<p>Evaluate the specified XPath expression.</p>\n\n<div id=\"section_10\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>expression</code></dt> <dd>A string representing the XPath to be evaluated.</dd> <dt><code>contextNode</code></dt> <dd>A DOM Node to evaluate the XPath expression against. To evaluate against a whole document, use the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document.documentElement\">document.documentElement</a></code>\n.</dd> <dt><code>resolver</code></dt> <dd>A name space resolver created by , or a user defined name space resolver. Read more on <a title=\"en/Introduction to using XPath in JavaScript#Implementing a User Defined Namespace Resolver\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver\">Implementing a User Defined Namespace Resolver</a> if you wish to take the latter approach.</dd> <dt><code>type</code></dt> <dd>A number that corresponds to one of the type constants of <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIXPathResult&amp;ident=nsIXPathResult\" class=\"new\">nsIXPathResult</a></code>\n.</dd> <dt><code>result</code></dt> <dd>An existing <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIXPathResult&amp;ident=nsIXPathResult\" class=\"new\">nsIXPathResult</a></code>\n to use for the result. Using <code>null</code> will create a new <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIXPathResult&amp;ident=nsIXPathResult\" class=\"new\">nsIXPathResult</a></code>\n.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Return_value_3\"></span><h6 class=\"editable\">Return value</h6>\n<p>An XPath result.</p>\n</div>","idl":"<pre class=\"eval\">nsISupports evaluate(\n  in DOMString expression,\n  in nsIDOMNode contextNode,\n  in nsIDOMXPathNSResolver resolver,\n  in unsigned short type,\n  in nsISupports result\n);\n</pre>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathEvaluator"},"SharedWorker":{"title":"SharedWorker","seeAlso":"<li><a title=\"En/DOM/Worker\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Worker\"><code>Worker</code></a></li> <li><a title=\"en/Using DOM workers\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_DOM_workers\">Using DOM&nbsp;workers</a></li>","summary":"Not yet implemented by Firefox.","members":[],"srcUrl":"https://developer.mozilla.org/En/DOM/SharedWorker"},"WebKitCSSKeyframesRule":{"title":"CSSRuleList","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/CSSRuleList","skipped":true,"cause":"Suspect title"},"HTMLSourceElement":{"title":"HTMLSourceElement","members":[{"name":"media","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/source#attr-media\">media</a></code>\n HTML&nbsp;attribute, containing the intended type of the media resource.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/source#attr-src\">src</a></code>\n HTML&nbsp;attribute, containing the URL&nbsp;for the media resource.","obsolete":false},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/source#attr-type\">type</a></code>\n HTML&nbsp;attribute, containing the type of the media resource.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLSourceElement"},"HTMLMetaElement":{"title":"HTMLMetaElement","summary":"The meta objects expose the <a class=\" external\" target=\"_blank\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-37041454\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-37041454\">HTMLMetaElement</a> interface which contains descriptive metadata about a document.&nbsp; This object inherits all of the properties and methods described in the <a class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/meta.scheme","name":"scheme","help":"Gets or sets the name of a scheme used to interpret the value of a meta-data property."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/meta.content","name":"content","help":"Gets or sets the value of meta-data property."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/meta.httpEquiv","name":"httpEquiv","help":"Gets or sets the name of an HTTP&nbsp;response header to define for a document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/meta.name","name":"name","help":"Gets or sets the name of a meta-data property to define for a document."}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLMetaElement"},"ElementTimeControl":{"title":"SVGAnimationElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimationElement","skipped":true,"cause":"Suspect title"},"SVGMPathElement":{"title":"SVGMPathElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGMPathElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mpath\">&lt;mpath&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGMPathElement"},"SVGPathSegLinetoVerticalAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGRectElement":{"title":"SVGRectElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGRectElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n SVG Element","summary":"The <code>SVGRectElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n element.","obsolete":false},{"name":"rx","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/rx\">rx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n element.","obsolete":false},{"name":"ry","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/ry\">ry</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/rect\">&lt;rect&gt;</a></code>\n element.","obsolete":false}]},"TreeWalker":{"title":"treeWalker","summary":"<p>The <code>TreeWalker</code> object represents the nodes of a document subtree and a position within them.</p>\n<p>A TreeWalker can be created using the <code><a title=\"en/DOM/document.createTreeWalker\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.createTreeWalker\">createTreeWalker()</a></code> method of the <code><a title=\"en/DOM/document\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document\">document</a></code> object.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.previousSibling","name":"previousSibling","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.nextNode","name":"nextNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.lastChild","name":"lastChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.previousNode","name":"previousNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.firstChild","name":"firstChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.parentNode","name":"parentNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.nextSibling","name":"nextSibling","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.filter","name":"filter","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.ExpandEntityReferences","name":"expandEntityReferences","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.whatToShow","name":"whatToShow","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.root","name":"root","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/treeWalker.currentNode","name":"currentNode","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/Treewalker","specification":"DOM Level 2 Traversal: TreeWalker"},"HTMLVideoElement":{"title":"HTMLVideoElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/HTMLVideoElement","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLAudioElement\">HTMLAudioElement</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLMediaELement\">HTMLMediaELement</a></code>\n</li> <li><a class=\" external\" rel=\"external\" href=\"http://people.mozilla.org/~cpearce/paint-stats-demo.html\" title=\"http://people.mozilla.org/~cpearce/paint-stats-demo.html\" target=\"_blank\">Demo of video paint statistics</a></li>","summary":"DOM <code>video</code> objects expose the <a class=\"external\" title=\"http://www.w3.org/TR/html5/video.html#htmlvideoelement\" rel=\"external\" href=\"http://www.w3.org/TR/html5/video.html#htmlvideoelement\" target=\"_blank\">HTMLVideoElement</a> interface, which provides special properties (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object and <a title=\"en/DOM/HTMLMediaElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLMediaElement\">HTMLMediaElement</a> interfaces they also have available to them by inheritance) for manipulating video objects.","members":[{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-height\">height</a></code>\n HTML attribute, which specifies the height of the display area, in CSS pixels.","obsolete":false},{"name":"poster","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-poster\">poster</a></code>\n HTML&nbsp;attribute, which specifies an image to show while no video data is available.","obsolete":false},{"name":"videoHeight","help":"The intrinsic height of the resource in CSS pixels, taking into account the dimensions, aspect ratio, clean aperture, resolution, and so forth, as defined for the format used by the resource. If the element's ready state is HAVE_NOTHING, the value is 0.","obsolete":false},{"name":"videoWidth","help":"The intrinsic width of the resource in CSS pixels, taking into account the dimensions, aspect ratio, clean aperture, resolution, and so forth, as defined for the format used by the resource. If the element's ready state is HAVE_NOTHING, the value is 0.","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-width\">width</a></code>\n&nbsp;HTML&nbsp;attribute, which specifies the width of the display area, in CSS pixels.","obsolete":false}]},"FileReaderSync":{"title":"FileReaderSync","seeAlso":"<li>\n<a rel=\"custom\" href=\"http://dev.w3.org/2006/webapi/FileAPI/#FileReader-interface\">File API Specification: FileReaderSync</a><span title=\"Working Draft\">WD</span></li> <li>Related interfaces: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileReader\">FileReader</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/BlobBuilder\">BlobBuilder</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n</li>","summary":"<p>The <code>FileReaderSync</code> interface allows to read <code>File</code> or <code>Blob</code> objects in a synchronous way.</p>\n<p>This interface is <a title=\"https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\">only available</a> in <a title=\"Worker\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Worker\">workers</a> as it enables synchronous I/O that could potentially block.</p>","members":[{"name":"readAsDataURL","help":"<p>This method reads the contents of the specified <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code>. When the read operation is finished, it returns a data URL representing the file's data. If an error happened during the read, the adequate exception is sent.</p>\n\n<div id=\"section_5\"> <div id=\"section_17\"><span id=\"Parameters_4\"></span><h4 class=\"editable\"><span>Parameters</span></h4> <dl> <dt><code>blob</code></dt> <dd>The DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> to read.</dd> </dl>\n</div></div>\n<div id=\"section_6\"> <div id=\"section_18\"><span id=\"Return_value_4\"></span><h4 class=\"editable\"><span>Return value</span></h4> <p>An <a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a> representing the file's data as a data URL.</p>\n</div></div>\n<div id=\"section_19\"><span id=\"Exceptions_4\"></span><h4 class=\"editable\"><span>Exceptions</span></h4>\n<p>The following exceptions can be raised by this method:</p>\n<dl> <dt><code>NotFoundError</code></dt> <dd>is raised when the resource represented by the DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> cannot be found, e. g. because it has been erased.</dd> <dt><code>SecurityError</code></dt> <dd>is raised when one of the following problematic situation is detected: <ul> <li>the resource has been modified by a third party;</li> <li>too many read are performed simultaneously;</li> <li>the file pointed by the resource is unsafe for a use from the Web (like it is a system file).</li> </ul> </dd> <dt><code>NotReadableError</code></dt> <dd>is raised when the resource cannot be read due to a permission problem, like a concurrent lock.</dd> <dt><code>EncodingError</code></dt> <dd>is raised when the resource is a data URL and exceed the limit length defined by each browser.</dd>\n</dl>\n<dl> <dt></dt>\n</dl></div>","idl":"<pre class=\"eval\">void readAsDataURL(\n  in Blob file\n);\n</pre>","obsolete":false},{"name":"readAsText","help":"<p>This methods reads the specified blob's contents. When the read operation is finished, it returns a <a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a> containing the file represented as a text string. The optional <strong><code>encoding</code></strong> parameter indicates the encoding to be used. If not present, the method will apply a detection algorithm for it. If an error happened during the read, the adequate exception is sent.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_3\"></span><h4 class=\"editable\">Parameters</h4>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> to read into the <a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a>.</dd> <dt><code>encoding</code></dt> <dd>Optional. A string representing the encoding to be used, like <strong>iso-8859-1</strong> or <strong>UTF-8</strong>.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Return_value_3\"></span><h4 class=\"editable\">Return value</h4>\n<p>A <a href=\"https://developer.mozilla.org/en/DOM/DOMString\" rel=\"internal\" title=\"DOMString\"><code>DOMString</code></a> containing the raw binary data from the resource</p>\n</div><div id=\"section_15\"><span id=\"Exceptions_3\"></span><h4 class=\"editable\">Exceptions</h4>\n<p>The following exceptions can be raised by this method:</p>\n<dl> <dt><code>NotFoundError</code></dt> <dd>is raised when the resource represented by the DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> cannot be found, e. g. because it has been erased.</dd> <dt><code>SecurityError</code></dt> <dd>is raised when one of the following problematic situation is detected: <ul> <li>the resource has been modified by a third party;</li> <li>two many read are performed simultaneously;</li> <li>the file pointed by the resource is unsafe for a use from the Web (like it is a system file).</li> </ul> </dd> <dt><code>NotReadableError</code></dt> <dd>is raised when the resource cannot be read due to a permission problem, like a concurrent lock.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsText(\n  in Blob blob,\n  in DOMString encoding \n<span style=\"border: 1px solid #9ED2A4; background-color: #C0FFC7; font-size: x-small; white-space: nowrap; padding: 2px;\" title=\"\">Optional</span>\n\n);\n</pre>","obsolete":false},{"name":"readAsBinaryString","help":"<p>This method reads the contents of the specified <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code>, which may be a <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code>. When the read operation is finished, it returns a <a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a> containing the raw binary data from the file. If an error happened during the read, the adequate exception is sent.</p>\n<div class=\"note\"><strong>Note</strong> <strong>: </strong>This method is deprecated and <code>readAsArrayBuffer()</code> should be used instead.</div>\n\n<div id=\"section_9\"><span id=\"Parameters_2\"></span><h4 class=\"editable\">Parameters</h4>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> to read into the <a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a>.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Return_value_2\"></span><h4 class=\"editable\">Return value</h4>\n<p><code>A </code><a title=\"DOMString\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMString\"><code>DOMString</code></a> containing the raw binary data from the resource</p>\n</div><div id=\"section_11\"><span id=\"Exceptions_2\"></span><h4 class=\"editable\">Exceptions</h4>\n<p>The following exceptions can be raised by this method:</p>\n<dl> <dt><code>NotFoundError</code></dt> <dd>is raised when the resource represented by the DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> cannot be found, e. g. because it has been erased.</dd> <dt><code>SecurityError</code></dt> <dd>is raised when one of the following problematic situation is detected: <ul> <li>the resource has been modified by a third party;</li> <li>two many read are performed simultaneously;</li> <li>the file pointed by the resource is unsafe for a use from the Web (like it is a system file).</li> </ul> </dd> <dt><code>NotReadableError</code></dt> <dd>is raised when the resource cannot be read due to a permission problem, like a concurrent lock.</dd> <dt><code>EncodingError</code></dt> <dd>is raised when the resource is a data URL and exceed the limit length defined by each browser.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsBinaryString(\n  in Blob blob\n);\n</pre>","obsolete":false},{"name":"readAsArrayBuffer","help":"<p>This method reads the contents of the specified <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code>. When the read operation is finished, it returns an <code><a href=\"../JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" title=\"/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code> representing the file's data. If an error happened during the read, the adequate exception is sent.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h4 class=\"editable\">Parameters</h4>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> to read into the <code><a href=\"../JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" title=\"/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>.</dd>\n</dl>\n</div><div id=\"section_6\"><span id=\"Return_value\"></span><h4 class=\"editable\">Return value</h4>\n<p>An <code><a href=\"../JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" title=\"/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code> representing the file's data.</p>\n</div><div id=\"section_7\"><span id=\"Exceptions\"></span><h4 class=\"editable\">Exceptions</h4>\n<p>The following exceptions can be raised by this method:</p>\n<dl> <dt><code>NotFoundError</code></dt> <dd>is raised when the resource represented by the DOM <code><a href=\"https://developer.mozilla.org/en/DOM/Blob\" rel=\"custom\">Blob</a></code> or <code><a href=\"https://developer.mozilla.org/en/DOM/File\" rel=\"custom\">File</a></code> cannot be found, e. g. because it has been erased.</dd> <dt><code>SecurityError</code></dt> <dd>is raised when one of the following problematic situation is detected: <ul> <li>the resource has been modified by a third party;</li> <li>two many read are performed simultaneously;</li> <li>the file pointed by the resource is unsafe for a use from the Web (like it is a system file).</li> </ul> </dd> <dt><code>NotReadableError</code></dt> <dd>is raised when the resource cannot be read due to a permission problem, like a concurrent lock.</dd> <dt><code>EncodingError</code></dt> <dd>is raised when the resource is a data URL and exceed the limit length defined by each browser.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsArrayBuffer(\n  in Blob blob\n);\n</pre>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/FileReaderSync"},"MediaList":{"title":"XPCOM array guide","members":[],"srcUrl":"https://developer.mozilla.org/en/XPCOM_array_guide","skipped":true,"cause":"Suspect title"},"ValidityState":{"title":"ValidityState","summary":"The DOM&nbsp;<code>ValidityState</code> interface represents the <em>validity states</em> that an element can be in, with respect to constraint validation.","members":[{"name":"customError","help":"The element's custom validity message has been set to a non-empty string by calling the element's setCustomValidity() method.","obsolete":false},{"name":"patternMismatch","help":"The value does not match the specified \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-pattern\">pattern</a></code>\n.","obsolete":false},{"name":"rangeOverflow","help":"The value is greater than the specified \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-max\">max</a></code>\n.","obsolete":false},{"name":"rangeUnderflow","help":"The value is less than the specified \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-min\">min</a></code>\n.","obsolete":false},{"name":"stepMismatch","help":"The value does not fit the rules determined by \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-step\">step</a></code>\n.","obsolete":false},{"name":"tooLong","help":"<p>The value exceeds the specified <strong>maxlength</strong> for <a title=\"en/DOM/HTMLInputElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLInputElement\">HTMLInputElement</a> or <a title=\"en/DOM/textarea\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLTextAreaElement\">HTMLTextAreaElement</a> objects.</p> <div class=\"note\"><strong>Note:</strong> This will never be <code>true</code> in Gecko, because elements' values are prevented from being longer than <strong>maxlength</strong>.</div>","obsolete":false},{"name":"typeMismatch","help":"The value is not in the required syntax (when \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-type\">type</a></code>\n is <code>email</code> or <code>url</code>).","obsolete":false},{"name":"valid","help":"No other constraint validation conditions are true.","obsolete":false},{"name":"valueMissing","help":"The element has a \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-required\">required</a></code>\n attribute, but no value.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/ValidityState","specification":"W3C HTML5 Specification: Constraints: The Constraint Validation API"},"CSSStyleDeclaration":{"title":"CSSStyleDeclaration","examples":["var styleObj= document.styleSheets[0].cssRules[0].style;\nalert(styleObj.cssText);\nfor (var i = styleObj.length-1; i &gt;= 0; i--) {\n   var nameString = styleObj[i];\n   styleObj.removeProperty(nameString);\n}\nalert(styleObj.cssText);"],"srcUrl":"https://developer.mozilla.org/en/DOM/CSSStyleDeclaration","specification":"DOM Level 2 CSS: CSSStyleDeclaration","summary":"<p>A CSSStyleDeclaration is an interface to the <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/1998/REC-CSS2-19980512/syndata.html#block\" title=\"http://www.w3.org/TR/1998/REC-CSS2-19980512/syndata.html#block\" target=\"_blank\">declaration block</a> returned by the <code><a href=\"https://developer.mozilla.org/en/DOM/cssRule.style\" rel=\"internal\" title=\"en/DOM/cssRule.style\">style</a></code> property of a <code><a href=\"https://developer.mozilla.org/en/DOM/cssRule\" rel=\"internal\" title=\"en/DOM/cssRule\">cssRule</a></code> in a <a href=\"https://developer.mozilla.org/en/DOM/stylesheet\" rel=\"internal\" title=\"en/DOM/stylesheet\">stylesheet</a>, when the&nbsp;rule is a <a title=\"en/DOM/cssRule#CSSStyleRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/cssRule#CSSStyleRule\">CSSStyleRule</a>.</p>\n<p>CSSStyleDeclaration is also a <strong>read-only </strong>interface to the result of <a title=\"en/DOM/window.getComputedStyle\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.getComputedStyle\">getComputedStyle</a>.</p>","members":[{"name":"removeProperty","help":" Returns the value deleted.<br> Example: <em>valString</em>= <em>styleObj</em>.removeProperty('color')","obsolete":false},{"name":"setProperty","help":" No return.<br> Example: <em>styleObj</em>.setProperty('color', 'red', 'important')","obsolete":false},{"name":"item","help":" Returns a property name.<br> Example: <em>nameString</em>= <em>styleObj</em>.item(0)<br> Alternative: <em>nameString</em>= <em>styleObj</em>[0]","obsolete":false},{"name":"getPropertyValue","help":" Returns the property value.<br> Example: <em>valString</em>= <em>styleObj</em>.getPropertyValue('color')","obsolete":false},{"name":"getPropertyCSSValue","help":"<span>Only supported via getComputedStyle.<br> </span>Returns a <a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\" target=\"_blank\">CSSValue</a>, or <code>null</code> for <a title=\"en/Guide to Shorthand CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Guide_to_Shorthand_CSS\">Shorthand properties</a>.<br> Example: <em>cssString</em>= window.getComputedStyle(<em>elem</em>, <code>null</code>).getPropertyCSSValue('color').cssText;<br> Note: Gecko 1.9 returns null unless using <a title=\"en/DOM/window.getComputedStyle\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.getComputedStyle\">getComputedStyle()</a>.<br> Note: this method may be <a class=\"external\" title=\"http://lists.w3.org/Archives/Public/www-style/2003Oct/0347.html\" rel=\"external\" href=\"http://lists.w3.org/Archives/Public/www-style/2003Oct/0347.html\" target=\"_blank\">deprecated by the W3C</a>.","obsolete":false},{"name":"getPropertyPriority","help":" Returns the optional priority, \"important\".<br> Example: <em>priString</em>= <em>styleObj</em>.getPropertyPriority('color')","obsolete":false},{"name":"parentRule","help":" The containing <code><a href=\"https://developer.mozilla.org/en/DOM/cssRule\" rel=\"internal\" title=\"en/DOM/cssRule\">cssRule</a>.</code>","obsolete":false},{"name":"cssText","help":" Textual representation of the declaration block. Setting this attribute changes the style.","obsolete":false},{"name":"length","help":" The number of properties. See the <strong>item</strong> method below.","obsolete":false}]},"HTMLBaseFontElement":{"title":"basefont","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","examples":["&lt;basefont color=\"#FF0000\" face=\"Helvetica\" size=\"+2\" /&gt;\n"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/basefont","summary":"Obsolete","members":[{"obsolete":false,"url":"","name":"face","help":"This attribute contains a list of one or more font names. The document text in the default style is rendered in the first font face that the client's browser supports. If no font listed is installed on the local system, the browser typically defaults to the proportional or fixed-width font for that system."},{"obsolete":false,"url":"","name":"color","help":"This attribute sets the text color using either a named color or a color specified in the hexadecimal #RRGGBB format."},{"obsolete":false,"url":"","name":"size","help":"This attribute specifies the font size as either a numeric or relative value. Numeric values range from 1 to 7 with 1 being the smallest and 3 the default."}]},"SVGAElement":{"title":"SVGAElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGAElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/a\">&lt;a&gt;</a></code>\n SVG Element","summary":"The <code>SVGAElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/a\">&lt;a&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"target","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/target\" class=\"new\">target</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/a\">&lt;a&gt;</a></code>\n element.","obsolete":false}]},"DeviceMotionEvent":{"title":"DeviceMotionEvent","examples":["&lt;coming soon&gt;"],"srcUrl":"https://developer.mozilla.org/en/DOM/DeviceMotionEvent","specification":"DeviceOrientation specification","summary":"A <code>DeviceMotionEvent</code> object describes an event that indicates the amount of physical motion of the device that has occurred, and is fired at a set interval (rather than in response to motion). It provides information about the rate of rotation, as well as acceleration along all three axes.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceMotionEvent.accelerationIncludingGravity","name":"accelerationIncludingGravity","help":"The acceleration of the device. This value includes the effect of gravity, and may be the only value available on devices that don't have a gyroscope to allow them to properly remove gravity from the data. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceMotionEvent.interval","name":"interval","help":"The interval, in milliseconds, at which the <code>DeviceMotionEvent</code> is fired. The next event will be fired in approximately this amount of time."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceMotionEvent.acceleration","name":"acceleration","help":"The acceleration of the device. This value has taken into account the effect of gravity and removed it from the figures. This value may not exist if the hardware doesn't know how to remove gravity from the acceleration data. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/DeviceMotionEvent.rotationRate","name":"rotationRate","help":"The rates of rotation of the device about all three axes. <strong>Read only.</strong>"}]},"ErrorEvent":{"title":"error","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/DOM_event_reference/error","skipped":true,"cause":"Suspect title"},"SVGFEGaussianBlurElement":{"title":"feGaussianBlur","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The filter blurs the input image by the amount specified in \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/stdDeviation\" class=\"new\">stdDeviation</a></code>, which defines the bell-curve.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur"},"MouseEvent":{"title":"MouseEvent","srcUrl":"https://developer.mozilla.org/en/DOM/MouseEvent","specification":"DOM&nbsp;Level 2:&nbsp;MouseEvent","seeAlso":"<li><a title=\"UIEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Event/UIEvent\">UIEvent</a></li> <li><a title=\"Event\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/event\">Event</a></li>","summary":"The DOM&nbsp;<code>MouseEvent</code> represents events that occur due to the user interacting with a pointing device (such as a mouse). It's represented by the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsINSDOMMouseEvent&amp;ident=nsINSDOMMouseEvent\" class=\"new\">nsINSDOMMouseEvent</a></code>\n&nbsp;interface, which extends the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIDOMMouseEvent&amp;ident=nsIDOMMouseEvent\" class=\"new\">nsIDOMMouseEvent</a></code>\n interface.","members":[{"name":"screenX","help":"The X coordinate of the mouse pointer in global (screen)&nbsp;coordinates. <strong>Read only.</strong>","obsolete":false},{"name":"screenY","help":"The Y coordinate of the mouse pointer in global (screen)&nbsp;coordinates. <strong>Read only.</strong>","obsolete":false},{"name":"clientX","help":"The X coordinate of the mouse pointer in local (DOM content)&nbsp;coordinates. <strong>Read only.</strong>","obsolete":false},{"name":"clientY","help":"The Y coordinate of the mouse pointer in local (DOM content)&nbsp;coordinates. <strong>Read only.</strong>","obsolete":false},{"name":"ctrlKey","help":"<code>true</code> if the control key was down when the mouse event was fired. <strong>Read only.</strong>","obsolete":false},{"name":"shiftKey","help":"<code>true</code> if the shift key was down when the mouse event was fired. <strong>Read only.</strong>","obsolete":false},{"name":"altKey","help":"<code>true</code> if the alt key was down when the mouse event was fired. <strong>Read only.</strong>","obsolete":false},{"name":"metaKey","help":"<code>true</code> if the meta key was down when the mouse event was fired. <strong>Read only.</strong>","obsolete":false},{"name":"button","help":"The button number that was pressed when the mouse event was fired:&nbsp;Left button=0, middle button=1 (if present), right button=2. For mice configured for left handed use in which the button actions are reversed the values are instead read from right to left. <strong>Read only.</strong>","obsolete":false},{"name":"relatedTarget","help":"The target to which the event applies. <strong>Read only.</strong>","obsolete":false},{"name":"webkitPressure","help":"The amount of pressure applied to a touch or tablet device when generating the event; this value ranges between 0.0 (minimum pressure)&nbsp;and 1.0 (maximum pressure). <strong>Read only.</strong>","obsolete":false}]},"HTMLUnknownElement":{"title":"Gecko DOM Referenz","summary":"<p>Dies ist die Übersichtsseite der Gecko DOM Referenz.</p>\n<div class=\"warning\">Diese Referenz ist im Moment noch sehr unvollständig. Hilf mit: registriere dich und schreib mit!</div>\n<div class=\"note\">Diese Referenz trennt zwischen Methoden und Eigenschaften die für Webinhalte verfügbar oder nur für Entwickler von Erweiterungen verfügbar sind. Erweiterungsentwickler halten sich bitte an die englische Funktionsreferenz im Mozilla Developer Center.</div>","members":[],"srcUrl":"https://developer.mozilla.org/de/Gecko-DOM-Referenz"},"XMLHttpRequestUpload":{"title":"Using XMLHttpRequest","members":[],"srcUrl":"https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest","skipped":true,"cause":"Suspect title"},"HTMLOptionsCollection":{"title":"HTMLOptionsCollection","srcUrl":"https://developer.mozilla.org/en/DOM/HTMLOptionsCollection","specification":"<li><a class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection\" target=\"_blank\">http://www.w3.org/TR/DOM-Level-2-HTM...ionsCollection</a></li> <li><a class=\" external\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/common-dom-interfaces.html#htmloptionscollection\" title=\"http://dev.w3.org/html5/spec/common-dom-interfaces.html#htmloptionscollection\" target=\"_blank\">http://dev.w3.org/html5/spec/common-...ionscollection</a></li>","seeAlso":"HTMLCollection","summary":"HTMLOptionsCollection is an interface representing a collection of HTML option elements (in document order)&nbsp;and offers methods and properties for traversing the list as well as optionally altering its items. This type is returned solely by the \"options\" property of <a title=\"En/DOM/select\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLSelectElement\">select</a>.","members":[{"name":"length","help":"As optionally allowed by the spec, Mozilla allows this property to be set, either removing options at the end when using a shorter length, or adding blank options at the end when setting a longer length. Other implementations could potentially throw a <a title=\"En/DOM/DOMException\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMException\">DOMException</a>.","obsolete":false}]},"Storage":{"title":"Storage","seeAlso":"<ul> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageConnection\">mozIStorageConnection</a></code>\n Database connection to a specific file or in-memory data storage</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageStatement\">mozIStorageStatement</a></code>\n Create and execute SQL statements on a SQLite database.</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageValueArray\">mozIStorageValueArray</a></code>\n Wraps an array of SQL values, such as a result row.</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageFunction\">mozIStorageFunction</a></code>\n Create a new SQLite function.</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageAggregateFunction\">mozIStorageAggregateFunction</a></code>\n Create a new SQLite aggregate function.</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageProgressHandler\">mozIStorageProgressHandler</a></code>\n Monitor progress during the execution of a statement.</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/mozIStorageStatementWrapper\">mozIStorageStatementWrapper</a></code>\n Storage statement wrapper</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/mozIStorageService\">mozIStorageService</a></code>\n Storage Service</li>\n</ul>\n<ul> <li><a title=\"en/Storage/Performance\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Storage/Performance\">Storage:Performance</a> How to get your database connection performing well.</li> <li><a class=\"link-https\" rel=\"external\" href=\"https://addons.mozilla.org/en-US/firefox/addon/3072\" title=\"https://addons.mozilla.org/en-US/firefox/addon/3072\" target=\"_blank\">Storage Inspector Extension</a> Makes it easy to view any sqlite database files in the current profile.</li> <li><a class=\"external\" rel=\"external\" href=\"http://www.sqlite.org/lang.html\" title=\"http://www.sqlite.org/lang.html\" target=\"_blank\">SQLite Syntax</a> Query language understood by SQLite</li> <li><a class=\"external\" rel=\"external\" href=\"http://sqlitebrowser.sourceforge.net/\" title=\"http://sqlitebrowser.sourceforge.net/\" target=\"_blank\">SQLite Database Browser</a> is a capable free tool available for many platforms. It can be handy for examining existing databases and testing SQL statements.</li> <li><a class=\"link-https\" rel=\"external\" href=\"https://addons.mozilla.org/en-US/firefox/addon/5817\" title=\"https://addons.mozilla.org/en-US/firefox/addon/5817\" target=\"_blank\">SQLite Manager Extension</a> helps manage sqlite database files on your computer.</li>\n</ul>","summary":"<p><strong>Storage</strong> is a <a class=\"external\" rel=\"external\" href=\"http://www.sqlite.org/\" title=\"http://www.sqlite.org/\" target=\"_blank\">SQLite</a> database API. It is available to trusted callers, meaning extensions and Firefox components only.</p>\n<p>The API is currently \"unfrozen\", which means it is subject to change at any time; in fact, it has changed somewhat with each release of Firefox since it was introduced, and will likely continue to do so for a while.</p>\n<div class=\"note\"><strong>Note:</strong> Storage is not the same as the <a title=\"en/DOM/Storage\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Storage\">DOM:Storage</a> feature which can be used by web pages to store persistent data or the <a title=\"en/Session_store_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Session_store_API\">Session store API</a> (an <a title=\"en/XPCOM\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPCOM\">XPCOM</a> storage utility for use by extensions).</div>","members":[],"srcUrl":"https://developer.mozilla.org/en/Storage"},"SVGFontFaceFormatElement":{"title":"SVGFontFaceFormatElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontFaceFormatElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-format\">&lt;font-face-format&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGFontFaceFormatElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-format\">&lt;font-face-format&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-format\">&lt;font-face-format&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"SVGUnitTypes":{"title":"SVGPatternElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPatternElement","skipped":true,"cause":"Suspect title"},"Attr":{"title":"Attr","summary":"<p>This type represents a DOM&nbsp;element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Element.getAttribute\">Element.getAttribute()</a></code>\n, but certain functions (e.g., <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Element.getAttributeNode\">Element.getAttributeNode()</a></code>\n)&nbsp;or means of iterating give <code>Attr</code> types.</p>\n<div class=\"warning\"><strong>Warning:</strong> In DOM Core 1, 2 and 3, Attr inherited from Node. This is no longer the case in <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/dom/\" title=\"http://www.w3.org/TR/dom/\" target=\"_blank\">DOM4</a>. In order to bring the implementation of <code>Attr</code> up to specification, work is underway to change it to no longer inherit from <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n. You should not be using any <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code>\n properties or methods on <code>Attr</code> objects. Starting in Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n, the ones that are going to be removed output warning messages to the console. You should revise your code accordingly. See <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr#Deprecated_properties_and_methods\">Deprecated properties and methods</a> for a complete list.</div>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.schemaTypeInfo","name":"schemaTypeInfo","help":"?"},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.ownerElement","name":"ownerElement","help":"This property has been deprecated and will be removed in the future. Since you can only get Attr objects from elements, you should already know th"},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.isId","name":"isId","help":"Indicates whether the attribute is an \"ID attribute\". An \"ID attribute\" being an attribute which value is expected to be unique across a DOM Document. In HTML DOM, \"id\" is the only ID attribute, but XML documents could define others. Whether or not an attribute is unique is often determined by a DTD or other schema description."},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.name","name":"name","help":"The attribute's name."},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.specified","name":"specified","help":"This property has been deprecated and will be removed in the future; it now always returns <code>true</code>."},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Attr.value","name":"value","help":"The attribute's value."}],"srcUrl":"https://developer.mozilla.org/en/DOM/Attr","specification":"<li><a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-637646024\" target=\"_blank\">Document Object Model Core level 3: Interface Attr</a></li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/dom/#interface-attr\" title=\"http://www.w3.org/TR/dom/#interface-attr\" target=\"_blank\">Document Object Model 4: Interface Attr</a></li>"},"PopStateEvent":{"title":"Manipulating the browser history","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history","skipped":true,"cause":"Suspect title"},"DocumentFragment":{"title":"DocumentFragment","summary":"<p>DocumentFragment has no properties or methods of its own, but inherits from <a title=\"En/DOM/Node\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node\"><code>Node</code></a>. </p>\n<p>A <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-B63ED1A3\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-B63ED1A3\" target=\"_blank\">DocumentFragment</a></code> is a minimal document object that has no parent. It is used as a light-weight version of document to store well-formed or potentially non-well-formed fragments of XML.</p>\n<p>See <a title=\"En/DOM/Node\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node\"><code>Node</code></a> for a listing of its properties, constants and methods.</p>\n<p>Various other methods can take a document fragment as an argument (e.g., any <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247\" target=\"_blank\">Node</a></code> interface methods such as <code><a title=\"En/DOM/Node.appendChild\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.appendChild\">appendChild</a></code> and <code><a title=\"En/DOM/Node.insertBefore\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.insertBefore\">insertBefore</a></code>), in which case the children of the fragment are appended or inserted, not the fragment itself.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/DocumentFragment","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-B63ED1A3"},"SVGAltGlyphDefElement":{"title":"altGlyphDef","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyph\">&lt;glyph&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/glyphRef\">&lt;glyphRef&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/altGlyphDef\">&lt;altGlyphDef&gt;</a></code>\n</li>","summary":"The <code>altGlyphDef</code> element defines a substitution representation for glyphs.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/altGlyphDef"},"SVGFontFaceSrcElement":{"title":"SVGFontFaceSrcElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontFaceSrcElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-src\">&lt;font-face-src&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGFontFaceSrcElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-src\">&lt;font-face-src&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-src\">&lt;font-face-src&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"SVGUseElement":{"title":"SVGUseElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGUseElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/use\">&lt;use&gt;</a></code>\n SVG Element","summary":"The <code>SVGUseElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/use\">&lt;use&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/use\">&lt;use&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/use\">&lt;use&gt;</a></code>\n element.","obsolete":false},{"name":"instanceRoot","help":"The root of the instance tree. See description of <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGElementInstance\" class=\"new\">SVGElementInstance</a></code>\n to learn more about the instance tree.","obsolete":false},{"name":"animatedInstanceRoot","help":"If the \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/xlink%3Ahref\">xlink:href</a></code> attribute is being animated, contains the current animated root of the instance tree. If the \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/xlink%3Ahref\">xlink:href</a></code> attribute is not currently being animated, contains the same value as <code>instanceRoot</code>. See description of <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGElementInstance\" class=\"new\">SVGElementInstance</a></code>\n to learn more about the instance tree.","obsolete":false}]},"SVGPathSegCurvetoCubicSmoothRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"FileWriter":{"title":"FileEntrySync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileEntrySync","skipped":true,"cause":"Suspect title"},"SVGLength":{"title":"SVGLength","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"<p>The <code>SVGLength</code> interface correspond to the <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Length\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Length\">&lt;length&gt;</a> basic data type.</p>\n<p>An <code>SVGLength</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"newValueSpecifiedUnits","help":"<p>Reset the value as a number with an associated unitType, thereby replacing the values for all of the attributes on the object.</p> <p><strong>Exceptions:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NOT_SUPPORTED_ERR</code> is raised if <code>unitType</code> is <code>SVG_LENGTHTYPE_UNKNOWN</code> or not a valid unit type constant (one of the other <code>SVG_LENGTHTYPE_*</code> constants defined on this interface).</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false},{"name":"convertToSpecifiedUnits","help":"Preserve the same underlying stored value, but reset the stored unit identifier to the given <code><em>unitType</em></code>. Object attributes <code>unitType</code>, <code>valueInSpecifiedUnits</code> and <code>valueAsString</code> might be modified as a result of this method. For example, if the original value were \"<em>0.5cm</em>\" and the method was invoked to convert to millimeters, then the <code>unitType</code> would be changed to <code>SVG_LENGTHTYPE_MM</code>, <code>valueInSpecifiedUnits</code> would be changed to the numeric value 5 and <code>valueAsString</code> would be changed to \"<em>5mm</em>\".","obsolete":false},{"name":"SVG_LENGTHTYPE_UNKNOWN","help":"The unit type is not one of predefined unit types. It is invalid to attempt to define a new value of this type or to attempt to switch an existing value to this type.","obsolete":false},{"name":"SVG_LENGTHTYPE_NUMBER","help":"No unit type was provided (i.e., a unitless value was specified), which indicates a value in user units.","obsolete":false},{"name":"SVG_LENGTHTYPE_PERCENTAGE","help":"A percentage value was specified.","obsolete":false},{"name":"SVG_LENGTHTYPE_EMS","help":"A value was specified using the em units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_EXS","help":"A value was specified using the ex units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_PX","help":"A value was specified using the px units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_CM","help":"A value was specified using the cm units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_MM","help":"A value was specified using the mm units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_IN","help":"A value was specified using the in units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_PT","help":"A value was specified using the pt units defined in CSS2.","obsolete":false},{"name":"SVG_LENGTHTYPE_PC","help":"A value was specified using the pc units defined in CSS2.","obsolete":false},{"name":"unitType","help":"The type of the value as specified by one of the SVG_LENGTHTYPE_* constants defined on this interface.","obsolete":false},{"name":"value","help":"<p>The value as a floating point value, in user units. Setting this attribute will cause <code>valueInSpecifiedUnits</code> and <code>valueAsString</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong> a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</p>","obsolete":false},{"name":"valueInSpecifiedUnits","help":"<p>The value as a floating point value, in the units expressed by <code>unitType</code>. Setting this attribute will cause <code>value</code> and <code>valueAsString</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong> a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</p>","obsolete":false},{"name":"valueAsString","help":"<p>The value as a string value, in the units expressed by <code>unitType</code>. Setting this attribute will cause <code>value</code>, <code>valueInSpecifiedUnits</code> and <code>unitType</code> to be updated automatically to reflect this setting.</p> <p><strong>Exceptions on setting:</strong></p> <ul> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>SYNTAX_ERR</code> is raised if the assigned string cannot be parsed as a valid <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Length\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Length\">&lt;length&gt;</a>.</li> <li>a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is raised when the length corresponds to a read only attribute or when the object itself is read only.</li> </ul>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGLength"},"HTMLMediaElement":{"title":"HTMLMediaElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.5 (1.9.1)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span>`</td> </tr> <tr> <td><code>buffered</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>loop</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11.0 (11.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>defaultMuted</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11.0 (11.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>seekable</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>8.0 (8.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>buffered</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>defaultMuted</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11.0 (11.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>loop</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11.0 (11.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>seekable</code> property</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>8.0 (8.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","summary":"HTML media elements (such as <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video\">&lt;video&gt;</a></code>\n) expose the <code>HTMLMediaElement</code> interface which provides special properties and methods (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of media elements.","members":[{"name":"canPlayType","help":"Determines whether the specified media type can be played back.","obsolete":false},{"name":"load","help":"Begins loading the media content from the server.","obsolete":false},{"name":"pause","help":"Pauses the media playback.","obsolete":false},{"name":"play","help":"Begins playback of the media. If you have changed the <strong>src</strong> attribute of the media element since the page was loaded, you must call load() before play(), otherwise the original media plays again.","obsolete":false},{"name":"autoplay","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-autoplay\">autoplay</a></code>\n HTML&nbsp;attribute, indicating whether to begin playing as soon as enough media is available.","obsolete":false},{"name":"buffered","help":"The ranges of the media source that the browser has buffered, if any.","obsolete":false},{"name":"controls","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-controls\">controls</a></code>\n HTML attribute, indicating whether user interface items for controlling the resource should be displayed.","obsolete":false},{"name":"currentSrc","help":"The absolute URL of the chosen media resource (if, for example, the server selects a media file based on the resolution of the user's display), or an empty string if the <code>networkState</code> is <code>EMPTY</code>.","obsolete":false},{"name":"currentTime","help":"The current playback time, in seconds.&nbsp; Setting this value seeks the media to the new time.","obsolete":false},{"name":"defaultMuted","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-muted\">muted</a></code>\n HTML attribute, indicating whether the media element's audio output should be muted by default. Changing the value dynamically will not unmute the audio (it only controls the default state).","obsolete":false},{"name":"defaultPlaybackRate","help":"The default playback rate for the media.&nbsp; The Ogg backend does not support this.&nbsp; 1.0 is \"normal speed,\" values lower than 1.0 make the media play slower than normal, higher values make it play faster.&nbsp; The value 0.0 is invalid and throws a <code>NOT_SUPPORTED_ERR</code>&nbsp;exception.","obsolete":false},{"name":"duration","help":"The length of the media in seconds, or zero if no media data is available.&nbsp; If the media data is available but the length is unknown, this value is <code>NaN</code>.&nbsp; If the media is streamed and has no predefined length, the value is <code>Inf</code>.","obsolete":false},{"name":"ended","help":"Indicates whether the media element has ended playback.","obsolete":false},{"name":"error","help":"The media error object for the most recent error, or null if there has not been an error.","obsolete":false},{"name":"loop","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-loop\">loop</a></code>\n HTML&nbsp;attribute, indicating whether the media element should start over when it reaches the end.","obsolete":false},{"name":"webkitChannels","help":"The number of channels in the audio resource (e.g., 2 for stereo). ","obsolete":false},{"name":"webkitFrameBufferLength","help":"Indicates the number of samples that will be returned in the framebuffer of each <code>MozAudioAvailable</code> event. This number is a total for all channels, and by default is set to be the number of channels * 1024 (e.g., 2 channels * 1024 samples = 2048 total).","obsolete":false},{"name":"webkitFrameBufferLength","help":"The <code>mozFrameBufferLength</code> property can be set to a new value, for lower latency, or larger amounts of data, etc. The size given <em>must</em> be a number between 512 and 16384. Using any other size results in an exception being thrown. The best time to set a new length is after the <code>loadedmetadata</code> event fires, when the audio info is known, but before the audio has started or <code>MozAudioAvailable</code> events have begun firing.","obsolete":false},{"name":"webkitSampleRate","help":"The number of samples per second that will be played, for example 44100. ","obsolete":false},{"name":"muted","help":"<code>true</code> if the audio is muted, and <code>false</code> otherwise.","obsolete":false},{"name":"networkState","help":"<p>The current state of fetching the media over the network.</p> <table class=\"standard-table\"> <tbody> <tr> <td class=\"header\">Constant</td> <td class=\"header\">Value</td> <td class=\"header\">Description</td> </tr> <tr> <td><code>EMPTY</code></td> <td>0</td> <td>There is no data yet.&nbsp; The <code>readyState</code> is also <code>HAVE_NOTHING</code>.</td> </tr> <tr> <td><code>LOADING</code></td> <td>1</td> <td>The media is loading.</td> </tr> <tr> <td><code>LOADED_METADATA</code></td> <td>2</td> <td>The media's metadata has been loaded.</td> </tr> <tr> <td><code>LOADED_FIRST_FRAME</code></td> <td>3</td> <td>The media's first frame has been loaded.</td> </tr> <tr> <td><code>LOADED</code></td> <td>4</td> <td>The media has been fully loaded.</td> </tr> </tbody> </table>","obsolete":false},{"name":"EMPTY","help":"There is no data yet.&nbsp; The <code>readyState</code> is also <code>HAVE_NOTHING</code>.","obsolete":false},{"name":"LOADING","help":"The media is loading.","obsolete":false},{"name":"LOADED_METADATA","help":"The media's metadata has been loaded.","obsolete":false},{"name":"LOADED_FIRST_FRAME","help":"The media's first frame has been loaded.","obsolete":false},{"name":"LOADED","help":"The media has been fully loaded.","obsolete":false},{"name":"paused","help":"Indicates whether the media element is paused.","obsolete":false},{"name":"playbackRate","help":"The current rate at which the media is being played back. This is used to implement user controls for fast forward, slow motion, and so forth. The normal playback rate is multiplied by this value to obtain the current rate, so a value of 1.0 indicates normal speed.&nbsp; Not supported by the Ogg backend.","obsolete":false},{"name":"played","help":"The ranges of the media source that the browser has played, if any.","obsolete":false},{"name":"preload","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-preload\">preload</a></code>\n HTML attribute, indicating what data should be preloaded at page-load time, if any.","obsolete":false},{"name":"readyState","help":"<p>The readiness state of the media:</p> <table class=\"standard-table\"> <tbody> <tr> <td class=\"header\">Constant</td> <td class=\"header\">Value</td> <td class=\"header\">Description</td> </tr> <tr> <td><code>HAVE_NOTHING</code></td> <td>0</td> <td>No information is available about the media resource.</td> </tr> <tr> <td><code>HAVE_METADATA</code></td> <td>1</td> <td>Enough of the media resource has been retrieved that the metadata attributes are initialized.&nbsp; Seeking will no longer raise an exception.</td> </tr> <tr> <td><code>HAVE_CURRENT_DATA</code></td> <td>2</td> <td>Data is available for the current playback position, but not enough to actually play more than one frame.</td> </tr> <tr> <td><code>HAVE_FUTURE_DATA</code></td> <td>3</td> <td>Data for the current playback position as well as for at least a little bit of time into the future is available (in other words, at least two frames of video, for example).</td> </tr> <tr> <td><code>HAVE_ENOUGH_DATA</code></td> <td>4</td> <td>Enough data is available—and the download rate is high enough—that the media can be played through to the end without interruption.</td> </tr> </tbody> </table>","obsolete":false},{"name":"HAVE_NOTHING","help":"No information is available about the media resource.","obsolete":false},{"name":"HAVE_METADATA","help":"Enough of the media resource has been retrieved that the metadata attributes are initialized.&nbsp; Seeking will no longer raise an exception.","obsolete":false},{"name":"HAVE_CURRENT_DATA","help":"Data is available for the current playback position, but not enough to actually play more than one frame.","obsolete":false},{"name":"HAVE_FUTURE_DATA","help":"Data for the current playback position as well as for at least a little bit of time into the future is available (in other words, at least two frames of video, for example).","obsolete":false},{"name":"HAVE_ENOUGH_DATA","help":"Enough data is available—and the download rate is high enough—that the media can be played through to the end without interruption.","obsolete":false},{"name":"seekable","help":"The time ranges that the user is able to seek to, if any.","obsolete":false},{"name":"seeking","help":"Indicates whether the media is in the process of seeking to a new position.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video#attr-src\">src</a></code>\n HTML attribute, containing the URL of a media resource to use.","obsolete":false},{"name":"startTime","help":"The earliest possible position in the media, in seconds.","obsolete":false},{"name":"volume","help":"The audio volume, from 0.0 (silent) to 1.0 (loudest).","obsolete":false},{"name":"EMPTY","help":"There is no data yet.&nbsp; The <code>readyState</code> is also <code>HAVE_NOTHING</code>.","obsolete":false},{"name":"LOADING","help":"The media is loading.","obsolete":false},{"name":"LOADED_METADATA","help":"The media's metadata has been loaded.","obsolete":false},{"name":"LOADED_FIRST_FRAME","help":"The media's first frame has been loaded.","obsolete":false},{"name":"LOADED","help":"The media has been fully loaded.","obsolete":false},{"name":"HAVE_NOTHING","help":"No information is available about the media resource.","obsolete":false},{"name":"HAVE_METADATA","help":"Enough of the media resource has been retrieved that the metadata attributes are initialized.&nbsp; Seeking will no longer raise an exception.","obsolete":false},{"name":"HAVE_CURRENT_DATA","help":"Data is available for the current playback position, but not enough to actually play more than one frame.","obsolete":false},{"name":"HAVE_FUTURE_DATA","help":"Data for the current playback position as well as for at least a little bit of time into the future is available (in other words, at least two frames of video, for example).","obsolete":false},{"name":"HAVE_ENOUGH_DATA","help":"Enough data is available—and the download rate is high enough—that the media can be played through to the end without interruption.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLMediaElement"},"SVGPathSegLinetoHorizontalAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGDocument":{"title":"Scripting","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Scripting","skipped":true,"cause":"Suspect title"},"XPathException":{"title":"Interface documentation status","members":[],"srcUrl":"https://developer.mozilla.org/User:trevorh/Interface_documentation_status","skipped":true,"cause":"Suspect title"},"SVGMissingGlyphElement":{"title":"SVGMissingGlyphElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGMissingGlyphElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/missing-glyph\">&lt;missing-glyph&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGMissingGlyphElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/missing-glyph\">&lt;missing-glyph&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/missing-glyph\">&lt;missing-glyph&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"CSSCharsetRule":{"title":"cssRule","members":[],"srcUrl":"https://developer.mozilla.org/pl/DOM/cssRule","skipped":true,"cause":"Suspect title"},"WebGLRenderingContext":{"title":"HTMLCanvasElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLCanvasElement","skipped":true,"cause":"Suspect title"},"SVGAnimateColorElement":{"title":"SVGAnimateColorElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimateColorElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animateColor\">&lt;animateColor&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimateColorElement"},"HTMLMarqueeElement":{"title":"marquee","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1.7 or earlier)\n</td> <td>2.0</td> <td>7.2</td> <td>1.2</td> </tr> <tr> <td><code>truespeed</code> attribute</td> <td><span title=\"Not supported.\">--</span></td> <td>3.0 (1.9)\n</td> <td>4.0</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>hspace/vspace</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.0 (1.9)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>loop</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>3.0 (1.9)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>truespeed</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>hspace/vspace</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> <tr> <td><code>loop</code> attribute</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>1.0 (1.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","examples":["  &lt;marquee&gt;This text will scroll from right to left&lt;/marquee&gt;\n\n  &lt;marquee direction=\"up\"&gt;This text will scroll from bottom to top&lt;/marquee&gt;\n\n  &lt;marquee direction=\"down\" width=\"250\" height=\"200\" behavior=\"alternate\" style=\"border:solid\"&gt;\n    &lt;marquee behavior=\"alternate\"&gt;\n      This text will bounce\n    &lt;/marquee&gt;\n  &lt;/marquee&gt;\n"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/marquee","summary":"Non-standard","members":[{"name":"stop","help":"Stops scrolling of the marquee.","obsolete":false},{"name":"start","help":"Starts scrolling of the marquee.","obsolete":false},{"obsolete":false,"url":"","name":"truespeed","help":"By default,<code> scrolldelay </code>values lower than 60 are ignored. If<code> truespeed </code>is present, those values are not ignored."},{"obsolete":false,"url":"","name":"vspace","help":"Sets the vertical margin in pixels or percentage value."},{"obsolete":false,"url":"","name":"bgcolor","help":"Sets the background color through color name or hexadecimal value."},{"obsolete":false,"url":"","name":"scrollamount","help":"Sets the amount of scrolling at each interval in pixels. The default value is 6."},{"obsolete":false,"url":"","name":"height","help":"Sets the height in pixels or percentage value."},{"obsolete":false,"url":"","name":"loop","help":"Sets the number of times the marquee will scroll. If no value is specified, the default value is −1, which means the marquee will scroll continuously."},{"obsolete":false,"url":"","name":"width","help":"Sets the width in pixels or percentage value."},{"obsolete":false,"url":"","name":"direction","help":"Sets the direction of the scrolling within the marquee. Possible values are <code>left</code>, <code>right</code>, <code>up</code> and <code>down</code>. If no value is specified, the default value is <code>left</code>."},{"obsolete":false,"url":"","name":"behavior","help":"Sets how the text is scrolled within the marquee. Possible values are <code>scroll</code>, <code>slide</code> and <code>alternate</code>. If no value is specified, the default value is <code>scroll</code>."},{"obsolete":false,"url":"","name":"hspace","help":"Sets the horizontal margin"},{"obsolete":false,"url":"","name":"scrolldelay","help":"Sets the interval between each scroll movement in milliseconds. The default value is 85. Note that any value smaller than 60 is ignored and the value 60 is used instead, unless<code> truespeed </code>is specified."}]},"FileList":{"title":"FileList","examples":["<p>This example iterates over all the files selected by the user using an <code>input</code> element:</p>\n<pre class=\"eval\">// fileInput is an HTML&nbsp;input element: &lt;input type=\"file\" id=\"myfileinput\" multiple&gt;\nvar fileInput = document.getElementById(\"myfileinput\");\n\n// files is a FileList object (similar to NodeList)\nvar files = fileInput.files;\nvar file;\n\n// loop trough files\nfor (var i = 0; i &lt; files.length; i++) {\n\n    // get item\n    file = files.item(i);\n    //or\n    file = files[i];\n\n    alert(file.name);\n}</pre>"],"srcUrl":"https://developer.mozilla.org/en/DOM/FileList","specification":"<a title=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/number-state.html#concept-input-type-file-selected\" class=\" external\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/number-state.html#concept-input-type-file-selected\" target=\"_blank\">File upload state</a> (HTML&nbsp;5 working draft)","summary":"<p>An object of this type is returned by the <code>files</code> property of the HTML&nbsp;input element; this lets you access the list of files selected with the <code>&lt;input type=\"file\"&gt;</code> element. It's also used for a list of files dropped into web content when using the drag and drop API; see the <a title=\"En/DragDrop/DataTransfer\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DragDrop/DataTransfer\"><code>DataTransfer</code></a> object for details on this usage.</p>\n<p>\n\n</p><div><p>Gecko 1.9.2 note</p><p>Prior to Gecko 1.9.2, the input element only supported a single file being selected at a time, meaning that the FileList would contain only one file. Starting with Gecko 1.9.2, if the input element's multiple attribute is true, the FileList may contain multiple files.</p></div>","members":[{"name":"item","help":"<p>Returns a <a title=\"en/DOM/File\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File\"><code>File</code></a> object representing the file at the specified index in the file list.</p>\n\n<div id=\"section_6\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>index</code></dt> <dd>The zero-based index of the file to retrieve from the list.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>The <a title=\"en/DOM/File\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File\"><code>File</code></a> representing the requested file.</p>\n</div>","idl":"<pre class=\"eval\"> File item(\n   index\n );\n</pre>","obsolete":false},{"name":"length","help":"A read-only value indicating the number of files in the list.","obsolete":false},{"name":"length","help":"A read-only value indicating the number of files in the list.","obsolete":false}]},"SVGVKernElement":{"title":"SVGVKernElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGVKernElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/vkern\">&lt;vkern&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGVKernElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/vkern\">&lt;vkern&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/vkern\">&lt;vkern&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"CSSValueList":{"title":"Interface documentation status","members":[],"srcUrl":"https://developer.mozilla.org/User:trevorh/Interface_documentation_status","skipped":true,"cause":"Suspect title"},"SVGAnimateTransformElement":{"title":"SVGAnimateTransformElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimateTransformElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animateTransform\">&lt;animateTransform&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimateTransformElement"},"Float32Array":{"title":"Float32Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Float32Array</code> type represents an array of 32-bit floating point numbers (corresponding to the C <code>float</code> data type).</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Float32Array <a title=\"en/JavaScript typed arrays/Float32Array#Float32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array#Float32Array()\">Float32Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Float32Array </code><code><a title=\"en/JavaScript typed arrays/Float32Array#Float32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array#Float32Array%28%29\">Float32Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Float32Array </code><code><a title=\"en/JavaScript typed arrays/Float32Array#Float32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array#Float32Array%28%29\">Float32Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Float32Array </code><code><a title=\"en/JavaScript typed arrays/Float32Array#Float32Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array#Float32Array%28%29\">Float32Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Float32Array</code> object.</p>\n<pre>Float32Array Float32Array(\n&nbsp; unsigned long length\n);\n\nFloat32Array Float32Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nFloat32Array Float32Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nFloat32Array Float32Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <span>Uint8</span><code>Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 32-bit floating point number before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Float32Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Float32Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Float32Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Float32Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Float32Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Float32Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Float32Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Float32Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"ArrayBufferView":{"title":"ArrayBufferView","seeAlso":"<li><a title=\"en/JavaScript typed arrays/DataView\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/DataView\"><code>DataView</code></a></li> <li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>ArrayBufferView</code> type describes a particular view on the contents of an <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>'s data.</p>\n<p>Of note is that you may create multiple views into the same buffer, each looking at the buffer's contents starting at a particular offset. This makes it possible to set up views of different data types to read the contents of a buffer based on the types of data at specific offsets into the buffer.</p>\n<div class=\"note\"><strong>Note:</strong> Typically, you'll instantiate one of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">subclasses</a> of this object instead of this base class. Those provide access to the data formatted using specific data types.</div>","members":[{"name":"buffer","help":"The buffer this view references. <strong>Read only.</strong>","obsolete":false},{"name":"byteLength","help":"The length, in bytes, of the view. <strong>Read only.</strong>","obsolete":false},{"name":"byteOffset","help":"The offset, in bytes, to the first byte of the view within the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView"},"HTMLTableColElement":{"title":"HTMLTableColElement","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/col\">&lt;col&gt;</a></code>\n HTML&nbsp;element</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/colgroup\">&lt;colgroup&gt;</a></code>\n&nbsp;HTML element</li>","summary":"DOM table column objects (which may correspond to <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/col\">&lt;col&gt;</a></code>\n&nbsp;or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/colgroup\">&lt;colgroup&gt;</a></code>\n HTML elements) expose the <a target=\"_blank\" href=\"http://www.w3.org/TR/html5/tabular-data.html#htmltablecolelement\" rel=\"external nofollow\" class=\" external\" title=\"http://www.w3.org/TR/html5/tabular-data.html#htmltablecolelement\">HTMLTableColElement</a> (or <span><a href=\"https://developer.mozilla.org/en/HTML\" rel=\"custom nofollow\">HTML 4</a></span> <a target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-84150186\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-84150186\" rel=\"external nofollow\" class=\" external\"><code>HTMLTableColElement</code></a>) interface, which provides special properties (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating table column elements.","members":[{"name":"align","help":"Indicates the horizontal alignment of the cell data in the column.","obsolete":true},{"name":"ch","help":"Alignment character for cell data.","obsolete":true},{"name":"chOff","help":"Offset for the alignment character.","obsolete":true},{"name":"span","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/col#attr-span\">span</a></code>\n HTML&nbsp;attribute, indicating the number of columns to apply this object's attributes to. Must be a positive integer.","obsolete":false},{"name":"vAlign","help":"Indicates the vertical alignment of the cell data in the column.","obsolete":true},{"name":"width","help":"Default column width.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTableColElement"},"SVGCursorElement":{"title":"SVGCursorElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGCursorElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/cursor\">&lt;cursor&gt;</a></code>\n SVG Element","summary":"The <code>SVGCursorElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/cursor\">&lt;cursor&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[]},"XPathNSResolver":{"title":"document.createNSResolver","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/document.createNSResolver","skipped":true,"cause":"Suspect title"},"SVGTransformable":{"title":"SVGTransformable","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"Interface <code>SVGTransformable</code> contains properties and methods that apply to all elements which have attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code>.","members":[{"name":"transform","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/transform\">transform</a></code> on the given element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGTransformable"},"IDBDatabase":{"title":"IDBDatabase","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12\n<span title=\"prefix\">webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>setVersion</code></td> <td>12\n<span title=\"prefix\">webkit</span></td> <td>From 4.0 (2.0)\n to 9.0 (9.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td>2-parameter <code>open</code></td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<h4 class=\"editable\">Example</h4>\n<p>In the following code snippet, we open a database asynchronously and make a request.&nbsp;&nbsp;Because the specification is still evolving, Chrome and Firefox put prefixes in the methods.&nbsp;Chrome uses the <code>webkit</code>&nbsp;prefix while Firefox uses the <code>moz</code>&nbsp;prefix.&nbsp;Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nif ('webkitIndexedDB' in window) {\n   window.indexedDB = window.webkitIndexedDB;\n   window.IDBTransaction = window.webkitIDBTransaction;\n} else if ('mozIndexedDB' in window) {\n   window.indexedDB = window.mozIndexedDB;\n}\n\n//Open a connection to the database with the name \"creatures\" \n//with the empty string as its version.  \n\nvar creatures = {};\ncreatures.indexedDB = {};\n\ncreatures.indexedDB.open = function() {\n  var request = indexedDB.open(\"creatures\");\n\n  //The open request isn't executed yet, but an IDBRequest object is returned. \n  //Create listeners to the IDBRequest. \n  \n  //If the version of the db changes, the onupgradeneeded callback is executed.\n  request.onupgradeneeded = function(event) {\n    // event.target.trans is a CHANGE_VERSION transaction\n    \n    // create an object store called \"swamp\"\n    // and define an optional parameter object, the \"terrorizedPopulace\" keyPath.        \n    // The keyPath must be what makes an object unique and every object must have it.  \n    // If every creature had a unique identification number, that would also be a good keyPath. \n        \n    var datastore = db.createObjectStore(\"swamp\",\n       {keyPath: \"terrorizedPopulace\"});\n  }\n  \n  //If the open request is successful, the onsuccess callback is executed. \n  request.onsuccess = function(event) {\n    creatures.indexedDB.db = event.target.result;     \n    creatures.indexedDB.getAllSwampCreatures();\n  };\n\n  request.onerror = creatures.indexedDB.onerror;\n}</pre>","<h4 class=\"editable\">Example</h4>\n<p>In the following code snippet, we open a database asynchronously and make a request.&nbsp;&nbsp;Because the specification is still evolving, Chrome and Firefox put prefixes in the methods.&nbsp;Chrome uses the <code>webkit</code>&nbsp;prefix while Firefox uses the <code>moz</code>&nbsp;prefix.&nbsp;Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nif ('webkitIndexedDB' in window) {\n   window.indexedDB = window.webkitIndexedDB;\n   window.IDBTransaction = window.webkitIDBTransaction;\n} else if ('mozIndexedDB' in window) {\n   window.indexedDB = window.mozIndexedDB;\n}\n\n//Open a connection to the database with the name \"creatures\" \n//with the empty string as its version.  \n\nvar creatures = {};\ncreatures.indexedDB = {};\n\ncreatures.indexedDB.open = function() {\n  var request = indexedDB.open(\"creatures\");\n\n  //The open request isn't executed yet, but an IDBRequest object is returned. \n  //Create listeners to the IDBRequest. \n  \n  //If the version of the db changes, the onupgradeneeded callback is executed.\n  request.onupgradeneeded = function(event) {\n    // event.target.trans is a CHANGE_VERSION transaction\n    \n    // create an object store called \"swamp\"\n    // and define an optional parameter object, the \"terrorizedPopulace\" keyPath.        \n    // The keyPath must be what makes an object unique and every object must have it.  \n    // If every creature had a unique identification number, that would also be a good keyPath. \n        \n    var datastore = db.createObjectStore(\"swamp\",\n       {keyPath: \"terrorizedPopulace\"});\n  }\n  \n  //If the open request is successful, the onsuccess callback is executed. \n  request.onsuccess = function(event) {\n    creatures.indexedDB.db = event.target.result;     \n    creatures.indexedDB.getAllSwampCreatures();\n  };\n\n  request.onerror = creatures.indexedDB.onerror;\n}</pre>","<h4 class=\"editable\">Example</h4>\n<p>The following is an example of how to open a read-write transaction.</p>\n\n          <pre name=\"code\" class=\"js\">//Open a transaction with a scope of data stores and a read-write mode.\nvar trans = db.transaction(['list-of-store-names'], IDBTransaction.READ_WRITE);\n\n//\"objectStore()\" is an IDBTransaction method that returns an object store \n//that has already been added to the scope of the transaction.  \nvar store = trans.objectStore('your-store-name');\nvar req = store.put(value, key); \nreq.onsuccess = ...; \nreq.onerror = ...;</pre>","<h4 class=\"editable\">Example</h4>\n<p>The following is an example of how to open a read-write transaction.</p>\n\n          <pre name=\"code\" class=\"js\">//Open a transaction with a scope of data stores and a read-write mode.\nvar trans = db.transaction(['list-of-store-names'], IDBTransaction.READ_WRITE);\n\n//\"objectStore()\" is an IDBTransaction method that returns an object store \n//that has already been added to the scope of the transaction.  \nvar store = trans.objectStore('your-store-name');\nvar req = store.put(value, key); \nreq.onsuccess = ...; \nreq.onerror = ...;</pre>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBDatabase","summary":"<p>The <code>IDBDatabase</code> interface of the IndexedDB&nbsp;API provides asynchronous access to a <a title=\"en/IndexedDB#database connection\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#database_connection\">connection to a database</a>. Use it to create, manipulate, and delete objects in that database. The interface also provides the only way to get a <a title=\"en/IndexedDB#gloss transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_transaction\">transaction</a>&nbsp;and manage versions on that database.</p>\n<p>Inherits from: <a title=\"en/DOM/EventTarget\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/EventTarget\">EventTarget</a></p>","members":[{"name":"keyPath","help":"The <a title=\"en/IndexedDB#gloss key path\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_path\">key path</a> to be used by the new object store. If empty or not specified, the object store is created without a key path and uses <a title=\"en/IndexedDB#gloss out-of-line key\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_out-of-line_key\">out-of-line keys</a>.","obsolete":false},{"name":"autoIncrement","help":"If true, the object store has a <a title=\"en/IndexedDB#gloss key generator\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_generator\">key generator</a>. Defaults to <code>false</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The method was not called from a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction callback. You must call <code>setVersion()</code> first.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#CONSTRAINT_ERR","name":"CONSTRAINT_ERR","help":"An object store with the given name (based on case-sensitive comparison) already exists in the connected database.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NON_TRANSIENT_ERR","name":"NON_TRANSIENT_ERR","help":"<code>optionalParameters</code> has attributes other than <code>keyPath</code> and <code>autoIncrement</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The method was not called from a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction callback. You must call <code>setVersion()</code> first.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR","name":"NOT_FOUND_ERR","help":"You are trying to delete an object store that does not exist. Names are case sensitive.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The error is thrown for one of two reasons: <ul> <li>The <code>close()</code> method has been called on this IDBDatabase instance.</li> <li>The object store has been deleted or removed.</li> </ul>","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR","name":"NOT_FOUND_ERR","help":"One of the object stores doesn't exist in the connected database.","obsolete":false},{"name":"deleteObjectStore","help":"<p>Destroys the object store with the given name in the connected database, along with any indexes that reference it.&nbsp;</p>\n<p>As with <code>createObjectStore()</code>, this method can be called <em>only</em> within a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction. So you must call the <code>setVersion()</code> method first before you can remove any object store or index.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the data store to delete.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<p><code>void</code></p>\n</div><div id=\"section_17\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The method was not called from a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction callback. You must call <code>setVersion()</code> first.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></td> <td>You are trying to delete an object store that does not exist. Names are case sensitive.</td> </tr> </tbody>\n</table>\n</div>","idl":"<pre>IDBRequest deleteObjectStore(\n&nbsp; in DOMString <em>name</em>\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"transaction","help":"<p>Immediately returns an <a title=\"en/IndexedDB/IDBTransaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction\">IDBTransaction</a> object, and starts a transaction in a separate thread. &nbsp;The method returns a transaction object (<a title=\"en/IndexedDB/IDBTransaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction\"><code>IDBTransaction</code></a>) containing the <a title=\"en/IndexedDB/IDBTransaction#objectStore()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#objectStore()\">objectStore()</a> method, which you can use to access your object store.&nbsp;</p>\n\n<div id=\"section_22\"><span id=\"Parameters_4\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>storeNames</dt> <dd>The names of object stores and indexes that are in the scope of the new transaction. Specify only the object stores that you need to access.</dd> <dt>mode</dt> <dd><em>Optional</em>. The types of access that can be performed in the transaction. Transactions are opened in one of three modes: <code>READ_ONLY</code>, <code>READ_WRITE</code>, and <code>VERSION_CHANGE</code>. If you don't provide the parameter, the default access mode is <code>READ_ONLY</code>. To avoid slowing things down, don't open a <code>READ_WRITE</code> transaction, unless you actually need to write into the database.</dd>\n</dl>\n</div><div id=\"section_23\"><span id=\"Sample_code\"></span><h5 class=\"editable\">Sample code</h5>\n<p>To start a transaction with the following scope, you can use the code snippets in the table. As noted earlier:</p>\n<ul> <li>Add prefixes to the methods in WebKit browsers, (that is, instead of <code>IDBTransaction.READ_ONLY</code>, use <code>webkitIDBTransaction.READ_ONLY</code>).</li> <li>The default mode is <code>READ_ONLY</code>, so you don't really have to specify it. Of course, if you need to write into the object store, you can open the transaction in the <code>READ_WRITE</code> mode.</li>\n</ul>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"185\">Scope</th> <th scope=\"col\" width=\"1018\">Code</th> </tr> <tr> <td>Single object store</td> <td> <p><code>var transaction = db.transaction(['my-store-name'], IDBTransaction.READ_ONLY); </code></p> <p>Alternatively:</p> <p><code>var transaction = db.transaction('my-store-name', IDBTransaction.READ_ONLY);</code></p> </td> </tr> <tr> <td>Multiple object stores</td> <td><code>var transaction = db.transaction(['my-store-name', 'my-store-name2'], IDBTransaction.READ_ONLY);</code></td> </tr> <tr> <td>All object stores</td> <td> <p><code>var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);</code></p> <p>You cannot pass an empty array into the storeNames parameter, such as in the following: <code>var transaction = db.transaction([], IDBTransaction.READ_ONLY);.</code></p> <div class=\"warning\"><strong>Warning:</strong>&nbsp; Accessing all obejct stores under the <code>READ_WRITE</code> mode means that you can run only that transaction. You cannot have writing transactions with overlapping scopes.</div> </td> </tr> </thead> <tbody> </tbody>\n</table>\n</div><div id=\"section_24\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBTransaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeRequest\">IDBTransaction</a></code></dt> <dd>The transaction object.</dd>\n</dl>\n</div><div id=\"section_25\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The error is thrown for one of two reasons: <ul> <li>The <code>close()</code> method has been called on this IDBDatabase instance.</li> <li>The object store has been deleted or removed.</li> </ul> </td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></td> <td>One of the object stores doesn't exist in the connected database.</td> </tr> </tbody>\n</table>\n</div>","idl":"<pre>IDBTransaction transaction(\n&nbsp; in optional any <em>storeNames</em>,\n&nbsp; in optional unsigned short <em>mode</em>&nbsp; \n) raises (IDBDatabaseException);</pre>","obsolete":false},{"name":"setVersion","help":"<div class=\"warning\"><strong>Warning:</strong> The latest draft of the specification dropped this method. Some not up-to-date browsers still implement this method. The new way is to define the version in the <code>IDBDatabase.open()</code> method and to create and delete object stores in the <code>onupdateneeded</code> event handler associated to the returned request.</div>\n<p>Updates the version of the database. Returns immediately and runs a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction on the connected database in a separate thread.</p>\n<p>Call this method before creating or deleting an object store.</p>\n\n<div id=\"section_19\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>version</dt> <dd>The version to store in the database.</dd>\n</dl>\n</div><div id=\"section_20\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeRequest\">IDBVersionChangeRequest</a></code></dt> <dd>The request to change the version of a database.</dd>\n</dl>\n</div>","idl":"<pre>IDBVersionChangeRequest setVersion(\n&nbsp; in DOMString <em>version</em>\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"createObjectStore","help":"<p>Creates and returns a new object store or index. The method takes the name of the store as well as a parameter object. The parameter object lets you define important optional properties. You can use the property to uniquely identify individual objects in the store. As the property is an identifier, it should be unique to every object, and every object should have that property.</p>\n<p>But before you can create any object store or index,&nbsp;you must first call the <code><a href=\"#setVersion()\">setVersion()</a></code><a href=\"#setVersion()\"> method</a>.</p>\n\n<div id=\"section_11\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the new object store.</dd> <dt>optionalParameters</dt> <dd> <div class=\"warning\"><strong>Warning:</strong> The latest draft of the specification changed this to <code>IDBDatabaseOptionalParameters</code>, which is not yet recognized by any browser</div> <p><em>Optional</em>. Options object whose attributes are optional parameters to the method. It includes the following properties:</p> <table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code>keyPath</code></td> <td>The <a title=\"en/IndexedDB#gloss key path\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_path\">key path</a> to be used by the new object store. If empty or not specified, the object store is created without a key path and uses <a title=\"en/IndexedDB#gloss out-of-line key\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_out-of-line_key\">out-of-line keys</a>.</td> </tr> <tr> <td><code>autoIncrement</code></td> <td>If true, the object store has a <a title=\"en/IndexedDB#gloss key generator\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_generator\">key generator</a>. Defaults to <code>false</code>.</td> </tr> </tbody> </table> <p>Unknown parameters are ignored.</p> </dd>\n</dl>\n</div><div id=\"section_12\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBObjectStore\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStore\">IDBObjectStore</a></code></dt> <dd>The newly created object store.</dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The method was not called from a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction callback. You must call <code>setVersion()</code> first.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/DatabaseException#CONSTRAINT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#CONSTRAINT_ERR\">CONSTRAINT_ERR</a></code></td> <td>An object store with the given name (based on case-sensitive comparison) already exists in the connected database.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NON_TRANSIENT_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NON_TRANSIENT_ERR\">NON_TRANSIENT_ERR</a></code></td> <td><code>optionalParameters</code> has attributes other than <code>keyPath</code> and <code>autoIncrement</code>.</td> </tr> </tbody>\n</table>\n</div>","idl":"<pre>IDBObjectStore createObjectStore(\n&nbsp; in DOMString <em>name</em>,\n&nbsp; in <code>Object <em>optionalParameters</em></code>\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"close","help":"<p>Returns immediately and closes the connection in a separate thread. The connection is not actually closed until all transactions created using this connection are complete. No new transactions can be created for this connection once this method is called. Methods that create transactions throw an exception if a closing operation is pending.</p>\n<pre>void close();\n</pre>","obsolete":false},{"url":"","name":"name","help":"Name of the connected database.","obsolete":false},{"url":"","name":"version","help":"The version of the connected database. When a database is first created, this attribute is the empty string.","obsolete":false},{"url":"","name":"objectStoreNames","help":"A list of the names of the <a title=\"en/IndexedDB#gloss object store\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_object_store\">object stores</a> currently in the connected database.","obsolete":false},{"name":"onabort","help":"","obsolete":false},{"name":"onerror","help":"","obsolete":false},{"name":"onversionchange","help":"","obsolete":false}]},"CSSRule":{"title":"CSSRule","srcUrl":"https://developer.mozilla.org/en/DOM/cssRule","specification":"<li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\" title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\" target=\"_blank\">DOM Level 2 CSS: CSSRule</a></li> <li><a class=\" external\" title=\"http://dev.w3.org/csswg/cssom/#css-rules\" rel=\"external\" href=\"http://dev.w3.org/csswg/cssom/#css-rules\" target=\"_blank\">CSS Object Model: CSS Rules</a></li>","seeAlso":"Using dynamic styling information","summary":"<p>An object implementing the <code>CSSRule</code> DOM interface represents a single CSS rule. References to a <code>CSSRule</code>-implementing object may be obtained by looking at a <a title=\"en/DOM/stylesheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSStyleSheet\">CSS style sheet's</a> <code><a title=\"en/DOM/CSSStyleSheet/cssRules\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSStyleSheet\">cssRules</a></code> list.</p>\n<p>There are several kinds of rules. The <code>CSSRule</code> interface specifies the properties common to all rules, while properties unique to specific rule types are specified in the more specialized interfaces for those rules' respective types.</p>","members":[{"name":"STYLE_RULE","help":"","obsolete":false},{"name":"MEDIA_RULE","help":"","obsolete":false},{"name":"FONT_FACE_RULE","help":"","obsolete":false},{"name":"PAGE_RULE","help":"","obsolete":false},{"name":"IMPORT_RULE","help":"","obsolete":false},{"name":"CHARSET_RULE","help":"","obsolete":false},{"name":"UNKNOWN_RULE","help":"","obsolete":false},{"name":"KEYFRAMES_RULE","help":"","obsolete":false},{"name":"KEYFRAME_RULE","help":"","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/cssRule/parentRule","name":"parentRule","help":"Returns the containing rule, otherwise <code>null</code>. E.g. if this rule is a style rule inside an <code><a title=\"en/CSS/@media\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/@media\">@media</a></code> block, the parent rule would be that <code><a title=\"en/DOM/CSSMediaRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSMediaRule\">CSSMediaRule</a></code>."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSRule/parentStyleSheet","name":"parentStyleSheet","help":"Returns the <code><a title=\"en/DOM/CSSStyleSheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSStyleSheet\">CSSStyleSheet</a></code> object for the style sheet that contains this rule"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSRule/cssText","name":"cssText","help":"Returns the textual representation of the rule, e.g. <code>\"h1,h2 { font-size: 16pt }\"</code>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/cssRule/type","name":"type","help":"One of the <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/cssRule#Type_constants\">Type constants</a>&nbsp;indicating the type of CSS&nbsp;rule."}]},"DOMSelection":{"title":"Selection","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.getSelection\">window.getSelection</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document.getSelection\">document.getSelection</a></code>\n, <a title=\"en/dom/Range\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/range\">Range</a>","summary":"<p>Selection is the class of the object returned by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.getSelection\">window.getSelection()</a></code>\n and other methods. It represents the text selection in the greater page, possibly spanning multiple elements, when the user drags over static text and other parts of the page. For information about text selection in an individual text editing element, see <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLInputElement\">Input</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTextAreaElement\">TextArea</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document.activeElement\">document.activeElement</a></code>\n which typically return the parent object returned from <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.getSelection\">window.getSelection()</a></code>\n.</p>\n<p>A selection object represents the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/range\">ranges</a></code>\n that the user has selected. Typically, it holds only one range, accessed as follows:</p>\n\n          <pre name=\"code\" class=\"js\">var selObj = window.getSelection();\nvar range  = selObj.getRangeAt(0);</pre>\n        \n<ul> <li><code>selObj</code> is a Selection object</li> <li><code>range</code> is a <a title=\"en/DOM/Range\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/range\">Range</a> object</li>\n</ul>\n<p>Calling the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Selection/toString\">Selection/toString()</a></code>\n method returns the text contained in the selection, e.g</p>\n\n          <pre name=\"code\" class=\"js\">var selObj = window.getSelection();\nwindow.alert(selObj);</pre>\n        \n<p>Note that using a selection object as the argument to <code>window.alert</code> will call the object's <code>toString</code> method.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/selectAllChildren","name":"selectAllChildren","help":"Adds all the children of the specified node to the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/removeRange","name":"removeRange","help":"Removes a range from the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/extend","name":"extend","help":"Moves the focus of the selection to a specified point."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/modify","name":"modify","help":"Changes the current selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/addRange","name":"addRange","help":"A range object that will be added to the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/collapseToStart","name":"collapseToStart","help":"Collapses the selection to the start of the first range in the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/collapseToEnd","name":"collapseToEnd","help":"Collapses the selection to the end of the last range in the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/toString","name":"toString","help":"Returns a string currently being represented by the selection object, i.e. the currently selected text."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange","name":"selectionLanguageChange","help":"Modifies the cursor Bidi level after a change in keyboard direction."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/getRangeAt","name":"getRangeAt","help":"Returns a range object representing one of the ranges currently selected."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/collapse","name":"collapse","help":"Collapses the current selection to a single point."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/removeAllRanges","name":"removeAllRanges","help":"Removes all ranges from the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/deleteFromDocument","name":"deleteFromDocument","help":"Deletes the selection's content from the document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/containsNode","name":"containsNode","help":"Indicates if a certain node is part of the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/focusOffset","name":"focusOffset","help":"Returns the number of characters that the selection's focus is offset within the focusNode."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/rangeCount","name":"rangeCount","help":"Returns the number of ranges in the selection."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/anchorNode","name":"anchorNode","help":"Returns the node in which the selection begins."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/anchorOffset","name":"anchorOffset","help":"Returns the number of characters that the selection's anchor is offset within the anchorNode."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/isCollapsed","name":"isCollapsed","help":"Returns a Boolean indicating whether the selection's start and end points are at the same position."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Selection/focusNode","name":"focusNode","help":"Returns the node in which the selection ends."}],"srcUrl":"https://developer.mozilla.org/en/DOM/Selection"},"SVGPathSegArcRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"CSSStyleRule":{"title":"CSSStyleRule","seeAlso":"CSSRule","summary":"An object representing a single CSS style rule. <code>CSSStyleRule</code> implements the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/CSSRule\">CSSRule</a></code>\n interface.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSStyleRule/selectorText","name":"selectorText","help":"Gets/sets the textual representation of the selector for this rule, e.g. <code>\"h1,h2\"</code>."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSStyleRule/style","name":"style","help":"Returns the <code><a title=\"en/DOM/CSSStyleDeclaration\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSStyleDeclaration\">CSSStyleDeclaration</a></code> object for the rule. <strong>Read only.</strong>"}],"srcUrl":"https://developer.mozilla.org/en/DOM/CSSStyleRule"},"Blob":{"title":"Blob","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>5 \n<span title=\"prefix\">webkit</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span>\n<span title=\"prefix\">moz</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/Blob","seeAlso":"<li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/FileAPI/#dfn-Blob\">File API Specification: Blob</a><span title=\"Working Draft\">WD</span></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/BlobBuilder\">BlobBuilder</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest/FormData\">FormData</a></code>\n</li>","summary":"<div><p><strong>This is an experimental feature</strong><br>Because this feature is still in development in some browsers, check the <a href=\"#AutoCompatibilityTable\">compatibility table</a> for the proper prefixes to use in various browsers.</p></div>\n<p></p>\n<p>A <code>Blob</code> object represents a file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n interface is based on <code>Blob</code>, inheriting blob functionality and expanding it to support files on the user's system.</p>\n<p>An easy way to construct a <code>Blob</code> is by using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/BlobBuilder\">BlobBuilder</a></code>\n interface, which lets you iteratively append data to a blob, then retrieve the completed blob when you're ready to use it for something. Another way is to use the <code>slice()</code> method to create a blob that contains a subset of another blob's data.</p>\n<div class=\"note\"><strong>Note:</strong> The <code>slice()</code> method has vendor prefixes: <code>blob.mozSlice()</code> for Firefox and <code>blob.webkitSlice()</code> for Chrome. An old version of the <code>slice()</code> method, without vendor prefixes, had different semantics, as described below.</div>","members":[{"name":"size","help":"The size, in bytes, of the data contained in the <code>Blob</code> object. <strong>Read only.</strong>","obsolete":false},{"name":"type","help":"An ASCII-encoded string, in all lower case, indicating the MIME&nbsp;type of the data contained in the <code>Blob</code>. If the type is unknown, this string is empty. <strong>Read only.</strong>","obsolete":false}]},"HTMLHRElement":{"title":"HTMLHRElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/hr\">&lt;hr&gt;</a></code>\n HTML&nbsp;element","summary":"DOM <code>hr</code> elements expose the <a target=\"_blank\" rel=\"external nofollow\" class=\" external\" title=\"http://www.w3.org/TR/html5/grouping-content.html#htmlhrelement\" href=\"http://www.w3.org/TR/html5/grouping-content.html#htmlhrelement\">HTMLHRElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-68228811\" rel=\"external nofollow\" class=\" external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-68228811\"><code>HTMLHRElement</code></a>) interface, which provides special properties (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating <code>hr</code> elements. In <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML 5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"align","help":"Enumerated attribute indicating alignment of the rule with respect to the surrounding context.","obsolete":true},{"name":"noshade","help":"Sets the rule to have no shading.","obsolete":true},{"name":"size","help":"The height of the rule.","obsolete":true},{"name":"width","help":"The width of the rule on the page.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLHRElement"},"DirectoryReader":{"title":"DirectoryReader","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>`DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>DirectoryReader</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> lets a user list files and directories in a directory.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryReader"},"WebKitBlobBuilder":{"title":"BlobBuilder","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td> <p>8</p> <p>As <code>WebKitBlobBuilder</code>.</p> </td> <td> <p>6.0 (6.0)\n</p> <p>As <code>MozBlobBuilder</code>.</p> </td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td> <p>\n<em>Nightly build</em></p> <p>As <code>WebKitBlobBuilder</code>.</p> </td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td> <p>6.0 (6.0)\n</p> <p>As <code>MozBlobBuilder</code>.</p> </td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/BlobBuilder","seeAlso":"<li>\n<a rel=\"custom\" href=\"http://dev.w3.org/2009/dap/file-system/file-writer.html#idl-def-BlobBuilder\">File API Specification: BlobBuilder</a><span title=\"Working Draft\">WD</span></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n</li>","summary":"<div><p><strong>This is an experimental feature</strong><br>Because this feature is still in development in some browsers, check the <a href=\"#AutoCompatibilityTable\">compatibility table</a> for the proper prefixes to use in various browsers.</p></div>\n<p></p>\n<p>The <code>BlobBuilder</code> interface provides an easy way to construct <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n objects. Just create a <code>BlobBuilder</code> and append chunks of data to it by calling the  method. When you're done building your blob, call  to retrieve a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n containing the data you sent into the blob builder.</p>","members":[{"name":"getBlob","help":"<p>Returns the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n object that has been constructed using the data passed through calls to .</p>\n\n<div id=\"section_6\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt>contentType \n<span title=\"\">Optional</span>\n</dt> <dd>The MIME type of the data to be returned in the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n. This will be the value of the <code>Blob</code> object's type property.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n object containing all of the data passed to any calls to &nbsp;made since the <code>BlobBuilder</code> was created. This also resets the BlobBuilder so that the next call to &nbsp;is starting a new, empty blob.</p>\n</div>","idl":"<pre class=\"eval\">Blob getBlob(\n&nbsp; in DOMString contentType \n<span style=\"border: 1px solid #9ED2A4; background-color: #C0FFC7; font-size: x-small; white-space: nowrap; padding: 2px;\" title=\"\">Optional</span>\n\n); \n</pre>","obsolete":false},{"name":"append","help":"<p>Appends the contents of the specified JavaScript object to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n being built. If the value you specify isn't a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n, <a title=\"en/JavaScript typed arrays/Arraybuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>, or <a title=\"en/JavaScript/Reference/Global Objects/String\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String\"><code>String</code></a>, the value is coerced to a string before being appended to the blob.</p>\n<pre>void append(\n&nbsp; in ArrayBuffer data\n};\n\nvoid append(\n&nbsp; in Blob data\n};\n\n\nvoid append(\n&nbsp; in String data,\n  [optional] in String endings\n};\n</pre>\n<div id=\"section_4\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>data</code></dt> <dd>The data to append to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n being constructed.</dd> <dt><code>endings</code></dt> <dd>Specifies how strings containing <code>\\n</code> are to be written out. This can be <code>\"transparent\"</code> (endings unchanged) or <code>\"native\"</code> (endings changed to match host OS filesystem convention). The default value is <code>\"transparent\"</code>.</dd>\n</dl>\n</div>","obsolete":false}]},"HTMLParamElement":{"title":"param","examples":["Please see the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object\">&lt;object&gt;</a></code>\n page for examples on &lt;param&gt;."],"summary":"<strong>Parameter </strong>element which defines parameters for <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object\">&lt;object&gt;</a></code>\n.","members":[{"obsolete":false,"url":"","name":"valuetype","help":"<p>Specifies the type of the <code>value</code> attribute. Possible values are:</p> <ul> <li>data: Default value. The value is passed to the object's implementation as a string.</li> <li>ref: The value is a URI to a resource where run-time values are stored.</li> <li>object: An ID of another <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/object\">&lt;object&gt;</a></code>\n in the same document.</li> </ul>"},{"obsolete":false,"url":"","name":"name","help":"Name of the parameter."},{"obsolete":false,"url":"","name":"type","help":"Only used if the <code>valuetype</code> is set to \"ref\". Specifies the type of values found at the URI specified by value."},{"obsolete":false,"url":"","name":"value","help":"Value of the parameter."}],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/param"},"SVGMetadataElement":{"title":"metadata","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> \n<tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n8.0</td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","summary":"Metadata is structured data about data. Metadata which is included with SVG content should be specified within <code>metadata</code> elements. The contents of the <code>metadata</code> should be elements from other XML namespaces such as RDF, FOAF, etc.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/metadata"},"Notification":{"title":"notification","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/navigator.mozNotification\">navigator.mozNotification</a></code>\n</li> <li><a title=\"en/DOM/Displaying notifications\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Displaying_notifications\">Displaying notifications</a></li>","summary":"<div class=\"geckoMinversionHeaderTemplate\"><p>Mobile Only in Gecko 2.0</p><p>Available only in Firefox Mobile as of Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n</p></div>\n\n<div><p>Non-standard</p></div><p></p>\n<p>The notification object, which you create using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/navigator.mozNotification\">navigator.mozNotification</a></code>\n&nbsp;object's <code>createNotification()</code>&nbsp;method, is used to configure and display desktop notifications to the user.</p>","members":[{"name":"show","help":"Displays the notification.","idl":"<pre class=\"eval\">void show();\n</pre>","obsolete":false},{"name":"onclick","help":"&nbsp;A function to call when the notification is clicked.","obsolete":false},{"name":"onclose","help":"&nbsp;A function to call when the notification is dismissed.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/notification"},"HTMLTitleElement":{"title":"HTMLTitleElement","summary":"The <code>title</code> object exposes the <a target=\"_blank\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-79243169\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-79243169\">HTMLTitleElement</a> interface which contains the title for a document.&nbsp; This element inherits all of the properties and methods described in the <a title=\"en/DOM/element\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/title.text","name":"text","help":"Gets or sets the text content of the document's title."}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTitleElement"},"Performance":{"title":"Performance","summary":"The articles linked to from here will help you improve performance, whether you're developing core Mozilla code or an add-on.","members":[],"srcUrl":"https://developer.mozilla.org/en/Performance"},"MessagePort":{"title":"nsIWorkerMessagePort","seeAlso":"<li><a class=\"internal\" title=\"En/Using DOM workers\" rel=\"internal\" href=\"https://developer.mozilla.org/En/Using_web_workers\">Using web workers</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWorkerMessageEvent\">nsIWorkerMessageEvent</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWorkerGlobalScope\">nsIWorkerGlobalScope</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWorkerScope\">nsIWorkerScope</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIAbstractWorker\">nsIAbstractWorker</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIWorker\">nsIWorker</a></code>\n</li>","summary":"<div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/threads/nsIDOMWorkers.idl\"><code>dom/interfaces/threads/nsIDOMWorkers.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>This interface represents a worker thread's message port, which is used to allow the worker to post messages back to its creator.</span><div><div>1.0</div><div>11.0</div><div></div><div>Introduced</div><div>Gecko 1.9.1</div><div title=\"Introduced in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\"></div><div title=\"Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\"></div></div>\n<div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports\">nsISupports</a></code>\n<span>Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n</span></div>","members":[{"name":"postMessage","help":"<p>Posts a message into the event queue.</p>\n\n<div id=\"section_4\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aMessage</code></dt> <dd>The message to post.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\"> void postMessage(\n   in DOMString aMessage\n );\n</pre>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/NsIWorkerMessagePort"},"HTMLHeadingElement":{"title":"HTMLHeadingElement","seeAlso":"HTML&nbsp;Heading elements","summary":"DOM heading elements expose the <a title=\"http://www.w3.org/TR/html5/sections.html#htmlheadingelement\" class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/html5/sections.html#htmlheadingelement\" target=\"_blank\">HTMLHeadingElement</a> (or <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external nofollow\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-43345119\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-43345119\" target=\"_blank\"><code>HTMLHeadingElement</code></a>) interface. In <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML 5</a></span>, this interface inherits from HTMLElement, but defines no additional members, though in <span><a rel=\"custom nofollow\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> it introduces the deprecated <code>align</code> property.","members":[{"name":"align","help":"Enumerated attribute indicating alignment of the heading with respect to the surrounding context.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLHeadingElement"},"SVGFontFaceElement":{"title":"SVGFontFaceElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontFaceElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face\">&lt;font-face&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGFontFaceElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face\">&lt;font-face&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face\">&lt;font-face&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"SVGExternalResourcesRequired":{"title":"SVGImageElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGImageElement","skipped":true,"cause":"Suspect title"},"WebKitAnimationEvent":{"title":"AnimationEvent","srcUrl":"https://developer.mozilla.org/en/DOM/event/AnimationEvent","specification":"<a rel=\"custom\" href=\"http://www.w3.org/TR/css3-animations/#animation-events-\">CSS Animations Module Level 3: Animation Events</a><span title=\"Working Draft\">WD</span>","seeAlso":"<li><a rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/CSS_animations\" title=\"en/CSS/CSS_animations\">CSS animations</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation\">animation</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-delay\">animation-delay</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-direction\">animation-direction</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-duration\">animation-duration</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-fill-mode\">animation-fill-mode</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-iteration-count\">animation-iteration-count</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-name\">animation-name</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-play-state\">animation-play-state</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/animation-timing-function\">animation-timing-function</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/@keyframes\">@keyframes</a></code>\n</li>","summary":"<code>AnimationEvent</code> objects provide information about events that occur related to <a rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/CSS_animations\" title=\"en/CSS/CSS_animations\">CSS animations</a>.","members":[{"name":"animationName","help":"The name of the animation on which the animation event occurred.","obsolete":false},{"name":"elapsedTime","help":"The amount of time, in seconds, the animation had been running at the time the event occurred.","obsolete":false}]},"HTMLBodyElement":{"title":"HTMLBodyElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body\">&lt;body&gt;</a></code>\n HTML&nbsp;element","summary":"DOM body elements expose the <a href=\"http://www.w3.org/TR/html5/sections.html#the-body-element\" target=\"_blank\" rel=\"external nofollow\" class=\" external\" title=\"http://www.w3.org/TR/html5/sections.html#the-body-element\">HTMLBodyElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-48250443\" target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-48250443\" rel=\"external nofollow\" class=\" external\"><code>HTMLBodyElement</code></a>) interface, which provides special properties (beyond the regular <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n object interface they also have available to them by inheritance) for manipulating body elements.","members":[{"name":"aLink","help":"Color of active hyperlinks.","obsolete":true},{"name":"background","help":"<p>URI for a background image resource.</p> <div class=\"note\"><strong>Note:</strong> Starting in Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n, this value is no longer resolved as a URI; instead, it's treated as a simple string.</div>","obsolete":true},{"name":"bgColor","help":"Background color for the document.","obsolete":true},{"name":"link","help":"Color of unvisited links.","obsolete":true},{"name":"onafterprint","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onafterprint\">onafterprint</a></code>\n HTML&nbsp;attribute value for a function to call after the user has printed the document.","obsolete":false},{"name":"onbeforeprint","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onbeforeprint\">onbeforeprint</a></code>\n HTML&nbsp;attribute value for a function to call when the user has requested printing the document.","obsolete":false},{"name":"onbeforeunload","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onbeforeunload\">onbeforeunload</a></code>\n HTML&nbsp;attribute value for a function to call when the document is about to be unloaded.","obsolete":false},{"name":"onblur","help":"<p>Exposes the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.onblur\">window.onblur</a></code>\n event handler to call when the window loses focus.</p> <div class=\"note\"><strong>Note:</strong> This handler is triggered when the event reaches the window, not the body element. Use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.addEventListener\">addEventListener()</a></code>\n to attach an event listener to the body element.</div>","obsolete":false},{"name":"onerror","help":"<p>Exposes the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.onerror\">window.onerror</a></code>\n event handler to call when the document fails to load properly.</p> <div class=\"note\"><strong>Note:</strong> This handler is triggered when the event reaches the window, not the body element. Use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.addEventListener\">addEventListener()</a></code>\n to attach an event listener to the body element.</div>","obsolete":false},{"name":"onfocus","help":"<p>Exposes the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.onfocus\">window.onfocus</a></code>\n event handler to call when the window gains focus.</p> <div class=\"note\"><strong>Note:</strong> This handler is triggered when the event reaches the window, not the body element. Use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.addEventListener\">addEventListener()</a></code>\n to attach an event listener to the body element.</div>","obsolete":false},{"name":"onhashchange","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onhashchange\">onhashchange</a></code>\n HTML&nbsp;attribute value for a function to call when the fragment identifier in the address of the document changes.","obsolete":false},{"name":"onload","help":"<p>Exposes the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/window.onload\">window.onload</a></code>\n event handler to call when the window gains focus.</p> <div class=\"note\"><strong>Note:</strong> This handler is triggered when the event reaches the window, not the body element. Use <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.addEventListener\">addEventListener()</a></code>\n to attach an event listener to the body element.</div>","obsolete":false},{"name":"onmessage","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onmessage\">onmessage</a></code>\n HTML&nbsp;attribute value for a function to call when the document receives a message.","obsolete":false},{"name":"onoffline","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onoffline\">onoffline</a></code>\n HTML&nbsp;attribute value for a function to call when network communication fails.","obsolete":false},{"name":"ononline","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-ononline\">ononline</a></code>\n HTML&nbsp;attribute value for a function to call when network communication is restored.","obsolete":false},{"name":"onpopstate","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onpopstate\">onpopstate</a></code>\n HTML&nbsp;attribute value for a function to call when the user has navigated session history.","obsolete":false},{"name":"onredo","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onredo\">onredo</a></code>\n HTML&nbsp;attribute value for a function to call when the user has moved forward in undo transaction history.","obsolete":false},{"name":"onresize","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onresize\">onresize</a></code>\n HTML&nbsp;attribute value for a function to call when the document has been resized.","obsolete":false},{"name":"onstorage","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onpopstate\">onpopstate</a></code>\n HTML&nbsp;attribute value for a function to call when the storage area has changed.","obsolete":false},{"name":"onundo","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onundo\">onundo</a></code>\n HTML&nbsp;attribute value for a function to call when the user has moved backward in undo transaction history.","obsolete":false},{"name":"onunload","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body#attr-onunload\">onunload</a></code>\n HTML&nbsp;attribute value for a function to call when when the document is going away.","obsolete":false},{"name":"text","help":"Foreground color of text.","obsolete":true},{"name":"vLink","help":"Color of visited links.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLBodyElement"},"Uint8Array":{"title":"Uint8Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array","seeAlso":"<li><a title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" class=\" link-https\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>UInt8Array</code> type represents an array of 8-bit unsigned integers.</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Uint8Array <a title=\"en/JavaScript typed arrays/Uint8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array#Int8Array%28%29\">Uint8Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Uint8Array </code><code><a title=\"en/JavaScript typed arrays/Uint8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array#Int8Array%28%29\">Uint8Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Uint8Array </code><code><a title=\"en/JavaScript typed arrays/Uint8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array#Int8Array%28%29\">Uint8Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Uint8Array </code><code><a title=\"en/JavaScript typed arrays/Uint8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array#Int8Array%28%29\">Uint8Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new Uint8Array object.</p>\n<pre>Uint8Array Uint8Array(\n&nbsp; unsigned long length\n);\n\nUint8Array Uint8Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nUint8Array Uint8Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nUint8Array Uint8Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int32Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to an 8-bit unsigned integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Uint8Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Uint8Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Uint8Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Uint8Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Uint8Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Uint8Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the element after last element in the array to be referenced by the new <code>Uint8Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either begin or end is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div></div>","idl":"<pre>Uint8Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array; for these 8-bit values, this is the same as the size of the array in bytes. <strong>Read only.</strong>","obsolete":false}]},"NodeList":{"title":"NodeList","examples":["<p>It's possible to loop over the items in a <code>NodeList</code> using:</p>\n\n          <pre name=\"code\" class=\"js\">for (var i = 0; i &lt; myNodeList.length; ++i) {\n  var item = myNodeList[i];  // Calling myNodeList.item(i) isn't necessary in JavaScript\n}</pre>\n        \n<p>Don't be tempted to use <code><a title=\"en/Core JavaScript 1.5 Reference/Statements/for...in\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in\">for...in</a></code> or <code><a title=\"en/Core JavaScript 1.5 Reference/Statements/for each...in\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript/Reference/Statements/for_each...in\">for each...in</a></code> to enumerate the items in the list, since that will also enumerate the length and item properties of the <code>NodeList</code> and cause errors if your script assumes it only has to deal with <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n objects.</p>"],"srcUrl":"https://developer.mozilla.org/En/DOM/NodeList","specification":"DOM Level 3","summary":"NodeList objects are collections of nodes returned by <a title=\"document.getElementsByTagName\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByTagName\"><code>getElementsByTagName</code></a>, <a title=\"document.getElementsByTagNameNS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByTagNameNS\"><code>getElementsByTagNameNS</code></a>, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.childNodes\">Node.childNodes</a></code>\n, <a title=\"document.querySelectorAll\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Document.querySelectorAll\">querySelectorAll</a>, <a title=\"document.getElementsByClassName\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByClassName\"><code>getElementsByClassName</code></a>, etc.NodeList objects are collections of nodes returned by <a title=\"document.getElementsByTagName\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByTagName\"><code>getElementsByTagName</code></a>, <a title=\"document.getElementsByTagNameNS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByTagNameNS\"><code>getElementsByTagNameNS</code></a>, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.childNodes\">Node.childNodes</a></code>\n, <a title=\"document.querySelectorAll\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Document.querySelectorAll\">querySelectorAll</a>, <a title=\"document.getElementsByClassName\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.getElementsByClassName\"><code>getElementsByClassName</code></a>, etc.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/NodeList.item","name":"item","help":"Returns an item in the list by its index, or <code>null</code> if out-of-bounds. Equivalent to nodeList[idx]"},{"name":"length","help":"Reflects the number of elements in the NodeList.&nbsp;","obsolete":false}]},"DOMURL":{"title":"Drawing DOM objects into a canvas","members":[],"srcUrl":"https://developer.mozilla.org/en/HTML/Canvas/Drawing_DOM_objects_into_a_canvas","skipped":true,"cause":"Suspect title"},"FileError":{"title":"FileError","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileReader\">FileReader</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n</li> <li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/FileAPI/#FileErrorInterface\">Specification: FileAPI FileError</a><span title=\"Working Draft\">WD</span></li>","summary":"Represents an error that occurs while using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileReader\">FileReader</a></code>\n interface.","members":[{"name":"ABORT_ERR","help":"The file operation was aborted, probably due to a call to the <code>FileReader</code> <code>abort()</code>&nbsp;method.","obsolete":false},{"name":"ENCODING_ERR","help":"The file data cannot be accurately represented in a data URL.","obsolete":false},{"name":"NOT_FOUND_ERR","help":"File not found.","obsolete":false},{"name":"NOT_READABLE_ERR","help":"File could not be read.","obsolete":false},{"name":"SECURITY_ERR","help":"The file could not be accessed for security reasons.","obsolete":false},{"name":"code","help":"The <a title=\"en/nsIDOMFileError#Error codes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIDOMFileError#Error_codes\">error code</a>.","obsolete":false},{"name":"code","help":"The <a title=\"en/nsIDOMFileError#Error codes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIDOMFileError#Error_codes\">error code</a>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/FileError"},"CSSMediaRule":{"title":"cssMediaRule","srcUrl":"https://developer.mozilla.org/en/DOM/cssMediaRule","specification":"<li><a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\" target=\"_blank\">DOM Level 2 CSS: CSSRule</a></li> <li><a class=\"external\" title=\"http://dev.w3.org/csswg/cssom/#cssmediarule\" rel=\"external\" href=\"http://dev.w3.org/csswg/cssom/#cssmediarule\" target=\"_blank\">CSS Object Model: CSS Media Rule</a></li>","seeAlso":"CSSRule","summary":"An object representing a single CSS media rule.&nbsp;<code>CSSMediaRule</code>&nbsp;implements the&nbsp;<code><a href=\"https://developer.mozilla.org/en/DOM/CSSRule\" rel=\"custom\">CSSRule</a></code>&nbsp;interface.","members":[{"name":"insertRule","help":"Inserts a new style rule into the current style sheet.","obsolete":false},{"name":"deleteRule","help":"Deletes a rule from the style sheet.","obsolete":false},{"name":"media","help":"Specifies the intended destination medium for style information.","obsolete":false},{"name":"cssRules","help":"Returns a <code><a title=\"en/DOM/CSSRuleList\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSRuleList\">CSSRuleList</a></code> of the CSS rules in the media rule.","obsolete":false}]},"HTMLElement":{"title":"element","summary":"<p>This chapter provides a brief reference for the general methods, properties, and events available to most HTML and XML elements in the Gecko DOM.</p>\n<p>Various W3C specifications apply to elements:</p>\n<ul> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/\" target=\"_blank\">DOM Core Specification</a>—describes the core interfaces shared by most DOM objects in HTML and XML documents</li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/\" target=\"_blank\">DOM HTML Specification</a>—describes interfaces for objects in HTML and XHTML documents that build on the core specification</li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Events/\" title=\"http://www.w3.org/TR/DOM-Level-2-Events/\" target=\"_blank\">DOM Events Specification</a>—describes events shared by most DOM objects, building on the DOM Core and <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Views/\" title=\"http://www.w3.org/TR/DOM-Level-2-Views/\" target=\"_blank\">Views</a> specifications</li> <li><a class=\"external\" title=\"http://www.w3.org/TR/ElementTraversal/\" rel=\"external\" href=\"http://www.w3.org/TR/ElementTraversal/\" target=\"_blank\">Element Traversal Specification</a>—describes the new attributes that allow traversal of elements in the DOM&nbsp;tree \n<span>New in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/Firefox_3.5_for_developers\">Firefox 3.5</a></span>\n</li>\n</ul>\n<p>The articles listed here span the above and include links to the appropriate W3C DOM specification.</p>\n<p>While these interfaces are generally shared by most HTML and XML elements, there are more specialized interfaces for particular objects listed in the DOM HTML Specification. Note, however, that these HTML&nbsp;interfaces are \"only for [HTML 4.01] and [XHTML 1.0] documents and are not guaranteed to work with any future version of XHTML.\" The HTML 5 draft does state it aims for backwards compatibility with these HTML&nbsp;interfaces but says of them that \"some features that were formerly deprecated, poorly supported, rarely used or considered unnecessary have been removed.\" One can avoid the potential conflict by moving entirely to DOM&nbsp;XML attribute methods such as <code>getAttribute()</code>.</p>\n<p><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLHtmlElement\">Html</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLHeadElement\">Head</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLinkElement\">Link</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTitleElement\">Title</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLMetaElement\">Meta</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLBaseElement\">Base</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLIsIndexElement\" class=\"new\">IsIndex</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLStyleElement\">Style</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLBodyElement\">Body</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLFormElement\">Form</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLSelectElement\">Select</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLOptGroupElement\" class=\"new\">OptGroup</a></code>\n, <a title=\"en/HTML/Element/HTMLOptionElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/HTMLOptionElement\" class=\"new \">Option</a>, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLInputElement\">Input</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTextAreaElement\">TextArea</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLButtonElement\">Button</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLabelElement\">Label</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLFieldSetElement\">FieldSet</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLegendElement\">Legend</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLUListElement\" class=\"new\">UList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/OList\" class=\"new\">OList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DList\" class=\"new\">DList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Directory\" class=\"new\">Directory</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Menu\" class=\"new\">Menu</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/LI\" class=\"new\">LI</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Div\" class=\"new\">Div</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Paragraph\" class=\"new\">Paragraph</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Heading\" class=\"new\">Heading</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Quote\" class=\"new\">Quote</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Pre\" class=\"new\">Pre</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/BR\" class=\"new\">BR</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/BaseFont\" class=\"new\">BaseFont</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Font\" class=\"new\">Font</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HR\" class=\"new\">HR</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Mod\" class=\"new\">Mod</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLAnchorElement\">Anchor</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Image\" class=\"new\">Image</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLObjectElement\">Object</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Param\" class=\"new\">Param</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Applet\" class=\"new\">Applet</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Map\" class=\"new\">Map</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Area\" class=\"new\">Area</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Script\" class=\"new\">Script</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTableElement\">Table</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCaption\" class=\"new\">TableCaption</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCol\" class=\"new\">TableCol</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableSection\" class=\"new\">TableSection</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTableRowElement\">TableRow</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCell\" class=\"new\">TableCell</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/FrameSet\" class=\"new\">FrameSet</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Frame\" class=\"new\">Frame</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLIFrameElement\">IFrame</a></code>\n</p>","members":[{"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":" Register an event handler to a specific event type on the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.appendChild","name":"appendChild","help":" Insert a node as the last child node of this element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.blur","name":"blur","help":" Removes keyboard focus from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.click","name":"click","help":" Simulates a click on the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.cloneNode","name":"cloneNode","help":" Clone a node, and optionally, all of its contents.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.compareDocumentPosition","name":"compareDocumentPosition","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dispatchEvent","name":"dispatchEvent","help":" Dispatch an event to this node in the DOM.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.focus","name":"focus","help":" Gives keyboard focus to the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttribute","name":"getAttribute","help":" Retrieve the value of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNS","name":"getAttributeNS","help":" Retrieve the value of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNode","name":"getAttributeNode","help":" Retrieve the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNodeNS","name":"getAttributeNodeNS","help":" Retrieve the node representation of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getBoundingClientRect","name":"getBoundingClientRect","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.getElementsByClassName","name":"getElementsByClassName","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getElementsByTagName","name":"getElementsByTagName","help":" Retrieve a set of all descendant elements, of a particular tag name, from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getElementsByTagNameNS","name":"getElementsByTagNameNS","help":" Retrieve a set of all descendant elements, of a particular tag name and namespace, from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Node.getFeature","name":"getFeature","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.getUserData","name":"getUserData","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.hasAttribute","name":"hasAttribute","help":" Check if the element has the specified attribute, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.hasAttributeNS","name":"hasAttributeNS","help":" Check if the element has the specified attribute, in the specified namespace, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.hasAttributes","name":"hasAttributes","help":" Check if the element has any attributes, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.hasChildNodes","name":"hasChildNodes","help":" Check if the element has any child nodes, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.insertBefore","name":"insertBefore","help":" Inserts the first node before the second, child, Node in the DOM.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isDefaultNamespace","name":"isDefaultNamespace","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isEqualNode","name":"isEqualNode","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isSameNode","name":"isSameNode","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isSupported","name":"isSupported","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lookupNamespaceURI","name":"lookupNamespaceURI","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lookupPrefix","name":"lookupPrefix","help":"","obsolete":false},{"name":"webkitMatchesSelector","help":" Returns whether or not the element would be selected by the specified selector string.","obsolete":false},{"name":"webkitRequestFullScreen","help":" Asynchronously asks the browser to make the element full-screen.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.normalize","name":"normalize","help":" Clean up all the text nodes under this element (merge adjacent, remove empty).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.querySelector","name":"querySelector","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.querySelectorAll","name":"querySelectorAll","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttribute","name":"removeAttribute","help":" Remove the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttributeNS","name":"removeAttributeNS","help":" Remove the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttributeNode","name":"removeAttributeNode","help":" Remove the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.removeChild","name":"removeChild","help":" Removes a child node from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":" Removes an event listener from the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.replaceChild","name":"replaceChild","help":" Replaces one child node in the current element with another.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollIntoView","name":"scrollIntoView","help":" Scrolls the page until the element gets into the view.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttribute","name":"setAttribute","help":" Set the value of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNS","name":"setAttributeNS","help":" Set the value of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNode","name":"setAttributeNode","help":" Set the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNodeNS","name":"setAttributeNodeNS","help":" Set the node representation of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setCapture","name":"setCapture","help":" Sets up mouse event capture, redirecting all mouse events to this element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.setIdAttributeNS","name":"setIdAttributeNS","help":" Sets the attribute to be treated as an ID type attribute.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.setIdAttributeNode","name":"setIdAttributeNode","help":" Sets the attribute to be treated as an ID type attribute.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.setUserData","name":"setUserData","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.insertAdjacentHTML","name":"insertAdjacentHTML","help":" Parses the text as HTML or XML and inserts the resulting nodes into the tree in the position given.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.attributes","name":"attributes","help":"All attributes associated with an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.baseURI","name":"baseURI","help":"Base URI as a string","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.baseURIObject","name":"baseURIObject","help":"The read-only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIURI\">nsIURI</a></code>\n object representing the base URI for the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.childElementCount","name":"childElementCount","help":"The number of child nodes that are elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.childNodes","name":"childNodes","help":"All child nodes of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.children","name":"children","help":"A live <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIDOMNodeList&amp;ident=nsIDOMNodeList\" class=\"new\">nsIDOMNodeList</a></code>\n of the current child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.classList","name":"classList","help":"Token list of class attribute","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.className","name":"className","help":"Gets/sets the class of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientHeight","name":"clientHeight","help":"The inner height of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientLeft","name":"clientLeft","help":"The width of the left border of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientTop","name":"clientTop","help":"The width of the top border of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientWidth","name":"clientWidth","help":"The inner width of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.contentEditable","name":"contentEditable","help":"Gets/sets whether or not the element is editable.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dataset","name":"dataset","help":"Allows access to read and write custom data attributes on the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dir","name":"dir","help":"Gets/sets the directionality of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.firstChild","name":"firstChild","help":"The first direct child node of an element, or <code>null</code> if this element has no child nodes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.firstElementChild","name":"firstElementChild","help":"The first direct child element of an element, or <code>null</code> if the element has no child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.id","name":"id","help":"Gets/sets the id of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.innerHTML","name":"innerHTML","help":"Gets/sets the markup of the element's content.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.isContentEditable","name":"isContentEditable","help":"Indicates whether or not the content of the element can be edited. Read only.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.lang","name":"lang","help":"Gets/sets the language of an element's attributes, text, and element contents.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lastChild","name":"lastChild","help":"The last direct child node of an element, or <code>null</code> if this element has no child nodes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.lastElementChild","name":"lastElementChild","help":"The last direct child element of an element, or <code>null</code> if the element has no child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.localName","name":"localName","help":"The local part of the qualified name of an element. In Firefox 3.5 and earlier, the property upper-cases the local name for HTML&nbsp;elements (but not XHTML&nbsp;elements). In later versions, this does not happen, so the property is in lower case for both HTML&nbsp;and XHTML. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.name","name":"name","help":"Gets/sets the name attribute of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.namespaceURI","name":"namespaceURI","help":"The namespace URI of this node, or <code>null</code> if it is no namespace. In Firefox 3.5 and earlier, HTML&nbsp;elements are in no namespace. In later versions, HTML&nbsp;elements are in the <code><a class=\"linkification-ext external\" title=\"Linkification: http://www.w3.org/1999/xhtml\" rel=\"external\" href=\"http://www.w3.org/1999/xhtml\" target=\"_blank\">http://www.w3.org/1999/xhtml</a></code> namespace in both HTML&nbsp;and XML&nbsp;trees. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nextSibling","name":"nextSibling","help":"The node immediately following the given one in the tree, or <code>null</code> if there is no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.nextElementSibling","name":"nextElementSibling","help":"The element immediately following the given one in the tree, or <code>null</code> if there's no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeName","name":"nodeName","help":"The name of the node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodePrincipal","name":"nodePrincipal","help":"The node's principal.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeType","name":"nodeType","help":"A number representing the type of the node. Is always equal to <code>1</code> for DOM elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeValue","name":"nodeValue","help":"The value of the node. Is always equal to <code>null</code> for DOM elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetHeight","name":"offsetHeight","help":"The height of an element, relative to the layout.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetLeft","name":"offsetLeft","help":"The distance from this element's left border to its <code>offsetParent</code>'s left border.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetParent","name":"offsetParent","help":"The element from which all offset calculations are currently computed.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetTop","name":"offsetTop","help":"The distance from this element's top border to its <code>offsetParent</code>'s top border.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetWidth","name":"offsetWidth","help":"The width of an element, relative to the layout.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.outerHTML","name":"outerHTML","help":"Gets the markup of the element including its content. When used as a setter, replaces the element with nodes parsed from the given string.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.ownerDocument","name":"ownerDocument","help":"The document that this node is in, or <code>null</code> if the node is not inside of one.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.parentNode","name":"parentNode","help":"The parent element of this node, or <code>null</code> if the node is not inside of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document\">DOM Document</a></code>\n.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.prefix","name":"prefix","help":"The namespace prefix of the node, or <code>null</code> if no prefix is specified.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.previousSibling","name":"previousSibling","help":"The node immediately preceding the given one in the tree, or <code>null</code> if there is no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.previousElementSibling","name":"previousElementSibling","help":"The element immediately preceding the given one in the tree, or <code>null</code> if there is no sibling element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.schemaTypeInfo","name":"schemaTypeInfo","help":"Returns TypeInfo regarding schema information for the element (also available on <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr\">Attr</a></code>\n).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollHeight","name":"scrollHeight","help":"The scroll view height of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollLeft","name":"scrollLeft","help":"Gets/sets the left scroll offset of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollTop","name":"scrollTop","help":"Gets/sets the top scroll offset of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollWidth","name":"scrollWidth","help":"The scroll view width of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/XUL/Attribute/spellcheck","name":"spellcheck","help":"Controls <a title=\"en/Controlling_spell_checking_in_HTML_forms\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Controlling_spell_checking_in_HTML_forms\">spell-checking</a> (present on all HTML&nbsp;elements)","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.style","name":"style","help":"An object representing the declarations of an element's style attributes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.tabIndex","name":"tabIndex","help":"Gets/sets the position of the element in the tabbing order.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.tagName","name":"tagName","help":"The name of the tag for the given element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.textContent","name":"textContent","help":"Gets/sets the textual contents of an element and all its descendants.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.title","name":"title","help":"A string that appears in a popup box when mouse is over the element.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/element"},"SVGZoomEvent":{"title":"document.createEvent","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/document.createEvent","skipped":true,"cause":"Suspect title"},"Document":{"title":"document","summary":"<p>Each web page loaded in the browser has its own <strong>document</strong> object. This object serves as an entry point to the web page's content (the <a title=\"en/Using_the_W3C_DOM_Level_1_Core\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_the_W3C_DOM_Level_1_Core\">DOM tree</a>, including elements such as <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/body\">&lt;body&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/table\">&lt;table&gt;</a></code>\n) and provides functionality global to the document (such as obtaining the page's URL and creating new elements in the document).</p>\n<p>A document object can be obtained from various APIs:</p>\n<ul> <li>Most commonly, you work with the document the script is running in by using <code>document</code> in document's <a title=\"en/HTML/Element/Script\" rel=\"internal\" href=\"https://developer.mozilla.org/En/HTML/Element/Script\">scripts</a>. (The same document can also be referred to as <a title=\"window.document\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window.document\"><code>window.document</code></a>.)</li> <li>The document of an iframe via the iframe's <code><a title=\"en/DOM/HTMLIFrameElement#Properties\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLIFrameElement#Properties\">contentDocument</a></code> property.</li> <li>The <a title=\"en/XMLHttpRequest#Attributes\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIXMLHttpRequest#Attributes\"><code>responseXML</code> of an <code>XMLHttpRequest</code> object</a>.</li> <li>The document, that given node or element belongs to, can be retrieved using the node's <code><a title=\"en/DOM/Node.ownerDocument\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.ownerDocument\">ownerDocument</a></code> property.</li> <li>...and more.</li>\n</ul>\n<p>Depending on the kind of the document (e.g. <a title=\"en/HTML\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML\">HTML</a> or <a title=\"en/XML\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XML\">XML</a>) different APIs may be available on the document object. This theoretical availability of APIs is usually described in terms of <em>implementing interfaces</em> defined in the relevant W3C DOM specifications:</p>\n<ul> <li>All document objects implement the DOM Core <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#i-Document\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#i-Document\" target=\"_blank\"><code>Document</code></a> and <code><a title=\"en/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\">Node</a></code> interfaces, meaning that the \"core\" properties and methods are available for all kinds of documents.</li> <li>In addition to the generalized DOM Core document interface, HTML documents also implement the <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268\" target=\"_blank\">HTMLDocument</a></code> interface, which is a more specialized interface for dealing with HTML documents (e.g., <a title=\"en/DOM/document.cookie\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.cookie\">document.cookie</a>, <a title=\"en/DOM/document.alinkColor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.alinkColor\">document.alinkColor</a>).</li> <li><a title=\"en/XUL\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XUL\">XUL</a> documents (available to Mozilla add-on and application developers) implement their own additions to the core Document functionality.</li>\n</ul>\n<p>Methods or properties listed here that are part of a more specialized interface have an asterisk (*) next to them and have additional information in the&nbsp; Availability column.</p>\n<p>Note that some APIs listed below are not available in all browsers for various reasons:</p>\n<ul> <li><strong>Obsolete</strong>: on its way of being removed from supporting browsers.</li> <li><strong>Non-standard</strong>: either an experimental feature not (yet?) agreed upon by all vendors, or a feature targeted specifically at the code running in a specific browser (e.g. Mozilla has a few DOM APIs created for its add-ons and application development).</li> <li>Part of a completed or an emerging standard, but not (yet?) implemented in all browsers or implemented in the newest versions of the browsers.</li>\n</ul>\n<p>Detailed browser compatibility tables are located at the pages describing each property or method.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getElementById","name":"getElementById","help":"Returns an object reference to the identified element."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.captureEvents","name":"captureEvents","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.routeEvent","name":"routeEvent","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.queryCommandIndeterm","name":"queryCommandIndeterm","help":"Returns true if the <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a> command is in a indeterminate state on the current range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createEvent","name":"createEvent","help":"Creates an event."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.execCommandShowHelp","name":"execCommandShowHelp","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createDocumentFragment","name":"createDocumentFragment","help":"Creates a new document fragment."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.elementFromPoint","name":"elementFromPoint","help":"Returns the element visible at the specified coordinates."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.load","name":"load","help":"Load an XML document"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getElementsByTagName","name":"getElementsByTagName","help":"Returns a list of elements with the given tag name."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getBoxObjectFor","name":"getBoxObjectFor","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.createAttributeNS","name":"createAttributeNS","help":"Creates a new attribute node in a given namespace and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getElementsByClassName","name":"getElementsByClassName","help":"Returns a list of elements with the given class name."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.normalizeDocument","name":"normalizeDocument","help":"Replaces entities, normalizes text nodes, etc."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.queryCommandState","name":"queryCommandState","help":"Returns true if the <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a> command has been executed on the current range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.queryCommandSupported","name":"queryCommandSupported","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.hasFocus","name":"hasFocus","help":"Returns <code>true</code> if the focus is currently located anywhere inside the specified document."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.queryCommandText","name":"queryCommandText","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.releaseEvents","name":"releaseEvents","help":"<dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.removeChild\">Node.removeChild</a></code>\n</dt> <dd>Removes a child node from the DOM</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.importNode","name":"importNode","help":"<dd>Returns a clone of a node from an external document</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.insertBefore\">Node.insertBefore</a></code>\n</dt> <dd>Inserts the specified node before a reference node as a child of the current node.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.isDefaultNamespace\">Node.isDefaultNamespace</a></code>\n</dt> <dd>Returns true if the namespace is the default namespace on the given node</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.isEqualNode\">Node.isEqualNode</a></code>\n</dt> <dd>Indicates whether the node is equal to the given node</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.isSameNode\">Node.isSameNode</a></code>\n</dt> <dd>Indicates whether the node is the same as the given node</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.isSupported\">Node.isSupported</a></code>\n</dt> <dd>Tests whether the DOM implementation implements a specific feature and that feature is supported by this node or document</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.write","name":"write","help":"Writes text to a document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.releaseCapture","name":"releaseCapture","help":"Releases the current mouse capture if it's on an element in this document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.evaluate","name":"evaluate","help":"Evaluates an XPath expression."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createTextNode","name":"createTextNode","help":"Creates a text node."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.querySelector","name":"querySelector","help":"Returns the first Element node within the document, in document order, that matches the specified selectors."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createExpression","name":"createExpression","help":"Compiles an <code><a title=\"en/XPathExpression\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XPathExpression\">XPathExpression</a></code> which can then be used for (repeated) evaluations."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createElement","name":"createElement","help":"Creates a new element with the given tag name."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createCDATASection","name":"createCDATASection","help":"Creates a new CDATA node and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createComment","name":"createComment","help":"Creates a new comment node and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.adoptNode","name":"adoptNode","help":"<dd>Adopt node from an external document</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.appendChild\">Node.appendChild</a></code>\n</dt> <dd>Adds a node to the end of the list of children of a specified parent node.</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createAttribute","name":"createAttribute","help":"Creates a new attribute node and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.querySelectorAll","name":"querySelectorAll","help":"Returns a list of all the Element nodes within the document that match the specified selectors."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createElementNS","name":"createElementNS","help":"Creates a new element with the given tag name and namespace URI."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createEntityReference","name":"createEntityReference","help":"Creates a new entity reference object and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.open","name":"open","help":"Opens a document stream for writing."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createProcessingInstruction","name":"createProcessingInstruction","help":"Creates a new processing instruction element and returns it."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createTreeWalker","name":"createTreeWalker","help":"Creates a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/treeWalker\">treeWalker</a></code>\n object."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getElementsByName","name":"getElementsByName","help":"Returns a list of elements with the given name."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.close","name":"close","help":"<dd>Closes a document stream for writing.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.compareDocumentPosition\">Node.compareDocumentPosition</a></code>\n</dt> <dd>Compares the position of the current node against another node in any other document.</dd>"},{"name":"webkitSetImageElement","help":"<dd>Allows you to change the element being used as the background image for a specified element ID.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.setUserData\">Node.setUserData</a></code>\n</dt> <dd>Attaches arbitrary data to a node, along with a user-defined key and an optional handler to be triggered upon events such as cloning of the node upon which the data was attached</dd>","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.writeln","name":"writeln","help":"Write a line of text to a document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createNSResolver","name":"createNSResolver","help":"Creates an XPathNSResolver."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.enableStyleSheetsForSet","name":"enableStyleSheetsForSet","help":"Enables the style sheets for the specified style sheet set."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.removeEventListener","name":"removeEventListener","help":"<dd>Removes an event listener from the document</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.replaceChild\">Node.replaceChild</a></code>\n</dt> <dd>Replaces one child node of the specified node with another</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.loadOverlay","name":"loadOverlay","help":"<dd>Loads a <a title=\"en/XUL_Overlays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XUL_Overlays\">XUL overlay</a> dynamically. This only works in XUL documents.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.lookupNamespaceURI\">Node.lookupNamespaceURI</a></code>\n</dt> <dd>Returns the namespaceURI associated with a given prefix on the given node object</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.lookupPrefix\">Node.lookupPrefix</a></code>\n</dt> <dd>Returns the prefix for a given namespaceURI on the given node if present</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.normalize\">Node.normalize</a></code>\n</dt> <dd>Normalizes the node or document</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands","name":"execCommand","help":"Executes a <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a> command."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.clear","name":"clear","help":"<dd>In majority of modern browsers, including recent versions of Firefox and Internet Explorer, this method does nothing.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.cloneNode\">Node.cloneNode</a></code>\n</dt> <dd>Makes a copy of a node or document</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.queryCommandValue","name":"queryCommandValue","help":"Returns the current value of the current range for <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a> command. As of Firefox 2.0.0.2, queryCommandValue will return an empty string when a command value has not been explicitly set."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getSelection","name":"getSelection","help":"<dd>Returns a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Selection\">Selection</a></code>\n object related to text selected in the document.</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.getUserData\">Node.getUserData</a></code>\n</dt> <dd>Returns any data previously set on the node via setUserData() by key</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.hasAttributes\">Node.hasAttributes</a></code>\n</dt> <dd>Indicates whether the node possesses attributes</dd> <dt><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Node.hasChildNodes\">Node.hasChildNodes</a></code>\n</dt> <dd>Returns a Boolean value indicating whether the current element has child nodes or not.</dd>"},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.queryCommandEnabled","name":"queryCommandEnabled","help":"Returns true if the <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a> command can be executed on the current range."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.getElementsByTagNameNS","name":"getElementsByTagNameNS","help":"<dd>Returns a list of elements with the given tag name and namespace.</dd> <dt><code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Node.getFeature\" class=\"new\">Node.getFeature</a></code>\n</dt>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.createRange","name":"createRange","help":"Creates a Range object."},{"url":"https://developer.mozilla.org/en/DOM/document.activeElement","name":"activeElement","help":"Returns the currently focused element","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.alinkColor","name":"alinkColor","help":"Returns or sets the color of active links in the document body.","obsolete":true},{"url":"https://developer.mozilla.org/En/DOM/document.all","name":"all","help":"","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.anchors","name":"anchors","help":"Returns a list of all of the anchors in the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.applets","name":"applets","help":"Returns an ordered list of the applets within a document.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.async","name":"async","help":"Used with <a title=\"en/DOM/document.load\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.load\">document.load</a> to indicate an asynchronous request.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.baseURIObject","name":"baseURIObject","help":"(<span>Mozilla</span><strong> add-ons only!</strong>) Returns an <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIURI\">nsIURI</a></code>\n object representing the base URI for the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.bgColor","name":"bgColor","help":"Gets/sets the background color of the current document.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.body","name":"body","help":"Returns the BODY node of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.characterSet","name":"characterSet","help":"Returns the character set being used by the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.compatMode","name":"compatMode","help":"Indicates whether the document is rendered in Quirks or Strict mode.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.contentType","name":"contentType","help":"Returns the Content-Type from the MIME Header of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.cookie","name":"cookie","help":"Returns a semicolon-separated list of the cookies for that document or sets a single cookie.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.currentScript","name":"currentScript","help":"Returns the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/script\">&lt;script&gt;</a></code>\n element that is currently executing.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.defaultView","name":"defaultView","help":"Returns a reference to the window object.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.designMode","name":"designMode","help":"Gets/sets WYSYWIG editing capability of <a title=\"en/Midas\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Midas\">Midas</a>. It can only be used for HTML documents.","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/Document.dir","name":"dir","help":"Gets/sets directionality (rtl/ltr) of the document","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.doctype","name":"doctype","help":"Returns the Document Type Definition (DTD) of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.documentElement","name":"documentElement","help":"Returns the Element that is a direct child of document. For HTML documents, this is normally the HTML element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.documentURI","name":"documentURI","help":"Returns the document location.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.documentURIObject","name":"documentURIObject","help":"(<strong>Mozilla add-ons only!</strong>) Returns the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIURI\">nsIURI</a></code>\n object representing the URI of the document. This property only has special meaning in privileged JavaScript code (with UniversalXPConnect privileges).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.domain","name":"domain","help":"Returns the domain of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.embeds","name":"embeds","help":"Returns a list of the embedded OBJECTS within the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.fgColor","name":"fgColor","help":"Gets/sets the foreground color, or text color, of the current document.","obsolete":true},{"name":"fileSize","help":"(<strong>IE-only!</strong>) Returns size in bytes of the document. See <a class=\"external\" title=\"http://msdn.microsoft.com/en-us/library/ms533752%28v=VS.85%29.aspx\" rel=\"external\" href=\"http://msdn.microsoft.com/en-us/library/ms533752%28v=VS.85%29.aspx\" target=\"_blank\">MSDN</a>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.forms","name":"forms","help":"Returns a list of the FORM elements within the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.head","name":"head","help":"Returns the HEAD node of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.height","name":"height","help":"Gets/sets the height of the current document.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.images","name":"images","help":"Returns a list of the images in the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.implementation","name":"implementation","help":"Returns the DOM implementation associated with the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.inputEncoding","name":"inputEncoding","help":"Returns the encoding used when the document was parsed.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.lastModified","name":"lastModified","help":"Returns the date on which the document was last modified.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.lastStyleSheetSet","name":"lastStyleSheetSet","help":"Returns the name of the style sheet set that was last enabled. Has the value <code>null</code> until the style sheet is changed by setting the value of <code>selectedStyleSheetSet</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.linkColor","name":"linkColor","help":"Gets/sets the color of hyperlinks in the document.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.links","name":"links","help":"Returns a list of all the hyperlinks in the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.location","name":"location","help":"Returns the URI of the current document.","obsolete":false},{"name":"webkitSyntheticDocument","help":"<code>true</code> if this document is synthetic, such as a standalone image, video, audio file, or the like.","obsolete":false},{"name":"webkitFullScreen","help":"<code>true</code> when the document is in <a title=\"en/DOM/Using full-screen mode\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Using_full-screen_mode\">full-screen mode</a>.","obsolete":false},{"name":"webkitFullScreenElement","help":"The element that's currently in full screen mode for this document.","obsolete":false},{"name":"webkitFullScreenEnabled","help":"<code>true</code> if calling <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.mozRequestFullscreen\">element.mozRequestFullscreen()</a></code>\n would succeed in the curent document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.plugins","name":"plugins","help":"Returns a list of the available plugins.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.popupNode","name":"popupNode","help":"Returns the node upon which a popup was invoked (XUL documents only).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.preferredStyleSheetSet","name":"preferredStyleSheetSet","help":"Returns the preferred style sheet set as specified by the page author.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.readyState","name":"readyState","help":"Returns loading status of the document","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.referrer","name":"referrer","help":"Returns the URI of the page that linked to this page.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.scripts","name":"scripts","help":"Returns all the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/script\">&lt;script&gt;</a></code>\n elements on the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.selectedStyleSheetSet","name":"selectedStyleSheetSet","help":"Returns which style sheet set is currently in use.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.styleSheets","name":"styleSheets","help":"Returns a list of the stylesheet objects on the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.styleSheetSets","name":"styleSheetSets","help":"Returns a list of the style sheet sets available on the document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.title","name":"title","help":"Returns the title of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.tooltipNode","name":"tooltipNode","help":"Returns the node which is the target of the current tooltip.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.URL","name":"URL","help":"Returns a string containing the URL of the current document.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/document.vlinkColor","name":"vlinkColor","help":"Gets/sets the color of visited hyperlinks.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.width","name":"width","help":"Returns the width of the current document.","obsolete":true},{"url":"https://developer.mozilla.org/En/DOM/Document.xmlEncoding","name":"xmlEncoding","help":"Returns the encoding as determined by the XML declaration.<br> <div class=\"note\">Firefox 10 and later don't implement it anymore.</div>","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.xmlStandalone","name":"xmlStandalone","help":"Returns <code>true</code> if the XML declaration specifies the document is standalone (<em>e.g.,</em> An external part of the DTD affects the document's content), else <code>false</code>.","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/document.xmlVersion","name":"xmlVersion","help":"Returns the version number as specified in the XML declaration or <code>\"1.0\"</code> if the declaration is absent.","obsolete":true},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.ononline","name":"ononline","help":"Returns the event handling code for the <code>online</code> event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/document.onreadystatechange","name":"onreadystatechange","help":"<dl><dd>Returns the event handling code for the <code>readystatechange</code> event.</dd>\n</dl>\n<div class=\"geckoVersionNote\"> <p>\n</p><div class=\"geckoVersionHeading\">Gecko 9.0 note<div>(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n</div></div>\n<p></p> <p>Starting in Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n, you can now use the syntax <code>if (\"onabort\" in document)</code> to determine whether or not a given event handler property exists. This is because event handler interfaces have been updated to be proper web IDL interfaces. See <a title=\"en/DOM/DOM event handlers\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/DOM_event_handlers\">DOM event handlers</a> for details.</p>\n</div>"},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/document.onoffline","name":"onoffline","help":"Returns the event handling code for the <code>offline</code> event."}],"srcUrl":"https://developer.mozilla.org/en/DOM/document","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...tml#i-Document"},"SVGPathSeg":{"title":"User talk:Jeff Schiller","members":[],"srcUrl":"https://developer.mozilla.org/User_talk:Jeff_Schiller","skipped":true,"cause":"Suspect title"},"HTMLHtmlElement":{"title":"HTMLHtmlElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/html\">&lt;html&gt;</a></code>\n HTML&nbsp;element","summary":"<p>The <code>html</code> object exposes the <a class=\" external\" title=\"http://www.w3.org/TR/html5/semantics.html#htmlhtmlelement\" rel=\"external\" href=\"http://www.w3.org/TR/html5/semantics.html#htmlhtmlelement\" target=\"_blank\">HTMLHtmlElement</a> (\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a target=\"_blank\" class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-33759296\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-33759296\">HTMLHtmlElement</a>) interface and serves as the root node for a given HTML&nbsp;document.&nbsp; This object inherits the properties and methods described in the <a title=\"en/DOM/element\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> section.&nbsp; In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, this interface inherits from HTMLElement, but provides no other members.</p>\n<p>You can retrieve the <code>html</code> object for a document by obtaining the value of the <a class=\"internal\" title=\"en/DOM/document.documentElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.documentElement\"><code>document.documentElement</code></a> property.</p>","members":[{"name":"version","help":"Version of the HTML&nbsp;Document Type Definition that governs this document.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/En/DOM/Html"},"HTMLStyleElement":{"title":"HTMLStyleElement","seeAlso":"<li><a title=\"en/DOM/element.style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element.style\">DOM element.style Object</a></li> <li><a title=\"en/DOM/stylesheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/stylesheet\">DOM stylesheet Object</a></li> <li><a title=\"en/DOM/cssRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/cssRule\">DOM cssRule Object</a></li> <li><a title=\"en/DOM/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSS\">DOM CSS Properties List</a></li> <li><a title=\"http://www.whatwg.org/html/#the-style-element\" class=\" external\" rel=\"external\" href=\"http://www.whatwg.org/html/#the-style-element\" target=\"_blank\">The <code>style</code> element in the HTML specification</a></li>","summary":"See <a title=\"en/DOM/Using_dynamic_styling_information\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Using_dynamic_styling_information\">Using dynamic styling information</a> for an overview of the objects used to manipulate specified CSS properties using the DOM.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/style.media","name":"media","help":"Specifies the intended destination medium for style information."},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/style.disabled","name":"disabled","help":"Returns true if the stylesheet is disabled, and false if not"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/style.type","name":"type","help":"Returns the type of style being applied by this statement."}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLStyleElement"},"ClientRect":{"title":"nsIDOMClientRect","seeAlso":"<a rel=\"custom\" href=\"http://www.w3.org/TR/cssom-view/#the-clientrect-interface\">CSSOM View Module : The ClientRect Interface</a><span title=\"Working Draft\">WD</span>","summary":"<div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/base/nsIDOMClientRect.idl\"><code>dom/interfaces/base/nsIDOMClientRect.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>Represents a rectangular box. The type of box is specified by the method that returns such an object. It is returned by functions like <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.getBoundingClientRect\">element.getBoundingClientRect</a></code>\n.</span><div><div>1.0</div><div>11.0</div><div></div><div>Introduced</div><div>Gecko 1.9</div><div title=\"Introduced in Gecko 1.9 (Firefox 3)\n\"></div><div title=\"Last changed in Gecko 1.9.1 (Firefox 3)\n\"></div></div>\n<div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports\">nsISupports</a></code>\n<span>Last changed in Gecko 1.9.1 (Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n</span></div>","members":[{"name":"bottom","help":"Y-coordinate, relative to the viewport origin, of the bottom of the rectangle box. <strong>Read only.</strong>","obsolete":false},{"name":"height","help":"Height of the rectangle box (This is identical to <code>bottom</code> minus <code>top</code>). <strong>Read only.</strong>","obsolete":false},{"name":"left","help":"X-coordinate, relative to the viewport origin, of the left of the rectangle box. <strong>Read only.</strong>","obsolete":false},{"name":"right","help":"X-coordinate, relative to the viewport origin, of the right of the rectangle box. <strong>Read only.</strong>","obsolete":false},{"name":"top","help":"Y-coordinate, relative to the viewport origin, of the top of the rectangle box. <strong>Read only.</strong>","obsolete":false},{"name":"width","help":"Width of the rectangle box (This is identical to <code>right</code> minus <code>left</code>). <strong>Read only.</strong> \n<span title=\"(Firefox 3.5 / Thunderbird 3.0 / SeaMonkey 2.0)\n\">Requires Gecko 1.9.1</span>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMClientRect"},"SVGPathSegLinetoAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"XMLSerializer":{"title":"XMLSerializer","seeAlso":"<li><a title=\"en/Parsing_and_serializing_XML\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Parsing_and_serializing_XML\">Parsing and serializing XML</a></li> <li><a title=\"en/XMLHttpRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XMLHttpRequest\">XMLHttpRequest</a></li> <li><a title=\"en/DOMParser\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOMParser\">DOMParser</a></li>","summary":"<div dir=\"ltr\" id=\"result_box\">XMLSerializer can be used to convert DOM subtree or DOM document into text. XMLSerializer is available to unprivileged scripts.</div>\n<p><code> </code></p>\n<div class=\"note\">\n<div dir=\"ltr\">XMLSerializer is mainly useful for applications and extensions based on the Mozilla platform. While it is available for web pages, it's not part of any standard and level of support in other browsers unknown.</div>\n<div id=\"result_box\" dir=\"ltr\">&nbsp;</div>\n</div>","members":[{"name":"serializeToString","help":"<div dir=\"ltr\" id=\"serializeToString\" class=\"\">\n&nbsp;&nbsp;&nbsp;&nbsp; Returns the serialized subtree of a string.\n<dt></dt>\n</div>\n<div dir=\"ltr\" id=\"serializeToStream\"><strong>serializeToStream </strong></div>\n<div dir=\"ltr\">&nbsp;&nbsp;&nbsp;&nbsp; The subtree rooted by the specified element is serialized to a byte stream using the character set specified.&nbsp;&nbsp;&nbsp;&nbsp;</div>\n<div dir=\"ltr\" id=\"Example\"><span>Example</span></div>\n\n          <pre name=\"code\" class=\"js\">var s = new XMLSerializer();\n var d = document;\n var str = s.serializeToString(d);\n alert(str);</pre>\n        \n\n          <pre name=\"code\" class=\"js\">var s = new XMLSerializer();\n var stream = {\n   close : function()\n   {\n     alert(\"Stream closed\");\n   },\n   flush : function()\n   {\n   },\n   write : function(string, count)\n   {\n     alert(\"'\" + string + \"'\\n bytes count: \" + count + \"\");\n   }\n };\n s.serializeToStream(document, stream, \"UTF-8\");</pre>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XMLSerializer"},"Element":{"title":"element","summary":"<p>This chapter provides a brief reference for the general methods, properties, and events available to most HTML and XML elements in the Gecko DOM.</p>\n<p>Various W3C specifications apply to elements:</p>\n<ul> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/\" target=\"_blank\">DOM Core Specification</a>—describes the core interfaces shared by most DOM objects in HTML and XML documents</li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/\" target=\"_blank\">DOM HTML Specification</a>—describes interfaces for objects in HTML and XHTML documents that build on the core specification</li> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Events/\" title=\"http://www.w3.org/TR/DOM-Level-2-Events/\" target=\"_blank\">DOM Events Specification</a>—describes events shared by most DOM objects, building on the DOM Core and <a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Views/\" title=\"http://www.w3.org/TR/DOM-Level-2-Views/\" target=\"_blank\">Views</a> specifications</li> <li><a class=\"external\" title=\"http://www.w3.org/TR/ElementTraversal/\" rel=\"external\" href=\"http://www.w3.org/TR/ElementTraversal/\" target=\"_blank\">Element Traversal Specification</a>—describes the new attributes that allow traversal of elements in the DOM&nbsp;tree \n<span>New in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/Firefox_3.5_for_developers\">Firefox 3.5</a></span>\n</li>\n</ul>\n<p>The articles listed here span the above and include links to the appropriate W3C DOM specification.</p>\n<p>While these interfaces are generally shared by most HTML and XML elements, there are more specialized interfaces for particular objects listed in the DOM HTML Specification. Note, however, that these HTML&nbsp;interfaces are \"only for [HTML 4.01] and [XHTML 1.0] documents and are not guaranteed to work with any future version of XHTML.\" The HTML 5 draft does state it aims for backwards compatibility with these HTML&nbsp;interfaces but says of them that \"some features that were formerly deprecated, poorly supported, rarely used or considered unnecessary have been removed.\" One can avoid the potential conflict by moving entirely to DOM&nbsp;XML attribute methods such as <code>getAttribute()</code>.</p>\n<p><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLHtmlElement\">Html</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLHeadElement\">Head</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLinkElement\">Link</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTitleElement\">Title</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLMetaElement\">Meta</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLBaseElement\">Base</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLIsIndexElement\" class=\"new\">IsIndex</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLStyleElement\">Style</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLBodyElement\">Body</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLFormElement\">Form</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLSelectElement\">Select</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLOptGroupElement\" class=\"new\">OptGroup</a></code>\n, <a title=\"en/HTML/Element/HTMLOptionElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/HTMLOptionElement\" class=\"new \">Option</a>, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLInputElement\">Input</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTextAreaElement\">TextArea</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLButtonElement\">Button</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLabelElement\">Label</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLFieldSetElement\">FieldSet</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLLegendElement\">Legend</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HTMLUListElement\" class=\"new\">UList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/OList\" class=\"new\">OList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DList\" class=\"new\">DList</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Directory\" class=\"new\">Directory</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Menu\" class=\"new\">Menu</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/LI\" class=\"new\">LI</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Div\" class=\"new\">Div</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Paragraph\" class=\"new\">Paragraph</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Heading\" class=\"new\">Heading</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Quote\" class=\"new\">Quote</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Pre\" class=\"new\">Pre</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/BR\" class=\"new\">BR</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/BaseFont\" class=\"new\">BaseFont</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Font\" class=\"new\">Font</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/HR\" class=\"new\">HR</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Mod\" class=\"new\">Mod</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLAnchorElement\">Anchor</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Image\" class=\"new\">Image</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLObjectElement\">Object</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Param\" class=\"new\">Param</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Applet\" class=\"new\">Applet</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Map\" class=\"new\">Map</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Area\" class=\"new\">Area</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Script\" class=\"new\">Script</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTableElement\">Table</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCaption\" class=\"new\">TableCaption</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCol\" class=\"new\">TableCol</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableSection\" class=\"new\">TableSection</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLTableRowElement\">TableRow</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/TableCell\" class=\"new\">TableCell</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/FrameSet\" class=\"new\">FrameSet</a></code>\n, <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Frame\" class=\"new\">Frame</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLIFrameElement\">IFrame</a></code>\n</p>","members":[{"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":" Register an event handler to a specific event type on the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.appendChild","name":"appendChild","help":" Insert a node as the last child node of this element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.blur","name":"blur","help":" Removes keyboard focus from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.click","name":"click","help":" Simulates a click on the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.cloneNode","name":"cloneNode","help":" Clone a node, and optionally, all of its contents.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.compareDocumentPosition","name":"compareDocumentPosition","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dispatchEvent","name":"dispatchEvent","help":" Dispatch an event to this node in the DOM.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.focus","name":"focus","help":" Gives keyboard focus to the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttribute","name":"getAttribute","help":" Retrieve the value of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNS","name":"getAttributeNS","help":" Retrieve the value of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNode","name":"getAttributeNode","help":" Retrieve the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getAttributeNodeNS","name":"getAttributeNodeNS","help":" Retrieve the node representation of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getBoundingClientRect","name":"getBoundingClientRect","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.getElementsByClassName","name":"getElementsByClassName","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getElementsByTagName","name":"getElementsByTagName","help":" Retrieve a set of all descendant elements, of a particular tag name, from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.getElementsByTagNameNS","name":"getElementsByTagNameNS","help":" Retrieve a set of all descendant elements, of a particular tag name and namespace, from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Node.getFeature","name":"getFeature","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.getUserData","name":"getUserData","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.hasAttribute","name":"hasAttribute","help":" Check if the element has the specified attribute, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.hasAttributeNS","name":"hasAttributeNS","help":" Check if the element has the specified attribute, in the specified namespace, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.hasAttributes","name":"hasAttributes","help":" Check if the element has any attributes, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.hasChildNodes","name":"hasChildNodes","help":" Check if the element has any child nodes, or not.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.insertBefore","name":"insertBefore","help":" Inserts the first node before the second, child, Node in the DOM.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isDefaultNamespace","name":"isDefaultNamespace","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isEqualNode","name":"isEqualNode","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isSameNode","name":"isSameNode","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.isSupported","name":"isSupported","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lookupNamespaceURI","name":"lookupNamespaceURI","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lookupPrefix","name":"lookupPrefix","help":"","obsolete":false},{"name":"webkitMatchesSelector","help":" Returns whether or not the element would be selected by the specified selector string.","obsolete":false},{"name":"webkitRequestFullScreen","help":" Asynchronously asks the browser to make the element full-screen.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.normalize","name":"normalize","help":" Clean up all the text nodes under this element (merge adjacent, remove empty).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.querySelector","name":"querySelector","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.querySelectorAll","name":"querySelectorAll","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttribute","name":"removeAttribute","help":" Remove the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttributeNS","name":"removeAttributeNS","help":" Remove the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeAttributeNode","name":"removeAttributeNode","help":" Remove the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.removeChild","name":"removeChild","help":" Removes a child node from the current element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":" Removes an event listener from the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.replaceChild","name":"replaceChild","help":" Replaces one child node in the current element with another.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollIntoView","name":"scrollIntoView","help":" Scrolls the page until the element gets into the view.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttribute","name":"setAttribute","help":" Set the value of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNS","name":"setAttributeNS","help":" Set the value of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNode","name":"setAttributeNode","help":" Set the node representation of the named attribute from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setAttributeNodeNS","name":"setAttributeNodeNS","help":" Set the node representation of the attribute with the specified name and namespace, from the current node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.setCapture","name":"setCapture","help":" Sets up mouse event capture, redirecting all mouse events to this element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.setIdAttributeNS","name":"setIdAttributeNS","help":" Sets the attribute to be treated as an ID type attribute.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.setIdAttributeNode","name":"setIdAttributeNode","help":" Sets the attribute to be treated as an ID type attribute.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.setUserData","name":"setUserData","help":"","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.insertAdjacentHTML","name":"insertAdjacentHTML","help":" Parses the text as HTML or XML and inserts the resulting nodes into the tree in the position given.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.attributes","name":"attributes","help":"All attributes associated with an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.baseURI","name":"baseURI","help":"Base URI as a string","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.baseURIObject","name":"baseURIObject","help":"The read-only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIURI\">nsIURI</a></code>\n object representing the base URI for the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.childElementCount","name":"childElementCount","help":"The number of child nodes that are elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.childNodes","name":"childNodes","help":"All child nodes of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.children","name":"children","help":"A live <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIDOMNodeList&amp;ident=nsIDOMNodeList\" class=\"new\">nsIDOMNodeList</a></code>\n of the current child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.classList","name":"classList","help":"Token list of class attribute","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.className","name":"className","help":"Gets/sets the class of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientHeight","name":"clientHeight","help":"The inner height of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientLeft","name":"clientLeft","help":"The width of the left border of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientTop","name":"clientTop","help":"The width of the top border of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.clientWidth","name":"clientWidth","help":"The inner width of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.contentEditable","name":"contentEditable","help":"Gets/sets whether or not the element is editable.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dataset","name":"dataset","help":"Allows access to read and write custom data attributes on the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dir","name":"dir","help":"Gets/sets the directionality of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.firstChild","name":"firstChild","help":"The first direct child node of an element, or <code>null</code> if this element has no child nodes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.firstElementChild","name":"firstElementChild","help":"The first direct child element of an element, or <code>null</code> if the element has no child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.id","name":"id","help":"Gets/sets the id of the element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.innerHTML","name":"innerHTML","help":"Gets/sets the markup of the element's content.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.isContentEditable","name":"isContentEditable","help":"Indicates whether or not the content of the element can be edited. Read only.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.lang","name":"lang","help":"Gets/sets the language of an element's attributes, text, and element contents.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.lastChild","name":"lastChild","help":"The last direct child node of an element, or <code>null</code> if this element has no child nodes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.lastElementChild","name":"lastElementChild","help":"The last direct child element of an element, or <code>null</code> if the element has no child elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.localName","name":"localName","help":"The local part of the qualified name of an element. In Firefox 3.5 and earlier, the property upper-cases the local name for HTML&nbsp;elements (but not XHTML&nbsp;elements). In later versions, this does not happen, so the property is in lower case for both HTML&nbsp;and XHTML. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.name","name":"name","help":"Gets/sets the name attribute of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.namespaceURI","name":"namespaceURI","help":"The namespace URI of this node, or <code>null</code> if it is no namespace. In Firefox 3.5 and earlier, HTML&nbsp;elements are in no namespace. In later versions, HTML&nbsp;elements are in the <code><a class=\"linkification-ext external\" title=\"Linkification: http://www.w3.org/1999/xhtml\" rel=\"external\" href=\"http://www.w3.org/1999/xhtml\" target=\"_blank\">http://www.w3.org/1999/xhtml</a></code> namespace in both HTML&nbsp;and XML&nbsp;trees. \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nextSibling","name":"nextSibling","help":"The node immediately following the given one in the tree, or <code>null</code> if there is no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.nextElementSibling","name":"nextElementSibling","help":"The element immediately following the given one in the tree, or <code>null</code> if there's no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeName","name":"nodeName","help":"The name of the node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodePrincipal","name":"nodePrincipal","help":"The node's principal.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeType","name":"nodeType","help":"A number representing the type of the node. Is always equal to <code>1</code> for DOM elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.nodeValue","name":"nodeValue","help":"The value of the node. Is always equal to <code>null</code> for DOM elements.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetHeight","name":"offsetHeight","help":"The height of an element, relative to the layout.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetLeft","name":"offsetLeft","help":"The distance from this element's left border to its <code>offsetParent</code>'s left border.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetParent","name":"offsetParent","help":"The element from which all offset calculations are currently computed.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetTop","name":"offsetTop","help":"The distance from this element's top border to its <code>offsetParent</code>'s top border.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.offsetWidth","name":"offsetWidth","help":"The width of an element, relative to the layout.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.outerHTML","name":"outerHTML","help":"Gets the markup of the element including its content. When used as a setter, replaces the element with nodes parsed from the given string.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.ownerDocument","name":"ownerDocument","help":"The document that this node is in, or <code>null</code> if the node is not inside of one.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.parentNode","name":"parentNode","help":"The parent element of this node, or <code>null</code> if the node is not inside of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/document\">DOM Document</a></code>\n.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.prefix","name":"prefix","help":"The namespace prefix of the node, or <code>null</code> if no prefix is specified.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.previousSibling","name":"previousSibling","help":"The node immediately preceding the given one in the tree, or <code>null</code> if there is no sibling node.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Element.previousElementSibling","name":"previousElementSibling","help":"The element immediately preceding the given one in the tree, or <code>null</code> if there is no sibling element.","obsolete":false},{"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.schemaTypeInfo","name":"schemaTypeInfo","help":"Returns TypeInfo regarding schema information for the element (also available on <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr\">Attr</a></code>\n).","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollHeight","name":"scrollHeight","help":"The scroll view height of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollLeft","name":"scrollLeft","help":"Gets/sets the left scroll offset of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollTop","name":"scrollTop","help":"Gets/sets the top scroll offset of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.scrollWidth","name":"scrollWidth","help":"The scroll view width of an element.","obsolete":false},{"url":"https://developer.mozilla.org/en/XUL/Attribute/spellcheck","name":"spellcheck","help":"Controls <a title=\"en/Controlling_spell_checking_in_HTML_forms\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Controlling_spell_checking_in_HTML_forms\">spell-checking</a> (present on all HTML&nbsp;elements)","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.style","name":"style","help":"An object representing the declarations of an element's style attributes.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.tabIndex","name":"tabIndex","help":"Gets/sets the position of the element in the tabbing order.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.tagName","name":"tagName","help":"The name of the tag for the given element.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Node.textContent","name":"textContent","help":"Gets/sets the textual contents of an element and all its descendants.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.title","name":"title","help":"A string that appears in a popup box when mouse is over the element.","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeyup","name":"onkeyup","help":"Returns the event handling code for the keyup event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.oncut","name":"oncut","help":"Returns the event handling code for the cut event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onbeforescriptexecute","name":"onbeforescriptexecute","help":"The event handling code for the <code>beforescriptexecute</code> event; this is used only for <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/script\">&lt;script&gt;</a></code>\n elements."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeydown","name":"onkeydown","help":"Returns the event handling code for the keydown event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onpaste","name":"onpaste","help":"Returns the event handling code for the paste event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeypress","name":"onkeypress","help":"Returns the event handling code for the keypress event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onscroll","name":"onscroll","help":"Returns the event handling code for the scroll event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseout","name":"onmouseout","help":"Returns the event handling code for the mouseout event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmousemove","name":"onmousemove","help":"Returns the event handling code for the mousemove event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onclick","name":"onclick","help":"Returns the event handling code for the click event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.oncopy","name":"oncopy","help":"Returns the event handling code for the copy event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onresize","name":"onresize","help":"Returns the event handling code for the resize event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onblur","name":"onblur","help":"Returns the event handling code for the blur event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseover","name":"onmouseover","help":"Returns the event handling code for the mouseover event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onafterscriptexecute","name":"onafterscriptexecute","help":"The event handling code for the <code>afterscriptexecute</code> event; this is used only for <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/script\">&lt;script&gt;</a></code>\n elements."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.ondblclick","name":"ondblclick","help":"Returns the event handling code for the dblclick event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onfocus","name":"onfocus","help":"Returns the event handling code for the focus event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmousedown","name":"onmousedown","help":"Returns the event handling code for the mousedown event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseup","name":"onmouseup","help":"Returns the event handling code for the mouseup event."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.oncontextmenu","name":"oncontextmenu","help":"Returns the event handling code for the contextmenu event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onchange","name":"onchange","help":"Returns the event handling code for the change event."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.onbeforeunload","name":"onbeforeunload","help":"Returns the event handling code for the beforeunload event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeyup","name":"onkeyup","help":"Returns the event handling code for the keyup event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.oncut","name":"oncut","help":"Returns the event handling code for the cut event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeydown","name":"onkeydown","help":"Returns the event handling code for the keydown event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onpaste","name":"onpaste","help":"Returns the event handling code for the paste event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onkeypress","name":"onkeypress","help":"Returns the event handling code for the keypress event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onscroll","name":"onscroll","help":"Returns the event handling code for the scroll event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseout","name":"onmouseout","help":"Returns the event handling code for the mouseout event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmousemove","name":"onmousemove","help":"Returns the event handling code for the mousemove event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onclick","name":"onclick","help":"Returns the event handling code for the click event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.oncopy","name":"oncopy","help":"Returns the event handling code for the copy event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onblur","name":"onblur","help":"Returns the event handling code for the blur event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseover","name":"onmouseover","help":"Returns the event handling code for the mouseover event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.ondblclick","name":"ondblclick","help":"Returns the event handling code for the dblclick event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onfocus","name":"onfocus","help":"Returns the event handling code for the focus event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmousedown","name":"onmousedown","help":"Returns the event handling code for the mousedown event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onmouseup","name":"onmouseup","help":"Returns the event handling code for the mouseup event."},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/element.oncontextmenu","name":"oncontextmenu","help":"Returns the event handling code for the contextmenu event."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/element.onchange","name":"onchange","help":"Returns the event handling code for the change event."}],"srcUrl":"https://developer.mozilla.org/en/DOM/element"},"SVGLineElement":{"title":"SVGLineElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGLineElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n SVG Element","summary":"The <code>SVGLineElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"x1","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/x1\">x1</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n element.","obsolete":false},{"name":"y1","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/y1\">y1</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n element.","obsolete":false},{"name":"x2","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/x2\">x2</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n element.","obsolete":false},{"name":"y2","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/y2\">y2</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n element.","obsolete":false}]},"SVGFETurbulenceElement":{"title":"feTurbulence","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The filter primitive creates a perturbation image, like cloud or marble textures.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/stitchTiles","name":"stitchTiles","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/numOctaves","name":"numOctaves","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/seed","name":"seed","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/baseFrequency","name":"baseFrequency","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/type","name":"type","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feTurbulence"},"CSSFontFaceRule":{"title":"CSSRule","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/cssRule","skipped":true,"cause":"Suspect title"},"DOMImplementation":{"title":"DOMImplementation","summary":"Provides methods which are not dependent on any particular DOM instances. Returned by <code><a title=\"En/DOM/Document.implementation\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.implementation\">document.implementation</a></code>.","members":[{"url":"https://developer.mozilla.org/En/DOM/DOMImplementation.createDocument","name":"createDocument","help":"","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/DOMImplementation.createDocumentType","name":"createDocumentType","help":"","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/DOMImplementation.createHTMLDocument","name":"createHTMLDocument","help":"","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/DOMImplementation.getFeature","name":"getFeature","help":"","obsolete":false},{"url":"https://developer.mozilla.org/En/DOM/DOMImplementation.hasFeature","name":"hasFeature","help":"","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/DOMImplementation","specification":"DOM&nbsp;Level 3"},"HTMLAudioElement":{"title":"HTMLAudioElement","seeAlso":"<li><a title=\"en/Introducing the Audio API Extension\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension\">Introducing the Audio API Extension</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n</li>","summary":"<p>The <code>HTMLAudioElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n&nbsp;elements, as well as methods to manipulate them. It's derived from the <a title=\"en/DOM/HTMLMediaElement\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/HTMLMediaElement\" class=\" new\"><code>HTMLMediaElement</code></a> interface; it's implemented by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMHTMLMediaElement\">nsIDOMHTMLMediaElement</a></code>\n.</p>\n<p>For details on how to use the audio streaming features exposed by this interface, please see <a title=\"en/Introducing the Audio API Extension\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension\">Introducing the Audio API Extension</a>.</p>","members":[{"name":"webkitWriteAudio","help":"Writes audio into the stream at the current offset. Returns the number of bytes actually written to the stream.","obsolete":false},{"name":"webkitCurrentSampleOffset","help":"Indicates the current offset of the audio stream that was created by a call to <code>mozWriteAudio()</code>. This offset is specified as the number of samples since the beginning of the stream.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/HTMLAudioElement"},"SVGSetElement":{"title":"SVGSetElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGSetElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSetElement"},"SVGFEImageElement":{"title":"feImage","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animateTransform\">&lt;animateTransform&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The feImage filter fetches image data from an external source and provides the pixel data as output.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/preserveAspectRatio","name":"preserveAspectRatio","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feImage"},"IDBIndex":{"title":"IDBIndex","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12\n<span title=\"prefix\">-webkit</span>&nbsp;</td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>count()</code></td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>count()</code></td> <td><span title=\"Not supported.\">--</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<p>The following is an example based on the HTML5Rocks article on <a class=\"external\" rel=\"external\" href=\"http://www.html5rocks.com/en/tutorials/indexeddb/todo/#toc-step4\" title=\"http://www.html5rocks.com/en/tutorials/indexeddb/todo/#toc-step4\" target=\"_blank\">IndexedDB</a>. For Chrome, use the <code>webkit</code> prefix. For example, <code>IDBKeyRange</code> would be <code>webkitIDBKeyRange</code>.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nif ('webkitIndexedDB' in window) {\n   window.indexedDB = window.webkitIndexedDB;\n   window.IDBTransaction = window.webkitIDBTransaction;\n   window.IDBKeyRange = window.webkitIDBKeyRange;\n} else if ('mozIndexedDB' in window) {\n   window.indexedDB = window.mozIndexedDB;\n}\n\n...\n  \nhtml5rocks.indexedDB.getAllTodoItems = function() {\n  var todos = document.getElementById(\"todoItems\");\n  todos.innerHTML = \"\";\n  \n  // Start a transaction.\n  var db = html5rocks.indexedDB.db;\n  // Open an object store called \"todo\" \n  // in \"READ_WRITE\" mode. \n  var trans = db.transaction([\"todo\"], IDBTransaction.READ_WRITE, 0);\n  var store = trans.objectStore(\"todo\");\n\n  // We select the range of data we want to make queries over \n  // In this case, we get everything. \n  // To see how you set ranges, see IDBKeyRange.\n  var keyRange = IDBKeyRange.lowerBound(0);\n  // We open a cursor and attach events.\n  var cursorRequest = store.openCursor(keyRange);\n\n  cursorRequest.onsuccess = function(e) {\n    var result = e.target.result;\n    if(!!result == false)\n      return;\n\n    renderTodo(result.value);\n    // The success event handler is fired once for each entry.\n    // So call \"continue\" on your result object.\n    // This lets you iterate across the data\n\n    result.continue();\n  };\n\n  cursorRequest.onerror = html5rocks.indexedDB.onerror;\n};</pre>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBIndex","summary":"<p>The <code>IDBIndex</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a> provides asynchronous access to an <a title=\"en/IndexedDB#gloss index\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_index\">index</a> in a database. An index is a kind of object store for looking up records in another object store, called the <em>referenced object store</em>. You use this interface to retrieve data.</p>\n<p>Inherits from: <a title=\"en/DOM/EventTarget\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/EventTarget\">EventTarget</a></p>","members":[{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The index's transaction is not active.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The <code>key</code> parameter was not a valid value.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The request was made on a source object that has been deleted or removed.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The index's transaction is not active.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The <code>key</code> parameter was not a valid value.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The request was made on a source object that has been deleted or removed.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The <code>key</code> parameter was not a valid value.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The request was made on a source object that has been deleted or removed.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The index's transaction is not active.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The <code>key</code> parameter was not a valid value.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The request was made on a source object that has been deleted or removed.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The index's transaction is not active.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The <code>key</code> parameter was not a valid value.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The request was made on a source object that has been deleted or removed.","obsolete":false},{"name":"openKeyCursor","help":"<p>Returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, creates a cursor over the specified key range, as arranged by this index. The method sets the position of the cursor to the appropriate record, based on the specified direction.</p>\n<ul> <li>If the key range is not specified or is null, then the range includes all the records.</li> <li>If at least one record matches the key range, then a <a title=\"en/IndexedDB/IDBSuccessEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent\">success event</a> is fired on the result object, with its <a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a> set to the new <a title=\"en/IndexedDB/IDBCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor\">IDBCursor</a> object; the <code><a title=\"en/IndexedDB/IDBCursor#attr value\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor#attr_value\">value</a></code> of the cursor object is set to the value of the found record.</li> <li>If no records match the key range, then then an <a title=\"en/IndexedDB/IDBErrorEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent\">error event</a> is fired on the request object, with its <code><a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a></code> set to <code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\" rel=\"internal\">NOT_FOUND_ERR</a></code> and a suitable <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code>.</li>\n</ul>\n<pre>IDBRequest openKeyCursor (\n  in optional any? range, \n  in optional unsigned short direction\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_23\"><span id=\"Parameters_5\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>range</dt> <dd><em>Optional.</em> The key range to use as the cursor's range.</dd> <dt>direction</dt> <dd><em>Optional.</em> The cursor's required direction. See <a title=\"en/IndexedDB/IDBCursor#Constants\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor#Constants\">IDBCursor Constants</a> for possible values.</dd>\n</dl>\n</div><div id=\"section_24\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\">IDBRequest</a></code></dt>\n</dl>\n<dl> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_25\"><span id=\"Exceptions_5\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\"><code>TRANSACTION_INACTIVE_ERR</code></a></td> <td>The index's transaction is not active.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>The <code>key</code> parameter was not a valid value.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The request was made on a source object that has been deleted or removed.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"openCursor","help":"<p>Returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, creates a <a title=\"en/IndexedDB#gloss cursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_cursor\">cursor</a> over the specified key range. The method sets the position of the cursor to the appropriate record, based on the specified direction.</p>\n<ul> <li>If the key range is not specified or is null, then the range includes all the records.</li> <li>If at least one record matches the key range, then a <a title=\"en/IndexedDB/IDBSuccessEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent\">success event</a> is fired on the result object, with its <a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a> set to the new <a title=\"en/IndexedDB/IDBCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor\">IDBCursor</a> object; the <code><a title=\"en/IndexedDB/IDBCursor#attr value\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor#attr_value\">value</a></code> of the cursor object is set to a structured clone of the referenced value.</li> <li>If no records match the key range, then then an <a title=\"en/IndexedDB/IDBErrorEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent\">error event</a> is fired on the request object, with its <code><a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a></code> set to <code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\" rel=\"internal\">NOT_FOUND_ERR</a></code> and a suitable <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code>.</li>\n</ul>\n<pre>IDBRequest openCursor (\n  in optional any? range, \n  in optional unsigned short direction\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_19\"><span id=\"Parameters_4\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>range</dt> <dd><em>Optional.</em> The key range to use as the cursor's range.</dd> <dt>direction</dt> <dd><em>Optional.</em> The cursor's required <a title=\"en/indexedDB#gloss direction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_direction\">direction</a>. See <a title=\"en/IndexedDB/IDBCursor#Constants\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor#Constants\">IDBCursor Constants</a> for possible values.</dd>\n</dl>\n</div><div id=\"section_20\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\">IDBRequest</a></code></dt>\n</dl>\n<dl> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_21\"><span id=\"Exceptions_4\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\"><code>TRANSACTION_INACTIVE_ERR</code></a></td> <td>The index's transaction is not active.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>The <code>key</code> parameter was not a valid value.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The request was made on a source object that has been deleted or removed.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"get","help":"<p>Returns an <a title=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, finds either:</p>\n<ul> <li>The value in the referenced object store that corresponds to the given key.</li> <li>The first corresponding value, if <code>key</code> is a key range.</li>\n</ul>\n<p>If a value is successfully found, then a structured clone of it is created and set as the <code><a title=\"en/IndexedDB/IDBRequest#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest#attr_result\">result</a></code> of the request object.</p>\n<p></p><div class=\"note\"><strong>Note:</strong>&nbsp;This method produces the same result for: a) a record that doesn't exist in the database and b) a record that has an undefined value. To tell these situations apart, call the openCursor() method with the same key. That method provides a cursor if the record exists, and not if it does not.</div>\n<p></p>\n<pre>IDBRequest get (\n  in any key\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key or key range that identifies the record to be retrieved.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\">IDBRequest</a></code></dt>\n</dl>\n<dl> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_9\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\"><code>TRANSACTION_INACTIVE_ERR</code></a></td> <td>The index's transaction is not active.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>The <code>key</code> parameter was not a valid value.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The request was made on a source object that has been deleted or removed.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"getKey","help":"<p>Returns an <a title=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, finds either:</p>\n<ul> <li>The value in the index that corresponds to the given key</li> <li>The first corresponding value, if <code>key</code> is a key range.</li>\n</ul>\n<p>If a value is successfully found, then a structured clone of it is created and set as the <code><a title=\"en/IndexedDB/IDBRequest#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest#attr_result\">result</a></code> of the request object.</p>\n<p></p><div class=\"note\"><strong>Note:</strong>&nbsp;This method produces the same result for: a) a record that doesn't exist in the database and b) a record that has an undefined value. To tell these situations apart, call the openCursor() method with the same key. That method provides a cursor if the record exists, and not if it does not.</div>\n<p></p>\n<pre>IDBRequest getKey (\n  in any key\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_11\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key or key range that identifies the record to be retrieved.</dd>\n</dl>\n</div><div id=\"section_12\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\">IDBRequest</a></code></dt>\n</dl>\n<dl> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise a <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\"><code>TRANSACTION_INACTIVE_ERR</code></a></td> <td>The index's transaction is not active.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>The <code>key</code> parameter was not a valid value.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The request was made on a source object that has been deleted or removed.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"count","help":"<p>Returns an <a title=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and in a separate thread, returns the number of records within a key range. For example, if you want to see how many records are between keys 1000 and 2000 in an object store, you can write the following: <code> var req = store.count(<a title=\"en/IndexedDB/IDBKeyRange\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBKeyRange\">IDBKeyRange</a>.bound(1000, 2000));</code></p>\n<pre>IDBRequest count (\n  in optional any key\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key or key range that identifies the record to be counted.</dd>\n</dl></div><div id=\"section_16\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\" rel=\"internal\">IDBRequest</a></code></dt>\n</dl>\n<dl> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_17\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise a <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>The <code>key</code> parameter was not a valid value.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The request was made on a source object that has been deleted or removed.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false}]},"DatabaseSync":{"title":"IDBDatabaseSync","summary":"<div><strong>DRAFT</strong>\n<div>This page is not complete.</div>\n</div>\n\n<p></p>\n<p>The <code>DatabaseSync</code> interface in the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a> represents a synchronous <a title=\"en/IndexedDB#gloss database connection\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_database_connection\">connection to a database</a>.</p>","members":[{"name":"setVersion","help":"<p>Sets the version of the connected database.</p>\n<pre>void setVersion (\n  in DOMString version\n);\n</pre>\n<div id=\"section_17\"><span id=\"Parameters_4\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>version</dt> <dd>The version to store in the database.</dd> <div id=\"section_18\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5> <p><code>void</code></p>\n</div></dl>\n</div>","obsolete":false},{"name":"transaction","help":"<p>Creates and returns a transaction, acquiring locks on the given database objects, within the specified timeout duration, if possible.</p>\n<pre>IDBTransactionSync transaction (\n  in optional DOMStringList storeNames,\n  in optional unsigned int timeout\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_20\"><span id=\"Parameters_5\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>storeNames</dt> <dd>The names of object stores and indexes in the scope of the new transaction.</dd> <dt>timeout</dt> <dd>The interval that this operation is allowed to take to acquire locks on all the objects stores and indexes identified in <code>storeNames</code>.</dd>\n</dl>\n</div><div id=\"section_21\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/TransactionSync\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionSync\">IDBTransactionSync</a></code></dt> <dd>An object to access the newly created transaction.</dd>\n</dl>\n</div><div id=\"section_22\"><span id=\"Exceptions_4\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an IDBDatabaseException with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#TIMEOUT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TIMEOUT_ERR\">TIMEOUT_ERR</a></code></dt> <dd>If reserving all the database objects identified in <code>storeNames</code> takes longer than the <code>timeout</code> interval.</dd>\n</dl></div>","obsolete":false},{"name":"removeObjectStore","help":"<p>Destroys an object store with the given name, as well as all indexes that reference that object store.</p>\n<pre>void removeObjectStore (\n  in DOMString storeName\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_13\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>storeName</dt> <dd>The name of an existing object store to remove.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<p><code>void</code></p>\n</div><div id=\"section_15\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an IDBDatabaseException with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></dt>\n</dl>\n<dl> <dd>If the object store with the given name (based on case-sensitive comparison) does not exist in the connected database.</dd>\n</dl>\n</div>","obsolete":false},{"name":"createObjectStore","help":"<p>Creates and returns a new object store with the given name in the connected database.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of a new object store.</dd> <dt>keypath</dt> <dd>The <a title=\"en/IndexedDB#gloss key path\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_path\">key path</a> used by the new object store. If a null path is specified, then the object store does not have a key path, and uses out-of-line keys.</dd> <dt>autoIncrement</dt> <dd>If true, the object store uses a <a title=\"en/IndexedDB#gloss key generator\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_generator\">key generator</a>; if false, it does not use one.</dd>\n</dl>\n</div><div id=\"section_6\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/ObjectStoreSync\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStoreSync\"><code>IDBObjectStoreSync</code></a></dt> <dd>An object to access the newly created object store.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an IDBDatabaseException with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#CONSTRAINT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#CONSTRAINT_ERR\">CONSTRAINT_ERR</a></code></dt> <dd>If an object store with the same name (based on case-sensitive comparison) already exists in the connected database.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\"> IDBObjectStoreSync createObjectStore(   \n  in DOMString name,   \n  in DOMString keypath,   \n  in optional boolean autoIncrement \n) raises  (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"openObjectStore","help":"<p>Opens the object store with the given name in the connected database using the specified mode.</p>\n<pre>IDBObjectStoreSync openObjectStore (\n  in DOMString name, \n  in optional unsigned short mode\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_9\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the object store to open.</dd> <dt>mode</dt> <dd>The mode that is used to access the object store.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/ObjectStoreSync\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBObjectStoreSync\"><code>IDBObjectStoreSync</code></a></dt> <dd>An object to access the opened object store.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an IDBDatabaseException with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></dt> <dd>If an object store with the given name (based on case-sensitive comparison) already exists in the connected database.</dd>\n</dl>\n</div>","obsolete":false},{"url":"","name":"name","help":"The name of the connected database.","obsolete":false},{"url":"","name":"objectStores","help":"The names of the object stores that exist in the connected database.","obsolete":false},{"url":"","name":"version","help":"The version of the connected database. Has the null value when the database is first created.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseSync"},"DOMTokenList":{"title":"DOMTokenList","summary":"This type represents a set of space-separated tokens. Commonly returned by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element.classList\">HTMLElement.classList</a></code>\n, HTMLLinkElement.relList, HTMLAnchorElement.relList or HTMLAreaElement.relList. It is indexed beginning with 0 as with JavaScript arrays. DOMTokenList is always case-sensitive.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.remove","name":"remove","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.contains","name":"contains","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.add","name":"add","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.item","name":"item","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.toggle","name":"toggle","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/DOMTokenList.length","name":"length","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/DOMTokenList","specification":"http://www.whatwg.org/specs/web-apps/current-work/#domtokenlist"},"HTMLHeadElement":{"title":"HTMLHeadElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/head\">&lt;head&gt;</a></code>\n HTML&nbsp;element","summary":"The DOM <code>head</code> element exposes the <a title=\"http://www.w3.org/TR/html5/semantics.html#htmlheadelement\" class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/html5/semantics.html#htmlheadelement\" target=\"_blank\">HTMLHeadElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span>&nbsp; <a class=\" external\" target=\"_blank\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-77253168\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-77253168\">HTMLHeadElement</a>) interface, which contains the descriptive information, or metadata, for a document. This object inherits all of the properties and methods described in the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a></code>\n section. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>, this interface inherits from HTMLElement, but defines no additional members.","members":[{"name":"profile","help":"The URIs of one or more metadata profiles (white space separated). \n\n<span class=\"deprecatedInlineTemplate\" title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Deprecated since Gecko 2.0</span>\n\n \n\n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Obsolete since Gecko 7.0</span>","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLHeadElement"},"SVGFEPointLightElement":{"title":"fePointLight","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDistantLight\">&lt;feDistantLight&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpotLight\">&lt;feSpotLight&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/fePointLight"},"SVGPolylineElement":{"title":"polyline","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> \n<tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n8.0</td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","examples":["<tr> <th scope=\"col\">Source code</th> <th scope=\"col\">Output result</th> </tr> <tr> <td>\n          <pre name=\"code\" class=\"xml\">&lt;?xml version=\"1.0\"?&gt;\n&lt;svg width=\"120\" height=\"120\" \n     viewPort=\"0 0 120 120\" version=\"1.1\"\n     xmlns=\"http://www.w3.org/2000/svg\"&gt;\n\n    &lt;polyline fill=\"none\" stroke=\"black\" \n              points=\"20,100 40,60 70,80 100,20\"/&gt;\n\n&lt;/svg&gt;</pre>\n        </td> <td>\n<iframe src=\"https://developer.mozilla.org/@api/deki/services/developer.mozilla.org/39/images/00770706-ef3b-c098-02e7-ff059dc17fa0.svg\" width=\"120px\" height=\"120px\" marginwidth=\"0\" marginheight=\"0\" hspace=\"0\" vspace=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe>\n</td> </tr>"],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/polyline","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/line\">&lt;line&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/polygon\">&lt;polygon&gt;</a></code>\n</li>","summary":"The <code>polyline</code> element is an SVG basic shape, used to create a series of straight lines connecting several points. Typically a <code>polyline</code> is used to create open shapes","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/points","name":"points","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/transform","name":"transform","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""}]},"FileEntrySync":{"title":"FileEntrySync","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>FileEntrySync</code>&nbsp;interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents a file in a file system.</p>","members":[{"name":"createWriter","help":"<p>Creates a new <code>FileWriter</code> associated with the file that the <code>FileEntry</code> represents.</p>\n<pre>void createWriter (\n in FileWriterCallback successCallback, optional ErrorCallback errorCallback\n);</pre>\n<div id=\"section_4\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the new <code>FileWriter</code>.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_5\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"file","help":"<p>Returns a File that represents the current state of the file that this <code>FileEntry</code> represents.</p>\n<pre>void file (\n  <em>FileCallback successCallback, optional ErrorCallback errorCallback</em>\n);</pre>\n<div id=\"section_7\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called with the new <code>FileWriter</code>.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/FileEntrySync"},"SVGFilterElement":{"title":"filter","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<p></p><div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th scope=\"col\">Feature</th> <th scope=\"col\">Chrome</th> <th scope=\"col\">Firefox (Gecko)</th> <th scope=\"col\">Internet Explorer</th> <th scope=\"col\">Opera</th> <th scope=\"col\">Safari</th> </tr><tr><td>Basic Support</td><td>1.0 [1]</td><td>4.0 (2.0)\n</td><td>\n10.0</td><td>9.0\n</td><td>\n3.0 [1]</td></tr></tbody></table></div>\n <div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th scope=\"col\">Feature</th> <th scope=\"col\">Android</th> <th scope=\"col\">Firefox Mobile (Gecko)</th> <th scope=\"col\">IE Phone</th> <th scope=\"col\">Opera Mobile</th> <th scope=\"col\">Safari Mobile</th> </tr><tr><td>Basic Support</td><td><span title=\"Compatibility unknown; please update this.\">?</span></td><td>4.0 (2.0)\n</td><td><span title=\"Not supported.\">--</span></td><td>9.5\n</td><td>\n3.0 [1]</td></tr></tbody></table></div><p></p>\n<p id=\"compatWebkit\">[1] There remain <a class=\"link-https\" rel=\"external\" href=\"https://bugs.webkit.org/show_bug.cgi?id=26389\" title=\"https://bugs.webkit.org/show_bug.cgi?id=26389\" target=\"_blank\">some issues</a> in Webkit browsers.</p>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","srcUrl":"https://developer.mozilla.org/en/SVG/Element/filter","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The <code>filter</code> element serves as container for atomic filter operations. It is never rendered directly. A filter is referenced by using the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/filter\" class=\"new\">filter</a></code> attribute on the target SVG element.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/filterRes","name":"filterRes","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/height","name":"height","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/primitiveUnits","name":"primitiveUnits","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/width","name":"width","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/filterUnits","name":"filterUnits","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""}]},"EntryCallback":{"title":"DirectoryEntrySync","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryEntrySync","skipped":true,"cause":"Suspect title"},"AudioBuffer":{"title":"Introducing the Audio API extension","members":[],"srcUrl":"https://developer.mozilla.org/en/Introducing_the_Audio_API_Extension","skipped":true,"cause":"Suspect title"},"SVGAnimatedString":{"title":"SVGAnimatedString","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedString</code> interface is used for attributes of type <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMString\">DOMString</a></code>\n which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedString"},"RangeException":{"title":"window.btoa","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/window.btoa","skipped":true,"cause":"Suspect title"},"ProcessingInstruction":{"title":"ProcessingInstruction","srcUrl":"https://developer.mozilla.org/en/DOM/ProcessingInstruction","specification":"DOM Level 1 Core: ProcessingInstruction interface","seeAlso":"document.createProcessingInstruction","summary":"<p>A processing instruction provides an opportunity for application-specific instructions to be embedded within XML and which can be ignored by XML processors which do not support processing their instructions (outside of their having a place in the DOM).</p>\n<p>A Processing instruction is distinct from a <a title=\"en/XML/XML_Declaration\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XML/XML_Declaration\" class=\"new \">XML Declaration</a> which is used for other information about the document such as encoding and which appear (if it does) as the first item in the document.</p>\n<p>User-defined processing instructions cannot begin with 'xml', as these are reserved (e.g., as used in &lt;?<a title=\"en/XML/xml-stylesheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/XML/xml-stylesheet\" class=\"new \">xml-stylesheet</a>&nbsp;?&gt;).</p>\n<p>Also inherits methods and properties from <a class=\"internal\" title=\"En/DOM/Node\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Node\"><code>Node</code></a>.</p>","members":[{"name":"target","help":"","obsolete":false},{"name":"data","help":"","obsolete":false}]},"Uint16Array":{"title":"Uint16Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Uint16Array</code> type represents an array of unsigned 16-bit integers..</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Uint16Array <a title=\"en/JavaScript typed arrays/Uint16Array#Uint16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array#Uint16Array()\">Uint16Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Uint16Array </code><code><a title=\"en/JavaScript typed arrays/Uint16Array#Uint16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array#Uint16Array%28%29\">Uint16Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Uint16Array </code><code><a title=\"en/JavaScript typed arrays/Uint16Array#Uint16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array#Uint16Array%28%29\">Uint16Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Uint16Array </code><code><a title=\"en/JavaScript typed arrays/Uint16Array#Uint16Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array#Uint16Array%28%29\">Uint16Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Uint16Array</code> object.</p>\n<pre>Uint16Array Uint16Array(\n&nbsp; unsigned long length\n);\n\nUint16Array Uint16Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nUint16Array Uint16Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nUint16Array Uint16Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int32Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 16-bit unsigned integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Uint16Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Uint16Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Uint16Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Uint16Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Uint16Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Uint16Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Uint16Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Uint16Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"HTMLTextAreaElement":{"title":"HTMLTextAreaElement","examples":["<p>Insert HTML tags or <em>smiles</em> or any custom text in a textarea:</p>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /&gt;\n&lt;title&gt;MDC Example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\n\tfunction insertMetachars(sStartTag, sEndTag) {\n\t\tvar bDouble = arguments.length &gt; 1, oMsgInput = document.myForm.myTxtArea, nSelStart = oMsgInput.selectionStart, nSelEnd = oMsgInput.selectionEnd, sOldText = oMsgInput.value;\n\t\toMsgInput.value = sOldText.substring(0, nSelStart) + (bDouble ? sStartTag + sOldText.substring(nSelStart, nSelEnd) + sEndTag : sStartTag) + sOldText.substring(nSelEnd);\n\t\toMsgInput.setSelectionRange(bDouble || nSelStart === nSelEnd ? nSelStart + sStartTag.length : nSelStart, (bDouble ? nSelEnd : nSelStart) + sStartTag.length);\n\t\toMsgInput.focus();\n\t}\n&lt;/script&gt;\n&lt;style type=\"text/css\"&gt;\n\t.intLink {\n\t\tcursor: pointer;\n\t\ttext-decoration: underline;\n\t\tcolor: #0000ff;\n\t}\n&lt;/style&gt;\n&lt;/head&gt;\n\n&lt;body&gt;\n\n&lt;form name=\"myForm\"&gt;\n&lt;p&gt;[&amp;nbsp;&lt;span class=\"intLink\" onclick=\"insertMetachars('&amp;lt;strong&amp;gt;','&amp;lt;\\/strong&amp;gt;');\"&gt;&lt;strong&gt;Bold&lt;/strong&gt;&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"insertMetachars('&amp;lt;em&amp;gt;','&amp;lt;\\/em&amp;gt;');\"&gt;&lt;em&gt;Italic&lt;/em&gt;&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"var newURL=prompt('Enter the full URL for the link');if(newURL){insertMetachars('&amp;lt;a href=\\u0022'+newURL+'\\u0022&amp;gt;','&amp;lt;\\/a&amp;gt;');}else{document.myForm.myTxtArea.focus();}\"&gt;URL&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"insertMetachars('\\n&amp;lt;code&amp;gt;\\n','\\n&amp;lt;\\/code&amp;gt;\\n');\"&gt;code&lt;/span&gt; | &lt;span class=\"intLink\" onclick=\"insertMetachars(' :-)');\"&gt;smile&lt;/span&gt; | etc. etc.&amp;nbsp;]&lt;/p&gt;\n&lt;p&gt;&lt;textarea rows=\"10\" cols=\"50\" name=\"myTxtArea\"&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut facilisis, arcu vitae adipiscing placerat, nisl lectus accumsan nisi, vitae iaculis sem neque vel lectus. Praesent tristique commodo lorem quis fringilla. Sed ac tellus eros. Sed consectetur eleifend felis vitae luctus. Praesent sagittis, est eget bibendum tincidunt, ligula diam tincidunt augue, a fermentum odio velit eget mi. Phasellus mattis, elit id fringilla semper, orci magna cursus ligula, non venenatis lacus augue sit amet dui. Pellentesque lacinia odio id nisi pulvinar commodo tempus at odio. Ut consectetur eros porttitor nunc mollis ultrices. Aenean porttitor, purus sollicitudin viverra auctor, neque erat blandit sapien, sit amet tincidunt massa mi ac nibh. Proin nibh sem, bibendum ut placerat nec, cursus et lacus. Phasellus vel augue turpis. Nunc eu mauris eu leo blandit mollis interdum eget lorem. &lt;/textarea&gt;&lt;/p&gt;\n&lt;/form&gt;\n\n&lt;/body&gt;\n&lt;/html&gt;</pre>\n        \n<p>Create a textarea with a maximum number of characters per line and a maximum number of lines:</p>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /&gt;\n&lt;title&gt;MDC Example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\nfunction checkRows(oField, oKeyEvent) {\n\tvar\tnKey = (oKeyEvent || /* old IE */ window.event || /* check is not supported! */ { keyCode: 38 }).keyCode,\n\n\t\t// put here the maximum number of characters per line:\n\t\tnCols = 30,\n\t\t// put here the maximum number of lines:\n\t\tnRows = 5,\n\n\t\tnSelS = oField.selectionStart, nSelE = oField.selectionEnd,\n\t\tsVal = oField.value, nLen = sVal.length,\n\n\t\tnBackward = nSelS &gt;= nCols ? nSelS - nCols : 0,\n\t\tnDeltaForw = sVal.substring(nBackward, nSelS).search(new RegExp(\"\\\\n(?!.{0,\" + String(nCols - 2) + \"}\\\\n)\")) + 1,\n\t\tnRowStart = nBackward + nDeltaForw,\n\t\taReturns = (sVal.substring(0, nSelS) + sVal.substring(nSelE, sVal.length)).match(/\\n/g),\n\t\tnRowEnd = nSelE + nRowStart + nCols - nSelS,\n\t\tsRow = sVal.substring(nRowStart, nSelS) + sVal.substring(nSelE, nRowEnd &gt; nLen ? nLen : nRowEnd),\n\t\tbKeepCols = nKey === 13 || nLen + 1 &lt; nCols || /\\n/.test(sRow) || ((nRowStart === 0 || nDeltaForw &gt; 0 || nKey &gt; 0) &amp;&amp; (sRow.length &lt; nCols || (nKey &gt; 0 &amp;&amp; (nLen === nRowEnd || sVal.charAt(nRowEnd) === \"\\n\"))));\n\n\treturn (nKey !== 13 || (aReturns ? aReturns.length + 1 : 1) &lt; nRows) &amp;&amp; ((nKey &gt; 32 &amp;&amp; nKey &lt; 41) || bKeepCols);\n}\n&lt;/script&gt;\n&lt;/head&gt;\n\n&lt;body&gt;\n&lt;p&gt;Textarea with fixed number of characters per line:&lt;br /&gt;\n&lt;textarea cols=\"50\" rows=\"10\" name=\"myInput\" onkeypress=\"return checkRows(this, event);\" onpaste=\"return false;\" /&gt;&lt;/textarea&gt;&lt;/p&gt;\n&lt;/form&gt;\n&lt;/body&gt;\n&lt;/html&gt;</pre>"],"summary":"DOM <code>TextArea</code> objects expose the <a title=\"http://dev.w3.org/html5/spec/the-button-element.html#the-textarea-element\" class=\" external\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/the-button-element.html#the-textarea-element\" target=\"_blank\">HTMLTextAreaElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <code><a title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-24874179\" class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-24874179\" target=\"_blank\">HTMLTextAreaElement</a></code>) interface, which provides special properties and methods (beyond the regular <a title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea\">&lt;textarea&gt;</a></code>\n elements.","members":[{"name":"blur","help":"Removes input focus from this control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"checkValidity","help":"Returns false if the button is a candidate for constraint validation, and it does not satisfy its constraints. In this case, it also fires an <code>invalid</code> event at the control. It returns true if the control is not a candidate for constraint validation, or if it satisfies its constraints.","obsolete":false},{"name":"focus","help":"Gives input focus to this control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"select","help":"Selects the contents of the control.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.setSelectionRange","name":"setSelectionRange","help":"Selects a range of text, and sets <code>selectionStart</code> and <code>selectionEnd</code>. If either argument is greater than the length of the value, it is treated as pointing to the end of the value. If <code>end</code> is less than <code>start</code>, then both are treated as the value of <code>end</code>.","obsolete":false},{"name":"accessKey","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-accesskey\">accesskey</a></code>\n HTML attribute. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-autofocus\">autofocus</a></code>\n HTML&nbsp;attribute, indicating that the control should have input focus when the page loads","obsolete":false},{"name":"cols","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-cols\">cols</a></code>\n HTML attribute, indicating the visible width of the text area.","obsolete":false},{"name":"defaultValue","help":"The control's default value, which behaves like the <strong><a title=\"en/DOM/element.textContent\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.textContent\">textContent</a></strong> property.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-disabled\">disabled</a></code>\n HTML attribute, indicating that the control is not available for interaction.","obsolete":false},{"name":"form","help":"<p>The containing form element, if this element is in a form. If this element is not contained in a form element:</p> <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this can be the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-id\">id</a></code>\n attribute of any <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element in the same document.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> this must be <code>null</code>.</li> </ul>","obsolete":false},{"name":"labels","help":"A list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n elements that are labels for this element.","obsolete":false},{"name":"maxLength","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-maxlength\">maxlength</a></code>\n HTML&nbsp;attribute, indicating the maximum number of characters the user can enter. This constraint is evaluated only when the value changes.","obsolete":false},{"name":"name","help":"Reflects \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-name\">name</a></code>\n HTML attribute, containing the name of the control.","obsolete":false},{"name":"placeholder","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-placeholder\">placeholder</a></code>\n HTML attribute, containing a hint to the user about what to enter in the control.","obsolete":false},{"name":"readOnly","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-readonly\">readonly</a></code>\n HTML attribute, indicating that the user cannot modify the value of the control.","obsolete":false},{"name":"required","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-required\">required</a></code>\n HTML attribute, indicating that the user must specify a value before submitting the form.","obsolete":false},{"name":"rows","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-rows\">rows</a></code>\n HTML attribute, indicating the number of visible text lines for the control.","obsolete":false},{"name":"selectionDirection","help":"The direction in which selection occurred. This is \"forward\" if selection was performed in the start-to-end direction of the current locale, or \"backward\" for the opposite direction. This can also be \"none\"&nbsp;if the direction is unknown.\"","obsolete":false},{"name":"selectionEnd","help":"The index of the end of selected text. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> If no text is selected, contains the index of the character that follows the input cursor. On being set, the control behaves as if <strong>setSelectionRange</strong>() had been called with this as the second argument, and <strong>selectionStart</strong> as the first argument.","obsolete":false},{"name":"selectionStart","help":"The index of the beginning of selected text. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> If no text is selected, contains the index of the character that follows the input cursor. On being set, the control behaves as if <strong>setSelectionRange</strong>() had been called with this as the first argument, and <strong>selectionEnd</strong> as the second argument.","obsolete":false},{"name":"tabIndex","help":"The position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"textLength","help":"The codepoint length of the control's value.","obsolete":false},{"name":"type","help":"The string <code>textarea</code>.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"value","help":"The raw value contained in the control.","obsolete":false},{"name":"willValidate","help":"Indicates whether the element is a candidate for constraint validation. It is false if any conditions bar it from constraint validation.","obsolete":false},{"name":"wrap","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-wrap\">wrap</a></code>\n HTML attribute, indicating how the control wraps text.","obsolete":false},{"name":"blur","help":"Removes input focus from this control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"checkValidity","help":"Returns false if the button is a candidate for constraint validation, and it does not satisfy its constraints. In this case, it also fires an <code>invalid</code> event at the control. It returns true if the control is not a candidate for constraint validation, or if it satisfies its constraints.","obsolete":false},{"name":"focus","help":"Gives input focus to this control. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"select","help":"Selects the contents of the control.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.setSelectionRange","name":"setSelectionRange","help":"Selects a range of text, and sets <code>selectionStart</code> and <code>selectionEnd</code>. If either argument is greater than the length of the value, it is treated as pointing to the end of the value. If <code>end</code> is less than <code>start</code>, then both are treated as the value of <code>end</code>.","obsolete":false},{"name":"accessKey","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-accesskey\">accesskey</a></code>\n HTML attribute. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-autofocus\">autofocus</a></code>\n HTML&nbsp;attribute, indicating that the control should have input focus when the page loads","obsolete":false},{"name":"cols","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-cols\">cols</a></code>\n HTML attribute, indicating the visible width of the text area.","obsolete":false},{"name":"defaultValue","help":"The control's default value, which behaves like the <strong><a title=\"en/DOM/element.textContent\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.textContent\">textContent</a></strong> property.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-disabled\">disabled</a></code>\n HTML attribute, indicating that the control is not available for interaction.","obsolete":false},{"name":"form","help":"<p>The containing form element, if this element is in a form. If this element is not contained in a form element:</p> <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this can be the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-id\">id</a></code>\n attribute of any <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element in the same document.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> this must be <code>null</code>.</li> </ul>","obsolete":false},{"name":"labels","help":"A list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n elements that are labels for this element.","obsolete":false},{"name":"maxLength","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-maxlength\">maxlength</a></code>\n HTML&nbsp;attribute, indicating the maximum number of characters the user can enter. This constraint is evaluated only when the value changes.","obsolete":false},{"name":"name","help":"Reflects \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-name\">name</a></code>\n HTML attribute, containing the name of the control.","obsolete":false},{"name":"placeholder","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-placeholder\">placeholder</a></code>\n HTML attribute, containing a hint to the user about what to enter in the control.","obsolete":false},{"name":"readOnly","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-readonly\">readonly</a></code>\n HTML attribute, indicating that the user cannot modify the value of the control.","obsolete":false},{"name":"required","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-required\">required</a></code>\n HTML attribute, indicating that the user must specify a value before submitting the form.","obsolete":false},{"name":"rows","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-rows\">rows</a></code>\n HTML attribute, indicating the number of visible text lines for the control.","obsolete":false},{"name":"selectionDirection","help":"The direction in which selection occurred. This is \"forward\" if selection was performed in the start-to-end direction of the current locale, or \"backward\" for the opposite direction. This can also be \"none\"&nbsp;if the direction is unknown.\"","obsolete":false},{"name":"selectionEnd","help":"The index of the end of selected text. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> If no text is selected, contains the index of the character that follows the input cursor. On being set, the control behaves as if <strong>setSelectionRange</strong>() had been called with this as the second argument, and <strong>selectionStart</strong> as the first argument.","obsolete":false},{"name":"selectionStart","help":"The index of the beginning of selected text. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> If no text is selected, contains the index of the character that follows the input cursor. On being set, the control behaves as if <strong>setSelectionRange</strong>() had been called with this as the first argument, and <strong>selectionEnd</strong> as the second argument.","obsolete":false},{"name":"tabIndex","help":"The position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"textLength","help":"The codepoint length of the control's value.","obsolete":false},{"name":"type","help":"The string <code>textarea</code>.","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.","obsolete":false},{"name":"value","help":"The raw value contained in the control.","obsolete":false},{"name":"willValidate","help":"Indicates whether the element is a candidate for constraint validation. It is false if any conditions bar it from constraint validation.","obsolete":false},{"name":"wrap","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/textarea#attr-wrap\">wrap</a></code>\n HTML attribute, indicating how the control wraps text.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTextAreaElement"},"HTMLProgressElement":{"title":"progress","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>6.0</td> <td>6.0 (6.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td>11.0</td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td>11.0</td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["&lt;progress value=\"70\" max=\"100\"&gt;70 %&lt;/progress&gt;"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/progress","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/orient\">orient</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/%3Aindeterminate\">:indeterminate</a></code>\n</li>","summary":"The HTML <em>progress</em> (<code>&lt;progress&gt;</code>) element is used to view the completion progress of a task. While the specifics of how it's displayed is left up to the browser developer, it's typically displayed as a progress bar.","members":[{"obsolete":false,"url":"","name":"max","help":"This attribute describes how much work the task indicated by the <code>progress</code> element requires."},{"obsolete":false,"url":"","name":"form","help":"This attribute specifies the form which the <code>progress</code> element belongs to."},{"obsolete":false,"url":"","name":"value","help":"<dl><dd>This attribute specifies how much of the task that has been completed. If there is no <code>value</code> attribute, the progress bar is indeterminate; this indicates that an activity is ongoing with no indication of how long it is expected to take.</dd>\n</dl>\n<p>You can use the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/orient\">orient</a></code>\n property to specify whether the progress bar should be rendered horizontally (the default) or vertically. The <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/CSS/%3Aindeterminate\">:indeterminate</a></code>\n pseudo-class can be used to match against indeterminate progress bars.</p>"}]},"Float64Array":{"title":"Float64Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Float64Array</code> type represents an array of 64-bit floating point numbers (corresponding to the C <code>double</code> data type).</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Float64Array <a title=\"en/JavaScript typed arrays/Float64Array#Float64Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array#Float64Array%28%29\">Float64Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Float64Array </code><code><a title=\"en/JavaScript typed arrays/Float64Array#Float64Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array#Float64Array%28%29\">Float64Array</a></code><code>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Float64Array </code><code><a title=\"en/JavaScript typed arrays/Float64Array#Float64Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array#Float64Array%28%29\">Float64Array</a></code><code>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Float64Array </code><code><a title=\"en/JavaScript typed arrays/Float64Array#Float64Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array#Float64Array%28%29\">Float64Array</a></code><code>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Float64Array</code> object.</p>\n<pre>Float64Array Float64Array(\n&nbsp; unsigned long length\n);\n\nFloat64Array Float64Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nFloat64Array Float64Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nFloat64Array Float64Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <span>Uint8</span><code>Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to a 64-bit floating point number before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Float64Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Float64Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Float64Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Float64Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Float64Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Float64Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Float64Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Float64Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array. <strong>Read only.</strong>","obsolete":false}]},"XMLHttpRequest":{"title":"XMLHttpRequest","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>1</td> <td>1.0</td> <td> <p>5 (via ActiveXObject)</p> <p>7 (XMLHttpRequest)</p> </td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>1.2</td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/XMLHttpRequest","seeAlso":"<li>MDN articles about XMLHttpRequest: <ul> <li><a title=\"en/AJAX/Getting_Started\" rel=\"internal\" href=\"https://developer.mozilla.org/en/AJAX/Getting_Started\">AJAX - Getting Started</a></li> <li><a class=\"internal\" title=\"En/Using XMLHttpRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest/Using_XMLHttpRequest\">Using XMLHttpRequest</a></li> <li><a title=\"en/HTML_in_XMLHttpRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML_in_XMLHttpRequest\">HTML in XMLHttpRequest</a></li> <li><a title=\"en/XMLHttpRequest/FormData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest/FormData\"><code>FormData</code></a></li> </ul> </li> <li>XMLHttpRequest references from W3C and browser vendors: <ul> <li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/XMLHttpRequest/\" title=\"http://www.w3.org/TR/XMLHttpRequest/\" target=\"_blank\">W3C: XMLHttpRequest</a> (base features)</li> <li><a class=\"external\" title=\"http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html\" rel=\"external\" href=\"http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html\" target=\"_blank\">W3C: XMLHttpRequest</a> (latest editor's draft with extensions to the base functionality, formerly <a class=\"external\" title=\"http://www.w3.org/TR/XMLHttpRequest2/\" rel=\"external\" href=\"http://www.w3.org/TR/XMLHttpRequest2/\" target=\"_blank\">XMLHttpRequest Level 2</a>)</li> <li><a class=\"external\" rel=\"external\" href=\"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp\" title=\"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/xmobjxmlhttprequest.asp\" target=\"_blank\">Microsoft documentation</a></li> <li><a class=\"external\" rel=\"external\" href=\"http://developer.apple.com/internet/webcontent/xmlhttpreq.html\" title=\"http://developer.apple.com/internet/webcontent/xmlhttpreq.html\" target=\"_blank\">Apple developers' reference</a></li> </ul> </li> <li><a class=\"external\" rel=\"external\" href=\"http://jibbering.com/2002/4/httprequest.html\" title=\"http://jibbering.com/2002/4/httprequest.html\" target=\"_blank\">\"Using the XMLHttpRequest Object\" (jibbering.com)</a></li> <li><a class=\"external\" rel=\"external\" href=\"http://www.peej.co.uk/articles/rich-user-experience.html\" title=\"http://www.peej.co.uk/articles/rich-user-experience.html\" target=\"_blank\">XMLHttpRequest - REST and the Rich User Experience</a></li>","summary":"<p><code>XMLHttpRequest</code> is a <a class=\"internal\" title=\"En/JavaScript\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript\">JavaScript</a> object that was designed by Microsoft and adopted by Mozilla, Apple, and Google. It's now being <a class=\"external\" title=\"http://www.w3.org/TR/XMLHttpRequest/\" rel=\"external\" href=\"http://www.w3.org/TR/XMLHttpRequest/\" target=\"_blank\">standardized in the W3C</a>. It provides an easy way to retrieve data at a URL. Despite its name, <code>XMLHttpRequest</code> can be used to retrieve any type of data, not just XML, and it supports protocols other than <a title=\"en/HTTP\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTTP\">HTTP</a> (including <code>file</code> and <code>ftp</code>).</p>\n<p>To create an instance of <code>XMLHttpRequest</code>, simply do this:</p>\n<pre>var req = new XMLHttpRequest();\n</pre>\n<p>For details about how to use <code>XMLHttpRequest</code>, see <a class=\"internal\" title=\"En/Using XMLHttpRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest/Using_XMLHttpRequest\">Using XMLHttpRequest</a>.</p>","members":[{"name":"sendAsBinary","help":"<div id=\"section_12\"><p><span title=\"(Firefox 3)\n\">Requires Gecko 1.9</span>\n</p>\n<p>A variant of the <code>send()</code>method that sends binary data.</p>\n\n</div><div id=\"section_13\"><span id=\"Parameters_4\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>body</code></dt> <dd>The request body as a DOMstring. This data is converted to a string of single-byte characters by truncation (removing the high-order byte of each character).</dd>\n</dl>\n</div>","idl":"<pre>void sendAsBinary(\n in DOMString body\n);\n</pre>","obsolete":false},{"name":"send","help":"<p>Sends the request. If the request is asynchronous (which is the default), this method returns as soon as the request is sent. If the request is synchronous, this method doesn't return until the response has arrived.</p>\n<div class=\"note\"><strong>Note:</strong> Any event listeners you wish to set must be set before calling <code>send()</code>.</div>\n\n<div id=\"section_11\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>body</code></dt> <dd>This may be an <code>nsIDocument</code>, <code>nsIInputStream</code>, or a string (an <code>nsISupportsString</code> if called from native code) that is used to populate the body of a POST request. Starting with Gecko 1.9.2, you may also specify an DOM<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n , and starting with Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n you may also specify a <a title=\"en/XMLHttpRequest/FormData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/XMLHttpRequest/FormData\"><code>FormData</code></a> object.</dd>\n</dl>\n</div>","idl":"<pre>void send(\n [optional] in nsIVariant body\n);\n</pre>","obsolete":false},{"name":"getResponseHeader","help":"Returns the string containing the text of the specified header, or <code>null</code> if either the response has not yet been received or the header doesn't exist in the response.","idl":"<pre>ACString getResponseHeader(\n in AUTF8String header\n);\n</pre>","obsolete":false},{"name":"setRequestHeader","help":"<p>Sets the value of an HTTP request header.You must call <a class=\"internal\" title=\"/en/XMLHttpRequest#open()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIXMLHttpRequest#open()\"><code>open()</code></a>before using this method.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_5\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>header</code></dt> <dd>The name of the header whose value is to be set.</dd> <dt><code>value</code></dt> <dd>The value to set as the body of the header.</dd>\n</dl>\n</div>","idl":"<pre>void setRequestHeader(\n in AUTF8String header,\n in AUTF8String value\n);\n</pre>","obsolete":false},{"name":"init","help":"<p>Initializes the object for use from C++code.</p>\n<div class=\"warning\"><strong>Warning:</strong> This method must <em>not</em> be called from JavaScript.</div>\n\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>principal</code></dt> <dd>The principal to use for the request; must not be <code>null</code>.</dd> <dt><code>scriptContext</code></dt> <dd>The script context to use for the request; must not be <code>null</code>.</dd> <dt><code>ownerWindow</code></dt> <dd>The window associated with the request; may be <code>null</code>.</dd>\n</dl>\n</div>","idl":"<pre>[noscript] void init(\n in nsIPrincipal principal,\n in nsIScriptContext scriptContext,\n in nsPIDOMWindow ownerWindow\n);\n</pre>","obsolete":false},{"name":"open","help":"<p>Initializes a request. This method is to be used from JavaScript code; to initialize a request from native code, use <a class=\"internal\" title=\"/en/XMLHttpRequest#openRequest()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIXMLHttpRequest#openRequest()\"><code>openRequest()</code></a>instead.</p>\n<div class=\"note\"><strong>Note:</strong> Calling this method an already active request (one for which <code>open()</code>or <code>openRequest()</code>has already been called) is the equivalent of calling <code>abort()</code>.</div>\n\n<div id=\"section_9\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>method</code></dt> <dd>The HTTP method to use; either \"POST\" or \"GET\". Ignored for non-HTTP(S) URLs.</dd> <dt><code>url</code></dt> <dd>The URL to which to send the request.</dd> <dt><code>async</code></dt> <dd>An optional boolean parameter, defaulting to <code>true</code>, indicating whether or not to perform the operation asynchronously. If this value is <code>false</code>, the <code>send()</code>method does not return until the response is received. If <code>true</code>, notification of a completed transaction is provided using event listeners. This <em>must</em> be true if the <code>multipart</code> attribute is <code>true</code>, or an exception will be thrown.</dd> <dt><code>user</code></dt> <dd>The optional user name to use for authentication purposes; by default, this is an empty string.</dd> <dt><code>password</code></dt> <dd>The optional password to use for authentication purposes; by default, this is an empty string.</dd>\n</dl>\n<p></p></div>","idl":"<pre>void open(\n in AUTF8String method,\n in AUTF8String url,\n [optional] in boolean async,\n [optional] in AString user,\n [optional] in AString password\n);\n</pre>","obsolete":false},{"name":"openRequest","help":"Initializes a request. This method is to be used from native code; to initialize a request from JavaScript code, use <a class=\"internal\" title=\"/en/XMLHttpRequest#open()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/nsIXMLHttpRequest#open()\"><code>open()</code></a>instead. See the documentation for <code>open()</code>.","obsolete":false},{"name":"abort","help":"Aborts the request if it has already been sent.","obsolete":false},{"name":"overrideMimeType","help":"Overrides the MIME type returned by the server. This may be used, for example, to force a stream to be treated and parsed as text/xml, even if the server does not report it as such.This method must be called before <code>send()</code>.","idl":"<pre>void overrideMimeType(\n in AUTF8String mimetype\n);\n</pre>","obsolete":false},{"name":"getAllResponseHeaders","help":"<pre>string getAllResponseHeaders();\n</pre>\n<p>Returns all the response headers as a string, or <code>null</code> if no response has been received.<strong> Note:</strong> For multipart requests, this returns the headers from the <em>current</em> part of the request, not from the original channel.</p>","obsolete":false},{"name":"channel","help":"The channel used by the object when performing the request. This is <code>null</code> if the channel hasn't been created yet. In the case of a multi-part request, this is the initial channel, not the different parts in the multi-part request. <strong>Requires elevated privileges to access; read-only.</strong>","obsolete":false},{"name":"webkitBackgroundRequest","help":"<p>Indicates whether or not the object represents a background service request. If <code>true</code>, no load group is associated with the request, and security dialogs are prevented from being shown to the user. <strong>Requires elevated privileges to access.</strong></p> <p>In cases in which a security dialog (such as authentication or a bad certificate notification) would normally be shown, the request simply fails instead.</p>","obsolete":false},{"name":"webkitResponseArrayBuffer","help":"The response to the request, as a JavaScript typed array. This is NULL&nbsp;if the request was not successful, or if it hasn't been sent yet. <strong>Read only.</strong>","obsolete":true},{"name":"multipart","help":"<p>Indicates whether or not the response is expected to be a stream of possibly multiple XML documents. If set to <code>true</code>, the content type of the initial response must be <code>multipart/x-mixed-replace</code> or an error will occur. All requests must be asynchronous.</p> <p>This enables support for server push; for each XML document that's written to this request, a new XML DOM document is created and the <code>onload</code> handler is called between documents.</p> <div class=\"note\"><strong>Note:</strong> When this is set, the <code>onload</code> handler and other event handlers are not reset after the first XMLdocument is loaded, and the <code>onload</code> handler is called after each part of the response is received.</div>","obsolete":false},{"name":"readyState","help":"<p>The state of the request:</p> <table class=\"standard-table\"> <tbody> <tr> <td class=\"header\">Value</td> <td class=\"header\">State</td> <td class=\"header\">Description</td> </tr> <tr> <td><code>0</code></td> <td><code>UNSENT</code></td> <td><code>open()</code>has not been called yet.</td> </tr> <tr> <td><code>1</code></td> <td><code>OPENED</code></td> <td><code>send()</code>has not been called yet.</td> </tr> <tr> <td><code>2</code></td> <td><code>HEADERS_RECEIVED</code></td> <td><code>send()</code> has been called, and headers and status are available.</td> </tr> <tr> <td><code>3</code></td> <td><code>LOADING</code></td> <td>Downloading; <code>responseText</code> holds partial data.</td> </tr> <tr> <td><code>4</code></td> <td><code>DONE</code></td> <td>The operation is complete.</td> </tr> </tbody> </table>","obsolete":false},{"name":"response","help":"The response entity body according to <code><a href=\"#responseType\">responseType</a></code>, as an <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>, <a title=\"en/DOM/Blob\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Blob\"><code>Blob</code></a>, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n, JavaScript object (for \"moz-json\"), or string. This is <code>NULL</code>&nbsp;if the request is not complete or was not successful.","obsolete":false},{"name":"responseText","help":"The response to the request as text, or <code>null</code> if the request was unsuccessful or has not yet been sent. <strong>Read-only.</strong>","obsolete":false},{"name":"responseType","help":"<p>Can be set to change the response type. This tells the server what format you want the response to be in.</p> <table class=\"standard-table\"> <tbody> <tr> <td class=\"header\">Value</td> <td class=\"header\">Data type of <code>response</code> property</td> </tr> <tr> <td><em>empty string</em></td> <td>String (this is the default)</td> </tr> <tr> <td>\"arraybuffer\"</td> <td><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a></td> </tr> <tr> <td>\"blob\"</td> <td><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n</td> </tr> <tr> <td>\"document\"</td> <td><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n</td> </tr> <tr> <td>\"text\"</td> <td>String</td> </tr> <tr> <td>\"moz-json\"</td> <td>JavaScript object, parsed from a JSON string returned by the server \n<span title=\"(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)\n\">Requires Gecko 9.0</span>\n</td> </tr> </tbody> </table>","obsolete":false},{"name":"responseXML","help":"<p>The response to the request as a DOM <code><a class=\"internal\" title=\"En/DOM/Document\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document\">Document</a></code> object, or <code>null</code> if the request was unsuccessful, has not yet been sent, or cannot be parsed as XML. The response is parsed as if it were a <code>text/xml</code> stream. <strong>Read-only.</strong></p> <div class=\"note\"><strong>Note:</strong> If the server doesn't apply the <code>text/xml</code> Content-Type header, you can use <code>overrideMimeType()</code>to force <code>XMLHttpRequest</code> to parse it as XML anyway.</div>","obsolete":false},{"name":"status","help":"The status of the response to the request. This is the HTTP result code (for example, <code>status</code> is 200 for a successful request). <strong>Read-only.</strong>","obsolete":false},{"name":"statusText","help":"The response string returned by the HTTP server. Unlike <code>status</code>, this includes the entire text of the response message (\"<code>200 OK</code>\", for example). <strong>Read-only.</strong>","obsolete":false},{"name":"upload","help":"The upload process can be tracked by adding an event listener to <code>upload</code>. \n<span>New in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/Firefox_3.5_for_developers\">Firefox 3.5</a></span>","obsolete":false},{"name":"withCredentials","help":"<p>Indicates whether or not cross-site Access-Control requests should be made using credentials such as cookies or authorization headers. \n<span>New in <a rel=\"custom\" href=\"https://developer.mozilla.org/en/Firefox_3.5_for_developers\">Firefox 3.5</a></span>\n</p> <div class=\"note\"><strong>Note:</strong> This never affects same-site requests.</div> <p>The default is <code>false</code>.</p>","obsolete":false},{"name":"UNSENT","help":"<code>open()</code>has not been called yet.","obsolete":false},{"name":"OPENED","help":"<code>send()</code>has not been called yet.","obsolete":false},{"name":"HEADERS_RECEIVED","help":"<code>send()</code> has been called, and headers and status are available.","obsolete":false},{"name":"LOADING","help":"Downloading; <code>responseText</code> holds partial data.","obsolete":false},{"name":"DONE","help":"The operation is complete.","obsolete":false},{"name":"empty","help":"","obsolete":false}]},"SVGCircleElement":{"title":"SVGCircleElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGCircleElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/circle\">&lt;circle&gt;</a></code>\n SVG Element","summary":"The <code>SVGCircleElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/circle\">&lt;circle&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"cx","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cx\">cx</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/circle\">&lt;circle&gt;</a></code>\n element.","obsolete":false},{"name":"cy","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/cy\">cy</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/circle\">&lt;circle&gt;</a></code>\n element.","obsolete":false}]},"IDBObjectStore":{"title":"IDBObjectStore","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12</td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>count()</code></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>10.0 (10.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>count()</code></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"The <code>IDBObjectStore</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a> represents an <a title=\"en/IndexedDB#gloss object store\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_object_store\">object store</a> in a database.&nbsp;Records within an object store are sorted according to their keys. This sorting enable fast insertion, look-up, and &nbsp;ordered retrieval.&nbsp;","members":[{"name":"unique","help":"If true, the index will not allow duplicate values for a single key.","obsolete":false},{"name":"multientry","help":"If true, the index will add an entry in the index for each array element when the <em>keypath</em> resolves to an Array. If false, it will add one single entry containing the Array.","obsolete":false},{"name":"add","help":"<p>Returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, creates a <a class=\"external\" title=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#structured-clone\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#structured-clone\" target=\"_blank\">structured clone</a> of the <code>value</code>, and stores the cloned value in the object store. If the record is successfully stored, then a success event is fired on the returned request object, using the <a title=\"en/IndexedDB/IDBTransactionEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent\">IDBTransactionEvent</a> interface, with the <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to the key for the stored record, and <code><a title=\"en/IndexedDB/IDBTransactionEvent#attr transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent#attr_transaction\">transaction</a></code> set to the transaction in which this object store is opened. If a record already exists in the object store with the <code>key</code> parameter as its key, then an error event is fired on the returned request object, with <a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a> set to <code><a title=\"en/IndexedDB/DatabaseException#CONSTRAINT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#CONSTRAINT_ERR\">CONSTRAINT_ERR</a></code>.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>value</dt> <dd>The value to be stored.</dd> <dt>key</dt> <dd>The key to use to identify the record. If unspecified, it results to null.</dd>\n</dl>\n</div><div id=\"section_6\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></dt> <dd>If the object store uses in-line keys or has a key generator, and a key parameter was provided.<br> If the object store uses out-of-line keys and has no key generator, and no key parameter was provided.<br> If the object store uses in-line keys but no key generator, and the object store's key path does not yield a valid key.<br> If the key parameter was provided but does not contain a valid key.<br> If there are indexed on this object store, and using their key path on the value parameter yields a value that is not a valid key.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#READ ONLY ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR\">READ_ONLY_ERR</a></code></dt> <dd>If the mode of the associated transaction is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></dt> <dd>If the associated transaction is not active.</dd>\n</dl>\n<p>This method can raise a <a title=\"en/DOM/DOMException\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMException\">DOMException</a> with the following code:</p>\n<dl> <dt><code>DATA_CLONE_ERR</code></dt> <dd>If the data being stored could not be cloned by the internal structured cloning algorithm.</dd>\n</dl>\n<dl>\n</dl>\n</div>","idl":"<pre>IDBRequest add(\n&nbsp; in any value,\n&nbsp; in optional any key\n) raises (IDBDatabaseException, DOMException);\n</pre>","obsolete":false},{"name":"put","help":"<p>Returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and, in a separate thread, creates a <a class=\"external\" title=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#structured-clone\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#structured-clone\" target=\"_blank\">structured clone</a> of the <code>value</code>, and stores the cloned value in the object store. If the record is successfully stored, then a success event is fired on the returned request object, using the <a title=\"en/IndexedDB/IDBTransactionEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent\">IDBTransactionEvent</a> interface, with the <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to the key for the stored record, and <code><a title=\"en/IndexedDB/IDBTransactionEvent#attr transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent#attr_transaction\">transaction</a></code> set to the transaction in which this object store is opened.</p>\n\n<div id=\"section_39\"><span id=\"Parameters_9\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>value</dt> <dd>The value to be stored.</dd> <dt>key</dt> <dd>The key to use to identify the record. If unspecified, it results to null.</dd>\n</dl>\n</div><div id=\"section_40\"><span id=\"Returns_9\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt>IDBRequest</dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_41\"><span id=\"Exceptions_10\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <li> <ul> <li>If this object store uses <a title=\"en/IndexedDB#gloss out-of-line key\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_out-of-line_key\">out-of-line keys</a> and does not use a <a title=\"en/IndexedDB#gloss key generator\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_generator\">key generator</a>, but the <code>key</code> parameter was not passed</li> <li>If the object store uses <a title=\"en/IndexedDB#gloss in-line key\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_in-line_key\">in-line keys</a>, but the <code>value</code> object does not have a property identified by the object store's key path.</li> </ul> </li> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>If the object store is not in the <a title=\"en/IndexedDB#gloss scope\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_scope\">scope</a> of any existing <a title=\"en/IndexedDB#gloss transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_transaction\">transaction</a>, or if the associated transaction's mode is <a title=\"en/IndexedDB/IDBTransaction#const read only\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#const_read_only\"><code>READ_ONLY</code></a>&nbsp;or <a title=\"en/IndexedDB/IDBTransaction#const snapshot read\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#const_snapshot_read\"><code>SNAPSHOT_READ</code></a>.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#SERIAL ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#SERIAL_ERR\">SERIAL_ERR</a></code></dt> <dd>If the data being stored could not be serialized by the internal structured cloning algorithm.</dd>\n</dl>\n<p>This method can raise a <a title=\"en/DOM/DOMException\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMException\">DOMException</a> with the following code:</p>\n<dl> <dt><code>DATA_CLONE_ERR</code></dt> <dd>If the data being stored could not be cloned by the internal structured cloning algorithm.</dd>\n</dl>\n</div>","idl":"<pre>IDBRequest put(\n&nbsp; in any value,\n&nbsp; in optional any key\n) raises (IDBDatabaseException, DOMException);\n</pre>","obsolete":false},{"name":"createIndex","help":"<p>Creates and returns a new index in the connected database. Note that this method must be called only from a <a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\"><code>VERSION_CHANGE</code></a> transaction callback.</p>\n<pre>IDBIndex createIndex (\n&nbsp; in DOMString name, \n&nbsp; in DOMString keyPath, \n&nbsp; in Object optionalParameters\n) raises (IDBDatabaseException);\n\n</pre>\n<div id=\"section_16\"><span id=\"Parameters_3\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the index to create.</dd> <dt>keyPath</dt> <dd>The key path for the index to use.</dd> <dt>optionalParameters</dt> <dd> <div class=\"warning\"><strong>Warning:</strong> The latest draft of the specification changed this to <code>IDBIndexParameters</code>, which is not yet recognized by any browser</div> <p>Options object whose attributes are optional parameters to the method. It includes the following properties:</p> <table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code>unique</code></td> <td>If true, the index will not allow duplicate values for a single key.</td> </tr> <tr> <td><code>multientry</code></td> <td>If true, the index will add an entry in the index for each array element when the <em>keypath</em> resolves to an Array. If false, it will add one single entry containing the Array.</td> </tr> </tbody> </table> <p>Unknown parameters are ignored.</p> </dd> <dd></dd>\n</dl>\n</div><div id=\"section_17\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/IDBIndex\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex\">IDBIndex</a></dt> <dd>The newly created index.</dd>\n</dl>\n</div><div id=\"section_18\"><span id=\"Exceptions_4\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#CONSTRAINT ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#CONSTRAINT_ERR\">CONSTRAINT_ERR</a></code></dt> <dd>If an index with the same name (based on case-sensitive comparison) already exists in the connected database.</dd> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>If this method was not called from a <a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\"><code>VERSION_CHANGE</code></a> transaction callback.</dd>\n</dl></div>","obsolete":false},{"name":"index","help":"<p>Opens the named index in this object store.</p>\n\n<div id=\"section_31\"><span id=\"Parameters_7\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>name</dt> <dd>The name of the index to open.</dd>\n</dl>\n</div><div id=\"section_32\"><span id=\"Returns_7\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBIndex\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex\">IDBIndex</a></code></dt> <dd>An object for accessing the index.</dd>\n</dl>\n</div><div id=\"section_33\"><span id=\"Exceptions_8\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></dt> <dd>If no index exists with the specified name (based on case-sensitive comparison) in the connected database.</dd>\n</dl>\n</div>","idl":"<pre>IDBIndex index(\n&nbsp; in DOMString name\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"clear","help":"<p>If the mode of the transaction that this object store belongs to is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>, this method raises an&nbsp;<a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with its code set to <code><a title=\"en/IndexedDB/IDBDatabaseException#READ ONLY ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR\">READ_ONLY_ERR</a></code>. Otherwise, this method creates and immediately returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and clears this object store in a separate thread. Clearing an object store consists of removing all records from the object store and removing all records in indexes that reference the object store.</p>\n\n<div id=\"section_9\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <dt><a title=\"en/IndexedDB/IDBDatabaseException#READ ONLY ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR\"><code>READ_ONLY_ERR</code></a></dt> <dd>If the mode of the transaction that this object store belongs to is READ_ONLY.</dd> <dt><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\"><code>TRANSACTION_INACTIVE_ERR</code></a></dt> <dd>If the transaction that this object store belongs to is not active.</dd>\n</dl></div>","idl":"<pre>IDBRequest clear(\n) raises (IDBDatabaseException); \n</pre>","obsolete":false},{"name":"openCursor","help":"<p>Immediately returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and creates a <a title=\"en/IndexedDB#gloss cursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_cursor\">cursor</a> over the records in this object store, in a separate thread. If there is even a single record that matches the <a title=\"en/IndexedDB#gloss key range\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_range\">key range</a>, then a success event is fired on the returned object, with its <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to the <a title=\"en/IndexedDB/IDBCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBCursor\">IDBCursor</a> object for the new cursor. If no records match the key range, then a success event is fired on the returned object, with its <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to null.</p>\n<pre>IDBRequest openCursor (\n&nbsp; in optional IDBKeyRange range, \n&nbsp; in optional unsigned short direction\n) raises (IDBDatabaseException);\n</pre>\n<div id=\"section_35\"><span id=\"Parameters_8\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>range</dt> <dd>The key range to use as the cursor's range. If this parameter is unspecified or null, then the range includes all the records in the object store.</dd> <dt>direction</dt> <dd>The cursor's <a title=\"en/IndexedDB#gloss direction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_direction\">direction</a>.</dd>\n</dl>\n</div><div id=\"section_36\"><span id=\"Returns_8\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_37\"><span id=\"Exceptions_9\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an IDBDatabaseException with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>If this object store is not in the scope of any existing transaction on the connected database.</dd>\n</dl>\n</div>","obsolete":false},{"name":"get","help":"<p>Immediately returns an <a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object, and retrieves the requested record from the object store in a separate thread. If the operation is successful, then a success event is fired on the returned object, using the <a title=\"en/IndexedDB/IDBTransactionEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent\">IDBTransactionEvent</a> interface, with its <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to the retrieved value, and <code><a title=\"en/IndexedDB/IDBTransactionEvent#attr transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent#attr_transaction\">transaction</a></code> set to the transaction in which this object store is opened. If a record does not exist in the object store for the key parameter, then an error event is fired on the returned object, with its <code><a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a></code> set to <code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code> and an appropriate <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code>.</p>\n<p></p><div class=\"note\"><strong>Note:</strong>&nbsp;This function produces the same result if no record with the given key exists in the database as when a record exists, but with an undefined value. To tell these situations apart, call the openCursor() method with the same key. That method provides a cursor if the record exists, and not if it does not.</div>\n<p></p>\n\n<div id=\"section_27\"><span id=\"Parameters_6\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key identifying the record to retrieve.</dd>\n</dl>\n</div><div id=\"section_28\"><span id=\"Returns_6\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_29\"><span id=\"Exceptions_7\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></dt> <dd>If the <code>key</code> parameter was not a valid value.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></dt> <dd>If the associated transaction is not active.</dd>\n</dl>\n</div>","idl":"<pre>IDBRequest get(\n&nbsp; in any key\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"name":"delete","help":"<p>Immediately returns an <code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code> object, and removes the record specified by the given key from this object store, and any indexes that reference it, in a separate thread. If no record exists in this object store corresponding to the key, an error event is fired on the returned request object, with its <code><a title=\"en/IndexedDB/IDBErrorEvent#attr code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_code\">code</a></code> set to <code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code> and an appropriate <code><a title=\"en/IndexedDB/IDBErrorEvent#attr message\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBErrorEvent#attr_message\">message</a></code>. If the record is successfully removed, then a success event is fired on the returned request object, using the <code><a title=\"en/IndexedDB/IDBTransactionEvent\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent\">IDBTransactionEvent</a></code> interface, with the <code><a title=\"en/IndexedDB/IDBSuccessEvent#attr result\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBSuccessEvent#attr_result\">result</a></code> set to <code>undefined</code>, and <a title=\"en/IndexedDB/IDBTransactionEvent#attr transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransactionEvent#attr_transaction\">transaction</a> set to the transaction in which this object store is opened.</p>\n<pre>IDBRequest delete (\n  in any key\n) raises (IDBDatabaseException); \n</pre>\n<div id=\"section_20\"><span id=\"Parameters_4\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key to use to identify the record.</dd>\n</dl>\n</div><div id=\"section_21\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_22\"><span id=\"Exceptions_5\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p></div>","obsolete":false},{"name":"deleteIndex","help":"<p>Destroys the index with the specified name in the connected database. Note that this method must be called only from a <code><a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a></code> transaction callback.</p>\n<pre>void removeIndex(\n  in DOMString indexName\n) raises (IDBDatabaseException); \n</pre>\n<div id=\"section_24\"><span id=\"Parameters_5\"></span><h5 class=\"editable\">Parameters</h5>\n<p>&nbsp;</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>If the object store is not in the <a title=\"en/IndexedDB#gloss scope\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_scope\">scope</a> of any existing <a title=\"en/IndexedDB#gloss transaction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_transaction\">transaction</a>, or if the associated transaction's mode is <a title=\"en/IndexedDB/IDBTransaction#const read only\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#const_read_only\"><code>READ_ONLY</code></a>&nbsp;or <a title=\"en/IndexedDB/IDBTransaction#const snapshot read\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#const_snapshot_read\"><code>SNAPSHOT_READ</code></a>.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></dt> <dd>If the associated transaction is not active.</dd> <dt>indexName</dt> <dd>The name of the existing index to remove.</dd>\n</dl>\n</div><div id=\"section_25\"><span id=\"Exceptions_6\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <dt><code><a title=\"en/IndexedDB/DatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>If this method was not called from a <a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a> transaction callback.</dd> <dt><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT FOUND ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_FOUND_ERR\">NOT_FOUND_ERR</a></code></dt> <dd>If no index exists with the specified name (based on case-sensitive comparison) in the connected database.</dd>\n</dl>\n</div>","obsolete":false},{"name":"count","help":"<p>Immediately returns an <a title=\"IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a> object and asynchronously count the amount of objects in the object store that match the parameter, a key or a key range. If the parameter is not valid returns an exception.</p>\n\n<div id=\"section_12\"><span id=\"Parameters_2\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key or key range that identifies the records to be counted.</dd>\n</dl>\n</div><div id=\"section_13\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<dl> <dt><code><a href=\"IDBDatabaseException#DATA_ERR\" rel=\"internal\" title=\"en/IndexedDB/DatabaseException#DATA ERR\">DATA_ERR</a></code></dt> <dd>If the object store uses in-line keys or has a key generator, and a key parameter was provided.<br> If the object store uses out-of-line keys and has no key generator, and no key parameter was provided.<br> If the object store uses in-line keys but no key generator, and the object store's key path does not yield a valid key.<br> If the key parameter was provided but does not contain a valid key.<br> If there are indexed on this object store, and using their key path on the value parameter yields a value that is not a valid key.</dd> <dt><code><a href=\"IDBDatabaseException#NOT_ALLOWED_ERR\" rel=\"internal\" title=\"en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></dt> <dd>The request was made on a source object that has been deleted or removed.</dd>\n</dl></div>","idl":"<pre>IDBRequest count(\n  in option any key\n) raises (IDBDatabaseException);\n</pre>","obsolete":false},{"url":"","name":"indexNames","help":"A list of the names of <a title=\"en/IndexedDB#gloss index\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_index\">indexes</a> on objects in this object store.","obsolete":false},{"url":"","name":"keyPath","help":"The <a title=\"en/IndexedDB#gloss key path\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB#gloss_key_path\">key path</a> of this object store. If this attribute is null, the application must provide a key for each modification operation.","obsolete":false},{"url":"","name":"name","help":"The name of this object store.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBObjectStore"},"SVGFEMergeElement":{"title":"feMerge","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMergeNode\">&lt;feMergeNode&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The feMerge filter allows filter effects to be applied concurrently instead of sequentially. This is achieved by other filters storing their output via the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/result\" class=\"new\">result</a></code> attribute and then accessing it in a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMergeNode\">&lt;feMergeNode&gt;</a></code>\n child.","members":[],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feMerge"},"CDATASection":{"title":"CDATASection","summary":"<p>A CDATA Section can be used within XML to include extended portions of unescaped text, such that the symbols &lt; and &amp; do not need escaping as they normally do within XML when used as text.</p>\n<p>It takes the form:</p>\n<pre class=\"eval\">&lt;![CDATA[  ... ]]&gt;\n</pre>\n<p>For example:</p>\n<pre class=\"eval\">&lt;foo&gt;Here is a CDATA section: &lt;![CDATA[  &lt; &gt; &amp; ]]&gt; with all kinds of unescaped text. &lt;/foo&gt;\n</pre>\n<p>The only sequence which is not allowed within a CDATA section is the closing sequence of a CDATA section itself:</p>\n<pre class=\"eval\">&lt;![CDATA[  ]]&gt; will cause an error   ]]&gt;\n</pre>\n<p>Note that CDATA sections should not be used (without hiding) within HTML.</p>\n<p>As a CDATASection has no properties or methods unique to itself and only directly implements the Text interface, one can refer to <a title=\"En/DOM/Text\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Text\">Text</a> to find its properties and methods.</p>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/CDATASection","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...l#ID-667469212"},"Node":{"title":"Node","summary":"A <code>Node</code> is an interface from which a number of DOM types inherit, and allows these various types to be treated (or tested) similarly.<br> The following all inherit this interface and its methods and properties (though they may return null in particular cases where not relevant; or throw an exception when adding children to a node type for which no children can exist): <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Document\">Document</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Element\">Element</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Attr\">Attr</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/CharacterData\">CharacterData</a></code>\n (which <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Text\">Text</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Comment\">Comment</a></code>\n, and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/CDATASection\">CDATASection</a></code>\n inherit), <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/ProcessingInstruction\">ProcessingInstruction</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentFragment\">DocumentFragment</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DocumentType\">DocumentType</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Notation\">Notation</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Entity\">Entity</a></code>\n, <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/EntityReference\">EntityReference</a></code>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.isDefaultNamespace","name":"isDefaultNamespace","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.appendChild","name":"appendChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.isSupported","name":"isSupported","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.contains","name":"contains","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.compareDocumentPosition","name":"compareDocumentPosition","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.isEqualNode","name":"isEqualNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.removeChild","name":"removeChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.setUserData","name":"setUserData","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.hasChildNodes","name":"hasChildNodes","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.hasAttributes","name":"hasAttributes","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.isSameNode","name":"isSameNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.cloneNode","name":"cloneNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.lookupNamespaceURI","name":"lookupNamespaceURI","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/Article_not_found?uri=en/DOM/Node.getFeature","name":"getFeature","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.normalize","name":"normalize","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.getUserData","name":"getUserData","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.replaceChild","name":"replaceChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.insertBefore","name":"insertBefore","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.lookupPrefix","name":"lookupPrefix","help":""},{"name":"ELEMENT_NODE","help":"","obsolete":false},{"name":"ATTRIBUTE_NODE","help":"","obsolete":false},{"name":"TEXT_NODE","help":"","obsolete":false},{"name":"DATA_SECTION_NODE","help":"","obsolete":false},{"name":"ENTITY_REFERENCE_NODE","help":"","obsolete":false},{"name":"ENTITY_NODE","help":"","obsolete":false},{"name":"PROCESSING_INSTRUCTION_NODE","help":"","obsolete":false},{"name":"COMMENT_NODE","help":"","obsolete":false},{"name":"DOCUMENT_NODE","help":"","obsolete":false},{"name":"DOCUMENT_TYPE_NODE","help":"","obsolete":false},{"name":"DOCUMENT_FRAGMENT_NODE","help":"","obsolete":false},{"name":"NOTATION_NODE","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_DISCONNECTED","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_PRECEDING","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_FOLLOWING","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_CONTAINS","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_CONTAINED_BY","help":"","obsolete":false},{"name":"DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","help":"","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.previousSibling","name":"previousSibling","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.textContent","name":"textContent","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.firstChild","name":"firstChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.nodeType","name":"nodeType","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.prefix","name":"prefix","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.parentNode","name":"parentNode","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.nextSibling","name":"nextSibling","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.baseURI","name":"baseURI","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.childNodes","name":"childNodes","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.namespaceURI","name":"namespaceURI","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.lastChild","name":"lastChild","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.parentElement","name":"parentElement","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.nodePrincipal","name":"nodePrincipal","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.attributes","name":"attributes","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.nodeValue","name":"nodeValue","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.nodeName","name":"nodeName","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.ownerDocument","name":"ownerDocument","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/Node.localName","name":"localName","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/Node","specification":"<li><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1950641247\" title=\"http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1950641247\" target=\"_blank\">DOM Level 1 Core: Node interface</a></li> <li><a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1950641247\" target=\"_blank\">DOM&nbsp;Level 2 Core: Node interface</a></li> <li><a class=\"external\" title=\"http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247\" target=\"_blank\">DOM&nbsp;Level 3 Core: Node interface</a></li>"},"File":{"title":"File","srcUrl":"https://developer.mozilla.org/en/DOM/File","specification":"<a title=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/number-state.html#concept-input-type-file-selected\" class=\" external\" rel=\"external\" href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/number-state.html#concept-input-type-file-selected\" target=\"_blank\">File upload state</a> (HTML&nbsp;5 working draft)","seeAlso":"<li><a title=\"en/Using files from web applications\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_files_from_web_applications\">Using files from web applications</a></li> <li><a title=\"en/Extensions/Using the DOM File API in chrome code\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Extensions/Using_the_DOM_File_API_in_chrome_code\">Using the DOM&nbsp;File API&nbsp;in chrome code</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileReader\">FileReader</a></code>\n</li> <li><a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=523771\" class=\"external\" title=\"\">\nbug 523771</a>\n - Support &lt;input type=file multiple&gt;</li>","summary":"<p>The <code>File</code> object provides information about -- and access to the contents of -- files. These are generally retrieved from a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileList\">FileList</a></code>\n object returned as a result of a user selecting files using the <code>input</code> element, or from a drag and drop operation's <a title=\"En/DragDrop/DataTransfer\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DragDrop/DataTransfer\"><code>DataTransfer</code></a> object.</p>\n<div class=\"geckoVersionNote\">\n<p>\n</p><div class=\"geckoVersionHeading\">Gecko 2.0 note<div>(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n</div></div>\n<p></p>\n<p>Starting in Gecko 2.0&nbsp;(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n, the File object inherits from the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n&nbsp;interface, which provides methods and properties providing further information about the file.</p>\n</div>\n<p>The file reference can be saved when the form is submitted while the user is offline, so that the data can be retrieved and uploaded when the Internet connection is restored.</p>\n<div class=\"note\"><strong>Note:</strong> The <code>File</code> object as implemented by Gecko offers several non-standard methods for reading the contents of the file. These should <em>not</em> be used, as they will prevent your web application from being used in other browsers, as well as in future versions of Gecko, which will likely remove these methods.</div>","members":[{"url":"https://developer.mozilla.org/en/DOM/File.fileName","name":"fileName","help":"The name of the file referenced by the <code>File</code> object. <strong>Read only.</strong> \n\n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Obsolete since Gecko 7.0</span>","obsolete":true},{"url":"https://developer.mozilla.org/en/DOM/File.fileSize","name":"fileSize","help":"The size of the referenced file in bytes. <strong>Read only.</strong> \n\n<span title=\"(Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)\n\">Obsolete since Gecko 7.0</span>","obsolete":true},{"name":"webkitFullPath","help":"The full path of the referenced file; available only to code with UniversalFileRead privileges in chrome. <strong>Read only.</strong>       \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"name":"webkitFullPathInternal","help":"This is an internal-use-only property that does not do security checks. It can only be used from native code, and is used to optimize performance in special cases in which security is not a concern. <strong>Read only.</strong>        \n<span title=\"(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)\n\">Requires Gecko 2.0</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/File.name","name":"name","help":"The name of the file referenced by the <code>File</code> object. <strong>Read only.</strong> \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/File.size","name":"size","help":"The size (in bytes) of the file referenced by the File object. <strong>Read only.</strong> \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/File.type","name":"type","help":"The type (MIME type) of the file referenced by the File object. <strong>Read only.</strong> \n<span title=\"(Firefox 3.6 / Thunderbird 3.1 / Fennec 1.0)\n\">Requires Gecko 1.9.2</span>","obsolete":false}]},"SVGAnimateMotionElement":{"title":"SVGAnimateMotionElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimateMotionElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animateMotion\">&lt;animateMotion&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimateMotionElement"},"CSSImportRule":{"title":"cssRule","members":[],"srcUrl":"https://developer.mozilla.org/pl/DOM/cssRule","skipped":true,"cause":"Suspect title"},"IDBCursor":{"title":"IDBCursor","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12\n<span title=\"prefix\">webkit</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","examples":["<h4 class=\"editable\">Example</h4>\n<p>In the following code snippet, we open a transaction and manipulate an entire data set using a cursor. Because the specification is still evolving, Chrome uses prefixes in the methods. Chrome uses the <code>webkit</code> prefix. For example, instead of just <code>IDBCursor.NEXT</code>, use <code>webkitIDBCursor.NEXT</code>. Firefox does not use prefixes, except in the opening method (<code>mozIndexedDB</code>). Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nwindow.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;\nwindow.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;\nwindow.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;\nwindow.IDBCursor = window.IDBCursor || window.webkitIDBCursor;\nvar db;\n\n...\n\nfunction cursorTest() {\n  // Start a transaction on an object store called \"my-store-name\"\n  // By default, transactions are opened with read-only access.\n  // If you want to have write access, see IDBDatabase.\n  var trans = db.transaction('my-store-name');\n  // Get a reference to the object store.\n  var store = trans.objectStore('my-store-name');\n  // Create a cursor with two optional parameters.  \n  // The first parameter sets the cursor over a specified key range;\n  // while the second one sets the direction of the cursor.  \n  // In this case, the direction is set to IDBCursor.PREV,  \n  // which lets you start at the upper bound of the key range\n  // and then moves downwards. \n  // If you don't want duplicates included, use PREV_NO_DUPLICATE instead.\n  var curreq = store.openCursor(IDBKeyRange.bound(1, 4), IDBCursor.PREV); \n  // The \"onsuccess\" event fires when the cursor is created and \n  // every time the cursor iterates over data. \n  // The following block of code runs multiple times,\n  // until the cursor runs out of data to iterate over.\n  // At that point, the result's request becomes null.\n  curreq.onsuccess = function (e) {\n    var cursor = curreq.result;\n    // If the cursor is pointing at something, ask for the data.    \n    if (cursor) {\n      var getreq = store.get(cursor.key);\n      // After the data has been retrieved, show it.\n      getreq.onsuccess = function (e) {\n        console.log('key:', cursor.key, 'value:', getreq.result);\n        // OK, now move the cursor to the next item. \n        cursor.continue();\n      };\n    }\n  };\n};</pre>\n        \n<p>To learn more about various topics, see the following</p>\n<ul> <li>Starting transactions - <span class=\"eval deki-transform\"><a title=\"en/IndexedDB/IDBDatabase#transaction()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase#transaction()\">IDBDatabase</a></span></li> <li>Setting transaction modes - <a title=\"en/IndexedDB/IDBTransaction#Mode_constants\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#Mode_constants\">IDBTransaction</a></li> <li>Setting a range of keys - <a title=\"en/IndexedDB/IDBKeyRange\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBKeyRange\">IDBKeyRange</a></li> <li>Creating cursors - <a title=\"en/IndexedDB/IDBIndex#openCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openCursor\">IDBIndex</a></li>\n</ul>","<h4 class=\"editable\">Example</h4>\n<p>In the following code snippet, we open a transaction and manipulate an entire data set using a cursor. Because the specification is still evolving, Chrome uses prefixes in the methods. Chrome uses the <code>webkit</code> prefix. For example, instead of just <code>IDBCursor.NEXT</code>, use <code>webkitIDBCursor.NEXT</code>. Firefox does not use prefixes, except in the opening method (<code>mozIndexedDB</code>). Event handlers are registered for responding to various situations.</p>\n\n          <pre name=\"code\" class=\"js\">// Taking care of the browser-specific prefixes.\nwindow.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB;\nwindow.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;\nwindow.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;\nwindow.IDBCursor = window.IDBCursor || window.webkitIDBCursor;\nvar db;\n\n...\n\nfunction cursorTest() {\n  // Start a transaction on an object store called \"my-store-name\"\n  // By default, transactions are opened with read-only access.\n  // If you want to have write access, see IDBDatabase.\n  var trans = db.transaction('my-store-name');\n  // Get a reference to the object store.\n  var store = trans.objectStore('my-store-name');\n  // Create a cursor with two optional parameters.  \n  // The first parameter sets the cursor over a specified key range;\n  // while the second one sets the direction of the cursor.  \n  // In this case, the direction is set to IDBCursor.PREV,  \n  // which lets you start at the upper bound of the key range\n  // and then moves downwards. \n  // If you don't want duplicates included, use PREV_NO_DUPLICATE instead.\n  var curreq = store.openCursor(IDBKeyRange.bound(1, 4), IDBCursor.PREV); \n  // The \"onsuccess\" event fires when the cursor is created and \n  // every time the cursor iterates over data. \n  // The following block of code runs multiple times,\n  // until the cursor runs out of data to iterate over.\n  // At that point, the result's request becomes null.\n  curreq.onsuccess = function (e) {\n    var cursor = curreq.result;\n    // If the cursor is pointing at something, ask for the data.    \n    if (cursor) {\n      var getreq = store.get(cursor.key);\n      // After the data has been retrieved, show it.\n      getreq.onsuccess = function (e) {\n        console.log('key:', cursor.key, 'value:', getreq.result);\n        // OK, now move the cursor to the next item. \n        cursor.continue();\n      };\n    }\n  };\n};</pre>\n        \n<p>To learn more about various topics, see the following</p>\n<ul> <li>Starting transactions - <span class=\"eval deki-transform\"><a title=\"en/IndexedDB/IDBDatabase#transaction()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase#transaction()\">IDBDatabase</a></span></li> <li>Setting transaction modes - <a title=\"en/IndexedDB/IDBTransaction#Mode_constants\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#Mode_constants\">IDBTransaction</a></li> <li>Setting a range of keys - <a title=\"en/IndexedDB/IDBKeyRange\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBKeyRange\">IDBKeyRange</a></li> <li>Creating cursors - <a title=\"en/IndexedDB/IDBIndex#openCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openCursor\">IDBIndex</a></li>\n</ul>"],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBCursor","summary":"The <code>IDBCursor</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API</a> represents a <a title=\"en/IndexedDB#gloss_cursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss_cursor\">cursor</a> for traversing or iterating over multiple records in a database.","members":[{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"The underlying object store uses <a title=\"en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss in-line keys\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss_in-line_keys\">in-line keys</a>, and the key for the cursor's position does not match the <code>value</code> property at the object store's&nbsp;<a class=\"external\" title=\"object store key path\" rel=\"external\" href=\"http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#dfn-object-store-key-path\" target=\"_blank\">key path</a>.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR","name":"READ_ONLY_ERR","help":"The cursor is in a transaction whose mode is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The transaction that this cursor belongs to is inactive.","obsolete":false},{"name":"DATA_CLONE_ERR","help":"If the value could not be cloned.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NON_TRANSIET_ERR","name":"NON_TRANSIENT_ERR","help":"The value passed into the <code>count</code> parameter was zero or a negative number.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The transaction that this cursor belongs to is inactive.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR","name":"DATA_ERR","help":"If the <code>key</code> parameter was specified, but did not contain a valid key.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The transaction that this cursor belongs to is inactive.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR","name":"NOT_ALLOWED_ERR","help":"The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR","name":"READ_ONLY_ERR","help":"The cursor is in a transaction whose mode is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR","name":"TRANSACTION_INACTIVE_ERR","help":"The transaction that this cursor belongs to is inactive.","obsolete":false},{"name":"advance","help":"<p>Sets the number times a cursor should move its position forward.</p>\n<pre>IDBRequest advance (\n  in long <em>count</em>\n) raises (IDBDatabaseException);</pre>\n<div id=\"section_13\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>count</dt> <dd>The number of advances forward the cursor should make.</dd>\n</dl>\n</div><div id=\"section_14\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div><div id=\"section_15\"><span id=\"Exceptions_2\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><a title=\"en/IndexedDB/IDBDatabaseException#NON_TRANSIET_ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NON_TRANSIET_ERR\"><code>NON_TRANSIENT_ERR</code></a></td> <td> <p>The value passed into the <code>count</code> parameter was zero or a negative number.</p> </td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></td> <td>The transaction that this cursor belongs to is inactive.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"delete","help":"<p>Returns an <code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code> object, and, in a separate thread, deletes the record at the cursor's position, without changing the cursor's position. Once the record is deleted, the cursor's <code>value</code> is set to <code>null</code>.</p>\n<pre>IDBRequest delete (\n) raises (IDBDatabaseException);</pre>\n<div id=\"section_21\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this operation are fired. The <code>result</code> attribute is set to <code>undefined</code>.</dd>\n</dl>\n</div><div id=\"section_22\"><span id=\"Exceptions_4\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#READ ONLY ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR\">READ_ONLY_ERR</a></code></td> <td>The cursor is in a transaction whose mode is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></td> <td>The transaction that this cursor belongs to is inactive.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"continue","help":"<p>Advances the cursor to the next position along its direction, to the item whose key matches the optional <code>key</code> parameter. If no key is specified, advance to the immediate next position, based on the cursor's direction.</p>\n<pre>void continue (\n  in optional any <em>key</em>\n) raises (IDBDatabaseException);</pre>\n<div id=\"section_17\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div><div id=\"section_18\"><span id=\"Parameters\"></span><h5 class=\"editable\">Parameters</h5>\n<dl> <dt>key</dt> <dd>The key to position the cursor at.</dd>\n</dl>\n</div><div id=\"section_19\"><span id=\"Exceptions_3\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a>, with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td>If the <code>key</code> parameter was specified, but did not contain a valid key.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></td> <td>The transaction that this cursor belongs to is inactive.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"name":"update","help":"<p>Returns an IDBRequest object, and, in a separate thread, updates the value at the current position of the cursor in the object store. If the cursor points to a record that has just been deleted, a new record is created.</p>\n<pre>IDBRequest update (\n  in any <em>value</em>\n) raises (IDBDatabaseException, DOMException);\n</pre>\n<div id=\"section_9\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>value</dt> <dd>The value to be stored.</dd>\n</dl>\n</div><div id=\"section_10\"><span id=\"Returns\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></dt> <dd>A request object on which subsequent events related to this operation are fired.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Exceptions\"></span><h5 class=\"editable\">Exceptions</h5>\n<p>This method can raise an <a title=\"en/IndexedDB/IDBDatabaseException\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException\">IDBDatabaseException</a> with the following codes:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Exception</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#DATA ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#DATA_ERR\">DATA_ERR</a></code></td> <td> <p>The underlying object store uses <a title=\"en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss in-line keys\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss_in-line_keys\">in-line keys</a>, and the key for the cursor's position does not match the <code>value</code> property at the object store's&nbsp;<a class=\"external\" title=\"object store key path\" rel=\"external\" href=\"http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#dfn-object-store-key-path\" target=\"_blank\">key path</a>.</p> </td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#NOT ALLOWED ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#NOT_ALLOWED_ERR\">NOT_ALLOWED_ERR</a></code></td> <td>The cursor was created using <a title=\"en/IndexedDB/IDBIndex#openKeyCursor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBIndex#openKeyCursor\">openKeyCursor()</a>, or if it is currently being iterated (you cannot call this method again until the new cursor data has been loaded), or if it has iterated past the end of its range.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#READ ONLY ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#READ_ONLY_ERR\">READ_ONLY_ERR</a></code></td> <td>The cursor is in a transaction whose mode is <code><a title=\"en/IndexedDB/IDBTransaction#READ ONLY\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#READ_ONLY\">READ_ONLY</a></code>.</td> </tr> <tr> <td><code><a title=\"en/IndexedDB/IDBDatabaseException#TRANSACTION INACTIVE ERR\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabaseException#TRANSACTION_INACTIVE_ERR\">TRANSACTION_INACTIVE_ERR</a></code></td> <td>The transaction that this cursor belongs to is inactive.</td> </tr> </tbody>\n</table>\n<p>It can also raise a <a title=\"En/DOM/DOMException\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/DOMException\">DOMException</a> with the following code:</p>\n<table class=\"standard-table\"> <thead> <tr> <th scope=\"col\" width=\"131\">Attribute</th> <th scope=\"col\" width=\"698\">Description</th> </tr> </thead> <tbody> <tr> <td><code>DATA_CLONE_ERR</code></td> <td>If the value could not be cloned.</td> </tr> </tbody>\n</table>\n</div>","obsolete":false},{"url":"","name":"NEXT","help":"The cursor shows all records, including duplicates. It starts at the lower bound of the key range and moves upwards (monotonically increasing in the order of keys).","obsolete":false},{"url":"","name":"NEXT_NO_DUPLICATE","help":"The cursor shows all records, excluding duplicates. If multiple records exist with the same key, only the first one iterated is retrieved. It starts at the lower bound of the key range and moves upwards.","obsolete":false},{"url":"","name":"PREV","help":"The cursor shows all records, including duplicates. It starts at the upper bound of the key range and moves downwards (monotonically decreasing in the order of keys).","obsolete":false},{"url":"","name":"PREV_NO_DUPLICATE","help":"The cursor shows all records, excluding duplicates. If multiple records exist with the same key, only the first one iterated is retrieved. It starts at the upper bound of the key range and moves downwards.","obsolete":false},{"url":"","name":"source","help":"On getting, returns the <code>IDBObjectStore</code> or <code>IDBIndex</code> that the cursor is iterating. This function never returns null or throws an exception, even if the cursor is currently being iterated, has iterated past its end, or its transaction is not active.","obsolete":false},{"url":"","name":"direction","help":"On getting, returns the <a title=\"en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss direction\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/Basic_Concepts_Behind_IndexedDB#gloss_direction\">direction</a> of traversal of the cursor. See Constants for possible values.","obsolete":false},{"url":"","name":"key","help":"Returns the key for the record at the cursor's position. If the cursor is outside its range, this is <code>undefined</code>.","obsolete":false},{"url":"","name":"primaryKey","help":"Returns the cursor's current effective key. If the cursor is currently being iterated or has iterated outside its range, this is <code>undefined</code>.","obsolete":false}]},"CSSPrimitiveValue":{"title":"Interface documentation status","members":[],"srcUrl":"https://developer.mozilla.org/User:trevorh/Interface_documentation_status","skipped":true,"cause":"Suspect title"},"SVGPoint":{"title":"SVGSVGElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSVGElement","skipped":true,"cause":"Suspect title"},"VoidCallback":{"title":"Mouse Lock API","members":[],"srcUrl":"https://developer.mozilla.org/en/API/Mouse_Lock_API","skipped":true,"cause":"Suspect title"},"EventTarget":{"title":"EventTarget","summary":"An <code>EventTarget</code> is a DOM interface implemented by objects that can receive DOM events and have listeners for them. The most common <code>EventTarget</code>s are <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\" title=\"en/DOM/element\">DOM elements</a>, although other objects can be <code>EventTarget</code>s too, for example <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document\" title=\"en/DOM/document\">document</a>, <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/window\" title=\"en/DOM/window\">window</a>, <a rel=\"internal\" href=\"https://developer.mozilla.org/en/XMLHttpRequest\" title=\"en/XMLHttpRequest\">XMLHttpRequest</a>, and others.\n","members":[{"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":"\nRegister an event handler of a specific event type on the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":"\nRemoves an event listener from the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dispatchEvent","name":"dispatchEvent","help":"\nDispatch an event to this <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":"\nRegister an event handler of a specific event type on the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":"\nRemoves an event listener from the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dispatchEvent","name":"dispatchEvent","help":"\nDispatch an event to this <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.addEventListener","name":"addEventListener","help":"\nRegister an event handler of a specific event type on the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.removeEventListener","name":"removeEventListener","help":"\nRemoves an event listener from the <code>EventTarget</code>.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/element.dispatchEvent","name":"dispatchEvent","help":"\nDispatch an event to this <code>EventTarget</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/EventTarget","specification":"DOM Level 2 Events: EventTarget"},"SVGAnimatedNumberList":{"title":"SVGAnimatedNumberList","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedNumber</code> interface is used for attributes which take a list of numbers and which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"A read only <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGNumberList\">SVGNumberList</a></code>\n representing the current animated value of the given attribute. If the given attribute is not currently being animated, then the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/SVGNumberList\">SVGNumberList</a></code>\n will have the same contents as <code>baseVal</code>. The object referenced by <code>animVal</code> will always be distinct from the one referenced by <code>baseVal</code>, even when the attribute is not animated.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedNumberList"},"ImageData":{"title":"ImageData","srcUrl":"https://developer.mozilla.org/en/DOM/ImageData","specification":"http://www.whatwg.org/specs/web-apps...html#imagedata","seeAlso":"Pixel manipulation with canvas","summary":"Used with the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/canvas\">&lt;canvas&gt;</a></code>\n element. Returned by <a title=\"en/DOM/CanvasRenderingContext2D\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D\">CanvasRenderingContext2D</a>'s <a title=\"en/DOM/CanvasRenderingContext2D.createImageData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D.createImageData\" class=\"new \">createImageData</a> and <a title=\"en/DOM/CanvasRenderingContext2D.getImageData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D.getImageData\" class=\"new \">getImageData</a> (and accepted as first argument in <a title=\"en/DOM/CanvasRenderingContext2D.putImageData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CanvasRenderingContext2D.putImageData\" class=\"new \">putImageData</a>)","members":[]},"HTMLTrackElement":{"title":"track","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>16*</td> <td><span title=\"Not supported.\">--</span><br> \n<span class=\"unimplementedInlineTemplate\">Unimplemented (see<a rel=\"external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=629350\" class=\"external\" title=\"\">\nbug 629350</a>\n)</span>\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<p>* Partially implemented in Chrome 16 and currently behind the --enable-video-track flag or enabling the feature in about:flags.</p>","examples":["&lt;video src=\"sample.ogv\"&gt;\n   &lt;track kind=\"captions\" src=\"sampleCaptions.srt\" srclang=\"en\"&gt;&lt;/track&gt;\n   &lt;track kind=\"descriptions\" src=\"sampleDesciptions.srt\" srclang=\"en\"&gt;&lt;/track&gt;\n   &lt;track kind=\"chapters\" src=\"sampleChapters.srt\" srclang=\"en\"&gt;&lt;/track&gt;\n   &lt;track kind=\"subtitles\" src=\"sampleSubtitles_de.srt\" srclang=\"de\"&gt;&lt;/track&gt;\n   &lt;track kind=\"subtitles\" src=\"sampleSubtitles_en.srt\" srclang=\"en\"&gt;&lt;/track&gt;\n   &lt;track kind=\"subtitles\" src=\"sampleSubtitles_ja.srt\" srclang=\"ja\"&gt;&lt;/track&gt;\n   &lt;track kind=\"subtitles\" src=\"sampleSubtitles_oz.srt\" srclang=\"oz\"&gt;&lt;/track&gt;\n   &lt;track kind=\"metadata\" src=\"keyStage1.srt\" srclang=\"en\" label=\"Key Stage 1\"&gt;&lt;/track&gt;\n   &lt;track kind=\"metadata\" src=\"keyStage2.srt\" srclang=\"en\" label=\"Key Stage 2\"&gt;&lt;/track&gt;\n   &lt;track kind=\"metadata\" src=\"keyStage3.srt\" srclang=\"en\" label=\"Key Stage 3\"&gt;&lt;/track&gt; \n&lt;/video&gt;"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/track","specification":"http://www.w3.org/TR/html5/video.html#the-track-element","summary":"<p>The <code>track</code>&nbsp;element is used as a child of the media elements—<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/audio\">&lt;audio&gt;</a></code>\n and <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/video\">&lt;video&gt;</a></code>\n—and does not represent anything on its own. It lets you specify timed text tracks (or time-based data).</p>\n<p>The type of data that <code> track</code> adds to the media is set in the <code>kind</code> attribute, which can take values of <code>subtitles</code>, <code>captions</code>, <code>descriptions</code>, <code>chapters</code> or <code>metadata</code>. The element points to a source file containing timed text that the browser exposes when the user requests additional data. </p>","members":[{"obsolete":false,"url":"","name":"label","help":"A user-readable title of the text track Used by the browser when listing available text tracks."},{"obsolete":false,"url":"","name":"kind","help":"Kind of text track. The following keywords are allowed: <ul> <li>subtitles: A transcription or translation of the dialogue.</li> <li>captions: A transcription or translation of the dialogue or other sound effects. Suitable for users who are deaf or when the sound is muted.</li> <li>descriptions: Textual descriptions of the video content. Suitable for users who are blind.</li> <li>chapters: Chapter titles, intended to be used when the user is navigating the media resource.</li> <li>metadata: Tracks used by script. Not visible to the user.</li> </ul>"},{"obsolete":false,"url":"","name":"default","help":"This attribute indicates that the track should be enabled unless the user's preferences indicate that another track is more appropriate. This may only be used on one <code>track</code> element per media element."},{"obsolete":false,"url":"","name":"src","help":"Address of the track. Must be a valid URL. This attribute must be defined."},{"obsolete":false,"url":"","name":"srclang","help":"Language of the track text data."}]},"StyleSheetList":{"title":"document.styleSheets","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/document.styleSheets","skipped":true,"cause":"Suspect title"},"SVGColor":{"title":"Colori","summary":"<p>This page explains more about how you can specify color in CSS.\n</p><p>In your sample stylesheet, you introduce background colors.\n</p>","members":[],"srcUrl":"https://developer.mozilla.org/it/Conoscere_i_CSS/Colori"},"SVGPathSegArcAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGFEColorMatrixElement":{"title":"feColorMatrix","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"This filter changes colors based on a transformation matrix. Every pixel's color value (represented by an [R,G,B,A] vector) is <a title=\"http://en.wikipedia.org/wiki/Matrix_multiplication\" class=\" external\" rel=\"external\" href=\"http://en.wikipedia.org/wiki/Matrix_multiplication\" target=\"_blank\">matrix multiplated</a> to create a new color.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/type","name":"type","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/values","name":"values","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feColorMatrix"},"SVGPathSegCurvetoQuadraticAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGPathSegCurvetoCubicAbs":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGGElement":{"title":"SVGGElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGGElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/g\">&lt;g&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGGElement"},"EventException":{"title":"DekiScript Code Snippets","members":[],"srcUrl":"https://developer.mozilla.org/User:IgorKitsa/Some_Algorithms","skipped":true,"cause":"Suspect title"},"SVGPolygonElement":{"title":"polygon","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> \n<tr><th scope=\"col\">Feature</th><th scope=\"col\">Chrome</th><th scope=\"col\">Firefox (Gecko)</th><th scope=\"col\">Internet Explorer</th><th scope=\"col\">Opera</th><th scope=\"col\">Safari</th></tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.5 (1.8)\n</td> <td>\n9.0</td> <td>\n8.0</td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>\n3.0</td> <td>1.0 (1.8)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>\n3.0.4</td> </tr> </tbody>\n</table>\n</div>\n<p>The chart is based on <a title=\"en/SVG/Compatibility sources\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Compatibility_sources\">these sources</a>.</p>","examples":["<tr> <th scope=\"col\">Source code</th> <th scope=\"col\">Output result</th> </tr> <tr> <td>\n          <pre name=\"code\" class=\"xml\">&lt;?xml version=\"1.0\"?&gt;\n&lt;svg width=\"120\" height=\"120\" \n     viewPort=\"0 0 120 120\" version=\"1.1\"\n     xmlns=\"http://www.w3.org/2000/svg\"&gt;\n\n    &lt;polygon points=\"60,20 100,40 100,80 60,100 20,80 20,40\"/&gt;\n\n&lt;/svg&gt;</pre>\n        </td> <td>\n<iframe src=\"https://developer.mozilla.org/@api/deki/services/developer.mozilla.org/39/images/3a819e42-12f2-6fab-61fa-69d9f937e686.svg\" width=\"120px\" height=\"120px\" marginwidth=\"0\" marginheight=\"0\" hspace=\"0\" vspace=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe>\n</td> </tr>"],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/polygon","summary":"The <code>polygon</code> element defines a closed shape consisting of a set of connected straight line segments.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/points","name":"points","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/transform","name":"transform","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/externalResourcesRequired","name":"externalResourcesRequired","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""}]},"SVGFEOffsetElement":{"title":"feOffset","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The input image as a whole is offset by the values specified in the \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/dx\" class=\"new\">dx</a></code> and \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/dy\" class=\"new\">dy</a></code> attributes. It's used in creating drop-shadows.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/dy","name":"dy","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/dx","name":"dx","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feOffset"},"TouchEvent":{"title":"TouchEvent","examples":["See the <a title=\"en/DOM/Touch events#Example\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events#Example\">example on the main Touch events article</a>."],"srcUrl":"https://developer.mozilla.org/en/DOM/TouchEvent","seeAlso":"<li><a title=\"en/DOM/Touch events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/Touch_events\">Touch events</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n</li>","summary":"<p>A <code>TouchEvent</code> represents an event sent when the state of contacts with a touch-sensitive surface changes. This surface can be a touch screen or trackpad, for example. The event can describe one or more points of contact with the screen and includes support for detecting movement, addition and removal of contact points, and so forth.</p>\n<p>Touches are represented by the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n&nbsp;object; each touch is described by a position, size and shape, amount of pressure, and target element. Lists of touches are represented by <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n objects.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchEvent.targetTouches","name":"targetTouches","help":"A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n of all the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n&nbsp;objects that are both currently in contact with the touch surface <strong>and</strong> were also started on the same element that is the target of the event. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.metaKey","name":"metaKey","help":"A Boolean value indicating whether or not the meta key was down when the touch event was fired. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.ctrlKey","name":"ctrlKey","help":"A Boolean value indicating whether or not the control key was down when the touch event was fired. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.altKey","name":"altKey","help":"A Boolean value indicating whether or not the alt key was down when the touch event was fired. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.shiftKey","name":"shiftKey","help":"A Boolean value indicating whether or not the shift key was down when the touch event was fired. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchEvent.touches","name":"touches","help":"A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n of all the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n&nbsp;objects representing all current points of contact with the surface, regardless of target or changed status. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/TouchEvent.changedTouches","name":"changedTouches","help":"A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchList\">TouchList</a></code>\n of all the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Touch\">Touch</a></code>\n objects representing individual points of contact whose states changed between the previous touch event and this one. <strong>Read only.</strong>"},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/event.type","name":"type","help":"The type of touch event that occurred. See <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/TouchEvent#Touch_event_types\">Touch event types</a>&nbsp;for possible values and details."}]},"HTMLMapElement":{"title":"map","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td> <p>1.0 (1.7 or earlier)\n</p> <p>Starting in Gecko 5.0 (Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)\n, empty maps are no longer skipped over in favor of non-empty ones when matching when in quirks mode. See the section <a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/map#Gecko_notes\">Gecko notes</a> below.</p> </td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0</td> <td>1.0</td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td>1.0</td> <td>1.0 (1)\n</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>1.0</td> <td>1.0</td> </tr> </tbody>\n</table>\n</div>","examples":["&lt;map&gt;\n  &lt;area shape=\"circle\" coords=\"200,250,25\" href=\"another.htm\" /&gt; \n  &lt;area shape=\"default\" /&gt;\n&lt;/map&gt;"],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/map","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a\">&lt;a&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area\">&lt;area&gt;</a></code>\n</li>","summary":"The HTML <em>Map</em> element (<code>&lt;map&gt;</code>) is used with <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/area\">&lt;area&gt;</a></code>\n elements to define a image map.","members":[]},"SVGClipPathElement":{"title":"SVGClipPathElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGClipPathElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/clipPath\">&lt;clipPath&gt;</a></code>\n SVG Element","summary":"The <code>SVGClipPathElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/clipPath\">&lt;clipPath&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"clipPathUnits","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/clipPathUnits\">clipPathUnits</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/clipPath\">&lt;clipPath&gt;</a></code>\n element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>","obsolete":false}]},"EventSource":{"title":"EventSource","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari</th> </tr> <tr> <td>EventSource support</td> <td>9</td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11</td> <td>5</td> </tr> <tr> <td><a title=\"HTTP access control\" rel=\"internal\" href=\"https://developer.mozilla.org/En/HTTP_access_control\">Cross-Origin Resource Sharing</a><br> support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td>11.0 (11.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>EventSource support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/Server-sent_events/EventSource","seeAlso":"<li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/eventsource/#the-eventsource-interface\">Server-Sent Events: The EventSource Interface</a><span title=\"Working Draft\">WD</span></li> <li><a title=\"en/Server-sent events/Using server-sent events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Server-sent_events/Using_server-sent_events\">Using server-sent events</a></li>","summary":"<p>The <code>EventSource</code> interface is used to manage server-sent events. You can set the onmessage attribute to a JavaScript function to receive non-typed messages (that is, messages with no <code>event</code> field). You can also call <code>addEventListener()</code> to listen for events just like any other event source.</p>\n<p>See <a title=\"en/Server-sent events/Using server-sent events\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Server-sent_events/Using_server-sent_events\">Using server-sent events</a> for further details.</p>","members":[{"name":"init","help":"<div id=\"section_6\"><p>Initializes the object for use from C++ code with the principal, script context, and owner window that should be used.</p>\n\n</div><div id=\"section_7\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>principal</code></dt> <dd>The principal to use for the request. This must not be <code>null</code>.</dd> <dt><code>scriptContext</code></dt> <dd>The script context to use for the request. May be <code>null</code>.</dd> <dt><code>ownerWindow</code></dt> <dd>The associated window for the request. May be <code>null</code>.</dd> <dt><code>url</code></dt> <dd>The <code>EventSource</code>'s URL. This must not be empty.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void init(\n  in nsIPrincipal principal,\n  in nsIScriptContext scriptContext,\n  in nsPIDOMWindow ownerWindow,\n  in DOMString url\n);\n</pre>","obsolete":false},{"name":"close","help":"Closes the connection, if any, and sets the <code>readyState</code> attribute to <code>CLOSED</code>. If the connection is already closed, the method does nothing.","idl":"<pre class=\"eval\">void close();\n</pre>","obsolete":false},{"name":"CONNECTING","help":"The connection is being established.","obsolete":false},{"name":"OPEN","help":"The connection is open and dispatching events.","obsolete":false},{"name":"CLOSED","help":"The connection is not being established, has been closed or there was a fatal error.","obsolete":false},{"name":"onerror","help":"A JavaScript function to call when an error occurs.","obsolete":false},{"name":"onmessage","help":"A JavaScript function to call when an a message without an <code>event</code> field arrives.","obsolete":false},{"name":"onopen","help":"A JavaScript function to call when the connection has opened.","obsolete":false},{"name":"readyState","help":"The state of the connection, must be one of <code>CONNECTING</code>, <code>OPEN</code>, or <code>CLOSED</code>. <strong>Read only.</strong>","obsolete":false},{"name":"url","help":"Read only.","obsolete":false}]},"CSSStyleSheet":{"title":"CSSStyleSheet","srcUrl":"https://developer.mozilla.org/en/DOM/CSSStyleSheet","specification":"DOM Level 2 CSS: <code>CSSStyleSheet</code> interface","seeAlso":"StyleSheet","summary":"<p>An object implementing the <code>CSSStyleSheet</code> interface represents a single <a title=\"en/CSS\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS\">CSS</a> style sheet.</p>\n<p>A CSS style sheet consists of CSS rules, each of which can be manipulated through an object that corresponds to that rule and that implements the <code><a title=\"en/DOM/cssRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/cssRule\">CSSRule</a></code> interface. The <code>CSSStyleSheet</code> itself lets you examine and modify its corresponding style sheet, including its list of rules.</p>\n<p>In practice, every <code>CSSStyleSheet</code> also implements the more generic <code><a title=\"en/DOM/StyleSheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/stylesheet\">StyleSheet</a></code> interface. A list of <code>CSSStyleSheet</code>-implementing objects corresponding to the style sheets for a given document can be reached by the <code><a title=\"en/DOM/document.styleSheets\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/document.styleSheets\">document.styleSheets</a></code> property, if the document is styled by an external CSS style sheet or an inline <code><a title=\"en/HTML/element/style\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Element/style\">style</a></code> element.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSStyleSheet/insertRule","name":"insertRule","help":"Inserts a new style rule into the current style sheet."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/CSSStyleSheet/deleteRule","name":"deleteRule","help":"Deletes a rule from the style sheet."},{"name":"ownerRule","help":"If this style sheet is imported into the document using an <code><a title=\"en/CSS/@import\" rel=\"internal\" href=\"https://developer.mozilla.org/en/CSS/@import\">@import</a></code> rule, the <code>ownerRule</code> property will return that <code><a title=\"en/DOM/CSSImportRule\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSImportRule\" class=\"new \">CSSImportRule</a></code>, otherwise it returns <code>null</code>.","obsolete":false},{"name":"cssRules","help":"Returns a <code><a title=\"en/DOM/CSSRuleList\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSRuleList\">CSSRuleList</a></code> of the CSS rules in the style sheet.","obsolete":false}]},"SVGStyleElement":{"title":"SVGStyleElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGStyleElement</code> interface corresponds to the SVG <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/style\">&lt;style&gt;</a></code>\n element.","members":[{"name":"type","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/type\" class=\"new\">type</a></code> on the given element. A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n is raised with code <code>NO_MODIFICATION_ALLOWED_ERR</code> on an attempt to change the value of a read only attribut.","obsolete":false},{"name":"media","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/media\" class=\"new\">media</a></code> on the given element. A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n is raised with code <code>NO_MODIFICATION_ALLOWED_ERR</code> on an attempt to change the value of a read only attribut.","obsolete":false},{"name":"title","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/title\" class=\"new\">title</a></code> on the given element. A <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n is raised with code <code>NO_MODIFICATION_ALLOWED_ERR</code> on an attempt to change the value of a read only attribut.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGStyleElement"},"StyleSheet":{"title":"stylesheet","srcUrl":"https://developer.mozilla.org/en/DOM/stylesheet","specification":"DOM Level 2 Style Sheets: <code>StyleSheet</code> interface","seeAlso":"CSSStyleSheet","summary":"An object implementing the <code>StyleSheet</code> interface represents a single style sheet.&nbsp; CSS style sheets will further implement the more specialized <code><a title=\"en/DOM/CSSStyleSheet\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/CSSStyleSheet\">CSSStyleSheet</a></code> interface.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/title","name":"title","help":"Returns the advisory title of the current style sheet."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/parentStyleSheet","name":"parentStyleSheet","help":"Returns the stylesheet that is including this one, if any."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/media","name":"media","help":"Specifies the intended destination medium for style information."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/ownerNode","name":"ownerNode","help":"Returns the node that associates this style sheet with the document."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/href","name":"href","help":"Returns the location of the stylesheet."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/disabled","name":"disabled","help":"This property indicates whether the current stylesheet has been applied or not."},{"obsolete":false,"url":"https://developer.mozilla.org/en/DOM/StyleSheet/type","name":"type","help":"Specifies the style sheet language for this style sheet."}]},"SVGMaskElement":{"title":"SVGMaskElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGMaskElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n SVG Element","summary":"The <code>SVGMaskElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"maskUnits","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/maskUnits\" class=\"new\">maskUnits</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>","obsolete":false},{"name":"maskContentUnits","help":"Corresponds to attribute \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/maskContentUnits\" class=\"new\">maskContentUnits</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n element. Takes one of the constants defined in <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/DOM/SVGUnitTypes\" class=\"new\">SVGUnitTypes</a></code>","obsolete":false},{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/mask\">&lt;mask&gt;</a></code>\n element.","obsolete":false}]},"HTMLInputElement":{"title":"HTMLInputElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n&nbsp;HTML&nbsp;element","summary":"DOM <code>Input</code> objects expose the <a title=\"http://dev.w3.org/html5/spec/the-input-element.html#htmlinputelement\" class=\" external\" rel=\"external\" href=\"http://dev.w3.org/html5/spec/the-input-element.html#htmlinputelement\" target=\"_blank\">HTMLInputElement</a> (or \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> <a class=\" external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-6043025\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-6043025\" target=\"_blank\"><code>HTMLInputElement</code></a>) interface, which provides special properties and methods (beyond the regular <a rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of input elements.","members":[{"name":"blur","help":"Removes focus from input; keystrokes will subsequently go nowhere.","obsolete":false},{"name":"checkValidity","help":"Returns false if the element is a candidate for constraint validation, and it does not satisfy its constraints. In this case, it also fires an <code>invalid</code> event at the element. It returns true if the element is not a candidate for constraint validation, or if it satisfies its constraints.","obsolete":false},{"name":"click","help":"Simulates a click on the element.","obsolete":false},{"name":"focus","help":"Focus on input; keystrokes will subsequently go to this element.","obsolete":false},{"name":"webkitGetFileNameArray","help":"Returns an array of all the file names from the input.","obsolete":false},{"name":"webkitSetFileNameArray","help":"Sets the filenames for the files selected on the input.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.select","name":"select","help":"Selects the input text in the element, and focuses it so the user can subsequently replace the whole entry.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.setSelectionRange","name":"setSelectionRange","help":"Selects a range of text in the element (but does not focus it). The optional <code>selectionDirection</code> parameter may be \"forward\" or \"backward\" to establish the direction in which selection was set, or \"none\"if the direction is unknown or not relevant. The default is \"none\". Specifying <code>selectionDirection</code> sets the value of the <code>selectionDirection</code> property.","obsolete":false},{"name":"stepDown","help":"<p>Decrements the <strong>value</strong> by (<strong>step</strong> * <code>n</code>), where <code>n</code> defaults to 1 if not specified. Throws an INVALID_STATE_ERR exception:</p> <ul> <li>if the method is not applicable to for the current <strong>type</strong> value.</li> <li>if the element has no step value.</li> <li>if the <strong>value</strong> cannot be converted to a number.</li> <li>if the resulting value is above the <strong>max</strong> or below the <strong>min</strong>.&nbsp;</li> </ul>","obsolete":false},{"name":"stepUp","help":"<p>Increments the <strong>value</strong> by (<strong>step</strong> * <code>n</code>), where <code>n</code> defaults to 1 if not specified. Throws an INVALID_STATE_ERR exception:</p> <ul> <li>if the method is not applicable to for the current <strong>type</strong> value.</li> <li>if the element has no step value.</li> <li>if the <strong>value</strong> cannot be converted to a number.</li> <li>if the resulting value is above the <strong>max</strong> or below the <strong>min</strong>.</li> </ul>","obsolete":false},{"name":"accept","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-accept\">accept</a></code>\n HTML&nbsp;attribute, containing comma-separated list of file types accepted by the server when <strong>type</strong> is <code>file</code>.","obsolete":false},{"name":"accessKey","help":"A single character that switches input focus to the control. \n\n<span title=\"\">Obsolete</span>&nbsp;in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"align","help":"Alignment of the element.\n\n<span title=\"\">Obsolete</span>&nbsp;in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"alt","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-alt\">alt</a></code>\n&nbsp;HTML attribute, containing alternative text to use when <strong>type</strong> is <code>image.</code>","obsolete":false},{"name":"autocomplete","help":"Reflects the {{htmlattrxref(\"autocomplete\", \"input)}} HTML attribute, indicating whether the value of the control can be automatically completed by the browser. Ignored if the value of the <strong>type</strong> attribute is <span>hidden</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type (<span>button</span>, <span>submit</span>, <span>reset</span>, <span>image</span>). Possible values are: <ul> <li><span>off</span>: The user must explicitly enter a value into this field for every use, or the document provides its own auto-completion method; the browser does not automatically complete the entry.</li> <li><span>on</span>: The browser can automatically complete the value based on values that the user has entered during previous uses.</li> </ul>","obsolete":false},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-autofocus\">autofocus</a></code>\n HTML&nbsp;attribute, which specifies that a form control should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form element in a document can have the <strong>autofocus</strong> attribute. It cannot be applied if the <strong>type</strong> attribute is set to <code>hidden</code> (that is, you cannot automatically set focus to a hidden control).","obsolete":false},{"name":"checked","help":"The current state of the element when <strong>type</strong> is <code>checkbox</code> or <code>radio</code>.","obsolete":false},{"name":"defaultChecked","help":"The default state of a radio button or checkbox as originally specified in HTML that created this object.","obsolete":false},{"name":"defaultValue","help":"The default value as originally specified in HTML that created this object.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-disabled\">disabled</a></code>\n HTML attribute, indicating that the control is not available for interaction.","obsolete":false},{"name":"files","help":"A list of selected files.","obsolete":false},{"name":"form","help":"<p>The containing form element, if this element is in a form. If this element is not contained in a form element:</p> <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this can be the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-id\">id</a></code>\n attribute of any <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element in the same document. Even if the attribute is set on <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n, this property will be <code>null</code>, if it isn't the id of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> this must be <code>null</code>.</li> </ul>","obsolete":false},{"name":"formAction","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formaction\">formaction</a></code>\n HTML attribute, containing the URI&nbsp;of a program that processes information submitted by the element. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-action\">action</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formEncType","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formenctype\">formenctype</a></code>\n HTML&nbsp;attribute, containing the type of content that is used to submit the form to the server. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-enctype\">enctype</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formMethod","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formmethod\">formmethod</a></code>\n&nbsp;HTML&nbsp;attribute, containing the HTTP&nbsp;method that the browser uses to submit the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-method\">method</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formNoValidate","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formnovalidate\">formnovalidate</a></code>\n&nbsp;HTML&nbsp;attribute, indicating that the form is not to be validated when it is submitted. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-novalidate\">novalidate</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formTarget","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formtarget\">formtarget</a></code>\n HTML&nbsp;attribute, containing a name or keyword indicating where to display the response that is received after submitting the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-target\">target</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-height\">height</a></code>\n HTML attribute, which defines the height of the image displayed for the button, if the value of <strong>type</strong> is <span>image</span>.","obsolete":false},{"name":"indeterminate","help":"Indicates that a checkbox is neither on nor off.","obsolete":false},{"name":"labels","help":"A list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n elements that are labels for this element.","obsolete":false},{"name":"list","help":"Identifies a list of pre-defined options to suggest to the user. The value must be the <strong>id</strong> of a <code><a class=\"new\" href=\"https://developer.mozilla.org/en/HTML/Element/datalist\" rel=\"internal\">&lt;datalist&gt;</a></code> element in the same document. The browser displays only options that are valid values for this input element. This attribute is ignored when the <strong>type</strong> attribute's value is <span>hidden</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type.","obsolete":false},{"name":"max","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-max\">max</a></code>\n HTML&nbsp;attribute, containing the maximum (numeric or date-time) value for this item, which must not be less than its minimum (<strong>min</strong> attribute) value.","obsolete":false},{"name":"maxLength","help":"<p>Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-maxlength\">maxlength</a></code>\n&nbsp;HTML attribute, containing the maximum length of text (in Unicode code points) that the value can be changed to. The constraint is evaluated only when the value is changed</p> <div class=\"note\"><strong>Note:</strong> If you set <code>maxlength</code> to a negative value programmatically, an exception will be thrown.</div>","obsolete":false},{"name":"min","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-min\">min</a></code>\n HTML&nbsp;attribute, containing the minimum (numeric or date-time) value for this item, which must not be greater than its maximum (<strong>max</strong> attribute) value.","obsolete":false},{"name":"multiple","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-multiple\">multiple</a></code>\n HTML&nbsp;attribute, indicating whether more than one value is possible (e.g., multiple files).","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-name\">name</a></code>\n HTML&nbsp;attribute, containing a name that identifies the element when submitting the form.","obsolete":false},{"name":"pattern","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-pattern\">pattern</a></code>\n HTML&nbsp;attribute, containing a regular expression that the control's value is checked against. The pattern must match the entire value, not just some subset. Use the <strong>title</strong> attribute to describe the pattern to help the user. This attribute applies when the value of the <strong>type</strong> attribute is <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span> or <span>email</span>; otherwise it is ignored.","obsolete":false},{"name":"placeholder","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-placeholder\">placeholder</a></code>\n HTML&nbsp;attribute, containing a hint to the user of what can be entered in the control. The placeholder text must not contain carriage returns or line-feeds. This attribute applies when the value of the <strong>type</strong> attribute is <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span> or <span>email</span>; otherwise it is ignored.","obsolete":false},{"name":"readOnly","help":"<p>Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-readonly\">readonly</a></code>\n HTML&nbsp;attribute, indicating that the user cannot modify the value of the control.</p> <p><span><a href=\"https://developer.mozilla.org/en/HTML/HTML5\" rel=\"custom nofollow\">HTML 5</a></span> This is ignored if the value of the <strong>type</strong> attribute is <span>hidden</span>, <span>range</span>, <span>color</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type.</p>","obsolete":false},{"name":"required","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-required\">required</a></code>\n HTML&nbsp;attribute, indicating that the user must fill in a value before submitting a form.","obsolete":false},{"name":"selectionDirection","help":"The direction in which selection occurred. This is \"forward\" if selection was performed in the start-to-end direction of the current locale, or \"backward\" for the opposite direction. This can also be \"none\"&nbsp;if the direction is unknown.\"","obsolete":false},{"name":"selectionEnd","help":"The index of the end of selected text.","obsolete":false},{"name":"selectionStart","help":"The index of the beginning of selected text.","obsolete":false},{"name":"size","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-size\">size</a></code>\n HTML&nbsp;attribute, containing size of the control. This value is in pixels unless the value of <strong>type</strong> is <span>text</span> or <span>password</span>, in which case, it is an integer number of characters. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> Applies only when <strong>type</strong> is set to <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span>, <span>email</span>, or <span>password</span>; otherwise it is ignored.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-src\">src</a></code>\n HTML&nbsp;attribute, which specifies a URI for the location of an image to display on the graphical submit button, if the value of <strong>type</strong> is <span>image</span>; otherwise it is ignored.","obsolete":false},{"name":"step","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-step\">step</a></code>\n HTML&nbsp;attribute, which works with<strong> min</strong> and <strong>max</strong> to limit the increments at which a numeric or date-time value can be set. It can be the string <span>any</span> or a positive floating point number. If this is not set to <span>any</span>, the control accepts only values at multiples of the step value greater than the minimum.","obsolete":false},{"name":"tabIndex","help":"The position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-type\">type</a></code>\n HTML&nbsp;attribute, indicating the type of control to display. See \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-type\">type</a></code>\n attribute of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n for possible values.","obsolete":false},{"name":"useMap","help":"A client-side image map. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.&nbsp;","obsolete":false},{"name":"value","help":"Current value in the control.","obsolete":false},{"name":"valueAsDate","help":"The value of the element, interpreted as a date, or <code>null</code> if conversion is not possible.","obsolete":false},{"name":"valueAsNumber","help":"<p>The value of the element, interpreted as one of the following in order:</p> <ol> <li>a time value</li> <li>a number</li> <li><code>null</code> if conversion is not possible</li> </ol>","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-width\">width</a></code>\n HTML&nbsp;attribute, which defines the width of the image displayed for the button, if the value of <strong>type</strong> is <span>image</span>.","obsolete":false},{"name":"willValidate","help":"Indicates whether the element is a candidate for constraint validation. It is false if any conditions bar it from constraint validation.","obsolete":false},{"name":"blur","help":"Removes focus from input; keystrokes will subsequently go nowhere.","obsolete":false},{"name":"checkValidity","help":"Returns false if the element is a candidate for constraint validation, and it does not satisfy its constraints. In this case, it also fires an <code>invalid</code> event at the element. It returns true if the element is not a candidate for constraint validation, or if it satisfies its constraints.","obsolete":false},{"name":"click","help":"Simulates a click on the element.","obsolete":false},{"name":"focus","help":"Focus on input; keystrokes will subsequently go to this element.","obsolete":false},{"name":"webkitGetFileNameArray","help":"Returns an array of all the file names from the input.","obsolete":false},{"name":"webkitSetFileNameArray","help":"Sets the filenames for the files selected on the input.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.select","name":"select","help":"Selects the input text in the element, and focuses it so the user can subsequently replace the whole entry.","obsolete":false},{"name":"setCustomValidity","help":"Sets a custom validity message for the element. If this message is not the empty string, then the element is suffering from a custom validity error, and does not validate.","obsolete":false},{"url":"https://developer.mozilla.org/en/DOM/Input.setSelectionRange","name":"setSelectionRange","help":"Selects a range of text in the element (but does not focus it). The optional <code>selectionDirection</code> parameter may be \"forward\" or \"backward\" to establish the direction in which selection was set, or \"none\"if the direction is unknown or not relevant. The default is \"none\". Specifying <code>selectionDirection</code> sets the value of the <code>selectionDirection</code> property.","obsolete":false},{"name":"stepDown","help":"<p>Decrements the <strong>value</strong> by (<strong>step</strong> * <code>n</code>), where <code>n</code> defaults to 1 if not specified. Throws an INVALID_STATE_ERR exception:</p> <ul> <li>if the method is not applicable to for the current <strong>type</strong> value.</li> <li>if the element has no step value.</li> <li>if the <strong>value</strong> cannot be converted to a number.</li> <li>if the resulting value is above the <strong>max</strong> or below the <strong>min</strong>.&nbsp;</li> </ul>","obsolete":false},{"name":"stepUp","help":"<p>Increments the <strong>value</strong> by (<strong>step</strong> * <code>n</code>), where <code>n</code> defaults to 1 if not specified. Throws an INVALID_STATE_ERR exception:</p> <ul> <li>if the method is not applicable to for the current <strong>type</strong> value.</li> <li>if the element has no step value.</li> <li>if the <strong>value</strong> cannot be converted to a number.</li> <li>if the resulting value is above the <strong>max</strong> or below the <strong>min</strong>.</li> </ul>","obsolete":false},{"name":"accept","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-accept\">accept</a></code>\n HTML&nbsp;attribute, containing comma-separated list of file types accepted by the server when <strong>type</strong> is <code>file</code>.","obsolete":false},{"name":"accessKey","help":"A single character that switches input focus to the control. \n\n<span title=\"\">Obsolete</span>&nbsp;in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"align","help":"Alignment of the element.\n\n<span title=\"\">Obsolete</span>&nbsp;in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"alt","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-alt\">alt</a></code>\n&nbsp;HTML attribute, containing alternative text to use when <strong>type</strong> is <code>image.</code>","obsolete":false},{"name":"autocomplete","help":"Reflects the {{htmlattrxref(\"autocomplete\", \"input)}} HTML attribute, indicating whether the value of the control can be automatically completed by the browser. Ignored if the value of the <strong>type</strong> attribute is <span>hidden</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type (<span>button</span>, <span>submit</span>, <span>reset</span>, <span>image</span>). Possible values are: <ul> <li><span>off</span>: The user must explicitly enter a value into this field for every use, or the document provides its own auto-completion method; the browser does not automatically complete the entry.</li> <li><span>on</span>: The browser can automatically complete the value based on values that the user has entered during previous uses.</li> </ul>","obsolete":false},{"name":"autofocus","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-autofocus\">autofocus</a></code>\n HTML&nbsp;attribute, which specifies that a form control should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form element in a document can have the <strong>autofocus</strong> attribute. It cannot be applied if the <strong>type</strong> attribute is set to <code>hidden</code> (that is, you cannot automatically set focus to a hidden control).","obsolete":false},{"name":"checked","help":"The current state of the element when <strong>type</strong> is <code>checkbox</code> or <code>radio</code>.","obsolete":false},{"name":"defaultChecked","help":"The default state of a radio button or checkbox as originally specified in HTML that created this object.","obsolete":false},{"name":"defaultValue","help":"The default value as originally specified in HTML that created this object.","obsolete":false},{"name":"disabled","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-disabled\">disabled</a></code>\n HTML attribute, indicating that the control is not available for interaction.","obsolete":false},{"name":"files","help":"A list of selected files.","obsolete":false},{"name":"form","help":"<p>The containing form element, if this element is in a form. If this element is not contained in a form element:</p> <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this can be the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-id\">id</a></code>\n attribute of any <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element in the same document. Even if the attribute is set on <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n, this property will be <code>null</code>, if it isn't the id of a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> this must be <code>null</code>.</li> </ul>","obsolete":false},{"name":"formAction","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formaction\">formaction</a></code>\n HTML attribute, containing the URI&nbsp;of a program that processes information submitted by the element. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-action\">action</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formEncType","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formenctype\">formenctype</a></code>\n HTML&nbsp;attribute, containing the type of content that is used to submit the form to the server. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-enctype\">enctype</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formMethod","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formmethod\">formmethod</a></code>\n&nbsp;HTML&nbsp;attribute, containing the HTTP&nbsp;method that the browser uses to submit the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-method\">method</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formNoValidate","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formnovalidate\">formnovalidate</a></code>\n&nbsp;HTML&nbsp;attribute, indicating that the form is not to be validated when it is submitted. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-novalidate\">novalidate</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formTarget","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-formtarget\">formtarget</a></code>\n HTML&nbsp;attribute, containing a name or keyword indicating where to display the response that is received after submitting the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-target\">target</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"height","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-height\">height</a></code>\n HTML attribute, which defines the height of the image displayed for the button, if the value of <strong>type</strong> is <span>image</span>.","obsolete":false},{"name":"indeterminate","help":"Indicates that a checkbox is neither on nor off.","obsolete":false},{"name":"labels","help":"A list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n elements that are labels for this element.","obsolete":false},{"name":"list","help":"Identifies a list of pre-defined options to suggest to the user. The value must be the <strong>id</strong> of a <code><a class=\"new\" href=\"https://developer.mozilla.org/en/HTML/Element/datalist\" rel=\"internal\">&lt;datalist&gt;</a></code> element in the same document. The browser displays only options that are valid values for this input element. This attribute is ignored when the <strong>type</strong> attribute's value is <span>hidden</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type.","obsolete":false},{"name":"max","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-max\">max</a></code>\n HTML&nbsp;attribute, containing the maximum (numeric or date-time) value for this item, which must not be less than its minimum (<strong>min</strong> attribute) value.","obsolete":false},{"name":"maxLength","help":"<p>Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-maxlength\">maxlength</a></code>\n&nbsp;HTML attribute, containing the maximum length of text (in Unicode code points) that the value can be changed to. The constraint is evaluated only when the value is changed</p> <div class=\"note\"><strong>Note:</strong> If you set <code>maxlength</code> to a negative value programmatically, an exception will be thrown.</div>","obsolete":false},{"name":"min","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-min\">min</a></code>\n HTML&nbsp;attribute, containing the minimum (numeric or date-time) value for this item, which must not be greater than its maximum (<strong>max</strong> attribute) value.","obsolete":false},{"name":"multiple","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-multiple\">multiple</a></code>\n HTML&nbsp;attribute, indicating whether more than one value is possible (e.g., multiple files).","obsolete":false},{"name":"name","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-name\">name</a></code>\n HTML&nbsp;attribute, containing a name that identifies the element when submitting the form.","obsolete":false},{"name":"pattern","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-pattern\">pattern</a></code>\n HTML&nbsp;attribute, containing a regular expression that the control's value is checked against. The pattern must match the entire value, not just some subset. Use the <strong>title</strong> attribute to describe the pattern to help the user. This attribute applies when the value of the <strong>type</strong> attribute is <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span> or <span>email</span>; otherwise it is ignored.","obsolete":false},{"name":"placeholder","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-placeholder\">placeholder</a></code>\n HTML&nbsp;attribute, containing a hint to the user of what can be entered in the control. The placeholder text must not contain carriage returns or line-feeds. This attribute applies when the value of the <strong>type</strong> attribute is <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span> or <span>email</span>; otherwise it is ignored.","obsolete":false},{"name":"readOnly","help":"<p>Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-readonly\">readonly</a></code>\n HTML&nbsp;attribute, indicating that the user cannot modify the value of the control.</p> <p><span><a href=\"https://developer.mozilla.org/en/HTML/HTML5\" rel=\"custom nofollow\">HTML 5</a></span> This is ignored if the value of the <strong>type</strong> attribute is <span>hidden</span>, <span>range</span>, <span>color</span>, <span>checkbox</span>, <span>radio</span>, <span>file</span>, or a button type.</p>","obsolete":false},{"name":"required","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-required\">required</a></code>\n HTML&nbsp;attribute, indicating that the user must fill in a value before submitting a form.","obsolete":false},{"name":"selectionDirection","help":"The direction in which selection occurred. This is \"forward\" if selection was performed in the start-to-end direction of the current locale, or \"backward\" for the opposite direction. This can also be \"none\"&nbsp;if the direction is unknown.\"","obsolete":false},{"name":"selectionEnd","help":"The index of the end of selected text.","obsolete":false},{"name":"selectionStart","help":"The index of the beginning of selected text.","obsolete":false},{"name":"size","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-size\">size</a></code>\n HTML&nbsp;attribute, containing size of the control. This value is in pixels unless the value of <strong>type</strong> is <span>text</span> or <span>password</span>, in which case, it is an integer number of characters. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> Applies only when <strong>type</strong> is set to <span>text</span>, <span>search</span>, <span>tel</span>, <span>url</span>, <span>email</span>, or <span>password</span>; otherwise it is ignored.","obsolete":false},{"name":"src","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-src\">src</a></code>\n HTML&nbsp;attribute, which specifies a URI for the location of an image to display on the graphical submit button, if the value of <strong>type</strong> is <span>image</span>; otherwise it is ignored.","obsolete":false},{"name":"step","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-step\">step</a></code>\n HTML&nbsp;attribute, which works with<strong> min</strong> and <strong>max</strong> to limit the increments at which a numeric or date-time value can be set. It can be the string <span>any</span> or a positive floating point number. If this is not set to <span>any</span>, the control accepts only values at multiples of the step value greater than the minimum.","obsolete":false},{"name":"tabIndex","help":"The position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-type\">type</a></code>\n HTML&nbsp;attribute, indicating the type of control to display. See \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-type\">type</a></code>\n attribute of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n for possible values.","obsolete":false},{"name":"useMap","help":"A client-side image map. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this element is in.&nbsp;","obsolete":false},{"name":"value","help":"Current value in the control.","obsolete":false},{"name":"valueAsDate","help":"The value of the element, interpreted as a date, or <code>null</code> if conversion is not possible.","obsolete":false},{"name":"valueAsNumber","help":"<p>The value of the element, interpreted as one of the following in order:</p> <ol> <li>a time value</li> <li>a number</li> <li><code>null</code> if conversion is not possible</li> </ol>","obsolete":false},{"name":"width","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input#attr-width\">width</a></code>\n HTML&nbsp;attribute, which defines the width of the image displayed for the button, if the value of <strong>type</strong> is <span>image</span>.","obsolete":false},{"name":"willValidate","help":"Indicates whether the element is a candidate for constraint validation. It is false if any conditions bar it from constraint validation.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLInputElement"},"HTMLButtonElement":{"title":"HTMLButtonElement","summary":"DOM&nbsp;<code>Button </code>objects expose the <a class=\" external\" title=\"http://www.w3.org/TR/html5/the-button-element.html#the-button-element\" rel=\"external\" href=\"http://www.w3.org/TR/html5/the-button-element.html#the-button-element\" target=\"_blank\">HTMLButtonElement</a> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>&nbsp;(or <a class=\" external\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-34812697\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-34812697\" target=\"_blank\">HTMLButtonElement</a> \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span>) interface, which provides properties and methods (beyond the <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of button elements.","members":[{"name":"checkValidity","help":"Not supported for button elements.","obsolete":false},{"name":"setCustomValidity","help":"Not supported for button elements.","obsolete":false},{"name":"accessKey","help":"A single-character keyboard key to give access to the button. In \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this attribute is inherited from <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/HTMLElement\">HTMLElement</a></code>","obsolete":false},{"name":"autofocus","help":"The control should have input focus when the page loads, unless the user overrides it, for example by typing in a different control. Only one form-associated element in a document can have this attribute specified.","obsolete":false},{"name":"disabled","help":"The control is disabled, meaning that it does not accept any clicks.","obsolete":false},{"name":"form","help":"<p>The form that this button is associated with. If the button is a descendant of a form element, then this attribute is the ID of that form element.</p> <p>If the button is not a descendant of a form element, then:</p> <ul> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> The attribute can be the ID of any form element in the same document.</li> <li>\n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML\">HTML 4</a></span> The attribute is null.</li> </ul>","obsolete":false},{"name":"formAction","help":"The URI&nbsp;of a program that processes information submitted by the button. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-action\">action</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formEncType","help":"The type of content that is used to submit the form to the server. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-enctype\">enctype</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formMethod","help":"The HTTP&nbsp;method that the browser uses to submit the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-method\">method</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formNoValidate","help":"Indicates that the form is not to be validated when it is submitted. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-enctype\">enctype</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"formTarget","help":"A name or keyword indicating where to display the response that is received after submitting the form. If specified, this attribute overrides the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form#attr-target\">target</a></code>\n attribute of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/form\">&lt;form&gt;</a></code>\n element that owns this element.","obsolete":false},{"name":"labels","help":"A list of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/label\">&lt;label&gt;</a></code>\n elements that are labels for this button.","obsolete":false},{"name":"name","help":"The name of the object when submitted with a form. \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> If specified, it must not be the empty string.","obsolete":false},{"name":"tabIndex","help":"Number that represents this element's position in the tabbing order. in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> this attribute is inherited as a <a title=\"en/HTML/Global attributes#attr-tabindex\" rel=\"internal\" href=\"https://developer.mozilla.org/en/HTML/Global_attributes#attr-tabindex\">global attribute</a>.","obsolete":false},{"name":"type","help":"<p>Indicates the behavior of the button. This is an enumerated attribute with the following possible values:</p> <ul> <li><code>submit</code>:&nbsp;The button submits the form. This is the default value if the attribute is not specified, \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span> or if it is dynamically changed to an empty or invalid value.</li> <li><code>reset</code>:&nbsp;The button resets the form.</li> <li><code>button</code>:&nbsp;The button does nothing.</li> </ul>","obsolete":false},{"name":"validationMessage","help":"A localized message that describes the validation constraints that the control does not satisfy (if any). This attribute is the empty string if the control is not a candidate for constraint validation (<strong>willValidate</strong> is false), or it satisfies its constraints.","obsolete":false},{"name":"validity","help":"The validity states that this button is in.","obsolete":false},{"name":"value","help":"The current form control value of the button.&nbsp;","obsolete":false},{"name":"willValidate","help":"Indicates whether the button is a candidate for constraint validation. It is false if any conditions bar it from constraint validation.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLButtonElement"},"PageTransitionEvent":{"title":"Interface documentation status","members":[],"srcUrl":"https://developer.mozilla.org/User:trevorh/Interface_documentation_status","skipped":true,"cause":"Suspect title"},"TextTrack":{"title":"track","members":[],"srcUrl":"https://developer.mozilla.org/en/HTML/Element/track","skipped":true,"cause":"Suspect title"},"SVGLangSpace":{"title":"SVGImageElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGImageElement","skipped":true,"cause":"Suspect title"},"SVGTitleElement":{"title":"SVGTitleElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGTitleElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/title\">&lt;title&gt;</a></code>\n element.","members":[],"srcUrl":"https://developer.mozilla.org/en/Document_Object_Model_(DOM)/SVGTitleElement"},"SVGFECompositeElement":{"title":"feComposite","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap\">&lt;feDisplacementMap&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"<p>Two input images are joined by means of an \n<code><a rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Attribute/operator\" class=\"new\">operator</a></code> applied to each input pixel together with an arithmetic operation</p>\n<pre>result = k1*in1*in2 + k2*in1 + k3*in2 + k4</pre>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in2","name":"in2","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/k1","name":"k1","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/operator","name":"operator","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/k2","name":"k2","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/k3","name":"k3","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/k4","name":"k4","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feComposite"},"ElementTraversal":{"title":"element","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/element","skipped":true,"cause":"Suspect title"},"SVGAnimatedEnumeration":{"title":"SVGAnimatedEnumeration","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"The <code>SVGAnimatedEnumeration</code> interface is used for attributes whose value must be a constant from a particular enumeration and which can be animated.","members":[{"name":"baseVal","help":"The base value of the given attribute before applying any animations.","obsolete":false},{"name":"animVal","help":"If the given attribute or property is being animated, contains the current animated value of the attribute or property. If the given attribute or property is not currently being animated, contains the same value as <code>baseVal</code>.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGAnimatedEnumeration"},"CustomEvent":{"title":"CustomEvent","summary":"The DOM <code>CustomEvent</code> are events initialized by an application for any purpose. It's represented by the <code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsIDOMCustomEvent&amp;ident=nsIDOMCustomEvent\" class=\"new\">nsIDOMCustomEvent</a></code>\n&nbsp;interface, which extends the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMEvent\">nsIDOMEvent</a></code>\n interface.","members":[{"name":"initCustomEvent","help":"<p>Initializes the event in a manner analogous to the similarly-named method in the DOM Events interfaces.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>type</code></dt> <dd>The name of the event.</dd> <dt><code>canBubble</code></dt> <dd>A boolean indicating whether the event bubbles up through the DOM or not.</dd> <dt><code>cancelable</code></dt> <dd>A boolean indicating whether the event is cancelable.</dd> <dt><code>detail</code></dt> <dd>The data passed when initializing the event.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void initCustomEvent(\n  in DOMString type,\n  in boolean canBubble,\n  in boolean cancelable,\n  in any detail\n);\n</pre>","obsolete":false},{"name":"detail","help":"The data passed when initializing the event.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/CustomEvent","specification":"<a rel=\"custom\" href=\"http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#interface-CustomEvent\">DOM Level 3 Events : CustomEvent</a><span title=\"Working Draft\">WD</span>"},"FileReader":{"title":"FileReader","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Firefox (Gecko)</th> <th>Chrome</th> <th>Internet Explorer*</th> <th>Opera*</th> <th>Safari</th> </tr> <tr> <td>Basic support</td> <td>3.6 (1.9.2)\n</td> <td>7</td> <td>10</td> <td><span title=\"Not supported.\">--</span></td> <td>\n<em><a rel=\"custom\" href=\"http://nightly.webkit.org/\">Nightly build</a></em></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Firefox Mobile (Gecko)</th> <th>Android</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<p>*IE9 has a <a class=\"external\" title=\"http://html5labs.interoperabilitybridges.com/prototypes/fileapi/fileapi/info\" rel=\"external\" href=\"http://html5labs.interoperabilitybridges.com/prototypes/fileapi/fileapi/info\" target=\"_blank\">File API Lab</a>. Opera has <a class=\"external\" title=\"http://my.opera.com/desktopteam/blog/2011/04/05/stability-gmail-socks\" rel=\"external\" href=\"http://my.opera.com/desktopteam/blog/2011/04/05/stability-gmail-socks\" target=\"_blank\">partial support</a> in 11.10.</p>","srcUrl":"https://developer.mozilla.org/en/DOM/FileReader","seeAlso":"<li><a title=\"en/Using files from web applications\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_files_from_web_applications\">Using files from web applications</a></li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n</li> <li>\n<a rel=\"custom\" href=\"http://www.w3.org/TR/FileAPI/#FileReader-interface\">Specification: File API: FileReader</a><span title=\"Working Draft\">WD</span></li>","summary":"<p>The <code>FileReader</code> object lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n objects to specify the file or data to read. File objects may be obtained in one of two ways: from a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileList\">FileList</a></code>\n object returned as a result of a user selecting files using the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/input\">&lt;input&gt;</a></code>\n element, or from a drag and drop operation's <a title=\"En/DragDrop/DataTransfer\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DragDrop/DataTransfer\"><code>DataTransfer</code></a> object.</p>\n<p>To create a <code>FileReader</code>, simply do the following:</p>\n<pre>var reader = new FileReader();\n</pre>\n<p>See <a title=\"en/Using files from web applications\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_files_from_web_applications\">Using files from web applications</a> for details and examples.</p>","members":[{"name":"readAsDataURL","help":"<p>Starts reading the contents of the specified <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n. When the read operation is finished, the <code>readyState</code> will become <code>DONE</code>, and the <code>onloadend</code> callback, if any, will be called. At that time, the <code>result</code> attribute contains a <code>data:</code> URL representing the file's data.</p>\n\n<p>This method is useful, for example, to get a preview of an image before uploading it:</p>\n\n          <pre name=\"code\" class=\"xml\">&lt;!doctype html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\" /&gt;\n&lt;title&gt;Image preview example&lt;/title&gt;\n&lt;script type=\"text/javascript\"&gt;\noFReader = new FileReader(), rFilter = /^(image\\/bmp|image\\/cis-cod|image\\/gif|image\\/ief|image\\/jpeg|image\\/jpeg|image\\/jpeg|image\\/pipeg|image\\/png|image\\/svg\\+xml|image\\/tiff|image\\/x-cmu-raster|image\\/x-cmx|image\\/x-icon|image\\/x-portable-anymap|image\\/x-portable-bitmap|image\\/x-portable-graymap|image\\/x-portable-pixmap|image\\/x-rgb|image\\/x-xbitmap|image\\/x-xpixmap|image\\/x-xwindowdump)$/i;\n\noFReader.onload = function (oFREvent) {\n  document.getElementById(\"uploadPreview\").src = oFREvent.target.result;\n};\n\nfunction loadImageFile() {\n  if (document.getElementById(\"uploadImage\").files.length === 0) { return; }\n  var oFile = document.getElementById(\"uploadImage\").files[0];\n  if (!rFilter.test(oFile.type)) { alert(\"You must select a valid image file!\"); return; }\n  oFReader.readAsDataURL(oFile);\n}\n&lt;/script&gt;\n&lt;/head&gt;\n\n&lt;body onload=\"loadImageFile();\"&gt;\n&lt;form name=\"uploadForm\"&gt;\n&lt;table&gt;\n&lt;tbody&gt;\n&lt;tr&gt;\n&lt;td&gt;&lt;img id=\"uploadPreview\" style=\"width: 100px; height: 100px;\" src=\"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Csvg%20width%3D%22153%22%20height%3D%22153%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%0A%20%3Cg%3E%0A%20%20%3Ctitle%3ENo%20image%3C/title%3E%0A%20%20%3Crect%20id%3D%22externRect%22%20height%3D%22150%22%20width%3D%22150%22%20y%3D%221.5%22%20x%3D%221.500024%22%20stroke-width%3D%223%22%20stroke%3D%22%23666666%22%20fill%3D%22%23e1e1e1%22/%3E%0A%20%20%3Ctext%20transform%3D%22matrix%286.66667%2C%200%2C%200%2C%206.66667%2C%20-960.5%2C%20-1099.33%29%22%20xml%3Aspace%3D%22preserve%22%20text-anchor%3D%22middle%22%20font-family%3D%22Fantasy%22%20font-size%3D%2214%22%20id%3D%22questionMark%22%20y%3D%22181.249569%22%20x%3D%22155.549819%22%20stroke-width%3D%220%22%20stroke%3D%22%23666666%22%20fill%3D%22%23000000%22%3E%3F%3C/text%3E%0A%20%3C/g%3E%0A%3C/svg%3E\" alt=\"Image preview\" /&gt;&lt;/td&gt;\n&lt;td&gt;&lt;input id=\"uploadImage\" type=\"file\" name=\"myPhoto\" onchange=\"loadImageFile();\" /&gt;&lt;/td&gt;\n&lt;/tr&gt;\n&lt;/tbody&gt;\n&lt;/table&gt;\n&lt;p&gt;&lt;input type=\"submit\" value=\"Send\" /&gt;&lt;/p&gt;\n&lt;/form&gt;\n&lt;/body&gt;\n&lt;/html&gt;</pre>\n        \n<div id=\"section_13\"><span id=\"Parameters_4\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>file</code></dt> <dd>The DOM <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n from which to read.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsDataURL(\n  in Blob file\n);\n</pre>","obsolete":false},{"name":"readAsText","help":"<p>Starts reading the specified blob's contents. When the read operation is finished, the <code>readyState</code> will become <code>DONE</code>, and the <code>onloadend</code> callback, if any, will be called. At that time, the <code>result</code> attribute contains the contents of the file as a text string.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_5\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n from which to read.</dd> <dt><code>encoding</code> \n<span title=\"\">Optional</span>\n</dt> <dd>A string indicating the encoding to use for the returned data. By default, UTF-8 is assumed if this parameter is not specified.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsText(\n  in Blob blob,\n  in DOMString encoding \n<span style=\"border: 1px solid #9ED2A4; background-color: #C0FFC7; font-size: x-small; white-space: nowrap; padding: 2px;\" title=\"\">Optional</span>\n\n);\n</pre>","obsolete":false},{"name":"abort","help":"<p>Aborts the read operation. Upon return, the <code>readyState</code> will be <code>DONE</code>.</p>\n\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<p>None.</p>\n</div><div id=\"section_8\"><span id=\"Exceptions_thrown\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>DOM_FILE_ABORT_ERR</code></dt> <dd><code>abort()</code> was called while no read operation was in progress (that is, the state wasn't <code>LOADING</code>). <div class=\"note\"><strong>Note:</strong>&nbsp;This exception was not thrown by Gecko until Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)\n.</div>\n</dd>\n</dl>\n<p>\n</p><div>\n<span id=\"readAsArrayBuffer()\"></span></div></div>","idl":"<pre class=\"eval\">void abort();\n</pre>","obsolete":false},{"name":"readAsBinaryString","help":"<p>Starts reading the contents of the specified <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n, which may be a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n. When the read operation is finished, the <code>readyState</code> will become <code>DONE</code>, and the <code>onloadend</code> callback, if any, will be called. At that time, the <code>result</code> attribute contains the raw binary data from the file.</p>\n\n<div id=\"section_11\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n from which to read.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsBinaryString(\n  in Blob blob\n);\n</pre>","obsolete":false},{"name":"readAsArrayBuffer","help":"<div id=\"section_8\"><p>Starts reading the contents of the specified <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n. When the read operation is finished, the <code>readyState</code> will become <code>DONE</code>, and the <code>onloadend</code> callback, if any, will be called. At that time, the <code>result</code> attribute contains an <code><a title=\"/en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code> representing the file's data.</p>\n\n</div><div id=\"section_9\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>blob</code></dt> <dd>The DOM <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/Blob\">Blob</a></code>\n or <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/File\">File</a></code>\n to read into the <code><a title=\"/en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void readAsArrayBuffer(\n  in Blob blob\n);\n</pre>","obsolete":false},{"name":"EMPTY","help":"No data has been loaded yet.","obsolete":false},{"name":"LOADING","help":"Data is currently being loaded.","obsolete":false},{"name":"DONE","help":"The entire read request has been completed.","obsolete":false},{"name":"error","help":"The error that occurred while reading the file. <strong>Read only.</strong>","obsolete":false},{"name":"readyState","help":"Indicates the state of the <code>FileReader</code>. This will be one of the <a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/FileReader#State_constants\">State constants</a>. <strong>Read only.</strong>","obsolete":false},{"name":"result","help":"The file's contents. This property is only valid after the read operation is complete, and the format of the data depends on which of the methods was used to initiate the read operation. <strong>Read only.</strong>","obsolete":false},{"name":"onload","help":"Called when the read operation is successfully completed.","obsolete":false},{"name":"onabort","help":"Called when the read operation is aborted.","obsolete":false},{"name":"onloadend","help":"Called when the read is completed, whether successful or not. This is called after either <code>onload</code> or <code>onerror</code>.","obsolete":false},{"name":"onprogress","help":"Called periodically while the data is being read.","obsolete":false},{"name":"onloadstart","help":"Called when reading the data is about to begin.","obsolete":false},{"name":"onerror","help":"Called when an error occurs.","obsolete":false}]},"DataView":{"title":"DataView","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/DataView","seeAlso":"<li><a class=\"external\" rel=\"external\" href=\"http://www.khronos.org/registry/typedarray/specs/latest/#8\" title=\"http://www.khronos.org/registry/typedarray/specs/latest/#8\" target=\"_blank\">DataView Specification</a></li> <li><a class=\"external\" rel=\"external\" href=\"http://www.khronos.org/registry/typedarray/specs/latest/\" title=\"http://www.khronos.org/registry/typedarray/specs/latest/\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li> <li><a class=\"link-https\" rel=\"external\" href=\"https://github.com/vjeux/jDataView\" title=\"https://github.com/vjeux/jDataView\" target=\"_blank\">jDataView</a>: a Javascript library that provides the DataView API to all browsers.</li>","summary":"<div><strong>DRAFT</strong>\n<div>This page is not complete.</div>\n</div>\n\n<p></p>\n<div class=\"note\"><strong>Note:</strong> <code>DataView</code> is not yet implemented in Gecko. It is implemented in Chrome 9.</div>\n<p>An <code>ArrayBuffer</code> is a useful object for representing an arbitrary chunk of data. In many cases, such data will be read from disk or from the network, and will not follow the alignment restrictions that are imposed on the <a title=\"en/JavaScript_typed_arrays/ArrayBufferView\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView\">Typed Array Views</a> described earlier. In addition, the data will often be heterogeneous in nature and have a defined byte order.</p>\n<p>The <code>DataView</code> view provides a low-level interface for reading such data from and writing it to an <code><a title=\"en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>.</p>","constructor":"DataView DataView(<a title=\"en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a> buffer, optional unsigned long byteOffset, optional unsigned long byteLength);<p>Returns a new <code>DataView</code> object using the passed <a title=\"en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a> for its storage.</p>\n<pre>DataView DataView(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long byteLength\n);\n</pre>\n<div id=\"section_6\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript_typed_arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>DataView</code> object.</dd> <dt><code>byteOffset</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the view of the buffer will start with the first byte.</dd> <dt><code>byteLength</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The number of elements in the byte array. If unspecified, length of the view will match the buffer's length.</dd>\n</dl>\n</div><div id=\"section_7\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>DataView</code> object representing the specified data buffer.</p>\n</div><div id=\"section_8\"><span id=\"Exceptions_thrown\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>INDEX_SIZE_ERR</code></dt> <dd>The <code>byteOffset</code> and <code>byteLength</code> result in the specified view extending past the end of the buffer.</dd>\n</dl>\n</div>","members":[{"name":"getInt8","help":"<p>Gets a signed 8-bit integer at the specified byte offset from the start of the view.</p>\n\n<div id=\"section_11\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>offset</code></dt> <dd>The offset, in byte, from the start of the view where to read the data.</dd>\n</dl>\n</div><div id=\"section_12\"><span id=\"Exceptions_thrown_2\"></span><h6 class=\"editable\">Exceptions thrown</h6>\n<dl> <dt><code>INDEX_SIZE_ERR</code></dt> <dd>The <code>byteOffset</code> is set such as it would read beyond the end of the view</dd>\n</dl>\n</div>","idl":"<pre>byte getInt8(\n  unsigned long byteOffset\n);\n</pre>","obsolete":false},{"name":"getUint8","help":"<p>Gets an unsigned 8-bit integer at the specified byte offset from the start of the view.</p>\n\n<div id=\"section_14\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>offset</code></dt> <dd>The offset, in byte, from the start of the view where to read the data.</dd>\n</dl>\n<dl> <dt><code>INDEX_SIZE_ERR</code></dt> <dd>The <code>byteOffset</code> is set such as it would read beyond the end of the view</dd>\n</dl>\n</div>","idl":"<pre>byte getUint8(\n  unsigned long byteOffset\n);\n</pre>","obsolete":false}]},"SVGLocatable":{"title":"SVGSVGElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGSVGElement","skipped":true,"cause":"Suspect title"},"SVGHKernElement":{"title":"SVGHKernElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGHKernElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/hkern\">&lt;hkern&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGHKernElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/hkern\">&lt;hkern&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/hkern\">&lt;hkern&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"SVGNumber":{"title":"SVGNumber","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>\n<div id=\"compat-mobile\">\n<table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody>\n</table>\n</div>","summary":"<p>The <code>SVGNumber</code> interface correspond to the <a title=\"https://developer.mozilla.org/en/SVG/Content_type#Number\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Content_type#Number\">&lt;number&gt;</a> basic data type.</p>\n<p>An <code>SVGNumber</code> object can be designated as read only, which means that attempts to modify the object will result in an exception being thrown.</p>","members":[{"name":"value","help":"<p>The value of the given attribute.</p> <p><strong>Exceptions on setting:</strong> a <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/DOM/DOMException\">DOMException</a></code>\n with code <code>NO_MODIFICATION_ALLOWED_ERR</code> is Raised on an attempt to change the value of a read only attribute.</p>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGNumber"},"DirectoryEntrySync":{"title":"DirectoryEntrySync","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>13\n<span title=\"prefix\">webkit</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div><strong>DRAFT</strong> <div>This page is not complete.</div>\n</div>\n<p>The <code>DirectoryEntry</code> interface of the <a title=\"en/DOM/File_API/File_System_API\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/File_API/File_System_API\">FileSystem API</a> represents a directory in a file system.</p>","members":[{"name":"getFile","help":"<p>Creates or looks up a file.</p>\n<pre>void moveTo (\n  <em>(in DOMString path, optional Flags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_8\"><span id=\"Parameter\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>path</dt> <dd>Either an absolute path or a relative path from this DirectoryEntry to the file to be looked up or created. It is an error to attempt to create a file whose immediate parent does not yet exist.</dd> <dt>options</dt>\n</dl>\n<ul> <li>If create and exclusive are both true, and the path already exists, getFile must fail.</li> <li>If create is true, the path doesn't exist, and no other error occurs, getFile must create it as a zero-length file and return a corresponding FileEntry.</li> <li>If create is not true and the path doesn't exist, getFile must fail.</li> <li>If create is not true and the path exists, but is a directory, getFile must fail.</li> <li>Otherwise, if no other error occurs, getFile must return a FileEntry corresponding to path.</li>\n</ul>\n<dl> <dt>successCallback</dt> <dd>A callback that is called to return the file selected or created.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_9\"><span id=\"Returns_3\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"getDirectory","help":"<p>Creates or looks up a directory.</p>\n<pre>void vopyTo (\n  <em>(in DOMString path, optional Flags options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);</em>\n);</pre>\n<div id=\"section_11\"><span id=\"Parameter_2\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>path</dt> <dd>Either an absolute path or a relative path from this DirectoryEntry to the file to be looked up or created. It is an error to attempt to create a file whose immediate parent does not yet exist.</dd> <dt>options</dt>\n</dl>\n<ul> <li>If create and exclusive are both true, and the path already exists, getDirectory must fail.</li> <li>If create is true, the path doesn't exist, and no other error occurs, getDirectory must create it as a zero-length file and return a corresponding getDirectory.</li> <li>If create is not true and the path doesn't exist, getDirectory must fail.</li> <li>If create is not true and the path exists, but is a directory, getDirectory must fail.</li> <li>Otherwise, if no other error occurs, getFile must return a getDirectory corresponding to path.</li>\n</ul>\n<dt>successCallback</dt>\n<dd>A callback that is called to return the DirectoryEntry selected or created.</dd>\n<dt>errorCallback</dt>\n<dd>A callback that is called when errors happen.</dd>\n</div><div id=\"section_12\"><span id=\"Returns_4\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"removeRecursively","help":"<p>Deletes a directory and all of its contents, if any. If you are deleting a directory that contains a file that cannot be removed, some of the contents of the directory might be deleted. You cannot delete the root directory of a file system.</p>\n<pre>DOMString toURL (\n  <em>(in </em>VoidCallback successCallback, optional ErrorCallback errorCallback<em>);</em>\n);</pre>\n<div id=\"section_14\"><span id=\"Parameter_3\"></span><h5 class=\"editable\">Parameter</h5>\n<dl> <dt>successCallback</dt> <dd>A callback that is called to return the DirectoryEntry selected or created.</dd> <dt>errorCallback</dt> <dd>A callback that is called when errors happen.</dd>\n</dl>\n</div><div id=\"section_15\"><span id=\"Returns_5\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>void</code></dt>\n</dl>\n</div>","obsolete":false},{"name":"createReader","help":"<p>Creates a new DirectoryReader to read entries from this Directory.</p>\n<pre>void getMetada ();</pre>\n<div id=\"section_6\"><span id=\"Returns_2\"></span><h5 class=\"editable\">Returns</h5>\n<dl> <dt><code>DirectoryReader</code></dt>\n</dl>\n</div>","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/File_API/File_System_API/DirectoryEntrySync"},"HTMLTableRowElement":{"title":"HTMLTableRowElement","summary":"DOM <code>table row</code> objects expose the <code><a class=\"external\" rel=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-6986576\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-6986576\" target=\"_blank\">HTMLTableRowElement</a></code> interface, which provides special properties and methods (beyond the regular <a title=\"en/DOM/element\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/element\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of rows in an HTML table.","members":[{"name":"insertCell","help":"","obsolete":false},{"name":"deleteCell","help":"row.insertCell","obsolete":false},{"name":"bgColor","help":"row.cells","obsolete":false},{"name":"align","help":"<a title=\"en/DOM/tableRow.bgColor\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/tableRow.bgColor\" class=\"new \">row.bgColor</a> \n\n<span class=\"deprecatedInlineTemplate\" title=\"\">Deprecated</span>","obsolete":false},{"name":"cells","help":"row.ch","obsolete":false},{"name":"rowIndex","help":"row.sectionRowIndex","obsolete":false},{"name":"sectionRowIndex","help":"row.vAlign","obsolete":false},{"name":"ch","help":"row.chOff","obsolete":false},{"name":"chOff","help":"row.rowIndex","obsolete":false},{"name":"vAlign","help":"","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLTableRowElement"},"CanvasPixelArray":{"title":"CanvasPixelArray","summary":"<p>Returned by <a title=\"en/DOM/ImageData\" rel=\"internal\" href=\"https://developer.mozilla.org/en/DOM/ImageData\">ImageData</a>'s <code>data</code> attribute.</p>\n<p>The <code>CanvasPixelArray</code> object indicates the color components of each pixel of an image, first for each of its three RGB&nbsp;values in order (0-255) and then its alpha component (0-255), proceeding from left-to-right, for each row (rows are top to bottom).&nbsp;</p>\n<pre class=\"idl\">  readonly attribute unsigned long <strong>length</strong>\n  <a href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-canvaspixelarray-get\" title=\"dom-CanvasPixelArray-get\">getter</a> <strong>octet</strong> (in unsigned long index);\n  <a href=\"http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-canvaspixelarray-set\" title=\"dom-CanvasPixelArray-set\">setter</a> <strong>void</strong> (in unsigned long index, in octet value);\n</pre>","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/CanvasPixelArray","specification":"http://www.whatwg.org/specs/web-apps...nvaspixelarray"},"SVGURIReference":{"title":"SVGImageElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGImageElement","skipped":true,"cause":"Suspect title"},"SVGFontFaceNameElement":{"title":"SVGFontFaceNameElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontFaceNameElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-name\">&lt;font-face-name&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGFontFaceNameElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-name\">&lt;font-face-name&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-name\">&lt;font-face-name&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"HTMLIsIndexElement":{"title":"HTTP","members":[],"srcUrl":"https://developer.mozilla.org/en/HTTP?action=edit","skipped":true,"cause":"Suspect title"},"Geoposition":{"title":"Using geolocation","members":[],"srcUrl":"https://developer.mozilla.org/en/Using_geolocation","skipped":true,"cause":"Suspect title"},"SVGPathSegLinetoRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"SVGTextContentElement":{"title":"SVGTextPositioningElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGTextPositioningElement","skipped":true,"cause":"Suspect title"},"Notation":{"title":"Notation","summary":"<p><span>NOTE:&nbsp;This is not implemented in Mozilla</span></p>\n<p>Represents a DTD notation (read-only). May declare format of an unparsed entity or formally declare the document's processing instruction targets. Inherits methods and properties from <a title=\"En/DOM/Node\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node\"><code>Node</code></a>. Its <code><a title=\"En/DOM/Node/NodeName\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node/NodeName\" class=\"new internal\">nodeName</a></code> is the notation name. Has no parent.</p>","members":[{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Notation.systemId","name":"systemId","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/En/DOM/Notation.publicId","name":"publicId","help":""}],"srcUrl":"https://developer.mozilla.org/en/DOM/Notation","specification":"http://www.w3.org/TR/DOM-Level-3-Cor...ml#ID-5431D1B9"},"MutationEvent":{"title":"document.createEvent","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/document.createEvent","skipped":true,"cause":"Suspect title"},"Int8Array":{"title":"Int8Array","srcUrl":"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array","seeAlso":"<li><a class=\"link-https\" title=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" rel=\"external\" href=\"https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html\" target=\"_blank\">Typed Array Specification</a></li> <li><a title=\"en/JavaScript typed arrays\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays\">JavaScript typed arrays</a></li>","summary":"<p>The <code>Int8Array</code> type represents an array of twos-complement 8-bit signed integers.</p>\n<p>Once established, you can reference elements in the array using the object's methods, or using standard array index syntax (that is, using bracket notation).</p>","constructor":"<div class=\"note\"><strong>Note:</strong> In these methods, <code><em>TypedArray</em></code> represents any of the <a title=\"en/JavaScript typed arrays/ArrayBufferView#Typed array subclasses\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBufferView#Typed_array_subclasses\">typed array object types</a>.</div>\n<table class=\"standard-table\"> <tbody> <tr> <td><code>Int8Array <a title=\"en/JavaScript typed arrays/Int8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array#Int8Array%28%29\">Int8Array</a>(unsigned long length);<br> </code></td> </tr> <tr> <td><code>Int8Array <a title=\"en/JavaScript typed arrays/Int8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array#Int8Array%28%29\">Int8Array</a>(<em>TypedArray</em> array);<br> </code></td> </tr> <tr> <td><code>Int8Array <a title=\"en/JavaScript typed arrays/Int8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array#Int8Array%28%29\">Int8Array</a>(sequence&lt;type&gt; array);<br> </code></td> </tr> <tr> <td><code>Int8Array&nbsp;<a title=\"en/JavaScript typed arrays/Int8Array#Int8Array()\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array#Int8Array%28%29\">Int8Array</a>(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long length);<br> </code></td> </tr> </tbody>\n</table><p>Returns a new <code>Int8Array</code> object.</p>\n<pre>Int8Array Int8Array(\n&nbsp; unsigned long length\n);\n\nInt8Array Int8Array(\n&nbsp; <em>TypedArray</em> array\n);\n\nInt8Array Int8Array(\n&nbsp; sequence&lt;type&gt; array\n);\n\nInt8Array Int8Array(\n&nbsp; ArrayBuffer buffer,\n&nbsp; optional unsigned long byteOffset,\n&nbsp; optional unsigned long length\n);\n</pre>\n<div id=\"section_7\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>length</code></dt> <dd>The number of elements in the byte array. If unspecified, length of the array view will match the buffer's length.</dd> <dt><code>array</code></dt> <dd>An object of any of the typed array types (such as <code>Int32Array</code>), or a sequence of objects of a particular type, to copy into a new <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a>. Each value in the source array is converted to an 8-bit integer before being copied into the new array.</dd> <dt><code>buffer</code></dt> <dd>An existing <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> to use as the storage for the new <code>Int8Array</code> object.</dd> <dt><code>byteOffset<br> </code></dt> <dd>The offset, in bytes, to the first byte in the specified buffer for the new view to reference. If not specified, the <code>Int8Array</code>'s view of the buffer will start with the first byte.</dd>\n</dl>\n</div><div id=\"section_8\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>A new <code>Int8Array</code> object representing the specified data buffer.</p>\n</div>","members":[{"name":"subarray","help":"<p>Returns a new <code>Int8Array</code> view on the <a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\"><code>ArrayBuffer</code></a> store for this <code>Int8Array</code> object.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>begin</code></dt> <dd>The offset to the first element in the array to be referenced by the new <code>Int8Array</code> object.</dd> <dt><code>end</code> \n<span title=\"\">Optional</span>\n</dt> <dd>The offset to the last element in the array to be referenced by the new <code>Int8Array</code> object; if not specified, all elements from the one specified by <code>begin</code> to the end of the array are included in the new view.</dd>\n</dl>\n</div><div id=\"section_16\"><span id=\"Notes_2\"></span><h6 class=\"editable\">Notes</h6>\n<p>The range specified by <code>begin</code> and <code>end</code> is clamped to the valid index range for the current array; if the computed length of the new array would be negative, it's clamped to zero. If either <code>begin</code> or <code>end</code> is negative, it refers to an index from the end of the array instead of from the beginning.</p>\n<div class=\"note\"><strong>Note:</strong> Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.</div>\n</div>","idl":"<pre>Int8Array subarray(\n&nbsp; long begin,\n&nbsp; optional long end\n);\n</pre>","obsolete":false},{"name":"set","help":"<p>Sets multiple values in the typed array, reading input values from a specified array.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>array</code></dt> <dd>An array from which to copy values. All values from the source array are copied into the target array, unless the length of the source array plus the offset exceeds the length of the target array, in which case an exception is thrown. If the source array is a typed array, the two arrays may share the same underlying <code><a title=\"en/JavaScript typed arrays/ArrayBuffer\" rel=\"internal\" href=\"https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\">ArrayBuffer</a></code>; the browser will intelligently copy the source range of the buffer to the destination range.</dd> <dt>offset \n<span title=\"\">Optional</span>\n</dt> <dd>The offset into the target array at which to begin writing values from the source <code>array</code>. If you omit this value, 0 is assumed (that is, the source <code>array</code> will overwrite values in the target array starting at index 0).</dd>\n</dl>\n</div>","idl":"<pre>void set(\n&nbsp; <em>TypedArray</em> array,\n&nbsp; optional unsigned long offset\n);\n\nvoid set(\n&nbsp; type[] array,\n&nbsp; optional unsigned long offset\n);\n</pre>","obsolete":false},{"name":"BYTES_PER_ELEMENT","help":"The size, in bytes, of each array element.","obsolete":false},{"name":"length","help":"The number of entries in the array; for these 8-bit values, this is the same as the size of the array in bytes. <strong>Read only.</strong>","obsolete":false}]},"IDBVersionChangeRequest":{"title":"IDBVersionChangeRequest","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td>12 \n<span title=\"prefix\">-webkit</span></td> <td>From 4.0 (2.0)\n to 4.0 (2.0)\n</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>6.0 (6.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<div class=\"warning\"><strong>Warning: </strong> The latest specification does not include this interface anymore as the <code>IDBDatabase.setVersion()</code> method has been removed. However, it is still implemented in not up-to-date browsers. See the compatibility table for version details.<br> The new way to do it is to use the <a title=\"en/IndexedDB/IDBOpenDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBOpenDBRequest\"><code>IDBOpenDBRequest</code></a> interface which has now the <code>onblocked</code> handler and the newly needed <code>onupgradeneeded</code> one.</div>\n<p>The <code>IDBVersionChangeRequest</code> interface the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB API </a>represents a request to change the version of a database. It is used only by the <a title=\"en/IndexedDB/IDBDatabase#setVersion\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase#setVersion\"><code>setVersion()</code></a> method of <code><a title=\"en/IndexedDB/IDBDatabase\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBDatabase\">IDBDatabase</a></code>.</p>\n<p>Inherits from:&nbsp;<code><a title=\"en/IndexedDB/IDBRequest\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBRequest\">IDBRequest</a></code></p>","members":[{"url":"","name":"onblocked","help":"The event handler for the blocked event.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeRequest"},"SVGPathSegCurvetoCubicRel":{"title":"SVGPathElement","members":[],"srcUrl":"https://developer.mozilla.org/en/DOM/SVGPathElement","skipped":true,"cause":"Suspect title"},"IDBVersionChangeEvent":{"title":"IDBVersionChangeEvent","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td><code>version</code></td> <td>12</td> <td> <p>From 4.0 (2.0)\n to</p> <p>9.0 (9.0)\n</p> </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>oldVersion</code></td> <td><span title=\"Not supported.\">--</span></td> <td> <p>10.0 (10.0)\n</p> </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> <tr> <td><code>newVersion</code></td> <td><span title=\"Not supported.\">--</span></td> <td> <p>10.0 (10.0)\n</p> </td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE&nbsp;Phone</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td>4.0 (2.0)\n</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Not supported.\">--</span></td> </tr> </tbody> </table>\n</div>","summary":"<p>The <code>IDBVersionChangeEvent</code> interface of the <a title=\"en/IndexedDB\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB\">IndexedDB&nbsp;API</a> indicates that the version of the database has changed.</p>\n<p>The specification has changed and some not up-to-date browsers only support the deprecated unique attribute, <code>version</code>, from an early draft version.</p>","members":[{"url":"","name":"oldVersion","help":"Returns the old version of the database.","obsolete":false},{"url":"","name":"newVersion","help":"Returns the new version of the database.","obsolete":false},{"url":"","name":"version","help":"<div class=\"warning\"><strong>Warning:</strong> While this property is still implemented by not up-to-date browsers, the latest specification does replace it by the <code>oldVersion</code> and <code>newVersion</code> attributes. See compatibility table to know what browsers support them.</div> The new version of the database in a <a title=\"en/IndexedDB/IDBTransaction#VERSION CHANGE\" rel=\"internal\" href=\"https://developer.mozilla.org/en/IndexedDB/IDBTransaction#VERSION_CHANGE\">VERSION_CHANGE</a> transaction.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/IndexedDB/IDBVersionChangeEvent"},"SVGTextElement":{"title":"SVGTextElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGTextElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/text\">&lt;text&gt;</a></code>\n SVG Element","summary":"The <code>SVGTextElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/text\">&lt;text&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[]},"HTMLBRElement":{"title":"HTMLBRElement","summary":"DOM break elements expose the <a class=\"external\" href=\"http://www.w3.org/TR/html5/text-level-semantics.html#the-br-element\" rel=\"external nofollow\" target=\"_blank\" title=\"http://www.w3.org/TR/html5/text-level-semantics.html#the-br-element\">HTMLBRElement</a> (or <span><a href=\"https://developer.mozilla.org/en/HTML\" rel=\"custom nofollow\">HTML 4</a></span> <a class=\"external\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-56836063\" rel=\"external nofollow\" target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-56836063\"><code>HTMLBRElement</code></a>) interface which inherits from HTMLElement, but defines no additional members in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>. The introduced additional property is also deprecated in \n<span>HTML 4.01</span>.","members":[{"name":"clear","help":"Indicates flow of text around floating objects.","obsolete":true}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLBRElement"},"WebGLTexture":{"title":"Cross-domain textures","members":[],"srcUrl":"https://developer.mozilla.org/en/WebGL/Cross-Domain_Textures","skipped":true,"cause":"Suspect title"},"SVGForeignObjectElement":{"title":"SVGForeignObjectElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td>9.0</td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Not supported.\">--</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> <td><span title=\"Please update this with the earliest version of support.\">(Supported)</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGForeignObjectElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/foreignObject\">&lt;foreignObject&gt;</a></code>\n SVG Element","summary":"The <code>SVGForeignObjectElement</code> interface provides access to the properties of <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/foreignObject\">&lt;foreignObject&gt;</a></code>\n elements, as well as methods to manipulate them.","members":[{"name":"width","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/width\">width</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/foreignObject\">&lt;foreignObject&gt;</a></code>\n element.","obsolete":false},{"name":"height","help":"Corresponds to attribute \n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Attribute/height\">height</a></code> on the given <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/foreignObject\">&lt;foreignObject&gt;</a></code>\n element.","obsolete":false}]},"XPathResult":{"title":"XPathResult","seeAlso":"document.evaluate()","summary":"Refer to <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMXPathResult\">nsIDOMXPathResult</a></code>\n for more detail.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SnapshotItem()","name":"snapshotItem","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/IterateNext()","name":"iterateNext","help":""},{"name":"ANY_TYPE","help":"A result set containing whatever type naturally results from evaluation of the expression. Note that if the result is a node-set then UNORDERED_NODE_ITERATOR_TYPE is always the resulting type.\n","obsolete":false},{"name":"NUMBER_TYPE","help":"A result containing a single number. This is useful for example, in an XPath expression using the <code>count()</code> function.\n","obsolete":false},{"name":"STRING_TYPE","help":"A result containing a single string.\n","obsolete":false},{"name":"BOOLEAN_TYPE","help":"A result containing a single boolean value. This is useful for example, in an XPath expression using the <code>not()</code> function.\n","obsolete":false},{"name":"UNORDERED_NODE_ITERATOR_TYPE","help":"A result node-set containing all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.\n","obsolete":false},{"name":"ORDERED_NODE_ITERATOR_TYPE","help":"A result node-set containing all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.\n","obsolete":false},{"name":"UNORDERED_NODE_SNAPSHOT_TYPE","help":"A result node-set containing snapshots of all the nodes matching the expression. The nodes may not necessarily be in the same order that they appear in the document.\n","obsolete":false},{"name":"ORDERED_NODE_SNAPSHOT_TYPE","help":"A result node-set containing snapshots of all the nodes matching the expression. The nodes in the result set are in the same order that they appear in the document.\n","obsolete":false},{"name":"ANY_UNORDERED_NODE_TYPE","help":"A result node-set containing any single node that matches the expression. The node is not necessarily the first node in the document that matches the expression.\n","obsolete":false},{"name":"FIRST_ORDERED_NODE_TYPE","help":"A result node-set containing the first node in the document that matches the expression.\n","obsolete":false},{"obsolete":false,"url":"https://developer.mozilla.org/en/NumberValue","name":"numberValue","help":"readonly float"},{"obsolete":false,"url":"https://developer.mozilla.org/en/BooleanValue","name":"booleanValue","help":"readonly boolean"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SingleNodeValue","name":"singleNodeValue","help":"readonly Node"},{"obsolete":false,"url":"https://developer.mozilla.org/en/SnapshotLength","name":"snapshotLength","help":"readonly Integer"},{"obsolete":false,"url":"https://developer.mozilla.org/en/InvalidInteratorState","name":"invalidIteratorState","help":"readonly boolean"},{"obsolete":false,"url":"https://developer.mozilla.org/en/StringValue","name":"stringValue","help":"readonly String"},{"obsolete":false,"url":"https://developer.mozilla.org/en/ResultType","name":"resultType","help":"readonly integer (short)"}],"srcUrl":"https://developer.mozilla.org/en/XPathResult"},"SVGFontFaceUriElement":{"title":"SVGFontFaceUriElement","compatibility":"<div class=\"htab\"><a name=\"AutoCompatibilityTable\"></a>\n<ul> <li class=\"selected\">Desktop</li> <li>Mobile</li>\n</ul>\n</div><p></p>\n<div id=\"compat-desktop\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Chrome</th> <th>Firefox (Gecko)</th> <th>Internet Explorer</th> <th>Opera</th> <th>Safari (WebKit)</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>\n<div id=\"compat-mobile\"> <table class=\"compat-table\"> <tbody> <tr> <th>Feature</th> <th>Android</th> <th>Firefox Mobile (Gecko)</th> <th>IE Mobile</th> <th>Opera Mobile</th> <th>Safari Mobile</th> </tr> <tr> <td>Basic support</td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> <td><span title=\"Compatibility unknown; please update this.\">?</span></td> </tr> </tbody> </table>\n</div>","srcUrl":"https://developer.mozilla.org/en/DOM/SVGFontFaceUriElement","seeAlso":"<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-uri\">&lt;font-face-uri&gt;</a></code>\n SVG Element","summary":"<p>The <code>SVGFontFaceUriElement</code> interface corresponds to the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-uri\">&lt;font-face-uri&gt;</a></code>\n elements.</p>\n<p>Object-oriented access to the attributes of the <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/font-face-uri\">&lt;font-face-uri&gt;</a></code>\n element via the SVG DOM is not possible.</p>","members":[]},"HTMLAnchorElement":{"title":"HTMLAnchorElement","summary":"DOM anchor elements expose the <a target=\"_blank\" href=\"http://www.w3.org/TR/html5/text-level-semantics.html#htmlanchorelement\" rel=\"external nofollow\" class=\" external\" title=\"http://www.w3.org/TR/html5/text-level-semantics.html#htmlanchorelement\">HTMLAnchorElement</a> (or <span><a href=\"https://developer.mozilla.org/en/HTML\" rel=\"custom nofollow\">HTML 4</a></span> <a target=\"_blank\" title=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-48250443\" href=\"http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-48250443\" rel=\"external nofollow\" class=\" external\"><code>HTMLAnchorElement</code></a>) interface, which provides special properties and methods (beyond the regular <a href=\"https://developer.mozilla.org/en/DOM/element\" rel=\"internal\">element</a> object interface they also have available to them by inheritance) for manipulating the layout and presentation of hyperlink elements.","members":[{"name":"blur","help":"Removes keyboard focus from the current element.","obsolete":false},{"name":"focus","help":"Gives keyboard focus to the current element.","obsolete":false},{"name":"accessKey","help":"A single character that switches input focus to the hyperlink. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"charset","help":"The character encoding of the linked resource. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"coords","help":"Comma-separated list of coordinates. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"hash","help":"The fragment identifier (including the leading hash mark (#)), if any, in the referenced URL.","obsolete":false},{"name":"host","help":"The hostname and port (if it's not the default port) in the referenced URL.","obsolete":false},{"name":"hostname","help":"The hostname in the referenced URL.","obsolete":false},{"name":"href","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-href\">href</a></code>\n HTML attribute, containing a valid URL of a linked resource.","obsolete":false},{"name":"hreflang","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-hreflang\">hreflang</a></code>\n HTML&nbsp;attribute, indicating the language of the linked resource.","obsolete":false},{"name":"media","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-media\">media</a></code>\n HTML attribute, indicating the intended media for the linked resource.","obsolete":false},{"name":"name","help":"Anchor name. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"pathname","help":"The path name component, if any, of the referenced URL.","obsolete":false},{"name":"port","help":"The port component, if any, of the referenced URL.","obsolete":false},{"name":"protocol","help":"The protocol component (including trailing colon (:)), of the referenced URL.","obsolete":false},{"name":"rel","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-rel\">rel</a></code>\n HTML attribute, specifying the relationship of the target object to the link object.","obsolete":false},{"name":"relList","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-rel\">rel</a></code>\n HTML&nbsp;attribute, as a list of tokens.","obsolete":false},{"name":"rev","help":"Reverse link type. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"search","help":"The search element (including leading question mark (?)), if any, of the referenced URL","obsolete":false},{"name":"shape","help":"The shape of the active area. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"tabIndex","help":"The position of the element in the tabbing navigation order for the current document. \n\n<span title=\"\">Obsolete</span> in \n<span><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/HTML5\">HTML5</a></span>","obsolete":true},{"name":"target","help":"Reflectst the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-target\">target</a></code>\n HTML attribute, indicating where to display the linked resource.","obsolete":false},{"name":"text","help":"Same as the <strong><a title=\"https://developer.mozilla.org/En/DOM/Node.textContent\" rel=\"internal\" href=\"https://developer.mozilla.org/En/DOM/Node.textContent\">textContent</a></strong> property.","obsolete":false},{"name":"type","help":"Reflects the \n\n<code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/HTML/Element/a#attr-type\">type</a></code>\n HTML attribute, indicating the MIME type of the linked resource.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/DOM/HTMLAnchorElement"},"SVGFEDisplacementMapElement":{"title":"feDisplacementMap","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/filter\">&lt;filter&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/animate\">&lt;animate&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/set\">&lt;set&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feBlend\">&lt;feBlend&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feColorMatrix\">&lt;feColorMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComponentTransfer\">&lt;feComponentTransfer&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feComposite\">&lt;feComposite&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feConvolveMatrix\">&lt;feConvolveMatrix&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feDiffuseLighting\">&lt;feDiffuseLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feFlood\">&lt;feFlood&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feGaussianBlur\">&lt;feGaussianBlur&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feImage\">&lt;feImage&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMerge\">&lt;feMerge&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feMorphology\">&lt;feMorphology&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feOffset\">&lt;feOffset&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feSpecularLighting\">&lt;feSpecularLighting&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTile\">&lt;feTile&gt;</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/SVG/Element/feTurbulence\">&lt;feTurbulence&gt;</a></code>\n</li> <li><a title=\"en/SVG/Tutorial/Filter_effects\" rel=\"internal\" href=\"https://developer.mozilla.org/en/SVG/Tutorial/Filter_effects\">SVG tutorial: Filter effects</a></li>","summary":"The pixel value of an input image i2 is used to displace the original image i1.","members":[{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in2","name":"in2","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/scale","name":"scale","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/yChannelSelector","name":"yChannelSelector","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/class","name":"class","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/xChannelSelector","name":"xChannelSelector","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/in","name":"in","help":""},{"obsolete":false,"url":"https://developer.mozilla.org/en/SVG/Attribute/style","name":"style","help":"Specific attributes"}],"srcUrl":"https://developer.mozilla.org/en/SVG/Element/feDisplacementMap"},"Clipboard":{"title":"nsIClipboard","seeAlso":"<li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIClipboardOwner\">nsIClipboardOwner</a></code>\n</li> <li><code><a rel=\"internal\" href=\"https://developer.mozilla.org/Article_not_found?uri=en/XPCOM_Interface_Reference/nsITransferable&amp;ident=nsITransferable\" class=\"new\">nsITransferable</a></code>\n</li> <li><code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIArray\">nsIArray</a></code>\n</li> <li><a title=\"Using the Clipboard\" class=\"internal\" rel=\"internal\" href=\"https://developer.mozilla.org/en/Using_the_Clipboard\">Using the Clipboard</a></li>","summary":"<div>\n\n<a rel=\"custom\" href=\"http://mxr.mozilla.org/mozilla-central/source/widget/public/nsIClipboard.idl\"><code>widget/public/nsIClipboard.idl</code></a><span><a rel=\"internal\" href=\"https://developer.mozilla.org/en/Interfaces/About_Scriptable_Interfaces\" title=\"en/Interfaces/About_Scriptable_Interfaces\">Scriptable</a></span></div><span>This interface supports basic clipboard operations such as: setting, retrieving, emptying, matching and supporting clipboard data.</span><div>Inherits from: <code><a rel=\"custom\" href=\"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISupports\">nsISupports</a></code>\n<span>Last changed in Gecko 1.8 (Firefox 1.5 / Thunderbird 1.5 / SeaMonkey 1.0)\n</span></div>","members":[{"name":"hasDataMatchingFlavors","help":"<p>This method provides a way to give correct UI feedback about, for instance, whether a paste should be allowed. It does <strong>not</strong> actually retrieve the data and should be a very inexpensive call. All it does is check if there is data on the clipboard matching any of the flavors in the given list.</p>\n\n<div id=\"section_10\"><span id=\"Parameters_4\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aFlavorList</code></dt> <dd>An array of ASCII strings.</dd> <dt><code>aLength</code></dt> <dd>The length of the <code>aFlavorList</code>.</dd> <dt><code>aWhichClipboard</code></dt> <dd>Specifies the clipboard to which this operation applies.</dd>\n</dl>\n</div><div id=\"section_11\"><span id=\"Return_value\"></span><h6 class=\"editable\">Return value</h6>\n<p>Returns <code>true</code>, if data is present and it matches the specified flavor. Otherwise it returns <code>false</code>.</p>\n</div>","idl":"<pre class=\"eval\">boolean hasDataMatchingFlavors(\n  [array, size_is(aLength)] in string aFlavorList,\n  in unsigned long aLength, \n<span title=\"(Firefox 3)\n\" style=\"border: 1px solid rgb(129, 129, 81); background-color: rgb(255, 255, 225); font-size: x-small; white-space: nowrap; padding: 2px;\">Requires Gecko 1.9</span>\n\n  in long aWhichClipboard \n);\n</pre>","obsolete":false},{"name":"emptyClipboard","help":"<p>This method empties the clipboard and notifies the clipboard owner. It empties the \"logical\" clipboard. It does not clear the native clipboard.</p>\n\n<div id=\"section_5\"><span id=\"Parameters\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aWhichClipboard</code></dt> <dd>Specifies the clipboard to which this operation applies.</dd>\n</dl>\n<p>\n\n</p><div><span>Obsolete since Gecko 1.8 (Firefox 1.5 / Thunderbird 1.5 / SeaMonkey 1.0)\n</span><span id=\"forceDataToClipboard()\"></span></div></div>","idl":"<pre class=\"eval\">void emptyClipboard(\n  in long aWhichClipboard \n);\n</pre>","obsolete":false},{"name":"forceDataToClipboard","help":"<div id=\"section_5\"><p>Some platforms support deferred notification for putting data on the clipboard This method forces the data onto the clipboard in its various formats This may be used if the application going away.</p>\n\n</div><div id=\"section_6\"><span id=\"Parameters_2\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aWhichClipboard</code></dt> <dd>Specifies the clipboard to which this operation applies.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void forceDataToClipboard(\n  in long aWhichClipboard \n);\n</pre>","obsolete":false},{"name":"setData","help":"<p>This method sets the data from a transferable on the native clipboard.</p>\n\n<div id=\"section_13\"><span id=\"Parameters_5\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aTransferable</code></dt> <dd>The transferable containing the data to put on the clipboard.</dd> <dt><code>anOwner</code></dt> <dd>The owner of the transferable.</dd> <dt><code>aWhichClipboard</code></dt> <dd>Specifies the clipboard to which this operation applies.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void setData(\n  in nsITransferable aTransferable,\n  in nsIClipboardOwner anOwner,\n  in long aWhichClipboard \n);\n</pre>","obsolete":false},{"name":"getData","help":"<p>This method retrieves data from the clipboard into a transferable.</p>\n\n<div id=\"section_8\"><span id=\"Parameters_3\"></span><h6 class=\"editable\">Parameters</h6>\n<dl> <dt><code>aTransferable</code></dt> <dd>The transferable to receive data from the clipboard.</dd> <dt><code>aWhichClipboard</code></dt> <dd>Specifies the clipboard to which this operation applies.</dd>\n</dl>\n</div>","idl":"<pre class=\"eval\">void getData(\n  in nsITransferable aTransferable,\n  in long aWhichClipboard \n);\n</pre>","obsolete":false},{"name":"supportsSelectionClipboard","help":"<p>This method allows clients to determine if the implementation supports the concept of a separate clipboard for selection.</p>\n\n<div id=\"section_15\"><span id=\"Parameters_6\"></span>\n\n</div><div id=\"section_16\"><span id=\"Return_value_2\"></span><h6 class=\"editable\">Return value</h6>\n<p>Returns <code>true</code> if <code>kSelectionClipboard</code> is available. Otherwise it returns <code>false</code>.</p>\n</div>","idl":"<pre class=\"eval\">boolean supportsSelectionClipboard();\n</pre>","obsolete":false},{"name":"kSelectionClipboard","help":"Clipboard for selection.","obsolete":false},{"name":"kGlobalClipboard","help":"Clipboard for global use.","obsolete":false}],"srcUrl":"https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIClipboard"},"CSSUnknownRule":{"title":"cssRule","members":[],"srcUrl":"https://developer.mozilla.org/pl/DOM/cssRule","skipped":true,"cause":"Suspect title"}}
\ No newline at end of file
diff --git a/elemental/idl/elemental/elemental.idl b/elemental/idl/elemental/elemental.idl
deleted file mode 100644
index 35e2cd1..0000000
--- a/elemental/idl/elemental/elemental.idl
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * License TBD
- */
-
-module default {
-  FileList implements sequence<File>;
-  HTMLCollection implements sequence<Node>;
-  MediaList implements sequence<DOMString>;
-  NamedNodeMap implements sequence<Node>;
-  NodeList implements sequence<Node>;
-  StyleSheetList implements sequence<StyleSheet>;
-  TouchList implements sequence<Touch>;
-
-  Float32Array implements sequence<double>;
-  Float64Array implements sequence<double>;
-  Int8Array implements sequence<int>;
-  Int16Array implements sequence<int>;
-  Int32Array implements sequence<int>;
-  Uint8Array implements sequence<int>;
-  // Ugliness ahead: we cannot analyse inheritance right now when deducing if
-  // given interface is a typed array (database is not accessible), so I have
-  // to duplicate both sequence<int> and ArrayBufferView to make our heuristics
-  // work.
-  // FIXME: thread datatbase to all the clients that need it and probably
-  // move the method itself to database.
-  Uint8ClampedArray implements sequence<int>;
-  Uint8ClampedArray implements ArrayBufferView;
-  Uint16Array implements sequence<int>;
-  Uint32Array implements sequence<int>;
-
-  // Is List<int> because inherits from Uint8Array:
-  // Uint8ClampedArray implements sequence<int>;
-}
-
-module core {
-  [Supplemental]
-  interface Document {
-    [Suppressed] DOMObject getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
-    CanvasRenderingContext getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
-  };
-
-  DOMStringList implements sequence<DOMString>;
-};
-
-module dom {
-  // Force NodeSelector. WebKit defines these operations directly.
-  interface NodeSelector {
-    Element   querySelector(in DOMString selectors);
-    NodeList  querySelectorAll(in DOMString selectors);
-  };
-  Document implements NodeSelector;
-  DocumentFragment implements NodeSelector;
-  Element implements NodeSelector;
-
-  // Force ElementTraversal. WebKit defines these directly.
-  interface ElementTraversal {
-    getter attribute unsigned long childElementCount;
-    getter attribute Element firstElementChild;
-    getter attribute Element lastElementChild;
-    getter attribute Element nextElementSibling;
-    getter attribute Element previousElementSibling;
-  };
-  Element implements ElementTraversal;
-
-  [Callback]
-  interface TimeoutHandler {
-    void handleEvent();
-  };
-};
-
-module html {
-  [Supplemental]
-  interface Console {
-    [Suppressed] void debug();
-    [CallWith=ScriptArguments|CallStack] void debug(DOMObject arg);
-    [Suppressed] void error();
-    [CallWith=ScriptArguments|CallStack] void error(DOMObject arg);
-    [Suppressed] void info();
-    [CallWith=ScriptArguments|CallStack] void info(DOMObject arg);
-    [Suppressed] void log();
-    [CallWith=ScriptArguments|CallStack] void log(DOMObject arg);
-    [Suppressed] void warn();
-    [CallWith=ScriptArguments|CallStack] void warn(DOMObject arg);
-    [Suppressed] void trace();
-    [CallWith=ScriptArguments|CallStack] void trace(DOMObject arg);
-    [Suppressed] void assert(in boolean condition);
-    [CallWith=ScriptArguments|CallStack] void assertCondition(boolean condition, DOMObject arg);
-    [Suppressed] void timeEnd(in DOMString title);
-    [CallWith=ScriptArguments|CallStack] void timeEnd(DOMString title, DOMObject arg);
-    [Suppressed] void timeStamp();
-    [CallWith=ScriptArguments|CallStack] void timeStamp(DOMObject arg);
-    [Suppressed] void group();
-    [CallWith=ScriptArguments|CallStack] void group(DOMObject arg);
-    [Suppressed] void groupCollapsed();
-    [CallWith=ScriptArguments|CallStack] void groupCollapsed(DOMObject arg);
-  };
-
-  [Supplemental]
-  interface HTMLOptionsCollection {
-    [Suppressed] void add(in optional HTMLOptionElement element, in optional long before);
-  };
-
-  [Supplemental]
-  interface ImageData {
-    readonly attribute Uint8ClampedArray data;
-  };
-
-  [Supplemental]
-  interface WebGLContextEvent {
-    [Suppressed] void initEvent(in optional DOMString eventTypeArg,
-                                in optional boolean canBubbleArg,
-                                in optional boolean cancelableArg,
-                                in optional DOMString statusMessageArg);
-  };
-};
-
-module html {
-  [Supplemental]
-  interface WebGLRenderingContext {
-
-    //void         compressedTexImage2D(in unsigned long target, in long level, in unsigned long internalformat, in unsigned long width, in unsigned long height, in long border, in unsigned long imageSize, const void* data);
-    //void         compressedTexSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset, in unsigned long width, in unsigned long height, in unsigned long format, in unsigned long imageSize, const void* data);
-
-    any getBufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getBufferParameter();
-
-    any getFramebufferAttachmentParameter(in unsigned long target, in unsigned long attachment, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getFramebufferAttachmentParameter();
-
-    any getParameter(in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getParameter();
-
-    any getProgramParameter(in WebGLProgram program, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getProgramParameter();
-
-    any getRenderbufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getRenderbufferParameter();
-
-    any getShaderParameter(in WebGLShader shader, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getShaderParameter() raises(DOMException);
-
-    // TBD
-    // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
-
-    DOMString[] getSupportedExtensions();
-    [Suppressed, StrictTypeChecking, Custom] void getSupportedExtensions();
-
-    any getTexParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getTexParameter();
-
-    any getUniform(in WebGLProgram program, in WebGLUniformLocation location) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getUniform();
-
-    any getVertexAttrib(in unsigned long index, in unsigned long pname) raises(DOMException);
-    [Suppressed, StrictTypeChecking, Custom] void getVertexAttrib();
-  };
-}
-
-
-
-module canvas {
-  // TODO(dstockwell): Define these manually.
-  [Supplemental]
-  interface Float32Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Float64Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Int16Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Int32Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Int8Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Uint16Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Uint32Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-  [Supplemental]
-  interface Uint8Array {
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-
-  [Supplemental]
-  interface Uint8ClampedArray {
-    // Avoid 'overriding static member BYTES_PER_ELEMENT'.
-    [Suppressed] const long BYTES_PER_ELEMENT = 1;
-
-    [Suppressed] void set();
-    [DartName=setElements, Custom] void set(in any array, in optional unsigned long offset);
-  };
-};
-
-module storage {
-  // TODO(vsm): Define new names for these (see b/4436830).
-  [Supplemental]
-  interface IDBCursor {
-    [DartName=continueFunction] void continue(in optional IDBKey key);
-  };
-  [Supplemental]
-  interface IDBIndex {
-    [DartName=getObject] IDBRequest get(in IDBKey key);
-  };
-  [Supplemental]
-  interface IDBObjectStore {
-    [DartName=getObject] IDBRequest get(in IDBKey key);
-    [DartName=getObject] IDBRequest get(in IDBKeyRange key);
-    [Suppressed] IDBRequest openCursor() raises (IDBDatabaseException);
-  };
-
-  interface EntrySync {
-    // Native implementation is declared to return EntrySync.
-    [Suppressed] DirectoryEntrySync getParent();
-    EntrySync getParent();
-  };
-};
-
-module html {
-  [Supplemental, Callback] // Add missing Callback attribute.
-  interface VoidCallback {
-  };
-};
-
-module svg {
-    interface SVGNumber {
-      [StrictTypeChecking, Custom] attribute double value;
-    };
-}
-
-module html {
-  [Supplemental]
-  interface HTMLCanvasElement {
-    [Suppressed] DOMObject getContext(in DOMString contextId);
-    // W3C defines this as returning 'object':
-    CanvasRenderingContext getContext(in DOMString contextId);
-  };
-};
-
-module svg {
-  // fix convariant return clash with Element
-  [Supplemental]
-  interface SVGStylable {
-    @WebKit [DartName=svgStyle] getter attribute CSSStyleDeclaration style;
-    @WebKit [DartName=animatedClassName] getter attribute SVGAnimatedString className;
-  };
-
-  // rename width/height covariant returns on several SVG classes
-  [Supplemental]
-  interface SVGFilterElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGFilterPrimitiveStandardAttributes {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-    @WebKit [DartName=animatedResult] getter attribute SVGAnimatedString result;
-    @WebKit [DartName=animatedX] getter attribute SVGAnimatedLength x;
-    @WebKit [DartName=animatedY] getter attribute SVGAnimatedLength y;
-  };
-
-  [Supplemental]
-  interface SVGForeignObjectElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGImageElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGMaskElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGPatternElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGRectElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGSVGElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGUseElement {
-    @WebKit [DartName=animatedWidth] getter attribute SVGAnimatedLength width;
-    @WebKit [DartName=animatedHeight] getter attribute SVGAnimatedLength height;
-  };
-
-  [Supplemental]
-  interface SVGTransformable :
-    @WebKit SVGLocatable {
-    @WebKit [DartName=animatedTransform] getter attribute SVGAnimatedTransformList transform;
-  };
-
-  [Supplemental]
-  interface SVGURIReference {
-    @WebKit [DartName=animatedHref] getter attribute SVGAnimatedString href;
-  };
-};
-
-module base {
-  interface ElementalMixinBase {
-  };
-};
-
-module html {
-  [Supplemental]
-  interface Uint8ClampedArray :
-    @WebKit Uint8Array,
-    sequence<int>,
-    ArrayBufferView {
-    /* suppressed, we don't support covariant return, just cast to the clamped interface if needed */
-    @WebKit [Suppressed] Uint8ClampedArray subarray(in long start);
-    @WebKit [Suppressed] Uint8ClampedArray subarray(in long start, in long end);
-  };
-};
-
-module events {
-  [Supplemental]
-  interface Event {
-    @WebKit [Suppressed] const unsigned short BLUR = 8192;
-    @WebKit [Suppressed] const unsigned short CHANGE = 32768;
-    @WebKit [Suppressed] const unsigned short CLICK = 64;
-    @WebKit [Suppressed] const unsigned short DBLCLICK = 128;
-    @WebKit [Suppressed] const unsigned short DRAGDROP = 2048;
-    @WebKit [Suppressed] const unsigned short FOCUS = 4096;
-    @WebKit [Suppressed] const unsigned short KEYDOWN = 256;
-    @WebKit [Suppressed] const unsigned short KEYPRESS = 1024;
-    @WebKit [Suppressed] const unsigned short KEYUP = 512;
-    @WebKit [Suppressed] const unsigned short MOUSEDOWN = 1;
-    @WebKit [Suppressed] const unsigned short MOUSEDRAG = 32;
-    @WebKit [Suppressed] const unsigned short MOUSEMOVE = 16;
-    @WebKit [Suppressed] const unsigned short MOUSEOUT = 8;
-    @WebKit [Suppressed] const unsigned short MOUSEOVER = 4;
-    @WebKit [Suppressed] const unsigned short MOUSEUP = 2;
-    @WebKit [Suppressed] const unsigned short SELECT = 16384;
-  };
-};
-
-module html {
-  [Supplemental, Constructor]
-  interface AudioContext {
-  };
-
-  [Supplemental, Constructor(in DOMString url)]
-  interface WebSocket {
-  };
-
-  [Supplemental, Suppressed]
-  interface DeprecatedPeerConnection {
-  };
-
-  /* TODO(cromwellian) fix after API/IDL settles
-    [Supplemental, Constructor(in MutationCallback callback)]
-    interface WebKitMutationObserver {
-  };
-  */
-}
diff --git a/elemental/idl/scripts/all_tests.py b/elemental/idl/scripts/all_tests.py
deleted file mode 100755
index f7d84fd..0000000
--- a/elemental/idl/scripts/all_tests.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This entry point runs all script tests."""
-
-import logging.config
-import unittest
-
-if __name__ == '__main__':
-  logging.config.fileConfig('logging.conf')
-  suite = unittest.TestLoader().loadTestsFromNames([
-      'templateloader_test',
-      'pegparser_test',
-      'idlparser_test',
-      'idlnode_test',
-      'idlrenderer_test',
-      'database_test',
-      'databasebuilder_test',
-      'emitter_test',
-      'dartgenerator_test',
-      'multiemitter_test'])
-  unittest.TextTestRunner().run(suite)
diff --git a/elemental/idl/scripts/database.py b/elemental/idl/scripts/database.py
deleted file mode 100755
index 4c9ef09..0000000
--- a/elemental/idl/scripts/database.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Module to manage IDL files."""
-
-import copy
-import pickle
-import logging
-import os
-import os.path
-import shutil
-import idlnode
-import idlparser
-import idlrenderer
-
-_logger = logging.getLogger('database')
-
-
-class Database(object):
-  """The Database class manages a collection of IDL files stored
-  inside a directory.
-
-  Each IDL is describing a single interface. The IDL files are written in the
-  FremontCut syntax, which is derived from the Web IDL syntax and includes
-  annotations.
-
-  Database operations include adding, updating and removing IDL files.
-  """
-
-  def __init__(self, root_dir):
-    """Initializes a Database over a given directory.
-
-    Args:
-      root_dir -- a directory. If directory does not exist, it will
-      be created.
-    """
-    self._root_dir = root_dir
-    if not os.path.exists(root_dir):
-      _logger.debug('creating root directory %s' % root_dir)
-      os.makedirs(root_dir)
-    self._all_interfaces = {}
-    self._interfaces_to_delete = []
-    self._idlparser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
-
-  def Clone(self):
-    new_database = Database(self._root_dir)
-    new_database._all_interfaces = copy.deepcopy(self._all_interfaces)
-    new_database._interfaces_to_delete = copy.deepcopy(
-        self._interfaces_to_delete)
-    return new_database
-
-  def Delete(self):
-    """Deletes the database by deleting its directory"""
-    if os.path.exists(self._root_dir):
-      shutil.rmtree(self._root_dir)
-    # reset in-memory constructs
-    self._all_interfaces = {}
-
-  def _ScanForInterfaces(self):
-    """Iteratores over the database files and lists all interface names.
-
-    Return:
-      A list of interface names.
-    """
-    res = []
-
-    def Visitor(_, dirname, names):
-      for name in names:
-        if os.path.isfile(os.path.join(dirname, name)):
-          root, ext = os.path.splitext(name)
-          if ext == '.idl':
-            res.append(root)
-
-    os.path.walk(self._root_dir, Visitor, None)
-    return res
-
-  def _FilePath(self, interface_name):
-    """Calculates the file path that a given interface should
-    be saved to.
-
-    Args:
-      interface_name -- the name of the interface.
-    """
-    return os.path.join(self._root_dir, '%s.idl' % interface_name)
-
-  def _LoadInterfaceFile(self, interface_name):
-    """Loads an interface from the database.
-
-    Returns:
-      An IDLInterface instance or None if the interface is not found.
-    Args:
-      interface_name -- the name of the interface.
-    """
-    file_name = self._FilePath(interface_name)
-    _logger.info('loading %s' % file_name)
-    if not os.path.exists(file_name):
-      return None
-
-    f = open(file_name, 'r')
-    content = f.read()
-    f.close()
-
-    # Parse file:
-    idl_file = idlnode.IDLFile(self._idlparser.parse(content), file_name)
-
-    if not idl_file.interfaces:
-      raise RuntimeError('No interface found in %s' % file_name)
-    elif len(idl_file.interfaces) > 1:
-      raise RuntimeError('Expected one interface in %s' % file_name)
-
-    interface = idl_file.interfaces[0]
-    self._all_interfaces[interface_name] = interface
-    return interface
-
-  def Load(self):
-    """Loads all interfaces into memory.
-    """
-    # FIXME: Speed this up by multi-threading.
-    for (interface_name) in self._ScanForInterfaces():
-      self._LoadInterfaceFile(interface_name)
-    self.Cache()
-
-  def Cache(self):
-    """Serialize the database using pickle for faster startup in the future
-    """
-    output_file = open(os.path.join(self._root_dir, 'cache.pickle'), 'wb')
-    pickle.dump(self._all_interfaces, output_file)
-    pickle.dump(self._interfaces_to_delete, output_file)
-
-  def LoadFromCache(self):
-    """Deserialize the database using pickle for fast startup
-    """
-    input_file_name = os.path.join(self._root_dir, 'cache.pickle')
-    if not os.path.isfile(input_file_name):
-      self.Load()
-      return
-    input_file = open(input_file_name, 'rb')
-    self._all_interfaces = pickle.load(input_file)
-    self._interfaces_to_delete = pickle.load(input_file)
-    input_file.close()
-
-  def Save(self):
-    """Saves all in-memory interfaces into files."""
-    for interface in self._all_interfaces.values():
-      self._SaveInterfaceFile(interface)
-    for interface_name in self._interfaces_to_delete:
-      self._DeleteInterfaceFile(interface_name)
-
-  def _SaveInterfaceFile(self, interface):
-    """Saves an interface into the database.
-
-    Args:
-      interface -- an IDLInterface instance.
-    """
-
-    interface_name = interface.id
-
-    # Actual saving
-    file_path = self._FilePath(interface_name)
-    _logger.debug('writing %s' % file_path)
-
-    dir_name = os.path.dirname(file_path)
-    if not os.path.exists(dir_name):
-      _logger.debug('creating directory %s' % dir_name)
-      os.mkdir(dir_name)
-
-    # Render the IDLInterface object into text.
-    text = idlrenderer.render(interface)
-
-    f = open(file_path, 'w')
-    f.write(text)
-    f.close()
-
-  def HasInterface(self, interface_name):
-    """Returns True if the interface is in memory"""
-    return interface_name in self._all_interfaces
-
-  def GetInterface(self, interface_name):
-    """Returns an IDLInterface corresponding to the interface_name
-    from memory.
-
-    Args:
-      interface_name -- the name of the interface.
-    """
-    if interface_name not in self._all_interfaces:
-      raise RuntimeError('Interface %s is not loaded' % interface_name)
-    return self._all_interfaces[interface_name]
-
-  def AddInterface(self, interface):
-    """Returns an IDLInterface corresponding to the interface_name
-    from memory.
-
-    Args:
-      interface -- the name of the interface.
-    """
-    interface_name = interface.id
-    if interface_name in self._all_interfaces:
-      raise RuntimeError('Interface %s already exists' % interface_name)
-    self._all_interfaces[interface_name] = interface
-
-  def GetInterfaces(self):
-    """Returns a list of all loaded interfaces."""
-    res = []
-    for _, interface in sorted(self._all_interfaces.items()):
-      res.append(interface)
-    return res
-
-  def DeleteInterface(self, interface_name):
-    """Deletes an interface from the database. File is deleted when
-    Save() is called.
-
-    Args:
-      interface_name -- the name of the interface.
-    """
-    if interface_name not in self._all_interfaces:
-      raise RuntimeError('Interface %s not found' % interface_name)
-    self._interfaces_to_delete.append(interface_name)
-    del self._all_interfaces[interface_name]
-
-  def _DeleteInterfaceFile(self, interface_name):
-    """Actual file deletion"""
-    file_path = self._FilePath(interface_name)
-    if os.path.exists(file_path):
-      _logger.debug('deleting %s' % file_path)
-      os.remove(file_path)
diff --git a/elemental/idl/scripts/database_test.py b/elemental/idl/scripts/database_test.py
deleted file mode 100755
index de75160..0000000
--- a/elemental/idl/scripts/database_test.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Tests for database module."""
-
-import logging.config
-import os.path
-import shutil
-import tempfile
-import unittest
-import database
-import idlnode
-import idlparser
-
-
-class DatabaseTestCase(unittest.TestCase):
-
-  def _ParseInterface(self, content):
-    ast = self._idl_parser.parse(content)
-    return idlnode.IDLFile(ast).interfaces[0]
-
-  def _ListInterfaces(self, db):
-    res = []
-    for interface in db.GetInterfaces():
-      name = interface.id
-      res.append(name)
-    return res
-
-  def setUp(self):
-    self._idl_parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
-
-    working_dir = tempfile.mkdtemp()
-    self._database_dir = os.path.join(working_dir, 'database')
-    self.assertFalse(os.path.exists(self._database_dir))
-
-    # Create database and add one interface.
-    db = database.Database(self._database_dir)
-    interface = self._ParseInterface('interface I1 {};')
-    db.AddInterface(interface)
-    db.Save()
-    self.assertTrue(
-        os.path.exists(os.path.join(self._database_dir, 'I1.idl')))
-
-  def tearDown(self):
-    shutil.rmtree(self._database_dir)
-
-  def testCreate(self):
-    self.assertTrue(os.path.exists(self._database_dir))
-
-  def testListInterfaces(self):
-    db = database.Database(self._database_dir)
-    db.Load()
-    self.assertEquals(self._ListInterfaces(db), ['I1'])
-
-  def testHasInterface(self):
-    db = database.Database(self._database_dir)
-    db.Load()
-    self.assertTrue(db.HasInterface('I1'))
-    self.assertFalse(db.HasInterface('I2'))
-
-  def testAddInterface(self):
-    db = database.Database(self._database_dir)
-    db.Load()
-    interface = self._ParseInterface('interface I2 {};')
-    db.AddInterface(interface)
-    db.Save()
-    self.assertTrue(
-        os.path.exists(os.path.join(self._database_dir, 'I2.idl')))
-    self.assertEquals(self._ListInterfaces(db),
-                      ['I1', 'I2'])
-
-  def testDeleteInterface(self):
-    db = database.Database(self._database_dir)
-    db.Load()
-    db.DeleteInterface('I1')
-    db.Save()
-    self.assertFalse(
-        os.path.exists(os.path.join(self._database_dir, 'I1.idl')))
-    self.assertEquals(self._ListInterfaces(db), [])
-
-  def testGetInterface(self):
-    db = database.Database(self._database_dir)
-    db.Load()
-    interface = db.GetInterface('I1')
-    self.assertEquals(interface.id, 'I1')
-
-
-if __name__ == '__main__':
-  logging.config.fileConfig('logging.conf')
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/databasebuilder.py b/elemental/idl/scripts/databasebuilder.py
deleted file mode 100755
index 0dc2ce1..0000000
--- a/elemental/idl/scripts/databasebuilder.py
+++ /dev/null
@@ -1,586 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import copy
-import database
-import idlparser
-import logging
-import os
-import os.path
-
-from idlnode import *
-
-_logger = logging.getLogger('databasebuilder')
-
-# Used in source annotations to specify the parent interface declaring
-# a displaced declaration. The 'via' attribute specifies the parent interface
-# which implements a displaced declaration.
-_VIA_ANNOTATION_ATTR_NAME = 'via'
-
-# Used in source annotations to specify the module that the interface was
-# imported from.
-_MODULE_ANNOTATION_ATTR_NAME = 'module'
-
-
-class DatabaseBuilderOptions(object):
-  """Used in specifying options when importing new interfaces"""
-
-  def __init__(self,
-      idl_syntax=idlparser.WEBIDL_SYNTAX,
-      idl_defines=[],
-      source=None, source_attributes={},
-      type_rename_map={},
-      rename_operation_arguments_on_merge=False,
-      add_new_interfaces=True,
-      obsolete_old_declarations=False):
-    """Constructor.
-    Args:
-      idl_syntax -- the syntax of the IDL file that is imported.
-      idl_defines -- list of definitions for the idl gcc pre-processor
-      source -- the origin of the IDL file, used for annotating the
-        database.
-      source_attributes -- this map of attributes is used as
-        annotation attributes.
-      rename_operation_arguments_on_merge -- if True, will rename
-        operation arguments when merging using the new name rather
-        than the old.
-      add_new_interfaces -- when False, if an interface is a new
-        addition, it will be ignored.
-      obsolete_old_declarations -- when True, if a declaration
-        from a certain source is not re-declared, it will be removed.
-    """
-    self.source = source
-    self.source_attributes = source_attributes
-    self.idl_syntax = idl_syntax
-    self.idl_defines = idl_defines
-    self.type_rename_map = type_rename_map
-    self.rename_operation_arguments_on_merge = \
-        rename_operation_arguments_on_merge
-    self.add_new_interfaces = add_new_interfaces
-    self.obsolete_old_declarations = obsolete_old_declarations
-
-
-class DatabaseBuilder(object):
-  def __init__(self, database):
-    """DatabaseBuilder is used for importing and merging interfaces into
-    the Database"""
-    self._database = database
-    self._imported_interfaces = []
-    self._impl_stmts = []
-
-  def _load_idl_file(self, file_name, import_options):
-    """Loads an IDL file intor memory"""
-    idl_parser = idlparser.IDLParser(import_options.idl_syntax)
-
-    try:
-      f = open(file_name, 'r')
-      content = f.read()
-      f.close()
-
-      idl_ast = idl_parser.parse(content,
-        defines=import_options.idl_defines)
-      return IDLFile(idl_ast, file_name)
-    except SyntaxError, e:
-      raise RuntimeError('Failed to load file %s: %s' % (file_name, e))
-
-  def _resolve_type_defs(self, idl_file):
-    type_def_map = {}
-    # build map
-    for type_def in idl_file.all(IDLTypeDef):
-      if type_def.type.id != type_def.id: # sanity check
-        type_def_map[type_def.id] = type_def.type.id
-    # use the map
-    for type_node in idl_file.all(IDLType):
-      while type_node.id in type_def_map:
-        type_node.id = type_def_map[type_node.id]
-
-  def _strip_ext_attributes(self, idl_file):
-    """Strips unuseful extended attributes."""
-    for ext_attrs in idl_file.all(IDLExtAttrs):
-      # TODO: Decide which attributes are uninteresting.
-      pass
-
-  def _split_declarations(self, interface, optional_argument_whitelist):
-    """Splits read-write attributes and operations with optional
-    arguments into multiple declarations"""
-
-    # split attributes into setters and getters
-    new_attributes = []
-    for attribute in interface.attributes:
-      if attribute.is_fc_getter or attribute.is_fc_setter:
-        new_attributes.append(attribute)
-        continue
-      getter_attr = copy.deepcopy(attribute)
-      getter_attr.is_fc_getter = True
-      new_attributes.append(getter_attr)
-      if not attribute.is_read_only:
-        setter_attr = copy.deepcopy(attribute)
-        setter_attr.is_fc_setter = True
-        new_attributes.append(setter_attr)
-    interface.attributes = new_attributes
-
-    # Remove optional annotations from legacy optional arguments.
-    for op in interface.operations:
-      for i in range(0, len(op.arguments)):
-        argument = op.arguments[i]
-
-        in_optional_whitelist = (interface.id, op.id, argument.id) in optional_argument_whitelist
-        if in_optional_whitelist or set(['Optional', 'Callback']).issubset(argument.ext_attrs.keys()):
-          argument.is_optional = True
-          argument.ext_attrs['RequiredCppParameter'] = None
-          continue
-
-        if argument.is_optional:
-          if 'Optional' in argument.ext_attrs:
-            optional_value = argument.ext_attrs['Optional']
-            if optional_value:
-              argument.is_optional = False
-              del argument.ext_attrs['Optional']
-
-    # split operations with optional args into multiple operations
-    new_ops = []
-    for op in interface.operations:
-      for i in range(0, len(op.arguments)):
-        if op.arguments[i].is_optional:
-          op.arguments[i].is_optional = False
-          new_op = copy.deepcopy(op)
-          new_op.arguments = new_op.arguments[:i]
-          new_ops.append(new_op)
-      new_ops.append(op)
-    interface.operations = new_ops
-
-  def _rename_types(self, idl_file, import_options):
-    """Rename interface and type names with names provided in the
-    options. Also clears scopes from scoped names"""
-
-    def rename(name):
-      name_parts = name.split('::')
-      name = name_parts[-1]
-      if name in import_options.type_rename_map:
-        name = import_options.type_rename_map[name]
-      return name
-
-    def rename_node(idl_node):
-      idl_node.id = rename(idl_node.id)
-
-    def rename_ext_attrs(ext_attrs_node):
-      for type_valued_attribute_name in ['Supplemental']:
-        if type_valued_attribute_name in ext_attrs_node:
-          value = ext_attrs_node[type_valued_attribute_name]
-          if isinstance(value, str):
-            ext_attrs_node[type_valued_attribute_name] = rename(value)
-
-    map(rename_node, idl_file.all(IDLInterface))
-    map(rename_node, idl_file.all(IDLType))
-    map(rename_ext_attrs, idl_file.all(IDLExtAttrs))
-
-  def _annotate(self, interface, module_name, import_options):
-    """Adds @ annotations based on the source and source_attributes
-    members of import_options."""
-
-    source = import_options.source
-    if not source:
-      return
-
-    def add_source_annotation(idl_node):
-      annotation = IDLAnnotation(
-        copy.deepcopy(import_options.source_attributes))
-      idl_node.annotations[source] = annotation
-      if ((isinstance(idl_node, IDLInterface) or
-           isinstance(idl_node, IDLMember)) and
-          idl_node.is_fc_suppressed):
-        annotation['suppressed'] = None
-
-    add_source_annotation(interface)
-    interface.annotations[source][_MODULE_ANNOTATION_ATTR_NAME] = module_name
-
-    map(add_source_annotation, interface.parents)
-    map(add_source_annotation, interface.constants)
-    map(add_source_annotation, interface.attributes)
-    map(add_source_annotation, interface.operations)
-
-  def _sign(self, node):
-    """Computes a unique signature for the node, for merging purposed, by
-    concatenating types and names in the declaration."""
-    if isinstance(node, IDLType):
-      res = node.id
-      if res.startswith('unsigned '):
-        res = res[len('unsigned '):]
-      return res
-
-    res = []
-    if isinstance(node, IDLInterface):
-      res = ['interface', node.id]
-    elif isinstance(node, IDLParentInterface):
-      res = ['parent', self._sign(node.type)]
-    elif isinstance(node, IDLOperation):
-      res = ['op']
-      for special in node.specials:
-        res.append(special)
-      if node.id is not None:
-        res.append(node.id)
-      for arg in node.arguments:
-        res.append(self._sign(arg.type))
-      res.append(self._sign(node.type))
-    elif isinstance(node, IDLAttribute):
-      res = []
-      if node.is_fc_getter:
-        res.append('getter')
-      elif node.is_fc_setter:
-        res.append('setter')
-      res.append(node.id)
-      res.append(self._sign(node.type))
-    elif isinstance(node, IDLConstant):
-      res = []
-      res.append('const')
-      res.append(node.id)
-      res.append(node.value)
-      res.append(self._sign(node.type))
-    else:
-      raise TypeError("Can't sign input of type %s" % type(node))
-    return ':'.join(res)
-
-  def _build_signatures_map(self, idl_node_list):
-    """Creates a hash table mapping signatures to idl_nodes for the
-    given list of nodes"""
-    res = {}
-    for idl_node in idl_node_list:
-      sig = self._sign(idl_node)
-      if sig is None:
-        continue
-      if sig in res:
-        raise RuntimeError('Warning: Multiple members have the same '
-                           'signature: "%s"' % sig)
-      res[sig] = idl_node
-    return res
-
-  def _get_parent_interfaces(self, interface):
-    """Return a list of all the parent interfaces of a given interface"""
-    res = []
-
-    def recurse(current_interface):
-      if current_interface in res:
-        return
-      res.append(current_interface)
-      for parent in current_interface.parents:
-        parent_name = parent.type.id
-        if self._database.HasInterface(parent_name):
-          recurse(self._database.GetInterface(parent_name))
-
-    recurse(interface)
-    return res[1:]
-
-  def _merge_ext_attrs(self, old_attrs, new_attrs):
-    """Merges two sets of extended attributes.
-
-    Returns: True if old_attrs has changed.
-    """
-    changed = False
-    for (name, value) in new_attrs.items():
-      if name in old_attrs and old_attrs[name] == value:
-        pass # Identical
-      else:
-        old_attrs[name] = value
-        changed = True
-    return changed
-
-  def _merge_nodes(self, old_list, new_list, import_options):
-    """Merges two lists of nodes. Annotates nodes with the source of each
-    node.
-
-    Returns:
-      True if the old_list has changed.
-
-    Args:
-      old_list -- the list to merge into.
-      new_list -- list containing more nodes.
-      import_options -- controls how merging is done.
-    """
-    changed = False
-
-    source = import_options.source
-
-    old_signatures_map = self._build_signatures_map(old_list)
-    new_signatures_map = self._build_signatures_map(new_list)
-
-    # Merge new items
-    for (sig, new_node) in new_signatures_map.items():
-      if sig not in old_signatures_map:
-        # New node:
-        old_list.append(new_node)
-        changed = True
-      else:
-        # Merge old and new nodes:
-        old_node = old_signatures_map[sig]
-        if (source not in old_node.annotations
-            and source in new_node.annotations):
-          old_node.annotations[source] = new_node.annotations[source]
-          changed = True
-        # Maybe rename arguments:
-        if isinstance(old_node, IDLOperation):
-          for i in range(0, len(old_node.arguments)):
-            old_arg_name = old_node.arguments[i].id
-            new_arg_name = new_node.arguments[i].id
-            if (old_arg_name != new_arg_name
-                and (old_arg_name == 'arg'
-                     or old_arg_name.endswith('Arg')
-                     or import_options.rename_operation_arguments_on_merge)):
-              old_node.arguments[i].id = new_arg_name
-              changed = True
-        # Maybe merge annotations:
-        if (isinstance(old_node, IDLAttribute) or
-            isinstance(old_node, IDLOperation)):
-          if self._merge_ext_attrs(old_node.ext_attrs, new_node.ext_attrs):
-            changed = True
-
-    # Remove annotations on obsolete items from the same source
-    if import_options.obsolete_old_declarations:
-      for (sig, old_node) in old_signatures_map.items():
-        if (source in old_node.annotations
-            and sig not in new_signatures_map):
-          _logger.warn('%s not available in %s anymore' %
-            (sig, source))
-          del old_node.annotations[source]
-          changed = True
-
-    return changed
-
-  def _merge_interfaces(self, old_interface, new_interface, import_options):
-    """Merges the new_interface into the old_interface, annotating the
-    interface with the sources of each change."""
-
-    changed = False
-
-    source = import_options.source
-    if (source and source not in old_interface.annotations and
-        source in new_interface.annotations and
-        not new_interface.is_supplemental):
-      old_interface.annotations[source] = new_interface.annotations[source]
-      changed = True
-
-    def merge_list(what):
-      old_list = old_interface.__dict__[what]
-      new_list = new_interface.__dict__[what]
-
-      if what != 'parents' and old_interface.id != new_interface.id:
-        for node in new_list:
-          node.ext_attrs['ImplementedBy'] = new_interface.id
-
-      changed = self._merge_nodes(old_list, new_list, import_options)
-
-      # Delete list items with zero remaining annotations.
-      if changed and import_options.obsolete_old_declarations:
-
-        def has_annotations(idl_node):
-          return len(idl_node.annotations)
-
-        old_interface.__dict__[what] = filter(has_annotations, old_list)
-
-      return changed
-
-    # Smartly merge various declarations:
-    if merge_list('parents'):
-      changed = True
-    if merge_list('constants'):
-      changed = True
-    if merge_list('attributes'):
-      changed = True
-    if merge_list('operations'):
-      changed = True
-
-    if self._merge_ext_attrs(old_interface.ext_attrs, new_interface.ext_attrs):
-      changed = True
-
-    _logger.info('merged interface %s (changed=%s, supplemental=%s)' %
-      (old_interface.id, changed, new_interface.is_supplemental))
-
-    return changed
-
-  def _merge_impl_stmt(self, impl_stmt, import_options):
-    """Applies "X implements Y" statemetns on the proper places in the
-    database"""
-    implementor_name = impl_stmt.implementor.id
-    implemented_name = impl_stmt.implemented.id
-    _logger.info('merging impl stmt %s implements %s' %
-                 (implementor_name, implemented_name))
-
-    source = import_options.source
-    if self._database.HasInterface(implementor_name):
-      interface = self._database.GetInterface(implementor_name)
-      if interface.parents is None:
-        interface.parents = []
-      for parent in interface.parents:
-        if parent.type.id == implemented_name:
-          if source and source not in parent.annotations:
-            parent.annotations[source] = IDLAnnotation(
-                import_options.source_attributes)
-          return
-      # not found, so add new one
-      parent = IDLParentInterface(None)
-      parent.type = IDLType(implemented_name)
-      if source:
-        parent.annotations[source] = IDLAnnotation(
-            import_options.source_attributes)
-      interface.parents.append(parent)
-
-  def merge_imported_interfaces(self, optional_argument_whitelist):
-    """Merges all imported interfaces and loads them into the DB."""
-
-    # Step 1: Pre process imported interfaces
-    for interface, module_name, import_options in self._imported_interfaces:
-      self._split_declarations(interface, optional_argument_whitelist)
-      self._annotate(interface, module_name, import_options)
-
-    # Step 2: Add all new interfaces and merge overlapping ones
-    for interface, module_name, import_options in self._imported_interfaces:
-      if not interface.is_supplemental:
-        if self._database.HasInterface(interface.id):
-          old_interface = self._database.GetInterface(interface.id)
-          self._merge_interfaces(old_interface, interface, import_options)
-        else:
-          if import_options.add_new_interfaces:
-            self._database.AddInterface(interface)
-
-    # Step 3: Merge in supplemental interfaces
-    for interface, module_name, import_options in self._imported_interfaces:
-      if interface.is_supplemental:
-        target_name = interface.ext_attrs['Supplemental']
-        if target_name:
-          # [Supplemental=DOMWindow] - merge into DOMWindow.
-          target = target_name
-        else:
-          # [Supplemental] - merge into existing inteface with same name.
-          target = interface.id
-        if self._database.HasInterface(target):
-          old_interface = self._database.GetInterface(target)
-          self._merge_interfaces(old_interface, interface, import_options)
-        else:
-          raise Exception("Supplemental target '%s' not found", target)
-
-    # Step 4: Resolve 'implements' statements
-    for impl_stmt, import_options in self._impl_stmts:
-      self._merge_impl_stmt(impl_stmt, import_options)
-
-    self._impl_stmts = []
-    self._imported_interfaces = []
-
-  def import_idl_file(self, file_path,
-            import_options=DatabaseBuilderOptions()):
-    """Parses, loads into memory and cleans up and IDL file"""
-    idl_file = self._load_idl_file(file_path, import_options)
-
-    self._strip_ext_attributes(idl_file)
-    self._resolve_type_defs(idl_file)
-    self._rename_types(idl_file, import_options)
-
-    def enabled(idl_node):
-      return self._is_node_enabled(idl_node, import_options.idl_defines)
-
-    for module in idl_file.modules:
-      for interface in module.interfaces:
-        if not self._is_node_enabled(interface, import_options.idl_defines):
-          _logger.info('skipping interface %s/%s (source=%s file=%s)'
-            % (module.id, interface.id, import_options.source,
-               file_path))
-          continue
-
-        _logger.info('importing interface %s/%s (source=%s file=%s)'
-          % (module.id, interface.id, import_options.source,
-             file_path))
-        interface.attributes = filter(enabled, interface.attributes)
-        interface.operations = filter(enabled, interface.operations)
-        self._imported_interfaces.append((interface, module.id, import_options))
-
-      for implStmt in module.implementsStatements:
-        self._impl_stmts.append((implStmt, import_options))
-
-  def _is_node_enabled(self, node, idl_defines):
-    if not 'Conditional' in node.ext_attrs:
-      return True
-
-    def enabled(condition):
-      return 'ENABLE_%s' % condition in idl_defines
-
-    conditional = node.ext_attrs['Conditional']
-    if conditional.find('&') != -1:
-      for condition in conditional.split('&'):
-        if not enabled(condition):
-          return False
-      return True
-
-    for condition in conditional.split('|'):
-      if enabled(condition):
-        return True
-    return False
-
-  def fix_displacements(self, source):
-    """E.g. In W3C, something is declared on HTMLDocument but in WebKit
-    its on Document, so we need to mark that something in HTMLDocument
-    with @WebKit(via=Document). The 'via' attribute specifies the
-    parent interface that has the declaration."""
-
-    for interface in self._database.GetInterfaces():
-      changed = False
-
-      _logger.info('fixing displacements in %s' % interface.id)
-
-      for parent_interface in self._get_parent_interfaces(interface):
-        _logger.info('scanning parent %s of %s' %
-          (parent_interface.id, interface.id))
-
-        def fix_nodes(local_list, parent_list):
-          changed = False
-          parent_signatures_map = self._build_signatures_map(
-            parent_list)
-          for idl_node in local_list:
-            sig = self._sign(idl_node)
-            if sig in parent_signatures_map:
-              parent_member = parent_signatures_map[sig]
-              if (source in parent_member.annotations
-                  and source not in idl_node.annotations
-                  and _VIA_ANNOTATION_ATTR_NAME
-                      not in parent_member.annotations[source]):
-                idl_node.annotations[source] = IDLAnnotation(
-                    {_VIA_ANNOTATION_ATTR_NAME: parent_interface.id})
-                changed = True
-          return changed
-
-        changed = fix_nodes(interface.constants,
-                  parent_interface.constants) or changed
-        changed = fix_nodes(interface.attributes,
-                  parent_interface.attributes) or changed
-        changed = fix_nodes(interface.operations,
-                  parent_interface.operations) or changed
-      if changed:
-        _logger.info('fixed displaced declarations in %s' %
-          interface.id)
-
-  def normalize_annotations(self, sources):
-    """Makes the IDLs less verbose by removing annotation attributes
-    that are identical to the ones defined at the interface level.
-
-    Args:
-      sources -- list of source names to normalize."""
-    for interface in self._database.GetInterfaces():
-      _logger.debug('normalizing annotations for %s' % interface.id)
-      for source in sources:
-        if (source not in interface.annotations or
-            not interface.annotations[source]):
-          continue
-        top_level_annotation = interface.annotations[source]
-
-        def normalize(idl_node):
-          if (source in idl_node.annotations
-              and idl_node.annotations[source]):
-            annotation = idl_node.annotations[source]
-            for name, value in annotation.items():
-              if (name in top_level_annotation
-                  and value == top_level_annotation[name]):
-                del annotation[name]
-
-        map(normalize, interface.parents)
-        map(normalize, interface.constants)
-        map(normalize, interface.attributes)
-        map(normalize, interface.operations)
diff --git a/elemental/idl/scripts/databasebuilder_test.py b/elemental/idl/scripts/databasebuilder_test.py
deleted file mode 100755
index 6a3d273..0000000
--- a/elemental/idl/scripts/databasebuilder_test.py
+++ /dev/null
@@ -1,387 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import database
-import idlparser
-import logging.config
-import os
-import os.path
-import shutil
-import tempfile
-import unittest
-from databasebuilder import *
-
-
-class DatabaseBuilderTestCase(unittest.TestCase):
-
-  def _create_input(self, idl_file_name, content):
-    file_name = os.path.join(self._input_dir, idl_file_name)
-    f = open(file_name, 'w')
-    f.write(content)
-    f.close()
-    return file_name
-
-  def _assert_interface_exists(self, path):
-    file_path = os.path.join(self._database_dir, path)
-    self.assertTrue(os.path.exists(file_path))
-
-  def _assert_content_equals(self, path, expected_content):
-    def clean(content):
-      return ' '.join(filter(len, map(str.strip, content.split('\n'))))
-    file_path = os.path.join(self._database_dir, path)
-    self.assertTrue(os.path.exists(file_path))
-    f = open(file_path, 'r')
-    actual_content = f.read()
-    f.close()
-    if clean(actual_content) != clean(expected_content):
-      msg = '''
-FILE: %s
-EXPECTED:
-%s
-ACTUAL:
-%s
-''' % (file_path, expected_content, actual_content)
-      self.fail(msg)
-
-  def setUp(self):
-    working_dir = tempfile.mkdtemp()
-    self._database_dir = os.path.join(working_dir, 'database')
-    self.assertFalse(os.path.exists(self._database_dir))
-
-    self._input_dir = os.path.join(working_dir, 'inputdir')
-    os.makedirs(self._input_dir)
-
-    self._db = database.Database(self._database_dir)
-    self.assertTrue(os.path.exists(self._database_dir))
-
-    self._builder = DatabaseBuilder(self._db)
-
-  def tearDown(self):
-    shutil.rmtree(self._database_dir)
-
-  def test_basic_import(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        interface I {
-          attribute int a;
-        };
-      };''')
-    self._builder.import_idl_file(file_name)
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_interface_exists('I.idl')
-
-  def test_splitting(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        interface I {
-          readonly attribute int a;
-          int o(in int x, in optional int y);
-        };
-      };''')
-    self._builder.import_idl_file(file_name)
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      interface I {
-        /* Attributes */
-        getter attribute int a;
-
-        /* Operations */
-        int o(in int x);
-        int o(in int x, in int y);
-      };''')
-
-  def test_renames(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        [Constructor(in T x)] interface I {
-          T op(T x);
-          readonly attribute N::T attr;
-        };
-      };''')
-    options = DatabaseBuilderOptions(type_rename_map={'I': 'i', 'T': 't'})
-    self._builder.import_idl_file(file_name, options)
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('i.idl', '''
-      [Constructor(in t x)] interface i {
-        /* Attributes */
-        getter attribute t attr;
-        /* Operations */
-        t op(in t x);
-      };''')
-
-  def test_type_defs(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        typedef T S;
-        interface I : S {
-          S op(S x);
-          readonly attribute S attr;
-        };
-      };''')
-    options = DatabaseBuilderOptions()
-    self._builder.import_idl_file(file_name, options)
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      interface I :
-        T {
-        /* Attributes */
-        getter attribute T attr;
-        /* Operations */
-        T op(in T x);
-      };''')
-
-  def test_merge(self):
-    file_name1 = self._create_input('input1.idl', '''
-      module M {
-        interface I {
-          const int CONST_BOTH = 0;
-          const int CONST_ONLY_FIRST = 0;
-          const int CONST_BOTH_DIFFERENT_VALUE = 0;
-
-          readonly attribute int attr_only_first;
-          readonly attribute int attr_both;
-          readonly attribute int attr_both_readonly_difference;
-          readonly attribute int attr_both_int_long_difference;
-
-          int op_only_first();
-          int op_both(int a);
-          int op_both_optionals_difference(int a,
-            in optional int b);
-          int op_both_arg_rename(int arg);
-        };
-      };''')
-    self._builder.import_idl_file(file_name1,
-      DatabaseBuilderOptions(source='1st',
-        idl_syntax=idlparser.FREMONTCUT_SYNTAX))
-    file_name2 = self._create_input('input2.idl', '''
-      module M {
-        interface I {
-          const int CONST_BOTH = 0;
-          const int CONST_ONLY_SECOND = 0;
-          const int CONST_BOTH_DIFFERENT_VALUE = 1;
-
-          readonly attribute int attr_only_second;
-          readonly attribute int attr_both;
-          readonly attribute long attr_both_int_long_difference;
-          attribute int attr_both_readonly_difference;
-
-          int op_only_second();
-          int op_both(int a);
-          int op_both_optionals_difference(int a,
-            optional boolean b);
-          int op_both_arg_rename(int betterName);
-        };
-      };''')
-    self._builder.import_idl_file(file_name2,
-      DatabaseBuilderOptions(source='2nd',
-        idl_syntax=idlparser.FREMONTCUT_SYNTAX))
-    self._builder.set_same_signatures({'int': 'long'})
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      @1st(module=M) @2nd(module=M) interface I {
-        /* Constants */
-        @1st @2nd const int CONST_BOTH = 0;
-        @1st const int CONST_BOTH_DIFFERENT_VALUE = 0;
-        @2nd const int CONST_BOTH_DIFFERENT_VALUE = 1;
-        @1st const int CONST_ONLY_FIRST = 0;
-        @2nd const int CONST_ONLY_SECOND = 0;
-
-        /* Attributes */
-        @1st @2nd getter attribute int attr_both;
-        @1st @2nd getter attribute int attr_both_int_long_difference;
-        @1st @2nd getter attribute int attr_both_readonly_difference;
-        @2nd setter attribute int attr_both_readonly_difference;
-        @1st getter attribute int attr_only_first;
-        @2nd getter attribute int attr_only_second;
-
-        /* Operations */
-        @1st @2nd int op_both(in t a);
-        @1st @2nd int op_both_arg_rename(in t betterName);
-        @1st @2nd int op_both_optionals_difference(in t a);
-        @1st int op_both_optionals_difference(in t a, in int b);
-        @2nd int op_both_optionals_difference(in t a, in boolean b);
-        @1st int op_only_first();
-        @2nd int op_only_second();
-      };''')
-
-  def test_mergeDartName(self):
-    file_name1 = self._create_input('input1.idl', '''
-      module M {
-        interface I {
-          [ImplementationFunction=foo] int member(in int a);
-        };
-      };''')
-    self._builder.import_idl_file(file_name1,
-      DatabaseBuilderOptions(source='1st',
-        idl_syntax=idlparser.FREMONTCUT_SYNTAX))
-    file_name2 = self._create_input('input2.idl', '''
-      module M {
-        interface I {
-          [DartName=bar] int member(in int a);
-        };
-      };''')
-    self._builder.import_idl_file(file_name2,
-      DatabaseBuilderOptions(source='2nd',
-        idl_syntax=idlparser.FREMONTCUT_SYNTAX))
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      @1st(module=M) @2nd(module=M) interface I {
-        /* Operations */
-        @1st @2nd [DartName=bar, ImplementationFunction=foo] int member(in int a);
-      };''')
-
-  def test_supplemental(self):
-    file_name = self._create_input('input1.idl', '''
-      module M {
-        interface I {
-          readonly attribute int a;
-        };
-        [Supplemental] interface I {
-          readonly attribute int b;
-        };
-      };''')
-    self._builder.import_idl_file(file_name,
-      DatabaseBuilderOptions(source='Src'))
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      @Src(module=M) [Supplemental] interface I {
-        /* Attributes */
-        @Src getter attribute int a;
-        @Src getter attribute int b;
-      };''')
-
-  def test_impl_stmt(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        interface I {};
-        I implements J;
-      };''')
-    self._builder.import_idl_file(file_name,
-      DatabaseBuilderOptions(source='Src'))
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      @Src(module=M) interface I :
-        @Src J {
-      };''')
-
-  def test_obsolete(self):
-    file_name1 = self._create_input('input1.idl', '''
-      module M {
-        interface I {
-          readonly attribute int keep;
-          readonly attribute int obsolete; // Would be removed
-        };
-      };''')
-    self._builder.import_idl_file(file_name1,
-      DatabaseBuilderOptions(source='src'))
-    file_name2 = self._create_input('input2.idl', '''
-      module M {
-        interface I {
-          readonly attribute int keep;
-          readonly attribute int new;
-        };
-      };''')
-    self._builder.import_idl_file(file_name2,
-      DatabaseBuilderOptions(source='src',
-                   obsolete_old_declarations=True))
-    self._builder.merge_imported_interfaces([])
-    self._db.Save()
-    self._assert_content_equals('I.idl', '''
-      @src(module=M) interface I {
-        /* Attributes */
-        @src getter attribute int keep;
-        @src getter attribute int new;
-      };''')
-
-  def test_annotation_normalization(self):
-    file_name = self._create_input('input.idl', '''
-      module M {
-        interface I : J{
-          const int C = 0;
-          readonly attribute int a;
-          int op();
-        };
-      };''')
-    self._builder.import_idl_file(file_name,
-      DatabaseBuilderOptions(source='Src', source_attributes={'x': 'y'}))
-    self._builder.merge_imported_interfaces([])
-    interface = self._db.GetInterface('I')
-    interface.parents[0].annotations['Src']['x'] = 'u'
-    interface.constants[0].annotations['Src']['z'] = 'w'
-    interface.attributes[0].annotations['Src']['x'] = 'u'
-    self._db.Save()
-
-    # Before normalization
-    self._assert_content_equals('I.idl', '''
-      @Src(module=M, x=y)
-      interface I : @Src(x=u) J {
-        /* Constants */
-        @Src(x=y, z=w) const int C = 0;
-        /* Attributes */
-        @Src(x=u) getter attribute int a;
-        /* Operations */
-        @Src(x=y) int op();
-      };''')
-
-    # Normalize
-    self._builder.normalize_annotations(['Src'])
-    self._db.Save()
-
-    # After normalization
-    self._assert_content_equals('I.idl', '''
-      @Src(module=M, x=y)
-      interface I : @Src(x=u) J {
-        /* Constants */
-        @Src(z=w) const int C = 0;
-        /* Attributes */
-        @Src(x=u) getter attribute int a;
-        /* Operations */
-        @Src int op();
-      };''')
-
-  def test_fix_displacements(self):
-    file_name1 = self._create_input('input1.idl', '''
-      module M {
-        interface I {};
-        interface J : I {
-          readonly attribute int attr;
-        };
-      };''')
-    self._builder.import_idl_file(file_name1,
-      DatabaseBuilderOptions(source='1st'))
-    file_name2 = self._create_input('input2.idl', '''
-      module M {
-        interface I {
-          readonly attribute int attr;
-        };
-        interface J : I {};
-      };''')
-    self._builder.import_idl_file(file_name2,
-      DatabaseBuilderOptions(source='2nd'))
-    self._builder.merge_imported_interfaces([])
-    self._builder.fix_displacements('2nd')
-    self._db.Save()
-    self._assert_content_equals('J.idl', '''
-      @1st(module=M) @2nd(module=M) interface J :
-        @1st @2nd I {
-        /* Attributes */
-        @1st
-        @2nd(via=I)
-        getter attribute int attr;
-      };''')
-
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/elemental_fremontcutbuilder.py b/elemental/idl/scripts/elemental_fremontcutbuilder.py
deleted file mode 100755
index 4fe8af3..0000000
--- a/elemental/idl/scripts/elemental_fremontcutbuilder.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import database
-import databasebuilder
-import idlparser
-import logging.config
-import os.path
-import sys
-
-# TODO(antonm): most probably should go away or be autogenerated on IDLs roll.
-DEFAULT_FEATURE_DEFINES = [
-    # Enabled Chrome WebKit build.
-    'ENABLE_3D_PLUGIN',
-    'ENABLE_3D_RENDERING',
-    'ENABLE_ACCELERATED_2D_CANVAS',
-    'ENABLE_BATTERY_STATUS',
-    'ENABLE_BLOB',
-    'ENABLE_BLOB_SLICE',
-    'ENABLE_CALENDAR_PICKER',
-    'ENABLE_CHANNEL_MESSAGING',
-    'ENABLE_CSS_FILTERS',
-    'ENABLE_CSS_IMAGE_SET',
-    'ENABLE_CSS_SHADERS',
-    'ENABLE_DART',
-    'ENABLE_DATA_TRANSFER_ITEMS',
-    'ENABLE_DETAILS',
-    'ENABLE_DEVICE_ORIENTATION',
-    'ENABLE_DIRECTORY_UPLOAD',
-    'ENABLE_DOWNLOAD_ATTRIBUTE',
-    'ENABLE_ENCRYPTED_MEDIA',
-    'ENABLE_FILE_SYSTEM',
-    'ENABLE_FILTERS',
-    'ENABLE_FULLSCREEN_API',
-    'ENABLE_GAMEPAD',
-    'ENABLE_GEOLOCATION',
-    'ENABLE_GESTURE_EVENTS',
-    'ENABLE_INDEXED_DATABASE',
-    'ENABLE_INPUT_SPEECH',
-    'ENABLE_INPUT_TYPE_COLOR',
-    'ENABLE_INPUT_TYPE_DATE',
-    'ENABLE_JAVASCRIPT_DEBUGGER',
-    'ENABLE_JAVASCRIPT_I18N_API',
-    'ENABLE_LEGACY_NOTIFICATIONS',
-    'ENABLE_LINK_PREFETCH',
-    'ENABLE_MEDIA_SOURCE',
-    'ENABLE_MEDIA_STATISTICS',
-    'ENABLE_MEDIA_STREAM',
-    'ENABLE_METER_TAG',
-    'ENABLE_MHTML',
-    'ENABLE_MUTATION_OBSERVERS',
-    'ENABLE_NOTIFICATIONS',
-    'ENABLE_OVERFLOW_SCROLLING',
-    'ENABLE_PAGE_POPUP',
-    'ENABLE_PAGE_VISIBILITY_API',
-    'ENABLE_POINTER_LOCK',
-    'ENABLE_PROGRESS_TAG',
-    'ENABLE_QUOTA',
-    'ENABLE_REGISTER_PROTOCOL_HANDLER',
-    'ENABLE_REQUEST_ANIMATION_FRAME',
-    'ENABLE_RUBY',
-    'ENABLE_SANDBOX',
-    'ENABLE_SCRIPTED_SPEECH',
-    'ENABLE_SHADOW_DOM',
-    'ENABLE_SHARED_WORKERS',
-    'ENABLE_SMOOTH_SCROLLING',
-    'ENABLE_SQL_DATABASE',
-    'ENABLE_STYLE_SCOPED',
-    'ENABLE_SVG',
-    'ENABLE_SVG_FONTS',
-    'ENABLE_TOUCH_EVENTS',
-    'ENABLE_V8_SCRIPT_DEBUG_SERVER',
-    'ENABLE_VIDEO',
-    'ENABLE_VIDEO_TRACK',
-    'ENABLE_VIEWPORT',
-    'ENABLE_WEBGL',
-    'ENABLE_WEB_AUDIO',
-    'ENABLE_WEB_INTENTS',
-    'ENABLE_WEB_SOCKETS',
-    'ENABLE_WEB_TIMING',
-    'ENABLE_WORKERS',
-    'ENABLE_XHR_RESPONSE_BLOB',
-    'ENABLE_XSLT',
-]
-
-# TODO(antonm): Remove this filter.
-UNSUPPORTED_FEATURES = [ 'ENABLE_WEB_INTENTS' ]
-
-def build_database(idl_files, database_dir, feature_defines = None):
-  """This code reconstructs the FremontCut IDL database from W3C,
-  WebKit and Dart IDL files."""
-  current_dir = os.path.dirname(__file__)
-  logging.config.fileConfig(os.path.join(current_dir, "logging.conf"))
-
-  db = database.Database(database_dir)
-
-  # Delete all existing IDLs in the DB.
-  db.Delete()
-
-  builder = databasebuilder.DatabaseBuilder(db)
-
-  # TODO(vsm): Move this to a README.
-  # This is the Dart SVN revision.
-  webkit_revision = '1060'
-
-  # TODO(vsm): Reconcile what is exposed here and inside WebKit code
-  # generation.  We need to recheck this periodically for now.
-  webkit_defines = [ 'LANGUAGE_DART', 'LANGUAGE_JAVASCRIPT' ]
-  if feature_defines is None:
-      feature_defines = DEFAULT_FEATURE_DEFINES
-
-  webkit_options = databasebuilder.DatabaseBuilderOptions(
-      idl_syntax=idlparser.WEBKIT_SYNTAX,
-# TODO(vsm): What else should we define as on when processing IDL?
-      idl_defines=[define for define in webkit_defines + feature_defines if define not in UNSUPPORTED_FEATURES],
-      source='WebKit',
-      source_attributes={'revision': webkit_revision},
-      type_rename_map={
-        'BarInfo': 'BarProp',
-        'DedicatedWorkerContext': 'DedicatedWorkerGlobalScope',
-        'DOMApplicationCache': 'ApplicationCache',
-        'DOMCoreException': 'DOMException',
-        'DOMFormData': 'FormData',
-        'DOMSelection': 'Selection',
-        'DOMWindow': 'Window',
-        'SharedWorkerContext': 'SharedWorkerGlobalScope',
-        'WorkerContext': 'WorkerGlobalScope',
-      })
-
-  optional_argument_whitelist = [
-      ('CSSStyleDeclaration', 'setProperty', 'priority'),
-      ('IDBDatabase', 'transaction', 'mode'),
-      ]
-
-  # Import WebKit IDLs.
-  for file_name in idl_files:
-    builder.import_idl_file(file_name, webkit_options)
-
-  # Import Dart idl:
-  dart_options = databasebuilder.DatabaseBuilderOptions(
-    idl_syntax=idlparser.FREMONTCUT_SYNTAX,
-    source='Dart',
-    rename_operation_arguments_on_merge=True)
-
-  builder.import_idl_file(
-      os.path.join(current_dir, '..', 'elemental', 'elemental.idl'),
-      dart_options)
-
-  # Merging:
-  builder.merge_imported_interfaces(optional_argument_whitelist)
-
-  builder.fix_displacements('WebKit')
-
-  # Cleanup:
-  builder.normalize_annotations(['WebKit', 'Dart'])
-
-  db.Save()
-
-def main():
-  current_dir = os.path.dirname(__file__)
-
-  webkit_dirs = [
-    'css',
-    'dom',
-    'fileapi',
-    'html',
-    'html/canvas',
-    'inspector',
-    'loader',
-    'loader/appcache',
-    'Modules/battery',
-    'Modules/filesystem',
-    'Modules/geolocation',
-    'Modules/indexeddb',
-    'Modules/mediastream',
-    'Modules/speech',
-    'Modules/webaudio',
-    'Modules/webdatabase',
-    'Modules/websockets',
-    'notifications',
-    'page',
-    'plugins',
-    'storage',
-    'svg',
-    'workers',
-    'xml',
-    ]
-
-  ignored_idls = [
-    'AbstractView.idl',
-    ]
-
-  idl_files = []
-
-  webcore_dir = os.path.join(current_dir, '..', 
-                             'third_party', 'WebCore')
-  if not os.path.exists(webcore_dir):
-    raise RuntimeError('directory not found: %s' % webcore_dir)
-
-  def visitor(arg, dir_name, names):
-    for name in names:
-      file_name = os.path.join(dir_name, name)
-      (interface, ext) = os.path.splitext(file_name)
-      if ext == '.idl' and name not in ignored_idls:
-        idl_files.append(file_name)
-
-  for dir_name in webkit_dirs:
-    dir_path = os.path.join(webcore_dir, dir_name)
-    os.path.walk(dir_path, visitor, None)
-
-  database_dir = os.path.join(current_dir, '..', 'database')
-  return build_database(idl_files, database_dir)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/elemental/idl/scripts/elementaldomgenerator.py b/elemental/idl/scripts/elementaldomgenerator.py
deleted file mode 100755
index 7c55bed..0000000
--- a/elemental/idl/scripts/elementaldomgenerator.py
+++ /dev/null
@@ -1,164 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This is the entry point to create Elemental APIs from the IDL database."""
-
-import elementalgenerator
-import database
-import logging.config
-import optparse
-import os
-import shutil
-import subprocess
-import sys
-
-_logger = logging.getLogger('elementaldomgenerator')
-
-_webkit_renames = {
-    # W3C -> WebKit name conversion
-    # TODO(vsm): Maybe Store these renames in the IDLs.
-    'ApplicationCache': 'DOMApplicationCache',
-    'BarProp': 'BarInfo',
-    'DedicatedWorkerGlobalScope': 'DedicatedWorkerContext',
-    'FormData': 'DOMFormData',
-    'Selection': 'DOMSelection',
-    'SharedWorkerGlobalScope': 'SharedWorkerContext',
-    'Window': 'DOMWindow',
-    'WorkerGlobalScope': 'WorkerContext'}
-
-_html_strip_webkit_prefix_classes = [
-    'Animation',
-    'AnimationEvent',
-    'AnimationList',
-    'BlobBuilder',
-    'CSSKeyframeRule',
-    'CSSKeyframesRule',
-    'CSSMatrix',
-    'CSSTransformValue',
-    'Flags',
-    'LoseContext',
-    'Point',
-    'TransitionEvent']
-
-def HasAncestor(interface, names_to_match, database):
-  for parent in interface.parents:
-    if (parent.type.id in names_to_match or
-        (database.HasInterface(parent.type.id) and
-        HasAncestor(database.GetInterface(parent.type.id), names_to_match,
-            database))):
-      return True
-  return False
-
-def _MakeHtmlRenames(common_database):
-  html_renames = {}
-
-  for interface in common_database.GetInterfaces():
-    if (interface.id.startswith("HTML") and
-        HasAncestor(interface, ['Element', 'Document'], common_database)):
-      html_renames[interface.id] = interface.id[4:]
-
-  for subclass in _html_strip_webkit_prefix_classes:
-    html_renames['WebKit' + subclass] = subclass
-
-  # TODO(jacobr): we almost want to add this commented out line back.
-  #    html_renames['HTMLCollection'] = 'ElementList'
-  #    html_renames['NodeList'] = 'ElementList'
-  #    html_renames['HTMLOptionsCollection'] = 'ElementList'
-  html_renames['DOMWindow'] = 'Window'
-  html_renames['DOMSelection'] = 'Selection'
-  html_renames['DOMFormData'] = 'FormData'
-  html_renames['DOMApplicationCache'] = 'ApplicationCache'
-  html_renames['BarInfo'] = 'BarProp'
-  html_renames['DedicatedWorkerContext']='DedicatedWorkerGlobalScope'
-  html_renames['SharedWorkerContext']='SharedWorkerGlobalScope'
-  html_renames['WorkerContext']='WorkerGlobalScope'
-
-  return html_renames
-
-def GenerateDOM(systems, generate_html_systems, output_dir,
-                database_dir, use_database_cache):
-  current_dir = os.path.dirname(__file__)
-
-  generator = elementalgenerator.ElementalGenerator(
-      auxiliary_dir=os.path.join(current_dir, '..', 'src'),
-      template_dir=os.path.join(current_dir, '..', 'templates'),
-      base_package='')
-  generator.LoadAuxiliary()
-
-  common_database = database.Database(database_dir)
-  if use_database_cache:
-    common_database.LoadFromCache()
-  else:
-    common_database.Load()
-
-  generator.FilterMembersWithUnidentifiedTypes(common_database)
-  webkit_database = common_database.Clone()
-
-  # Generate Dart interfaces for the WebKit DOM.
-  generator.FilterInterfaces(database = webkit_database,
-                             or_annotations = ['WebKit', 'Dart'],
-                             exclude_displaced = ['WebKit'],
-                             exclude_suppressed = ['WebKit', 'Dart'])
-  generator.RenameTypes(webkit_database, _webkit_renames, True)
-  html_renames = _MakeHtmlRenames(common_database)
-  generator.RenameTypes(webkit_database, html_renames, True)
-
-  html_renames_inverse = dict((v,k) for k, v in html_renames.iteritems())
-  webkit_renames_inverse = dict((v,k) for k, v in _webkit_renames.iteritems())
-
-  generator.Generate(database = webkit_database,
-                     output_dir = output_dir,
-                     lib_dir = output_dir,
-                     module_source_preference = ['WebKit', 'Dart'],
-                     source_filter = ['WebKit', 'Dart'],
-                     super_database = common_database,
-                     common_prefix = 'common',
-                     super_map = webkit_renames_inverse,
-                     html_map = html_renames_inverse,
-                     systems = systems)
-
-  generator.Flush()
-
-def main():
-  parser = optparse.OptionParser()
-  parser.add_option('--systems', dest='systems',
-                    action='store', type='string',
-                    default='gwt,gwtjso',
-                    help='Systems to generate (gwt)')
-  parser.add_option('--output-dir', dest='output_dir',
-                    action='store', type='string',
-                    default=None,
-                    help='Directory to put the generated files')
-  parser.add_option('--use-database-cache', dest='use_database_cache',
-                    action='store_true',
-                    default=False,
-                    help='''Use the cached database from the previous run to
-                    improve startup performance''')
-  (options, args) = parser.parse_args()
-
-  current_dir = os.path.dirname(__file__)
-  systems = options.systems.split(',')
-  html_system_names = ['htmlgwt']
-  html_systems = [s for s in systems if s in html_system_names]
-  dom_systems = [s for s in systems if s not in html_system_names]
-
-  database_dir = os.path.join(current_dir, '..', 'database')
-  use_database_cache = options.use_database_cache
-  logging.config.fileConfig(os.path.join(current_dir, 'logging.conf'))
-
-  if dom_systems:
-    output_dir = options.output_dir or os.path.join(current_dir,
-        '../generated')
-    GenerateDOM(dom_systems, False, output_dir,
-                database_dir, use_database_cache)
-
-  if html_systems:
-    output_dir = options.output_dir or os.path.join(current_dir,
-        '../generated')
-    GenerateDOM(html_systems, True, output_dir,
-                database_dir, use_database_cache or dom_systems)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/elemental/idl/scripts/elementalgenerator.py b/elemental/idl/scripts/elementalgenerator.py
deleted file mode 100755
index a105c10..0000000
--- a/elemental/idl/scripts/elementalgenerator.py
+++ /dev/null
@@ -1,712 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module generates Elemental APIs from the IDL database."""
-
-import emitter
-import idlnode
-import logging
-import multiemitter
-import os
-import re
-import shutil
-from generator_java import *
-from systembaseelemental import *
-from systemgwt import *
-from systemgwtjso import *
-from templateloader import TemplateLoader
-
-_logger = logging.getLogger('elementalgenerator')
-
-def MergeNodes(node, other):
-  node.operations.extend(other.operations)
-  for attribute in other.attributes:
-    if not node.has_attribute(attribute):
-      node.attributes.append(attribute)
-
-  node.constants.extend(other.constants)
-
-class ElementalGenerator(object):
-  """Utilities to generate Elemental APIs and corresponding JavaScript."""
-
-  def __init__(self, auxiliary_dir, template_dir, base_package):
-    """Constructor for the DartGenerator.
-
-    Args:
-      auxiliary_dir -- location of auxiliary handwritten classes
-      template_dir -- location of template files
-      base_package -- the base package name for the generated code.
-    """
-    self._auxiliary_dir = auxiliary_dir
-    self._template_dir = template_dir
-    self._base_package = base_package
-    self._auxiliary_files = {}
-    self._dart_templates_re = re.compile(r'[\w.:]+<([\w\.<>:]+)>')
-
-    self._emitters = None  # set later
-
-
-  def _StripModules(self, type_name):
-    return type_name.split('::')[-1]
-
-  def _IsCompoundType(self, database, type_name):
-    if IsPrimitiveType(type_name):
-      return True
-
-    striped_type_name = self._StripModules(type_name)
-    if database.HasInterface(striped_type_name):
-      return True
-
-    dart_template_match = self._dart_templates_re.match(type_name)
-    if dart_template_match:
-      # Dart templates
-      parent_type_name = type_name[0 : dart_template_match.start(1) - 1]
-      sub_type_name = dart_template_match.group(1)
-      return (self._IsCompoundType(database, parent_type_name) and
-              self._IsCompoundType(database, sub_type_name))
-    return False
-
-  def _IsDartType(self, type_name):
-    return '.' in type_name
-
-  def LoadAuxiliary(self):
-    def Visitor(_, dirname, names):
-      for name in names:
-        if name.endswith('.dart'):
-          name = name[0:-5]  # strip off ".dart"
-        self._auxiliary_files[name] = os.path.join(dirname, name)
-    os.path.walk(self._auxiliary_dir, Visitor, None)
-
-  def RenameTypes(self, database, conversion_table, rename_javascript_binding_names):
-    """Renames interfaces using the given conversion table.
-
-    References through all interfaces will be renamed as well.
-
-    Args:
-      database: the database to apply the renames to.
-      conversion_table: maps old names to new names.
-    """
-
-    if conversion_table is None:
-      conversion_table = {}
-     
-    # Rename interfaces:
-    for old_name, new_name in conversion_table.items():
-      if database.HasInterface(old_name):
-        _logger.info('renaming interface %s to %s' % (old_name, new_name))
-        interface = database.GetInterface(old_name)
-        database.DeleteInterface(old_name)
-        if not database.HasInterface(new_name):
-          interface.id = new_name
-          database.AddInterface(interface)
-        else:
-          new_interface = database.GetInterface(new_name)
-          MergeNodes(new_interface, interface)
-        
-        if rename_javascript_binding_names:
-          interface.javascript_binding_name = new_name
-          interface.doc_js_name = new_name
-          for member in (interface.operations + interface.constants
-              + interface.attributes):
-            member.doc_js_interface_name = new_name
-
- 
-    # Fix references:
-    for interface in database.GetInterfaces():
-      for idl_type in interface.all(idlnode.IDLType):
-        type_name = self._StripModules(idl_type.id)
-        if type_name in conversion_table:
-          idl_type.id = conversion_table[type_name]
-
-  def FilterMembersWithUnidentifiedTypes(self, database):
-    """Removes unidentified types.
-
-    Removes constants, attributes, operations and parents with unidentified
-    types.
-    """
-
-    for interface in database.GetInterfaces():
-      def IsIdentified(idl_node):
-        node_name = idl_node.id if idl_node.id else 'parent'
-        for idl_type in idl_node.all(idlnode.IDLType):
-          type_name = idl_type.id
-          if (type_name is not None and
-              self._IsCompoundType(database, type_name)):
-            continue
-          _logger.warn('removing %s in %s which has unidentified type %s' %
-                       (node_name, interface.id, type_name))
-          return False
-        return True
-
-      interface.constants = filter(IsIdentified, interface.constants)
-      interface.attributes = filter(IsIdentified, interface.attributes)
-      interface.operations = filter(IsIdentified, interface.operations)
-      interface.parents = filter(IsIdentified, interface.parents)
-
-  def FilterInterfaces(self, database,
-                       and_annotations=[],
-                       or_annotations=[],
-                       exclude_displaced=[],
-                       exclude_suppressed=[]):
-    """Filters a database to remove interfaces and members that are missing
-    annotations.
-
-    The FremontCut IDLs use annotations to specify implementation
-    status in various platforms. For example, if a member is annotated
-    with @WebKit, this means that the member is supported by WebKit.
-
-    Args:
-      database -- the database to filter
-      all_annotations -- a list of annotation names a member has to
-        have or it will be filtered.
-      or_annotations -- if a member has one of these annotations, it
-        won't be filtered even if it is missing some of the
-        all_annotations.
-      exclude_displaced -- if a member has this annotation and it
-        is marked as displaced it will always be filtered.
-      exclude_suppressed -- if a member has this annotation and it
-        is marked as suppressed it will always be filtered.
-    """
-
-    # Filter interfaces and members whose annotations don't match.
-    for interface in database.GetInterfaces():
-      def HasAnnotations(idl_node):
-        """Utility for determining if an IDLNode has all
-        the required annotations"""
-        for a in exclude_displaced:
-          if (a in idl_node.annotations
-              and 'via' in idl_node.annotations[a]):
-            return False
-        for a in exclude_suppressed:
-          if (a in idl_node.annotations
-              and 'suppressed' in idl_node.annotations[a]):
-            return False
-        for a in or_annotations:
-          if a in idl_node.annotations:
-            return True
-        if and_annotations == []:
-          return False
-        for a in and_annotations:
-          if a not in idl_node.annotations:
-            return False
-        return True
-
-      if HasAnnotations(interface):
-        interface.constants = filter(HasAnnotations, interface.constants)
-        interface.attributes = filter(HasAnnotations, interface.attributes)
-        interface.operations = filter(HasAnnotations, interface.operations)
-        interface.parents = filter(HasAnnotations, interface.parents)
-      else:
-        database.DeleteInterface(interface.id)
-
-    self.FilterMembersWithUnidentifiedTypes(database)
-
-
-  def Generate(self, database, output_dir,
-               module_source_preference=[], source_filter=None,
-               super_database=None, common_prefix=None, super_map={},
-               html_map={}, lib_dir=None, systems=[]):
-    """Generates Dart and JS files for the loaded interfaces.
-
-    Args:
-      database -- database containing interfaces to generate code for.
-      output_dir -- directory to write generated files to.
-      module_source_preference -- priority order list of source annotations to
-        use when choosing a module name, if none specified uses the module name
-        from the database.
-      source_filter -- if specified, only outputs interfaces that have one of
-        these source annotation and rewrites the names of superclasses not
-        marked with this source to use the common prefix.
-      super_database -- database containing super interfaces that the generated
-        interfaces should extend.
-      common_prefix -- prefix for the common library, if any.
-      lib_file_path -- filename for generated .lib file, None if not required.
-      lib_template -- template file in this directory for generated lib file.
-    """
-  
-    self._emitters = multiemitter.MultiEmitter()
-    self._database = database
-    self._output_dir = output_dir
-
-    self._FixEventTargets()
-    self._ComputeInheritanceClosure()
-
-    self._systems = []
-
-    # TODO(jmesserly): only create these if needed
-    if ('gwtjso' in systems):
-      jso_system = ElementalJsoSystem(
-          TemplateLoader(self._template_dir, ['dom/jso', 'dom', '']),
-          self._database, self._emitters, self._output_dir)
-      self._systems.append(jso_system)
-    if ('gwt' in systems):
-      interface_system = ElementalInterfacesSystem(
-          TemplateLoader(self._template_dir, ['dom/interface', 'dom', '']),
-          self._database, self._emitters, self._output_dir)
-      self._systems.append(interface_system)
-
-#    if 'gwt' in systems:
-#      elemental_system = ElementalSystem(
-#          TemplateLoader(self._template_dir, ['dom/elemental', 'dom', '']),
-#          self._database, self._emitters, self._output_dir)
-
-#      elemental_system._interface_system = interface_system
-#      self._systems.append(elemental_system)
-
-
-
-    # Collect interfaces
-    interfaces = []
-    for interface in database.GetInterfaces():
-      if not MatchSourceFilter(source_filter, interface):
-        # Skip this interface since it's not present in the required source
-        _logger.info('Omitting interface - %s' % interface.id)
-        continue
-      interfaces.append(interface)
-
-    # TODO(sra): Use this list of exception names to generate information to
-    # tell Frog which exceptions can be passed from JS to Dart code.
-    exceptions = self._CollectExceptions(interfaces)
-
-    mixins = self._ComputeMixins(self._PreOrderInterfaces(interfaces))
-    for system in self._systems:
-      # give outputters a chance to see the mixin list before starting
-      system.ProcessMixins(mixins)
-
-    # copy all mixin methods from every interface to this base interface
-    self.PopulateMixinBase(self._database.GetInterface('ElementalMixinBase'), mixins)
-
-    # Render all interfaces into Dart and save them in files.
-    for interface in self._PreOrderInterfaces(interfaces):
-
-      super_interface = None
-      super_name = interface.id
-
-      if super_name in super_map:
-        super_name = super_map[super_name]
-
-      if (super_database is not None and
-          super_database.HasInterface(super_name)):
-        super_interface = super_name
-
-      interface_name = interface.id
-      auxiliary_file = self._auxiliary_files.get(interface_name)
-      if auxiliary_file is not None:
-        _logger.info('Skipping %s because %s exists' % (
-            interface_name, auxiliary_file))
-        continue
-      
-      info = RecognizeCallback(interface)
-      if info:
-        for system in self._systems:
-          system.ProcessCallback(interface, info)
-      else:
-        if 'Callback' in interface.ext_attrs:
-          _logger.info('Malformed callback: %s' % interface.id)
-        self._ProcessInterface(interface, super_interface,
-                               source_filter, common_prefix)
-
-    for system in self._systems:
-      system.Finish()
-
-  def PopulateMixinBase(self, mixinbase, mixins):
-    """Copy all mixin attributes and operations to mixin base class"""
-    for mixin_name in mixins:
-      if self._database.HasInterface(mixin_name):
-        mixin = self._database.GetInterface(mixin_name)
-        mixinbase.attributes.extend(mixin.attributes)
-        mixinbase.operations.extend(mixin.operations)
-        for extattr in mixin.ext_attrs.keys():
-          mixinbase.ext_attrs[extattr] = mixin.ext_attrs[extattr]
-
-  # compute all interfaces which are in disjoint type hierarchies
-  # that is, cannot be SingleImplJSO without hoisting      
-  def _ComputeMixins(self, interfaces):
-    implementors = {}
-    mixins = {}
-    parents = {}
-    # first compute the set of all inherited super-interfaces of every interface
-    for interface in interfaces:
-      if interface.parents:
-        # the first parent interface is the superclass
-        parent = interface.parents[0]
-        # if we haven't processed this one before
-        if not interface.id in parents:
-          # compute a list of all of the direct superclass this interface
-          parents[interface.id] = []
-          parents[interface.id].append(parent)
-          if parent.type.id in parents:
-            # inherit all the super-interfaces
-            parents[interface.id].extend(parents[parent.type.id])
-
-    implemented_by = None
-    for interface in interfaces:
-      # now, examining secondary interfaces 
-      for secondary in interface.parents[1:]:
-        if secondary.type.id in implementors:
-          implemented_by = implementors[secondary.type.id]
-          # if the interface is implemented by someone else who is not one of my parents, it is not SingleJsoImpl
-          if not implemented_by in parents[interface.id]:
-            mixins[secondary.type.id]=implemented_by
-            print "Mixin detected %s, previously implemented by %s, but also implemented by %s" % (secondary.type.id, implemented_by, interface.id)
-            # add all parents of the mixin as well
-            superparents = []
-            superiface = secondary.type.id
-            if self._database.HasInterface(superiface):
-              self.getParents(self._database.GetInterface(superiface), superparents)
-            for parent in superparents:
-              mixins[parent.id]=implemented_by
-              print "Super Mixin detected %s, previously implemented by %s, but also implemented by %s" % (parent.id, implemented_by, interface.id)
-
-        else:
-          implementors[secondary.type.id] = interface.id
-    # manual patch for outliers not picked up by this logic
-    mixins['ElementTimeControl']=1         
-    mixins['ElementTraversal']=1         
-    return mixins.keys()
-
-  def _PreOrderInterfaces(self, interfaces):
-    """Returns the interfaces in pre-order, i.e. parents first."""
-    seen = set()
-    ordered = []
-    def visit(interface):
-      if interface.id in seen:
-        return
-      seen.add(interface.id)
-      for parent in interface.parents:
-        if IsDartCollectionType(parent.type.id):
-          continue
-        if self._database.HasInterface(parent.type.id):
-          parent_interface = self._database.GetInterface(parent.type.id)
-          visit(parent_interface)
-      ordered.append(interface)
-
-    for interface in interfaces:
-      visit(interface)
-    return ordered
-
-
-  def _ProcessInterface(self, interface, super_interface_name,
-                        source_filter,
-                        common_prefix):
-    """."""
-    
-    _logger.info('Generating %s' % interface.id)
-
-    generators = [system.InterfaceGenerator(interface,
-                                            common_prefix,
-                                            super_interface_name,
-                                            source_filter)
-                  for system in self._systems]
-    generators = filter(None, generators)
-
-
-    mixinbase = self._database.GetInterface("ElementalMixinBase")
-    parentops = []
-    parentattrs = []
-
-
-    directParents = []
-    mixinOps = []
-    # compute the immediate parents of each interface (not including secondary interfaces)
-    self.getParents(interface, directParents)
-
-    # if not the mixin base, add its parents
-    if interface.id != 'ElementalMixinBase':
-      self.getParents(mixinbase, directParents)
-      # add the mixin base class itself as the parent of everything                                                                                                           
-      directParents.insert(0, mixinbase)
-
-    # for each parent interface
-    for pint in directParents:
-      for op in pint.operations:
-        # compute unique method signatures for each operation                                                                                                           :
-        op_name = op.ext_attrs.get('DartName', op.id)
-        sig = "%s %s(" % (op.type.id, op_name)
-        for arg in op.arguments:
-          sig += arg.type.id
-          parentops.append(sig)
-      for attr in pint.attributes:
-        # compute attributes                                                                                                             
-        if attr.is_fc_getter:
-          parentattrs.append("getter_" + DartDomNameOfAttribute(attr))
-        if attr.is_fc_setter:
-          parentattrs.append("setter_" + DartDomNameOfAttribute(attr))
-
-    for generator in generators:
-      generator.StartInterface()
-
-    for const in sorted(interface.constants, ConstantOutputOrder):
-      for generator in generators:
-        generator.AddConstant(const)
-
-    attributes = [attr for attr in interface.attributes]
-
-    for (getter, setter) in  _PairUpAttributes(attributes):
-      for generator in generators:
-        # detect if attribute is inherited (as opposed to just redeclared)                                                                                                             
-        inheritedGetter = ("getter_" + DartDomNameOfAttribute(getter)) in parentattrs
-        inheritedSetter = setter and ("setter_" + DartDomNameOfAttribute(setter)) in parentattrs
-        generator.AddAttribute(getter, setter, inheritedGetter, inheritedSetter)
-
-    # The implementation should define an indexer if the interface directly
-    # extends List.
-    element_type = MaybeListElementType(interface)
-    if element_type:
-      for generator in generators:
-        generator.AddIndexer(element_type)
-
-    # Generate operations
-    alreadyGenerated = []
-    for operation in interface.operations:
-      op_name = operation.ext_attrs.get('DartName', operation.id)
-      sig = "%s %s(" % (operation.type.id, op_name)
-      for arg in operation.arguments:
-        sig += arg.type.id
-      if sig in alreadyGenerated:
-        continue
-      alreadyGenerated.append(sig)
-
-      # hacks, should be able to compute this from IDL database
-      if operation.id == 'toString':
-        # implemented on JSO.toString()
-        continue
-      operations = []
-      operations.append(operation)
-      info = AnalyzeOperation(interface, operations)
-      for generator in generators:
-        # don't override stuff hoisted to mixin base in implementors
-        inherited = sig in parentops
-        if info.IsStatic():
-          generator.AddStaticOperation(info, inherited)
-        else:
-          generator.AddOperation(info, inherited)
-
-    # With multiple inheritance, attributes and operations of non-first
-    # interfaces need to be added.  Sometimes the attribute or operation is
-    # defined in the current interface as well as a parent.  In that case we
-    # avoid making a duplicate definition and pray that the signatures match.
-
-    for parent_interface in self._TransitiveSecondaryParents(interface):
-      if isinstance(parent_interface, str):  # IsDartCollectionType(parent_interface)
-        continue
-      attributes = [attr for attr in parent_interface.attributes
-                    if not FindMatchingAttribute(interface, attr)]
-      for (getter, setter) in _PairUpAttributes(attributes):
-        for generator in generators:
-          generator.AddSecondaryAttribute(parent_interface, getter, setter)
-
-      # Group overloaded operations by id
-      operationsById = {}
-      for operation in parent_interface.operations:
-        if operation.id not in operationsById:
-          operationsById[operation.id] = []
-        operationsById[operation.id].append(operation)
-
-      # Generate operations
-      for id in sorted(operationsById.keys()):
-        if not any(op.id == id for op in interface.operations):
-          operations = operationsById[id]
-          info = AnalyzeOperation(interface, operations)
-          for generator in generators:
-            generator.AddSecondaryOperation(parent_interface, info)
-
-    for generator in generators:
-      generator.FinishInterface()
-    return
-
-  def getParents(self, interface, results):
-    if interface.parents:
-      pid = interface.parents[0].type.id
-      if self._database.HasInterface(pid):
-        pint = self._database.GetInterface(interface.parents[0].type.id)
-        results.append(pint)
-        self.getParents(pint, results)
-    
-  def _TransitiveSecondaryParents(self, interface):
-    """Returns a list of all non-primary parents.
-
-    The list contains the interface objects for interfaces defined in the
-    database, and the name for undefined interfaces.
-    """
-    def walk(parents):
-      for parent in parents:
-        if IsDartCollectionType(parent.type.id):
-          result.append(parent.type.id)
-          continue
-        if self._database.HasInterface(parent.type.id):
-          parent_interface = self._database.GetInterface(parent.type.id)
-          result.append(parent_interface)
-          walk(parent_interface.parents)
-
-    result = []
-    walk(interface.parents[1:])
-    return result;
-
-
-  def _CollectExceptions(self, interfaces):
-    """Returns the names of all exception classes raised."""
-    exceptions = set()
-    for interface in interfaces:
-      for attribute in interface.attributes:
-        if attribute.get_raises:
-          exceptions.add(attribute.get_raises.id)
-        if attribute.set_raises:
-          exceptions.add(attribute.set_raises.id)
-      for operation in interface.operations:
-        if operation.raises:
-          exceptions.add(operation.raises.id)
-    return exceptions
-
-
-  def Flush(self):
-    """Write out all pending files."""
-    _logger.info('Flush...')
-    self._emitters.Flush()
-
-  def _FixEventTargets(self):
-    for interface in self._database.GetInterfaces():
-      # Create fake EventTarget parent interface for interfaces that have
-      # 'EventTarget' extended attribute.
-      if 'EventTarget' in interface.ext_attrs:
-        ast = [('Annotation', [('Id', 'WebKit')]),
-               ('InterfaceType', ('ScopedName', 'EventTarget'))]
-        interface.parents.append(idlnode.IDLParentInterface(ast))
-
-  def _ComputeInheritanceClosure(self):
-    def Collect(interface, seen, collected):
-      name = interface.id
-      if '<' in name:
-        # TODO(sra): Handle parameterized types.
-        return
-      if not name in seen:
-        seen.add(name)
-        collected.append(name)
-        for parent in interface.parents:
-          # TODO(sra): Handle parameterized types.
-          if not '<' in parent.type.id:
-            if self._database.HasInterface(parent.type.id):
-              Collect(self._database.GetInterface(parent.type.id),
-                      seen, collected)
-
-    self._inheritance_closure = {}
-    for interface in self._database.GetInterfaces():
-      seen = set()
-      collected = []
-      Collect(interface, seen, collected)
-      self._inheritance_closure[interface.id] = collected
-
-  def _AllImplementedInterfaces(self, interface):
-    """Returns a list of the names of all interfaces implemented by 'interface'.
-    List includes the name of 'interface'.
-    """
-    return self._inheritance_closure[interface.id]
-
-def _PairUpAttributes(attributes):
-  """Returns a list of (getter, setter) pairs sorted by name.
-
-  One element of the pair may be None.
-  """
-  names = sorted(set(attr.id for attr in attributes))
-  getters = {}
-  setters = {}
-  for attr in attributes:
-    if attr.is_fc_getter:
-      getters[attr.id] = attr
-    elif attr.is_fc_setter and 'Replaceable' not in attr.ext_attrs:
-      setters[attr.id] = attr
-  return [(getters.get(id), setters.get(id)) for id in names]
-
-# ------------------------------------------------------------------------------
-
-class DummyImplementationSystem(SystemElemental):
-  """Generates a dummy implementation for use by the editor analysis.
-
-  All the code comes from hand-written library files.
-  """
-
-  def __init__(self, templates, database, emitters, output_dir):
-    super(DummyImplementationSystem, self).__init__(
-        templates, database, emitters, output_dir)
-    factory_providers_file = os.path.join(self._output_dir, 'src', 'dummy',
-                                          'RegularFactoryProviders.dart')
-    self._factory_providers_emitter = self._emitters.FileEmitter(
-        factory_providers_file)
-    self._impl_file_paths = [factory_providers_file]
-
-  def InterfaceGenerator(self,
-                         interface,
-                         common_prefix,
-                         super_interface_name,
-                         source_filter):
-    return DummyInterfaceGenerator(self, interface)
-
-  def ProcessCallback(self, interface, info):
-    pass
-
-  def GenerateLibraries(self, lib_dir):
-    # Library generated for implementation.
-    self._GenerateLibFile(
-        'dom_dummy.darttemplate',
-        os.path.join(lib_dir, 'dom_dummy.dart'),
-        (self._interface_system._dart_interface_file_paths +
-         self._interface_system._dart_callback_file_paths +
-         self._impl_file_paths))
-
-
-# ------------------------------------------------------------------------------
-
-class DummyInterfaceGenerator(object):
-  """Generates dummy implementation."""
-
-  def __init__(self, system, interface):
-    self._system = system
-    self._interface = interface
-
-  def StartInterface(self):
-    # There is no implementation to match the interface, but there might be a
-    # factory constructor for the Dart interface.
-    constructor_info = AnalyzeConstructor(self._interface)
-    if constructor_info:
-      dart_interface_name = self._interface.id
-      self._EmitFactoryProvider(dart_interface_name, constructor_info)
-
-  def _EmitFactoryProvider(self, interface_name, constructor_info):
-    factory_provider = '_' + interface_name + 'FactoryProvider'
-    self._system._factory_providers_emitter.Emit(
-        self._system._templates.Load('factoryprovider.darttemplate'),
-        FACTORYPROVIDER=factory_provider,
-        CONSTRUCTOR=interface_name,
-        PARAMETERS=constructor_info.ParametersImplementationDeclaration())
-
-  def FinishInterface(self):
-    pass
-
-  def AddConstant(self, constant):
-    pass
-
-  def AddAttribute(self, getter, setter, inheritedGetter, inheritedSetter):
-    pass
-
-  def AddSecondaryAttribute(self, interface, getter, setter):
-    pass
-
-  def AddSecondaryOperation(self, interface, info):
-    pass
-
-  def AddIndexer(self, element_type):
-    pass
-
-  def AddTypedArrayConstructors(self, element_type):
-    pass
-
-  def AddOperation(self, info, inherited):
-    pass
-
-  def AddStaticOperation(self, info, inherited):
-    pass
-
-  def AddEventAttributes(self, event_attrs):
-    pass
diff --git a/elemental/idl/scripts/emitter.py b/elemental/idl/scripts/emitter.py
deleted file mode 100755
index 792458f..0000000
--- a/elemental/idl/scripts/emitter.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Templating to help generate structured text."""
-
-import logging
-import re
-
-_logger = logging.getLogger('emitter')
-
-
-def Format(template, **parameters):
-  """Create a string using the same template syntax as Emitter.Emit."""
-  e = Emitter()
-  e._Emit(template, parameters)
-  return ''.join(e.Fragments())
-
-
-class Emitter(object):
-  """An Emitter collects string fragments to be assembled into a single string.
-  """
-
-  def __init__(self, bindings=None):
-    self._items = []     # A new list
-    self._bindings = bindings or Emitter.Frame({}, None)
-
-  def EmitRaw(self, item):
-    """Emits literal string with no substitition."""
-    self._items.append(item)
-
-  def Emit(self, template_source, **parameters):
-    """Emits a template, substituting named parameters and returning emitters to
-    fill the named holes.
-
-    Ordinary substitution occurs at $NAME or $(NAME).  If there is no parameter
-    called NAME, the text is left as-is. So long as you don't bind FOO as a
-    parameter, $FOO in the template will pass through to the generated text.
-
-    Substitution of $?NAME and $(?NAME) yields an empty string if NAME is not a
-    parameter.
-
-    Values passed as named parameters should be strings or simple integral
-    values (int or long).
-
-    Named holes are created at $!NAME or $(!NAME).  A hole marks a position in
-    the template that may be filled in later.  An Emitter is returned for each
-    named hole in the template.  The holes are filled by emitting to the
-    corresponding emitter.
-
-    Emit returns either a single Emitter if the template contains one hole or a
-    tuple of emitters for several holes, in the order that the holes occur in
-    the template.
-
-    The emitters for the holes remember the parameters passed to the initial
-    call to Emit.  Holes can be used to provide a binding context.
-    """
-    return self._Emit(template_source, parameters)
-
-  def _Emit(self, template_source, parameters):
-    """Implementation of Emit, with map in place of named parameters."""
-    template = self._ParseTemplate(template_source)
-
-    parameter_bindings = self._bindings.Extend(parameters)
-
-    hole_names = template._holes
-
-    if hole_names:
-      hole_map = {}
-      replacements = {}
-      for name in hole_names:
-        emitter = Emitter(parameter_bindings)
-        replacements[name] = emitter._items
-        hole_map[name] = emitter
-      full_bindings = parameter_bindings.Extend(replacements)
-    else:
-      full_bindings = parameter_bindings
-
-    self._ApplyTemplate(template, full_bindings)
-
-    # Return None, a singleton or tuple of the hole names.
-    if not hole_names:
-      return None
-    if len(hole_names) == 1:
-      return hole_map[hole_names[0]]
-    else:
-      return tuple(hole_map[name] for name in hole_names)
-
-  def Fragments(self):
-    """Returns a list of all the string fragments emitted."""
-    def _FlattenTo(item, output):
-      if isinstance(item, list):
-        for subitem in item:
-          _FlattenTo(subitem, output)
-      elif isinstance(item, Emitter.DeferredLookup):
-        value = item._environment.Lookup(item._lookup._name,
-                                         item._lookup._value_if_missing)
-        _FlattenTo(value, output)
-      else:
-        output.append(str(item))
-
-    output = []
-    _FlattenTo(self._items, output)
-    return output
-
-  def Bind(self, var, template_source, **parameters):
-    """Adds a binding for var to this emitter."""
-    template = self._ParseTemplate(template_source)
-    if template._holes:
-      raise RuntimeError('Cannot have holes in Emitter.Bind')
-    bindings = self._bindings.Extend(parameters)
-    value = Emitter(bindings)
-    value._ApplyTemplate(template, bindings)
-    self._bindings = self._bindings.Extend({var: value._items})
-    return value
-
-  def _ParseTemplate(self, source):
-    """Converts the template string into a Template object."""
-    # TODO(sra): Cache the parsing.
-    items = []
-    holes = []
-
-    # Break source into a sequence of text fragments and substitution lookups.
-    pos = 0
-    while True:
-      match = Emitter._SUBST_RE.search(source, pos)
-      if not match:
-        items.append(source[pos:])
-        break
-      text_fragment = source[pos : match.start()]
-      if text_fragment:
-        items.append(text_fragment)
-      pos = match.end()
-      term = match.group()
-      name = match.group(1) or match.group(2)    # $NAME and $(NAME)
-      if name:
-        item = Emitter.Lookup(name, term, term)
-        items.append(item)
-        continue
-      name = match.group(3) or match.group(4)    # $!NAME and $(!NAME)
-      if name:
-        item = Emitter.Lookup(name, term, term)
-        items.append(item)
-        holes.append(name)
-        continue
-      name = match.group(5) or match.group(6)    # $?NAME and $(?NAME)
-      if name:
-        item = Emitter.Lookup(name, term, '')
-        items.append(item)
-        holes.append(name)
-        continue
-      raise RuntimeError('Unexpected group')
-
-    if len(holes) != len(set(holes)):
-      raise RuntimeError('Cannot have repeated holes %s' % holes)
-    return Emitter.Template(items, holes)
-
-  _SUBST_RE = re.compile(
-      #  $FOO    $(FOO)      $!FOO    $(!FOO)      $?FOO     $(?FOO)
-      r'\$(\w+)|\$\((\w+)\)|\$!(\w+)|\$\(!(\w+)\)|\$\?(\w+)|\$\(\?(\w+)\)')
-
-  def _ApplyTemplate(self, template, bindings):
-    """Emits the items from the parsed template."""
-    result = []
-    for item in template._items:
-      if isinstance(item, str):
-        if item:
-          result.append(item)
-      elif isinstance(item, Emitter.Lookup):
-        # Bind lookup to the current environment (bindings)
-        # TODO(sra): More space efficient to do direct lookup.
-        result.append(Emitter.DeferredLookup(item, bindings))
-      else:
-        raise RuntimeError('Unexpected template element')
-    # Collected fragments are in a sublist, so self._items contains one element
-    # (sublist) per template application.
-    self._items.append(result)
-
-  class Lookup(object):
-    """An element of a parsed template."""
-    def __init__(self, name, original, default):
-      self._name = name
-      self._original = original
-      self._value_if_missing = default
-
-  class DeferredLookup(object):
-    """A lookup operation that is deferred until final string generation."""
-    # TODO(sra): A deferred lookup will be useful when we add expansions that
-    # have behaviour condtional on the contents, e.g. adding separators between
-    # a list of items.
-    def __init__(self, lookup, environment):
-      self._lookup = lookup
-      self._environment = environment
-
-  class Template(object):
-    """A parsed template."""
-    def __init__(self, items, holes):
-      self._items = items  # strings and lookups
-      self._holes = holes
-
-
-  class Frame(object):
-    """A Frame is a set of bindings derived from a parent."""
-    def __init__(self, map, parent):
-      self._map = map
-      self._parent = parent
-
-    def Lookup(self, name, default):
-      if name in self._map:
-        return self._map[name]
-      if self._parent:
-        return self._parent.Lookup(name, default)
-      return default
-
-    def Extend(self, map):
-      return Emitter.Frame(map, self)
diff --git a/elemental/idl/scripts/emitter_test.py b/elemental/idl/scripts/emitter_test.py
deleted file mode 100755
index 8247e3f..0000000
--- a/elemental/idl/scripts/emitter_test.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Tests for emitter module."""
-
-import logging.config
-import unittest
-import emitter
-
-
-class EmitterTestCase(unittest.TestCase):
-
-  def setUp(self):
-    pass
-
-  def tearDown(self):
-    pass
-
-  def check(self, e, expected):
-    self.assertEquals(''.join(e.Fragments()), expected)
-
-  def testExample(self):
-    e = emitter.Emitter()
-    body = e.Emit('$TYPE $NAME() {\n'
-                  '  $!BODY\n'
-                  '}\n',
-                  TYPE='int', NAME='foo')
-    body.Emit('return $VALUE;', VALUE='100')
-    self.check(e,
-               'int foo() {\n'
-               '  return 100;\n'
-               '}\n')
-
-  def testTemplateErrorDuplicate(self):
-    try:
-      e = emitter.Emitter()
-      b = e.Emit('$(A)$(!B)$(A)$(!B)')   # $(!B) is duplicated
-    except RuntimeError, ex:
-      return
-    raise AssertionError('Expected error')
-
-  def testTemplate1(self):
-    e = emitter.Emitter()
-    e.Emit('-$A+$B-$A+$B-', A='1', B='2')
-    self.check(e, '-1+2-1+2-')
-
-  def testTemplate2(self):
-    e = emitter.Emitter()
-    r = e.Emit('1$(A)2$(B)3$(A)4$(B)5', A='x', B='y')
-    self.assertEquals(None, r)
-    self.check(e, '1x2y3x4y5')
-
-  def testTemplate3(self):
-    e = emitter.Emitter()
-    b = e.Emit('1$(A)2$(!B)3$(A)4$(B)5', A='x')
-    b.Emit('y')
-    self.check(e, '1x2y3x4y5')
-    self.check(b, 'y')
-
-  def testTemplate4(self):
-    e = emitter.Emitter()
-    (a, b) = e.Emit('$!A$!B$A$B')   # pair of holes.
-    a.Emit('x')
-    b.Emit('y')
-    self.check(e, 'xyxy')
-
-  def testMissing(self):
-    # Behaviour of Undefined parameters depends on form.
-    e = emitter.Emitter();
-    e.Emit('$A $?B $(C) $(?D)')
-    self.check(e, '$A  $(C) ')
-
-  def testHoleScopes(self):
-    e = emitter.Emitter()
-    # Holes have scope.  They remember the bindings of the template application
-    # in which they are created.  Create two holes which inherit bindings for C
-    # and D.
-    (a, b) = e.Emit('[$!A][$!B]$C$D$E', C='1', D='2')
-    e.Emit('  $A$B$C$D')  # Bindings are local to the Emit
-    self.check(e, '[][]12$E  $A$B$C$D')
-
-    # Holes are not bound within holes.  That would too easily lead to infinite
-    # expansions.
-    a.Emit('$A$C$D')   # $A12
-    b.Emit('$D$C$B')   # 21$B
-    self.check(e, '[$A12][21$B]12$E  $A$B$C$D')
-    # EmitRaw avoids interpolation.
-    a.EmitRaw('$C$D')
-    b.EmitRaw('$D$C')
-    self.check(e, '[$A12$C$D][21$B$D$C]12$E  $A$B$C$D')
-
-  def testFormat(self):
-    self.assertEquals(emitter.Format('$A$B', A=1, B=2), '12')
-
-if __name__ == '__main__':
-  logging.config.fileConfig('logging.conf')
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/generator_java.py b/elemental/idl/scripts/generator_java.py
deleted file mode 100644
index 4dbfb6f..0000000
--- a/elemental/idl/scripts/generator_java.py
+++ /dev/null
@@ -1,809 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module provides shared functionality for systems to generate
-Dart APIs from the IDL database."""
-
-import re
-import pdb
-
-_pure_interfaces = set([
-    'DOMStringMap',
-    'ElementTimeControl',
-    'ElementTraversal',
-    'MediaQueryListListener',
-    'NodeSelector',
-    'SVGExternalResourcesRequired',
-    'SVGFilterPrimitiveStandardAttributes',
-    'SVGFitToViewBox',
-    'SVGLangSpace',
-    'SVGLocatable',
-    'SVGStylable',
-    'SVGTests',
-    'SVGTransformable',
-    'SVGURIReference',
-    'SVGViewSpec',
-    'SVGZoomAndPan',
-    'TimeoutHandler'])
-
-def IsPureInterface(interface_name):
-  return interface_name in _pure_interfaces
-
-#
-# Renames for attributes that have names that are not legal Dart names.
-#
-_dart_attribute_renames = {
-    'default': 'defaultValue',
-    'final': 'finalValue',
-}
-
-#
-# Interface version of the DOM needs to delegate typed array constructors to a
-# factory provider.
-#
-interface_factories = {
-    'Float32Array': '_TypedArrayFactoryProvider',
-    'Float64Array': '_TypedArrayFactoryProvider',
-    'Int8Array': '_TypedArrayFactoryProvider',
-    'Int16Array': '_TypedArrayFactoryProvider',
-    'Int32Array': '_TypedArrayFactoryProvider',
-    'Uint8Array': '_TypedArrayFactoryProvider',
-    'Uint16Array': '_TypedArrayFactoryProvider',
-    'Uint32Array': '_TypedArrayFactoryProvider',
-    'Uint8ClampedArray': '_TypedArrayFactoryProvider',
-}
-
-#
-# Custom native specs for the Frog dom.
-#
-_frog_dom_custom_native_specs = {
-    # Decorate the singleton Console object, if present (workers do not have a
-    # console).
-    'Console': "=(typeof console == 'undefined' ? {} : console)",
-
-    # DOMWindow aliased with global scope.
-    'DOMWindow': '@*DOMWindow',
-}
-
-#
-# Custom native bodies for frog implementations of dom operations that appear in
-# dart:dom and dart:html.  This is used to work-around the lack of a 'rename'
-# feature in the 'native' string - the correct name is available on the DartName
-# extended attribute. See Issue 1814
-#
-dom_frog_native_bodies = {
-    # Some JavaScript processors, especially tools like yuicompress and
-    # JSCompiler, choke on 'this.continue'
-    'IDBCursor.continueFunction':
-      """
-        if (key == null) return this['continue']();
-        return this['continue'](key);
-      """,
-}
-
-def IsPrimitiveType(type_name):
-  return isinstance(GetIDLTypeInfo(type_name), PrimitiveIDLTypeInfo)
-
-def MaybeListElementTypeName(type_name):
-  """Returns the List element type T from string of form "List<T>", or None."""
-  match = re.match(r'sequence<(\w*)>$', type_name)
-  if match:
-    return match.group(1)
-  return None
-
-def MaybeListElementType(interface):
-  """Returns the List element type T, or None in interface does not implement
-  List<T>.
-  """
-  for parent in interface.parents:
-    element_type = MaybeListElementTypeName(parent.type.id)
-    if element_type:
-      return element_type
-  return None
-
-def MaybeTypedArrayElementType(interface):
-  """Returns the typed array element type, or None in interface is not a
-  TypedArray.
-  """
-  # Typed arrays implement ArrayBufferView and List<T>.
-  for parent in interface.parents:
-    if  parent.type.id == 'ArrayBufferView':
-      return MaybeListElementType(interface)
-  return None
-
-def MakeNativeSpec(javascript_binding_name):
-  if javascript_binding_name in _frog_dom_custom_native_specs:
-    return _frog_dom_custom_native_specs[javascript_binding_name]
-  else:
-    # Make the class 'hidden' so it is dynamically patched at runtime.  This
-    # is useful not only for browser compat, but to allow code that links
-    # against dart:dom to load in a worker isolate.
-    return '*' + javascript_binding_name
-
-
-def MatchSourceFilter(filter, thing):
-  if not filter:
-    return True
-  else:
-    return any(token in thing.annotations for token in filter)
-
-
-def DartType(idl_type_name):
-  return GetIDLTypeInfo(idl_type_name).dart_type()
-
-def JsType(idl_type_name):
-  return GetIDLTypeInfo(idl_type_name).js_type()
-
-
-class ParamInfo(object):
-  """Holder for various information about a parameter of a Dart operation.
-
-  Attributes:
-    name: Name of parameter.
-    type_id: Original type id.  None for merged types.
-    dart_type: DartType of parameter.
-    default_value: String holding the expression.  None for mandatory parameter.
-  """
-  def __init__(self, name, type_id, dart_type, default_value, interface):
-    self.name = name
-    self.type_id = type_id
-    self.dart_type = dart_type
-    self.default_value = default_value
-    self.interface = interface
-
-
-# Given a list of overloaded arguments, render a dart argument.
-def _DartArg(args, interface):
-  # Given a list of overloaded arguments, choose a suitable name.
-  def OverloadedName(args):
-    return '_OR_'.join(sorted(set(arg.id for arg in args)))
-
-  # Given a list of overloaded arguments, choose a suitable type.
-  def OverloadedType(args):
-    type_ids = sorted(set(arg.type.id for arg in args))
-    dart_types = sorted(set(DartType(arg.type.id) for arg in args))
-    if len(dart_types) == 1:
-      if len(type_ids) == 1:
-        return (type_ids[0], dart_types[0])
-      else:
-        return (None, dart_types[0])
-    else:
-      return (None, TypeName(type_ids, interface))
-
-  filtered = filter(None, args)
-  optional = any(not arg or arg.is_optional for arg in args)
-  (type_id, dart_type) = OverloadedType(filtered)
-  name = OverloadedName(filtered)
-  if optional:
-    return ParamInfo(name, type_id, dart_type, None, interface)
-  else:
-    return ParamInfo(name, type_id, dart_type, None, interface)
-
-
-def AnalyzeOperation(interface, operations):
-  """Makes operation calling convention decision for a set of overloads.
-
-  Returns: An OperationInfo object.
-  """
-
-  # Zip together arguments from each overload by position, then convert
-  # to a dart argument.
-  args = map(lambda *args: _DartArg(args, interface),
-             *(op.arguments for op in operations))
-
-  info = OperationInfo()
-  info.interface = interface
-  info.overloads = operations
-  info.declared_name = operations[0].id
-  info.name = operations[0].ext_attrs.get('DartName', info.declared_name)
-  info.js_name = info.declared_name
-  info.type_name = DartType(operations[0].type.id)   # TODO: widen.
-  info.param_infos = args
-  info.arguments = operations[0].arguments
-  return info
-
-
-def AnalyzeConstructor(interface):
-  """Returns an OperationInfo object for the constructor.
-
-  Returns None if the interface has no Constructor.
-  """
-  def GetArgs(func_value):
-    return map(lambda arg: _DartArg([arg], interface), func_value.arguments)
-
-  if 'Constructor' in interface.ext_attrs:
-    name = None
-    func_value = interface.ext_attrs.get('Constructor')
-    if func_value:
-      # [Constructor(param,...)]
-      args = GetArgs(func_value)
-      idl_args = func_value.arguments
-    else: # [Constructor]
-      args = []
-      idl_args = []
-  else:
-    func_value = interface.ext_attrs.get('NamedConstructor')
-    if func_value:
-      name = func_value.id
-      args = GetArgs(func_value)
-      idl_args = func_value.arguments
-    else:
-      return None
-
-  info = OperationInfo()
-  info.overloads = None
-  info.idl_args = idl_args
-  info.declared_name = name
-  info.name = name
-  info.js_name = name
-  info.type_name = interface.id
-  info.param_infos = args
-  return info
-
-
-def RecognizeCallback(interface):
-  """Returns the info for the callback method if the interface smells like a
-  callback.
-  """
-  if 'Callback' not in interface.ext_attrs: return None
-  handlers = [op for op in interface.operations if op.id == 'handleEvent']
-  if not handlers: return None
-  if not (handlers == interface.operations): return None
-  return AnalyzeOperation(interface, handlers)
-
-def IsDartListType(type):
-  return type == 'List' or type.startswith('sequence<')
-
-def IsDartCollectionType(type):
-  return IsDartListType(type)
-
-def FindMatchingAttribute(interface, attr1):
-  matches = [attr2 for attr2 in interface.attributes
-             if attr1.id == attr2.id
-             and attr1.is_fc_getter == attr2.is_fc_getter
-             and attr1.is_fc_setter == attr2.is_fc_setter]
-  if matches:
-    assert len(matches) == 1
-    return matches[0]
-  return None
-
-
-def DartDomNameOfAttribute(attr):
-  """Returns the Dart name for an IDLAttribute.
-
-  attr.id is the 'native' or JavaScript name.
-
-  To ensure uniformity, work with the true IDL name until as late a possible,
-  e.g. translate to the Dart name when generating Dart code.
-  """
-  name = attr.id
-  name = _dart_attribute_renames.get(name, name)
-  name = attr.ext_attrs.get('DartName', None) or name
-  return name
-
-
-def TypeOrNothing(dart_type, info):
-  """Returns string for declaring something with |dart_type| in a context
-  where a type may be omitted.
-  The string is empty or has a trailing space.
-  """
-  # hack until over-loaded callback issue is fixed
-  if dart_type == 'Dynamic' or info is not None and info.interface == 'DatabaseCallback':
-      return 'Object '
-  else:
-    return dart_type + ' '
-
-def NameOrEntry(param, database):
-  """Returns either the name of the param, or a $entry wrapper"""
-  if param.type_id.endswith('Callback') or param.type_id.endswith('Handler'):
-    argtype = database.GetInterface(param.type_id)
-    op = argtype.operations[0]
-    jsniArgs = []
-    for arg in op.arguments:
-      if database.HasInterface(arg.type.id):
-        argface = database.GetInterface(arg.type.id)
-        # HACK: this interface is overloaded, we should fix the IDL or detect overloaded callbacks automatically
-        if param.type_id == 'DatabaseCallback' and (argface.id == 'Database' or argface.id == 'DatabaseSync'):
-          jsniArgs.append("Ljava/lang/Object;")
-        else:
-          jsniArgs.append("Lelemental/%s/%s;" % (getModule(argface.annotations), DartType(arg.type.id)))
-
-      else:
-        jsniArgs.append(primitives[DartType(arg.type.id)])
-
-    return "$entry(%s.@elemental.%s.%s::on%s(%s)).bind(%s)" % (param.name, getModule(argtype.annotations), argtype.id, argtype.id,  ''.join(jsniArgs), param.name)
-  else:
-    return param.name
-
-def TypeOrVar(dart_type, comment=None):
-    return dart_type
-
-def JsoTypeOrVar(dart_type, mixins):
-    if dart_type.endswith("Handler") or dart_type.endswith("Callback") or dart_type in mixins:
-      return dart_type
-    if dart_type[0].isupper() and not dart_type.startswith("Js") and not dart_type in java_lang:
-      return "Js" + dart_type
-    return dart_type
-
-
-class OperationInfo(object):
-  """Holder for various derived information from a set of overloaded operations.
-
-  Attributes:
-    overloads: A list of IDL operation overloads with the same name.
-    name: A string, the simple name of the operation.
-    type_name: A string, the name of the return type of the operation.
-    param_infos: A list of ParamInfo.
-  """
-
-  def ParametersInterfaceDeclaration(self):
-    """Returns a formatted string declaring the parameters for the interface."""
-    return self._FormatParams(
-        self.param_infos, True,
-        lambda param: TypeOrNothing(param.dart_type, param))
-
-  def ParametersImplementationDeclaration(self, rename_type=None):
-    """Returns a formatted string declaring the parameters for the
-    implementation.
-
-    Args:
-      rename_type: A function that allows the types to be renamed.
-        The function is applied to the parameter's dart_type.
-    """
-    if rename_type:
-      def renamer(param_info):
-        return TypeOrNothing(rename_type(param_info.dart_type), param_info)
-      return self._FormatParams(self.param_infos, False, renamer)
-    else:
-      def type_fn(param_info):
-        if param_info.dart_type == 'Dynamic':
-          if param_info.type_id:
-            # It is more informative to use a comment IDL type.
-            return 'Object'
-          else:
-            return 'Object'
-        else:
-          return param_info.dart_type
-      return self._FormatParams(
-          self.param_infos, False,
-          lambda param: TypeOrNothing(param.dart_type, param))
-
-  def ParametersAsArgumentList(self, database):
-    """Returns a string of the parameter names suitable for passing the
-    parameters as arguments.
-    """
-    return ', '.join(map(lambda param_info: NameOrEntry(param_info, database), self.param_infos))
-
-  def _FormatParams(self, params, is_interface, type_fn):
-    def FormatParam(param):
-      """Returns a parameter declaration fragment for an ParamInfo."""
-      type = type_fn(param)
-      if is_interface or param.default_value is None:
-        return '%s%s' % (type, param.name)
-      else:
-        return '%s%s = %s' % (type, param.name, param.default_value)
-
-    required = []
-    optional = []
-    for param_info in params:
-      if param_info.default_value:
-        optional.append(param_info)
-      else:
-        if optional:
-          raise Exception('Optional parameters cannot precede required ones: '
-                          + str(args))
-        required.append(param_info)
-    argtexts = map(FormatParam, required)
-    if optional:
-      argtexts.append(', '.join(map(FormatParam, optional)))
-    return ', '.join(argtexts)
-
-  def IsStatic(self):
-    is_static = self.overloads[0].is_static
-    assert any([is_static == o.is_static for o in self.overloads])
-    return is_static
-
-
-def AttributeOutputOrder(a, b):
-  """Canonical output ordering for attributes."""
-    # Getters before setters:
-  if a.id < b.id: return -1
-  if a.id > b.id: return 1
-  if a.is_fc_setter < b.is_fc_setter: return -1
-  if a.is_fc_setter > b.is_fc_setter: return 1
-  return 0
-
-def ConstantOutputOrder(a, b):
-  """Canonical output ordering for constants."""
-  if a.id < b.id: return -1
-  if a.id > b.id: return 1
-  return 0
-
-
-def _FormatNameList(names):
-  """Returns JavaScript array literal expression with one name per line."""
-  #names = sorted(names)
-  if len(names) <= 1:
-    expression_string = str(names)  # e.g.  ['length']
-  else:
-    expression_string = ',\n   '.join(str(names).split(','))
-    expression_string = expression_string.replace('[', '[\n    ')
-  return expression_string
-
-
-def IndentText(text, indent):
-  """Format lines of text with indent."""
-  def FormatLine(line):
-    if line.strip():
-      return '%s%s\n' % (indent, line)
-    else:
-      return '\n'
-  return ''.join(FormatLine(line) for line in text.split('\n'))
-
-# Given a sorted sequence of type identifiers, return an appropriate type
-# name
-def TypeName(type_ids, interface):
-  # Dynamically type this field for now.
-  return 'Dynamic'
-
-# ------------------------------------------------------------------------------
-
-class IDLTypeInfo(object):
-  def __init__(self, idl_type, dart_type=None,
-               native_type=None,
-               custom_to_native=False,
-               custom_to_dart=False, conversion_includes=[],
-               js_type = None):
-    self._idl_type = idl_type
-    self._dart_type = dart_type
-    self._native_type = native_type
-    self._custom_to_native = custom_to_native
-    self._custom_to_dart = custom_to_dart
-    self._conversion_includes = conversion_includes + [idl_type]
-    self._js_type = js_type
-
-  def idl_type(self):
-    return self._idl_type
-
-  def dart_type(self):
-    return self._dart_type or self._idl_type
-
-  def js_type(self):
-    return self._js_type or self._idl_type
-
-  def native_type(self):
-    return self._native_type or self._idl_type
-
-  def emit_to_native(self, emitter, idl_node, name, handle, interface_name):
-    if 'Callback' in idl_node.ext_attrs:
-      if 'RequiredCppParameter' in idl_node.ext_attrs:
-        flag = 'DartUtilities::ConvertNullToDefaultValue'
-      else:
-        flag = 'DartUtilities::ConvertNone'
-      emitter.Emit(
-        '\n'
-        '        RefPtr<$TYPE> $NAME = Dart$IDL_TYPE::create($HANDLE, $FLAG, exception);\n'
-        '        if (exception)\n'
-        '            goto fail;\n',
-        TYPE=self.native_type(),
-        NAME=name,
-        IDL_TYPE=self.idl_type(),
-        HANDLE=handle,
-        FLAG=flag)
-      return name
-
-    argument = name
-    if self.custom_to_native():
-      type = 'RefPtr<%s>' % self.native_type()
-      argument = '%s.get()' % name
-    else:
-      type = '%s*' % self.native_type()
-      if isinstance(self, SVGTearOffIDLTypeInfo) and not interface_name.endswith('List'):
-        argument = '%s->propertyReference()' % name
-    emitter.Emit(
-        '\n'
-        '        $TYPE $NAME = Dart$IDL_TYPE::toNative($HANDLE, exception);\n'
-        '        if (exception)\n'
-        '            goto fail;\n',
-        TYPE=type,
-        NAME=name,
-        IDL_TYPE=self.idl_type(),
-        HANDLE=handle)
-    return argument
-
-  def custom_to_native(self):
-    return self._custom_to_native
-
-  def parameter_type(self):
-    return '%s*' % self.native_type()
-
-  def webcore_includes(self):
-    WTF_INCLUDES = [
-        'ArrayBuffer',
-        'ArrayBufferView',
-        'Float32Array',
-        'Float64Array',
-        'Int8Array',
-        'Int16Array',
-        'Int32Array',
-        'Uint8Array',
-        'Uint16Array',
-        'Uint32Array',
-        'Uint8ClampedArray',
-    ]
-
-    if self._idl_type in WTF_INCLUDES:
-      return ['<wtf/%s.h>' % self.native_type()]
-
-    if not self._idl_type.startswith('SVG'):
-      return ['"%s.h"' % self.native_type()]
-
-    if self._idl_type in ['SVGNumber', 'SVGPoint']:
-      return ['"SVGPropertyTearOff.h"']
-    if self._idl_type.startswith('SVGPathSeg'):
-      include = self._idl_type.replace('Abs', '').replace('Rel', '')
-    else:
-      include = self._idl_type
-    return ['"%s.h"' % include] + _svg_supplemental_includes
-
-  def receiver(self):
-    return 'receiver->'
-
-  def conversion_includes(self):
-    return ['"Dart%s.h"' % include for include in self._conversion_includes]
-
-  def to_dart_conversion(self, value, interface_name=None, attributes=None):
-    return 'Dart%s::toDart(%s)' % (self._idl_type, value)
-
-  def custom_to_dart(self):
-    return self._custom_to_dart
-
-
-class SequenceIDLTypeInfo(IDLTypeInfo):
-  def __init__(self, idl_type, item_info):
-    super(SequenceIDLTypeInfo, self).__init__(idl_type)
-    self._item_info = item_info
-
-  def dart_type(self):
-    etype = self._item_info.dart_type()
-    if etype == 'int':
-      return "IndexableInt"
-    elif etype == 'float' or etype == 'double':
-      return "IndexableNumber"
-    return "Indexable"
-# TODO(cromwellian) fix when generic SingleJsoImpl JSOs are fixed
-#   return 'Indexable<%s>' % self._item_info.dart_type()
-
-  def to_dart_conversion(self, value, interface_name=None, attributes=None):
-    return 'DartDOMWrapper::vectorToDart<Dart%s>(%s)' % (self._item_info.native_type(), value)
-
-  def conversion_includes(self):
-    return self._item_info.conversion_includes()
-
-
-class PrimitiveIDLTypeInfo(IDLTypeInfo):
-  def __init__(self, idl_type, dart_type, native_type=None,
-               webcore_getter_name='getAttribute',
-               webcore_setter_name='setAttribute'):
-    super(PrimitiveIDLTypeInfo, self).__init__(idl_type, dart_type=dart_type,
-        native_type=native_type)
-    self._webcore_getter_name = webcore_getter_name
-    self._webcore_setter_name = webcore_setter_name
-
-  def emit_to_native(self, emitter, idl_node, name, handle, interface_name):
-    arguments = [handle]
-    if idl_node.ext_attrs.get('Optional') == 'DefaultIsNullString' or 'RequiredCppParameter' in idl_node.ext_attrs:
-      arguments.append('DartUtilities::ConvertNullToDefaultValue')
-    emitter.Emit(
-        '\n'
-        '        const ParameterAdapter<$TYPE> $NAME($ARGUMENTS);\n'
-        '        if (!$NAME.conversionSuccessful()) {\n'
-        '            exception = $NAME.exception();\n'
-        '            goto fail;\n'
-        '        }\n',
-        TYPE=self.native_type(),
-        NAME=name,
-        ARGUMENTS=', '.join(arguments))
-    return name
-
-  def parameter_type(self):
-    if self.native_type() == 'String':
-      return 'const String&'
-    return self.native_type()
-
-  def conversion_includes(self):
-    return []
-
-  def to_dart_conversion(self, value, interface_name=None, attributes=None):
-    conversion_arguments = [value]
-    if attributes and 'TreatReturnedNullStringAs' in attributes:
-      conversion_arguments.append('DartUtilities::ConvertNullToDefaultValue')
-    function_name = re.sub(r' [a-z]', lambda x: x.group(0)[1:].upper(), self.native_type())
-    function_name = function_name[0].lower() + function_name[1:]
-    function_name = 'DartUtilities::%sToDart' % function_name
-    return '%s(%s)' % (function_name, ', '.join(conversion_arguments))
-
-  def webcore_getter_name(self):
-    return self._webcore_getter_name
-
-  def webcore_setter_name(self):
-    return self._webcore_setter_name
-
-class SVGTearOffIDLTypeInfo(IDLTypeInfo):
-  def __init__(self, idl_type, native_type=''):
-    super(SVGTearOffIDLTypeInfo, self).__init__(idl_type,
-                                                native_type=native_type)
-
-  def native_type(self):
-    if self._native_type:
-      return self._native_type
-    tear_off_type = 'SVGPropertyTearOff'
-    if self._idl_type.endswith('List'):
-      tear_off_type = 'SVGListPropertyTearOff'
-    return '%s<%s>' % (tear_off_type, self._idl_type)
-
-  def receiver(self):
-    if self._idl_type.endswith('List'):
-      return 'receiver->'
-    return 'receiver->propertyReference().'
-
-  def to_dart_conversion(self, value, interface_name, attributes):
-    svg_primitive_types = ['SVGAngle', 'SVGLength', 'SVGMatrix',
-        'SVGNumber', 'SVGPoint', 'SVGRect', 'SVGTransform']
-    conversion_cast = '%s::create(%s)'
-    if interface_name.startswith('SVGAnimated'):
-      conversion_cast = 'static_cast<%s*>(%s)'
-    elif self.idl_type() == 'SVGStringList':
-      conversion_cast = '%s::create(receiver, %s)'
-    elif interface_name.endswith('List'):
-      conversion_cast = 'static_cast<%s*>(%s.get())'
-    elif self.idl_type() in svg_primitive_types:
-      conversion_cast = '%s::create(%s)'
-    else:
-      conversion_cast = 'static_cast<%s*>(%s)'
-    conversion_cast = conversion_cast % (self.native_type(), value)
-    return 'Dart%s::toDart(%s)' %  (self._idl_type, conversion_cast)
-
-_idl_type_registry = {
-    'boolean': PrimitiveIDLTypeInfo('boolean', dart_type='boolean', native_type='bool',
-                                    webcore_getter_name='hasAttribute',
-                                    webcore_setter_name='setBooleanAttribute'),
-    'short': PrimitiveIDLTypeInfo('short', dart_type='short', native_type='short'),
-    'unsigned short': PrimitiveIDLTypeInfo('unsigned short', dart_type='int',
-        native_type='int'),
-    'int': PrimitiveIDLTypeInfo('int', dart_type='int'),
-    'unsigned int': PrimitiveIDLTypeInfo('unsigned int', dart_type='int',
-        native_type='unsigned'),
-    'long': PrimitiveIDLTypeInfo('long', dart_type='int', native_type='int',
-        webcore_getter_name='getIntegralAttribute',
-        webcore_setter_name='setIntegralAttribute'),
-    'unsigned long': PrimitiveIDLTypeInfo('unsigned long', dart_type='int',
-        native_type='unsigned',
-        webcore_getter_name='getUnsignedIntegralAttribute',
-        webcore_setter_name='setUnsignedIntegralAttribute'),
-    'long long': PrimitiveIDLTypeInfo('long long', dart_type='double'),
-    'unsigned long long': PrimitiveIDLTypeInfo('unsigned long long', dart_type='double'),
-    'float': PrimitiveIDLTypeInfo('float', dart_type='float', native_type='double'),
-    'double': PrimitiveIDLTypeInfo('double', dart_type='double'),
-
-    'any': PrimitiveIDLTypeInfo('any', dart_type='Object'),
-    'any[]': PrimitiveIDLTypeInfo('any[]', dart_type='Indexable'),
-    'Array': PrimitiveIDLTypeInfo('Array', dart_type='Indexable'),
-    'custom': PrimitiveIDLTypeInfo('custom', dart_type='Object'),
-    'Date': PrimitiveIDLTypeInfo('Date', dart_type='Date', native_type='double'),
-    'DOMObject': PrimitiveIDLTypeInfo('DOMObject', dart_type='Object', native_type='ScriptValue'),
-    'DOMString': PrimitiveIDLTypeInfo('DOMString', dart_type='String', native_type='String'),
-    # TODO(vsm): This won't actually work until we convert the Map to
-    # a native JS Map for JS DOM.
-    'Dictionary': PrimitiveIDLTypeInfo('Dictionary', dart_type='Mappable'),
-    # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool}
-    # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interface
-    'Flags': PrimitiveIDLTypeInfo('Flags', dart_type='Object'),
-    'DOMTimeStamp': PrimitiveIDLTypeInfo('DOMTimeStamp', dart_type='double', native_type='unsigned long long'),
-    'object': PrimitiveIDLTypeInfo('object', dart_type='Object', native_type='ScriptValue'),
-    # TODO(sra): Come up with some meaningful name so that where this appears in
-    # the documentation, the user is made aware that only a limited subset of
-    # serializable types are actually permitted.
-    'SerializedScriptValue': PrimitiveIDLTypeInfo('SerializedScriptValue', dart_type='Object'),
-    # TODO(sra): Flags is really a dictionary: {create:bool, exclusive:bool}
-    # http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interface
-    'WebKitFlags': PrimitiveIDLTypeInfo('WebKitFlags', dart_type='Object'),
-
-    'sequence': PrimitiveIDLTypeInfo('sequence', dart_type='Indexable'),
-    'void': PrimitiveIDLTypeInfo('void', dart_type='void'),
-
-    'CSSRule': IDLTypeInfo('CSSRule', conversion_includes=['CSSImportRule']),
-    'DOMException': IDLTypeInfo('DOMException', native_type='DOMCoreException'),
-#    'DOMStringList': IDLTypeInfo('DOMStringList', dart_type='Indexable<String>', custom_to_native=True),
-    'DOMStringList': IDLTypeInfo('DOMStringList', dart_type='Indexable', custom_to_native=True),
-#    'DOMStringMap': IDLTypeInfo('DOMStringMap', dart_type='Mappable<String>'),
-    'DOMStringMap': IDLTypeInfo('DOMStringMap', dart_type='Mappable'),
-    'DOMWindow': IDLTypeInfo('DOMWindow', custom_to_dart=True),
-    'Element': IDLTypeInfo('Element', custom_to_dart=True),
-    'EventListener': IDLTypeInfo('EventListener', custom_to_native=True),
-    'EventTarget': IDLTypeInfo('EventTarget', custom_to_native=True),
-    'HTMLElement': IDLTypeInfo('HTMLElement', custom_to_dart=True),
-    'IDBAny': IDLTypeInfo('IDBAny', dart_type='Object', custom_to_native=True),
-    'IDBKey': IDLTypeInfo('IDBKey', dart_type='Object', custom_to_native=True),
-    'StyleSheet': IDLTypeInfo('StyleSheet', conversion_includes=['CSSStyleSheet']),
-    'SVGElement': IDLTypeInfo('SVGElement', custom_to_dart=True),
-
-    'SVGAngle': SVGTearOffIDLTypeInfo('SVGAngle'),
-    'SVGLength': SVGTearOffIDLTypeInfo('SVGLength'),
-    'SVGLengthList': SVGTearOffIDLTypeInfo('SVGLengthList'),
-    'SVGMatrix': SVGTearOffIDLTypeInfo('SVGMatrix'),
-    'SVGNumber': SVGTearOffIDLTypeInfo('SVGNumber', native_type='SVGPropertyTearOff<float>'),
-    'SVGNumberList': SVGTearOffIDLTypeInfo('SVGNumberList'),
-    'SVGPathSegList': SVGTearOffIDLTypeInfo('SVGPathSegList', native_type='SVGPathSegListPropertyTearOff'),
-    'SVGPoint': SVGTearOffIDLTypeInfo('SVGPoint', native_type='SVGPropertyTearOff<FloatPoint>'),
-    'SVGPointList': SVGTearOffIDLTypeInfo('SVGPointList'),
-    'SVGPreserveAspectRatio': SVGTearOffIDLTypeInfo('SVGPreserveAspectRatio'),
-    'SVGRect': SVGTearOffIDLTypeInfo('SVGRect', native_type='SVGPropertyTearOff<FloatRect>'),
-    'SVGStringList': SVGTearOffIDLTypeInfo('SVGStringList', native_type='SVGStaticListPropertyTearOff<SVGStringList>'),
-    'SVGTransform': SVGTearOffIDLTypeInfo('SVGTransform'),
-    'SVGTransformList': SVGTearOffIDLTypeInfo('SVGTransformList', native_type='SVGTransformListPropertyTearOff'),
-    'PeerConnection00': IDLTypeInfo('PeerConnection00', js_type='webkitPeerConnection00'),
-    'AudioContext': IDLTypeInfo('AudioContext', js_type='webkitAudioContext'),
-    'AudioPannerNode': IDLTypeInfo('AudioPannerNode', js_type='webkitAudioPannerNode'),
-    'IDBCursor': IDLTypeInfo('IDBCursor', js_type='webkitIDBCursor'),
-    'IDBDatabase': IDLTypeInfo('IDBDatabase', js_type='webkitIDBDatabase'),
-    'IDBDatabaseFactory': IDLTypeInfo('IDBDatabaseRactory', js_type='webkitIDBDatabaseFactory'),
-    'IDBFactory': IDLTypeInfo('IDBFactory', js_type='webkitIDBFactory'),
-    'IDBIndex': IDLTypeInfo('IDBIndex', js_type='webkitIDBIndex'),
-    'IDBKeyRange': IDLTypeInfo('IDBKeyRange', js_type='webkitIDBKeyRange'),
-    'IDBObjectStore': IDLTypeInfo('IDBObjectStore', js_type='webkitIDBObjectStore'),
-    'IDBRequest': IDLTypeInfo('IDBRequest', js_type='webkitIDBRequest'),
-    'IDBTransaction': IDLTypeInfo('IDBTransaction', js_type='webkitIDBTransaction'),
-    'IndexedDB': IDLTypeInfo('IndexedDB', js_type='webkitIndexedDB'),
-    'Intent': IDLTypeInfo('Intent', js_type='webkitIntent'),
-    'MediaStream': IDLTypeInfo('MediaStream', js_type='webkitMediaStream'),
-    'URL': IDLTypeInfo('URL', js_type='webkitURL'),
-    'ShadowRoot': IDLTypeInfo('ShadowRoot', js_type='WebKitShadowRoot'),
-    'BlobBuilder': IDLTypeInfo('BlobBuilder', js_type='WebKitBlobBuilder'),
-}
-
-
-_svg_supplemental_includes = [
-    '"SVGAnimatedPropertyTearOff.h"',
-    '"SVGAnimatedListPropertyTearOff.h"',
-    '"SVGStaticListPropertyTearOff.h"',
-    '"SVGAnimatedListPropertyTearOff.h"',
-    '"SVGTransformListPropertyTearOff.h"',
-    '"SVGPathSegListPropertyTearOff.h"',
-]
-
-def GetIDLTypeInfo(idl_type_name):
-  match = re.match(r'sequence<(\w+)>$', idl_type_name)
-  if match:
-    return SequenceIDLTypeInfo(idl_type_name, GetIDLTypeInfo(match.group(1)))
-  return _idl_type_registry.get(idl_type_name, IDLTypeInfo(idl_type_name))
-
-
-def getModule(annotations):
-  htmlaliases = ['audio', 'webaudio', 'inspector', 'offline', 'p2p', 'window', 'websockets', 'threads', 'view', 'storage', 'fileapi']
-
-  module = "dom"
-  if 'WebKit' in annotations and 'module' in annotations['WebKit']:
-    module = annotations['WebKit']['module']
-  if module in  htmlaliases:
-    return "html"
-  if module == 'core':
-    return 'dom'
-  return module
-
-java_lang = ['Object', 'String', 'Exception', 'DOMTimeStamp', 'DOMString', 'Date']
-
-primitives = {
-  'int' : 'I',
-  'short' : 'S',
-  'float' : 'F',
-  'double' : 'D',
-  'byte' : 'B',
-  'char' : 'C',
-  'long' : 'L',
-  'boolean' : 'Z',
-  'String' : 'Ljava/lang/String;',
-  'Object' : 'Ljava/lang/Object;'
-}
diff --git a/elemental/idl/scripts/idlnode.py b/elemental/idl/scripts/idlnode.py
deleted file mode 100755
index 921bf56..0000000
--- a/elemental/idl/scripts/idlnode.py
+++ /dev/null
@@ -1,500 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import sys
-
-
-class IDLNode(object):
-  """Base class for all IDL elements.
-  IDLNode may contain various child nodes, and have properties. Examples
-  of IDLNode are modules, interfaces, interface members, function arguments,
-  etc.
-  """
-
-  def __init__(self, ast):
-    """Initializes an IDLNode from a PegParser AST output."""
-    self.id = self._find_first(ast, 'Id') if ast is not None else None
-
-  def __repr__(self):
-    """Generates string of the form <class id extra extra ... 0x12345678>."""
-    extras = self._extra_repr()
-    if isinstance(extras, list):
-      extras = ' '.join([str(e) for e in extras])
-    try:
-      if self.id:
-        return '<%s %s 0x%x>' % (
-            type(self).__name__,
-            ('%s %s' % (self.id, extras)).strip(),
-            hash(self))
-      return '<%s %s 0x%x>' % (
-          type(self).__name__,
-          extras,
-          hash(self))
-    except Exception, e:
-      return "can't convert to string: %s" % e
-
-  def _extra_repr(self):
-    """Returns string of extra info for __repr__()."""
-    return ''
-
-  def __cmp__(self, other):
-    """Override default compare operation.
-    IDLNodes are equal if all their properties are equal."""
-    if other is None or not isinstance(other, IDLNode):
-      return 1
-    return self.__dict__.__cmp__(other.__dict__)
-
-  def all(self, type_filter=None):
-    """Returns a list containing this node and all it child nodes
-    (recursive).
-
-    Args:
-      type_filter -- can be used to limit the results to a specific
-        node type (e.g. IDLOperation).
-    """
-    res = []
-    if type_filter is None or isinstance(self, type_filter):
-      res.append(self)
-    for v in self._all_subnodes():
-      if isinstance(v, IDLNode):
-        res.extend(v.all(type_filter))
-      elif isinstance(v, list):
-        for item in v:
-          if isinstance(item, IDLNode):
-            res.extend(item.all(type_filter))
-    return res
-
-  def _all_subnodes(self):
-    """Accessor used by all() to find subnodes."""
-    return self.__dict__.values()
-
-  def to_dict(self):
-    """Converts the IDLNode and its children into a dictionary.
-    This method is useful mostly for debugging and pretty printing.
-    """
-    res = {}
-    for (k, v) in self.__dict__.items():
-      if v == None or v == False or v == [] or v == {}:
-        # Skip empty/false members.
-        continue
-      elif isinstance(v, IDLDictNode) and not len(v):
-        # Skip empty dict sub-nodes.
-        continue
-      elif isinstance(v, list):
-        # Convert lists:
-        new_v = []
-        for sub_node in v:
-          if isinstance(sub_node, IDLNode):
-            # Convert sub-node:
-            new_v.append(sub_node.to_dict())
-          else:
-            new_v.append(sub_node)
-        v = new_v
-      elif isinstance(v, IDLNode):
-        # Convert sub-node:
-        v = v.to_dict()
-      res[k] = v
-    return res
-
-  def _find_all(self, ast, label, max_results=sys.maxint):
-    """Searches the AST for tuples with a given label. The PegParser
-    output is composed of lists and tuples, where the tuple 1st argument
-    is a label. If ast root is a list, will search recursively inside each
-    member in the list.
-
-    Args:
-      ast -- the AST to search.
-      label -- the label to look for.
-      res -- results are put into this list.
-      max_results -- maximum number of results.
-    """
-    res = []
-    if max_results <= 0:
-      return res
-
-    if isinstance(ast, list):
-      for childAst in ast:
-        sub_res = self._find_all(childAst, label,
-                     max_results - len(res))
-        res.extend(sub_res)
-    elif isinstance(ast, tuple):
-      (nodeLabel, value) = ast
-      if nodeLabel == label:
-        res.append(value)
-    return res
-
-  def _find_first(self, ast, label):
-    """Convenience method for _find_all(..., max_results=1).
-    Returns a single element instead of a list, or None if nothing
-    is found."""
-    res = self._find_all(ast, label, max_results=1)
-    if len(res):
-      return res[0]
-    return None
-
-  def _has(self, ast, label):
-    """Returns true if an element with the given label is
-    in the AST by searching for it."""
-    return len(self._find_all(ast, label, max_results=1)) == 1
-
-  def _convert_all(self, ast, label, idlnode_ctor):
-    """Converts AST elements into IDLNode elements.
-    Uses _find_all to find elements with a given label and converts
-    them into IDLNodes with a given constructor.
-    Returns:
-      A list of the converted nodes.
-    Args:
-      ast -- the ast element to start a search at.
-      label -- the element label to look for.
-      idlnode_ctor -- a constructor function of one of the IDLNode
-        sub-classes.
-    """
-    res = []
-    found = self._find_all(ast, label)
-    if not found:
-      return res
-    if not isinstance(found, list):
-      raise RuntimeError("Expected list but %s found" % type(found))
-    for childAst in found:
-      converted = idlnode_ctor(childAst)
-      res.append(converted)
-    return res
-
-  def _convert_first(self, ast, label, idlnode_ctor):
-    """Like _convert_all, but only converts the first found results."""
-    childAst = self._find_first(ast, label)
-    if not childAst:
-      return None
-    return idlnode_ctor(childAst)
-
-  def _convert_ext_attrs(self, ast):
-    """Helper method for uniform conversion of extended attributes."""
-    self.ext_attrs = IDLExtAttrs(ast)
-
-  def _convert_annotations(self, ast):
-    """Helper method for uniform conversion of annotations."""
-    self.annotations = IDLAnnotations(ast)
-
-
-class IDLDictNode(IDLNode):
-  """Base class for dictionary-like IDL nodes such as extended attributes
-  and annotations. The base class implements various dict interfaces."""
-
-  def __init__(self, ast):
-    IDLNode.__init__(self, None)
-    if ast is not None and isinstance(ast, dict):
-      self.__map = ast
-    else:
-      self.__map = {}
-
-  def __len__(self):
-    return len(self.__map)
-
-  def __getitem__(self, key):
-    return self.__map[key]
-
-  def __setitem__(self, key, value):
-    self.__map[key] = value
-
-  def __delitem__(self, key):
-    del self.__map[key]
-
-  def __contains__(self, key):
-    return key in self.__map
-
-  def __iter__(self):
-    return self.__map.__iter__()
-
-  def get(self, key, default=None):
-    return self.__map.get(key, default)
-
-  def items(self):
-    return self.__map.items()
-
-  def keys(self):
-    return self.__map.keys()
-
-  def values(self):
-    return self.__map.values()
-
-  def clear(self):
-    self.__map = {}
-
-  def to_dict(self):
-    """Overrides the default IDLNode.to_dict behavior.
-    The IDLDictNode members are copied into a new dictionary, and
-    IDLNode members are recursively converted into dicts as well.
-    """
-    res = {}
-    for (k, v) in self.__map.items():
-      if isinstance(v, IDLNode):
-        v = v.to_dict()
-      res[k] = v
-    return res
-
-  def _all_subnodes(self):
-    # Usually an IDLDictNode does not contain further IDLNodes.
-    return []
-
-
-class IDLFile(IDLNode):
-  """IDLFile is the top-level node in each IDL file. It may contain
-  modules or interfaces."""
-
-  def __init__(self, ast, filename=None):
-    IDLNode.__init__(self, ast)
-    self.filename = filename
-    self.modules = self._convert_all(ast, 'Module', IDLModule)
-    self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
-
-
-class IDLModule(IDLNode):
-  """IDLModule has an id, and may contain interfaces, type defs and
-  implements statements."""
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self._convert_ext_attrs(ast)
-    self._convert_annotations(ast)
-    self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
-    self.typeDefs = self._convert_all(ast, 'TypeDef', IDLTypeDef)
-    self.implementsStatements = self._convert_all(ast, 'ImplStmt',
-      IDLImplementsStatement)
-
-
-class IDLExtAttrs(IDLDictNode):
-  """IDLExtAttrs is an IDLDictNode that stores IDL Extended Attributes.
-  Modules, interfaces, members and arguments can all own IDLExtAttrs."""
-  def __init__(self, ast=None):
-    IDLDictNode.__init__(self, None)
-    if not ast:
-      return
-    ext_attrs_ast = self._find_first(ast, 'ExtAttrs')
-    if not ext_attrs_ast:
-      return
-    for ext_attr in self._find_all(ext_attrs_ast, 'ExtAttr'):
-      name = self._find_first(ext_attr, 'Id')
-      value = self._find_first(ext_attr, 'ExtAttrValue')
-
-      func_value = self._find_first(value, 'ExtAttrFunctionValue')
-      if func_value:
-        # E.g. NamedConstructor=Audio(in [Optional] DOMString src)
-        self[name] = IDLExtAttrFunctionValue(
-            func_value,
-            self._find_first(func_value, 'ExtAttrArgList'))
-        continue
-
-      ctor_args = not value and self._find_first(ext_attr, 'ExtAttrArgList')
-      if ctor_args:
-        # E.g. Constructor(Element host)
-        self[name] = IDLExtAttrFunctionValue(None, ctor_args)
-        continue
-
-      self[name] = value
-
-  def _all_subnodes(self):
-    # Extended attributes may contain IDLNodes, e.g. IDLExtAttrFunctionValue
-    return self.values()
-
-
-class IDLExtAttrFunctionValue(IDLNode):
-  """IDLExtAttrFunctionValue."""
-  def __init__(self, func_value_ast, arg_list_ast):
-    IDLNode.__init__(self, func_value_ast)
-    self.arguments = self._convert_all(arg_list_ast, 'Argument', IDLArgument)
-
-
-class IDLType(IDLNode):
-  """IDLType is used to describe constants, attributes and operations'
-  return and input types. IDLType matches AST labels such as ScopedName,
-  StringType, VoidType, IntegerType, etc."""
-
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    # Search for a 'ScopedName' or any label ending with 'Type'.
-    if isinstance(ast, list):
-      self.id = self._find_first(ast, 'ScopedName')
-      if not self.id:
-        # FIXME: use regexp search instead
-        for childAst in ast:
-          (label, childAst) = childAst
-          if label.endswith('Type'):
-            self.id = self._label_to_type(label, ast)
-            break
-    elif isinstance(ast, tuple):
-      (label, value) = ast
-      if label == 'ScopedName':
-        self.id = value
-      else:
-        self.id = self._label_to_type(label, ast)
-    elif isinstance(ast, str):
-      self.id = ast
-    if not self.id:
-      raise SyntaxError('Could not parse type %s' % (ast))
-
-  def _label_to_type(self, label, ast):
-    if label == 'AnyArrayType':
-      return 'any[]'
-    if label == 'DOMStringArrayType':
-      return 'DOMString[]'
-    if label == 'LongLongType':
-      label = 'long long'
-    elif label.endswith('Type'):
-      # Omit 'Type' suffix and lowercase the rest.
-      label = '%s%s' % (label[0].lower(), label[1:-4])
-
-    # Add unsigned qualifier.
-    if self._has(ast, 'Unsigned'):
-      label = 'unsigned %s' % label
-    return label
-
-
-class IDLTypeDef(IDLNode):
-  """IDLNode for 'typedef [type] [id]' declarations."""
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self._convert_annotations(ast)
-    self.type = self._convert_first(ast, 'Type', IDLType)
-
-
-class IDLInterface(IDLNode):
-  """IDLInterface node contains operations, attributes, constants,
-  as well as parent references."""
-
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self._convert_ext_attrs(ast)
-    self._convert_annotations(ast)
-    self.parents = self._convert_all(ast, 'ParentInterface',
-      IDLParentInterface)
-    self.javascript_binding_name = self.id
-    self.doc_js_name = self.id
-    self.operations = self._convert_all(ast, 'Operation', 
-      lambda ast: IDLOperation(ast, self.doc_js_name))
-    self.attributes = self._convert_all(ast, 'Attribute',
-      lambda ast: IDLAttribute(ast, self.doc_js_name))
-    self.constants = self._convert_all(ast, 'Const',
-      lambda ast: IDLConstant(ast, self.doc_js_name))
-    self.is_supplemental = 'Supplemental' in self.ext_attrs
-    self.is_no_interface_object = 'NoInterfaceObject' in self.ext_attrs
-    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs
-
-  def has_attribute(self, candidate):
-    for attribute in self.attributes:
-      if (attribute.id == candidate.id and
-          attribute.is_fc_getter == candidate.is_fc_getter and
-          attribute.is_fc_setter == candidate.is_fc_setter):
-        return True
-    return False
-
-
-class IDLParentInterface(IDLNode):
-  """This IDLNode specialization is for 'Interface Child : Parent {}'
-  declarations."""
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self._convert_annotations(ast)
-    self.type = self._convert_first(ast, 'InterfaceType', IDLType)
-
-
-class IDLMember(IDLNode):
-  """A base class for constants, attributes and operations."""
-
-  def __init__(self, ast, doc_js_interface_name):
-    IDLNode.__init__(self, ast)
-    self.type = self._convert_first(ast, 'Type', IDLType)
-    self._convert_ext_attrs(ast)
-    self._convert_annotations(ast)
-    self.doc_js_interface_name = doc_js_interface_name
-    self.is_fc_suppressed = 'Suppressed' in self.ext_attrs
-    self.is_static = self._has(ast, 'Static')
-
-
-class IDLOperation(IDLMember):
-  """IDLNode specialization for 'type name(args)' declarations."""
-  def __init__(self, ast, doc_js_interface_name):
-    IDLMember.__init__(self, ast, doc_js_interface_name)
-    self.type = self._convert_first(ast, 'ReturnType', IDLType)
-    self.arguments = self._convert_all(ast, 'Argument', IDLArgument)
-    self.raises = self._convert_first(ast, 'Raises', IDLType)
-    self.specials = self._find_all(ast, 'Special')
-    self.is_stringifier = self._has(ast, 'Stringifier')
-  def _extra_repr(self):
-    return [self.arguments]
-
-
-class IDLAttribute(IDLMember):
-  """IDLNode specialization for 'attribute type name' declarations."""
-  def __init__(self, ast, doc_js_interface_name):
-    IDLMember.__init__(self, ast, doc_js_interface_name)
-    self.is_read_only = self._has(ast, 'ReadOnly')
-    # There are various ways to define exceptions for attributes:
-    self.raises = self._convert_first(ast, 'Raises', IDLType)
-    self.get_raises = self.raises \
-      or self._convert_first(ast, 'GetRaises', IDLType)
-    self.set_raises = self.raises \
-      or self._convert_first(ast, 'SetRaises', IDLType)
-    # FremontCut IDL syntax defines getters and setters separately:
-    self.is_fc_getter = self._has(ast, 'AttrGetter')
-    self.is_fc_setter = self._has(ast, 'AttrSetter')
-  def _extra_repr(self):
-    extra = []
-    if self.is_fc_getter: extra.append('get')
-    if self.is_fc_setter: extra.append('set')
-    if self.is_read_only: extra.append('readonly')
-    if self.raises: extra.append('raises')
-    return extra
-
-class IDLConstant(IDLMember):
-  """IDLNode specialization for 'const type name = value' declarations."""
-  def __init__(self, ast, doc_js_interface_name):
-    IDLMember.__init__(self, ast, doc_js_interface_name)
-    self.value = self._find_first(ast, 'ConstExpr')
-
-
-class IDLArgument(IDLNode):
-  """IDLNode specialization for operation arguments."""
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self.type = self._convert_first(ast, 'Type', IDLType)
-    self._convert_ext_attrs(ast)
-    # WebKit and Web IDL differ in how Optional is declared:
-    self.is_optional = self._has(ast, 'Optional') \
-      or ('Optional' in self.ext_attrs)
-
-
-class IDLImplementsStatement(IDLNode):
-  """IDLNode specialization for 'X implements Y' declarations."""
-  def __init__(self, ast):
-    IDLNode.__init__(self, ast)
-    self.implementor = self._convert_first(ast, 'ImplStmtImplementor',
-      IDLType)
-    self.implemented = self._convert_first(ast, 'ImplStmtImplemented',
-      IDLType)
-
-
-class IDLAnnotations(IDLDictNode):
-  """IDLDictNode specialization for a list of FremontCut annotations."""
-  def __init__(self, ast=None):
-    IDLDictNode.__init__(self, ast)
-    self.id = None
-    if not ast:
-      return
-    for annotation in self._find_all(ast, 'Annotation'):
-      name = self._find_first(annotation, 'Id')
-      value = IDLAnnotation(annotation)
-      self[name] = value
-
-
-class IDLAnnotation(IDLDictNode):
-  """IDLDictNode specialization for one annotation."""
-  def __init__(self, ast=None):
-    IDLDictNode.__init__(self, ast)
-    self.id = None
-    if not ast:
-      return
-    for arg in self._find_all(ast, 'AnnotationArg'):
-      name = self._find_first(arg, 'Id')
-      value = self._find_first(arg, 'AnnotationArgValue')
-      self[name] = value
diff --git a/elemental/idl/scripts/idlnode_test.py b/elemental/idl/scripts/idlnode_test.py
deleted file mode 100755
index 1230de3..0000000
--- a/elemental/idl/scripts/idlnode_test.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import idlnode
-import idlparser
-import logging.config
-import sys
-import unittest
-
-
-class IDLNodeTestCase(unittest.TestCase):
-
-  def _run_test(self, syntax, content, expected):
-    """Utility run tests and prints extra contextual information.
-
-    Args:
-      syntax -- IDL grammar to use (either idlparser.WEBKIT_SYNTAX,
-        WEBIDL_SYNTAX or FREMONTCUT_SYNTAX). If None, will run
-        multiple tests, each with a different syntax.
-      content -- input text for the parser.
-      expected -- expected parse result.
-    """
-    if syntax is None:
-      self._run_test(idlparser.WEBIDL_SYNTAX, content, expected)
-      self._run_test(idlparser.WEBKIT_SYNTAX, content, expected)
-      self._run_test(idlparser.FREMONTCUT_SYNTAX, content, expected)
-      return
-
-    actual = None
-    error = None
-    ast = None
-    parseResult = None
-    try:
-      parser = idlparser.IDLParser(syntax)
-      ast = parser.parse(content)
-      node = idlnode.IDLFile(ast)
-      actual = node.to_dict() if node else None
-    except SyntaxError, e:
-      error = e
-      pass
-    if actual == expected:
-      return
-    else:
-      msg = '''
-SYNTAX  : %s
-CONTENT :
-%s
-EXPECTED:
-%s
-ACTUAL  :
-%s
-ERROR   : %s
-AST   :
-%s
-      ''' % (syntax, content, expected, actual, error, ast)
-      self.fail(msg)
-
-  def test_empty_module(self):
-    self._run_test(
-      None,
-      'module TestModule {};',
-      {'modules': [{'id': 'TestModule'}]})
-
-  def test_empty_interface(self):
-    self._run_test(
-      None,
-      'module TestModule { interface Interface1 {}; };',
-      {'modules': [{'interfaces': [{'javascript_binding_name': 'Interface1', 'doc_js_name': 'Interface1', 'id': 'Interface1'}], 'id': 'TestModule'}]})
-
-  def test_gcc_preprocessor(self):
-    self._run_test(
-      idlparser.WEBKIT_SYNTAX,
-      '#if 1\nmodule TestModule {};\n#endif\n',
-      {'modules': [{'id': 'TestModule'}]})
-
-  def test_extended_attributes(self):
-    self._run_test(
-      idlparser.WEBKIT_SYNTAX,
-      'module M { interface [ExAt1, ExAt2] I {};};',
-      {'modules': [{'interfaces': [{'javascript_binding_name': 'I', 'doc_js_name': 'I', 'ext_attrs': {'ExAt1': None, 'ExAt2': None}, 'id': 'I'}], 'id': 'M'}]})
-
-  def test_implements_statement(self):
-    self._run_test(
-      idlparser.WEBIDL_SYNTAX,
-      'module M { X implements Y; };',
-      {'modules': [{'implementsStatements': [{'implementor': {'id': 'X'}, 'implemented': {'id': 'Y'}}], 'id': 'M'}]})
-
-  def test_attributes(self):
-    self._run_test(
-      idlparser.WEBIDL_SYNTAX,
-      '''interface I {
-        attribute long a1;
-        readonly attribute DOMString a2;
-        attribute any a3;
-      };''',
-      {'interfaces': [{'javascript_binding_name': 'I', 'attributes': [{'type': {'id': 'long'}, 'id': 'a1', 'doc_js_interface_name': 'I'}, {'type': {'id': 'DOMString'}, 'is_read_only': True, 'id': 'a2', 'doc_js_interface_name': 'I'}, {'type': {'id': 'any'}, 'id': 'a3', 'doc_js_interface_name': 'I'}], 'id': 'I', 'doc_js_name': 'I'}]})
-
-  def test_operations(self):
-    self._run_test(
-      idlparser.WEBIDL_SYNTAX,
-      '''interface I {
-        [ExAttr] t1 op1();
-        t2 op2(in int arg1, in long arg2);
-        getter any item(in long index);
-        stringifier name();
-      };''',
-      {'interfaces': [{'operations': [{'doc_js_interface_name': 'I', 'type': {'id': 't1'}, 'ext_attrs': {'ExAttr': None}, 'id': 'op1'}, {'doc_js_interface_name': 'I', 'type': {'id': 't2'}, 'id': 'op2', 'arguments': [{'type': {'id': 'int'}, 'id': 'arg1'}, {'type': {'id': 'long'}, 'id': 'arg2'}]}, {'specials': ['getter'], 'doc_js_interface_name': 'I', 'type': {'id': 'any'}, 'id': 'item', 'arguments': [{'type': {'id': 'long'}, 'id': 'index'}]}, {'is_stringifier': True, 'type': {'id': 'name'}, 'doc_js_interface_name': 'I'}], 'javascript_binding_name': 'I', 'id': 'I', 'doc_js_name': 'I'}]})
-
-  def test_constants(self):
-    self._run_test(
-      None,
-      '''interface I {
-        const long c1 = 0;
-        const long c2 = 1;
-        const long c3 = 0x01;
-        const long c4 = 10;
-        const boolean b1 = false;
-        const boolean b2 = true;
-      };''',
-      {'interfaces': [{'javascript_binding_name': 'I', 'doc_js_name': 'I', 'id': 'I', 'constants': [{'type': {'id': 'long'}, 'id': 'c1', 'value': '0', 'doc_js_interface_name': 'I'}, {'type': {'id': 'long'}, 'id': 'c2', 'value': '1', 'doc_js_interface_name': 'I'}, {'type': {'id': 'long'}, 'id': 'c3', 'value': '0x01', 'doc_js_interface_name': 'I'}, {'type': {'id': 'long'}, 'id': 'c4', 'value': '10', 'doc_js_interface_name': 'I'}, {'type': {'id': 'boolean'}, 'id': 'b1', 'value': 'false', 'doc_js_interface_name': 'I'}, {'type': {'id': 'boolean'}, 'id': 'b2', 'value': 'true', 'doc_js_interface_name': 'I'}]}]})
-
-  def test_annotations(self):
-    self._run_test(
-      idlparser.FREMONTCUT_SYNTAX,
-      '@Ano1 @Ano2() @Ano3(x=1) @Ano4(x,y=2) interface I {};',
-      {'interfaces': [{'javascript_binding_name': 'I', 'doc_js_name': 'I', 'id': 'I', 'annotations': {'Ano4': {'y': '2', 'x': None}, 'Ano1': {}, 'Ano2': {}, 'Ano3': {'x': '1'}}}]})
-    self._run_test(
-      idlparser.FREMONTCUT_SYNTAX,
-      '''interface I : @Ano1 J {
-        @Ano2 attribute int someAttr;
-        @Ano3 void someOp();
-        @Ano3 const int someConst = 0;
-      };''',
-      {'interfaces': [{'operations': [{'annotations': {'Ano3': {}}, 'type': {'id': 'void'}, 'id': 'someOp', 'doc_js_interface_name': 'I'}], 'javascript_binding_name': 'I', 'parents': [{'type': {'id': 'J'}, 'annotations': {'Ano1': {}}}], 'attributes': [{'annotations': {'Ano2': {}}, 'type': {'id': 'int'}, 'id': 'someAttr', 'doc_js_interface_name': 'I'}], 'doc_js_name': 'I', 'id': 'I', 'constants': [{'annotations': {'Ano3': {}}, 'type': {'id': 'int'}, 'id': 'someConst', 'value': '0', 'doc_js_interface_name': 'I'}]}]})
-
-  def test_inheritance(self):
-    self._run_test(
-      None,
-      'interface Shape {}; interface Rectangle : Shape {}; interface Square : Rectangle, Shape {};',
-      {'interfaces': [{'javascript_binding_name': 'Shape', 'doc_js_name': 'Shape', 'id': 'Shape'}, {'javascript_binding_name': 'Rectangle', 'doc_js_name': 'Rectangle', 'parents': [{'type': {'id': 'Shape'}}], 'id': 'Rectangle'}, {'javascript_binding_name': 'Square', 'doc_js_name': 'Square', 'parents': [{'type': {'id': 'Rectangle'}}, {'type': {'id': 'Shape'}}], 'id': 'Square'}]})
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/idlparser.dart b/elemental/idl/scripts/idlparser.dart
deleted file mode 100644
index d9c5219..0000000
--- a/elemental/idl/scripts/idlparser.dart
+++ /dev/null
@@ -1,549 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IDL grammar variants.
-final int WEBIDL_SYNTAX = 0;
-final int WEBKIT_SYNTAX = 1;
-final int FREMONTCUT_SYNTAX = 2;
-
-/**
- * IDLFile is the top-level node in each IDL file. It may contain modules or
- * interfaces.
- */
-class IDLFile extends IDLNode {
-
-  String filename;
-  List<IDLModule> modules;
-  List<IDLInterface> interfaces;
-
-  IDLFile(this.filename, this.modules, this.interfaces);
-}
-
-/**
- * IDLModule has an id, and may contain interfaces, type defs andimplements
- * statements.
- */
-class IDLModule extends IDLNode {
-  String id;
-  List interfaces;
-  List typedefs;
-  List implementsStatements;
-
-  IDLModule(String this.id, IDLExtAttrs extAttrs, IDLAnnotations annotations,
-            List<IDLNode> elements) {
-    setExtAttrs(extAttrs);
-    this.annotations = annotations;
-    this.interfaces = elements.filter((e) => e is IDLInterface);
-    this.typedefs = elements.filter((e) => e is IDLTypeDef);
-    this.implementsStatements =
-        elements.filter((e) => e is IDLImplementsStatement);
-  }
-
-  toString() => '<IDLModule $id $extAttrs $annotations>';
-}
-
-class IDLNode {
-  IDLExtAttrs extAttrs;
-  IDLAnnotations annotations;
-  IDLNode();
-
-  setExtAttrs(IDLExtAttrs ea) {
-    assert(ea != null);
-    this.extAttrs = ea != null ? ea : new IDLExtAttrs();
-  }
-}
-
-class IDLType extends IDLNode {
-  String id;
-  IDLType parameter;
-  bool nullable = false;
-  IDLType(String this.id, [IDLType this.parameter, bool this.nullable = false]);
-
-  // TODO: Figure out why this constructor was failing in mysterious ways.
-  // IDLType.nullable(IDLType base) {
-  //   return new IDLType(base.id, base.parameter, true);
-  // }
-
-  //String toString() => '<IDLType $nullable $id $parameter>';
-  String toString() {
-    String nullableTag = nullable ? '?' : '';
-    return '<IDLType $id${parameter == null ? '' : ' $parameter'}$nullableTag>';
-  }
-}
-
-class IDLTypeDef extends IDLNode {
-  String id;
-  IDLType type;
-  IDLTypeDef(String this.id, IDLType this.type);
-
-  toString() => '<IDLTypeDef $id $type>';
-}
-
-class IDLImplementsStatement extends IDLNode {
-}
-
-class IDLInterface extends IDLNode {
-  String id;
-  List parents;
-  List operations;
-  List attributes;
-  List constants;
-  List snippets;
-
-  bool isSupplemental;
-  bool isNoInterfaceObject;
-  bool isFcSuppressed;
-
-  IDLInterface(String this.id, IDLExtAttrs ea, IDLAnnotations ann,
-               List this.parents, List members) {
-    setExtAttrs(ea);
-    this.annotations = ann;
-    if (this.parents == null) this.parents = [];
-
-    operations = members.filter((e) => e is IDLOperation);
-    attributes = members.filter((e) => e is IDLAttribute);
-    constants = members.filter((e) => e is IDLConstant);
-    snippets = members.filter((e) => e is IDLSnippet);
-
-    isSupplemental = extAttrs.has('Supplemental');
-    isNoInterfaceObject = extAttrs.has('NoInterfaceObject');
-    isFcSuppressed = extAttrs.has('Suppressed');
-  }
-
-  toString() => '<IDLInterface $id $extAttrs $annotations>';
-}
-
-class IDLMember extends IDLNode {
-  String id;
-  IDLType type;
-  bool isFcSuppressed;
-
-  IDLMember(String this.id, IDLType this.type, IDLExtAttrs ea, IDLAnnotations ann) {
-    setExtAttrs(ea);
-    this.annotations = ann;
-
-    isFcSuppressed = extAttrs.has('Suppressed');
-  }
-}
-
-class IDLOperation extends IDLMember {
-  List arguments;
-
-  // Ignore all forms of raises for now.
-  List specials;
-  bool isStringifier;
-
-  IDLOperation(String id, IDLType type, IDLExtAttrs ea, IDLAnnotations ann,
-               List this.arguments, List this.specials, bool this.isStringifier)
-      : super(id, type, ea, ann) {
-  }
-
-  toString() => '<IDLOperation $type $id ${printList(arguments)}>';
-}
-
-class IDLAttribute extends IDLMember {
-}
-
-class IDLConstant extends IDLMember {
-  var value;
-  IDLConstant(String id, IDLType type, IDLExtAttrs ea, IDLAnnotations ann,
-              var this.value)
-      : super(id, type, ea, ann);
-}
-
-class IDLSnippet extends IDLMember {
-  String text;
-  IDLSnippet(IDLAnnotations ann, String this.text)
-      : super(null, null, new IDLExtAttrs(), ann);
-}
-
-/** Maps string to something. */
-class IDLDictNode {
-  Map<String, Object> map;
-  IDLDictNode() {
-    map = new Map<String, Object>();
-  }
-
-  setMap(List associationList) {
-    if (associationList == null) return;
-    for (var element in associationList) {
-      var name = element[0];
-      var value = element[1];
-      map[name] = value;
-    }
-  }
-
-  bool has(String key) => map.containsKey(key);
-
-  formatMap() {
-    if (map.isEmpty())
-      return '';
-    StringBuffer sb = new StringBuffer();
-    map.forEach((k, v) {
-        sb.add(' $k');
-        if (v != null) {
-          sb.add('=$v');
-        }
-      });
-    return sb.toString();
-  }
-
-}
-
-class IDLExtAttrs extends IDLDictNode {
-  IDLExtAttrs([List attrs = const []]) : super() {
-    setMap(attrs);
-  }
-
-  toString() => '<IDLExtAttrs${formatMap()}>';
-}
-
-class IDLArgument extends IDLNode {
-  String id;
-  IDLType type;
-  bool isOptional;
-  bool isIn;
-  bool hasElipsis;
-  IDLArgument(String this.id, IDLType this.type, IDLExtAttrs extAttrs,
-              bool this.isOptional, bool this.isIn, bool this.hasElipsis) {
-    setExtAttrs(extAttrs);
-  }
-
-  toString() => '<IDLArgument $id>';
-}
-
-class IDLAnnotations extends IDLDictNode {
-  IDLAnnotations(List annotations) : super() {
-    for (var annotation in annotations) {
-      map[annotation.id] = annotation;
-    }
-  }
-
-  toString() => '<IDLAnnotations${formatMap()}>';
-}
-
-class IDLAnnotation extends IDLDictNode {
-  String id;
-  IDLAnnotation(String this.id, List args) : super() {
-    setMap(args);
-  }
-
-  toString() => '<IDLAnnotation $id${formatMap()}>';
-}
-
-class IDLExtAttrFunctionValue extends IDLNode {
-  String name;
-  List arguments;
-  IDLExtAttrFunctionValue(String this.name, this.arguments);
-
-  toString() => '<IDLExtAttrFunctionValue $name(${arguments.length})>';
-}
-
-class IDLParentInterface extends IDLNode {}
-
-////////////////////////////////////////////////////////////////////////////////
-
-class IDLParser {
-  final int syntax;
-  Grammar grammar;
-  var axiom;
-
-  IDLParser([syntax=WEBIDL_SYNTAX]) : syntax = syntax {
-    grammar = new Grammar();
-    axiom = _makeParser();
-  }
-
-  syntax_switch([WebIDL, WebKit, FremontCut]) {
-    assert(WebIDL != null && WebKit != null);  // Not options, just want names.
-    if (syntax == WEBIDL_SYNTAX)
-      return WebIDL;
-    if (syntax == WEBKIT_SYNTAX)
-      return WebKit;
-    if (syntax == FREMONTCUT_SYNTAX)
-      return FremontCut == null ?  WebIDL : FremontCut;
-    throw new Exception('unsupported IDL syntax $syntax');
-  }
-
-  _makeParser() {
-    Grammar g = grammar;
-
-    // TODO: move syntax_switch back to here.
-
-    var idStartCharSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_';
-    var idNextCharSet = idStartCharSet + '0123456789';
-    var hexCharSet = '0123456789ABCDEFabcdef';
-
-    var idStartChar = CHAR(idStartCharSet);
-    var idNextChar = CHAR(idNextCharSet);
-
-    var digit = CHAR('0123456789');
-
-    var Id = TEXT(LEX('an identifier',[idStartChar, MANY(idNextChar, min:0)]));
-
-    var IN = SKIP(LEX("'in'", ['in',NOT(idNextChar)]));
-
-    var BooleanLiteral = OR(['true', 'false']);
-    var IntegerLiteral = TEXT(LEX('hex-literal', OR([['0x', MANY(CHAR(hexCharSet))],
-                                      [MANY(digit)]])));
-    var FloatLiteral = TEXT(LEX('float-literal', [MANY(digit), '.', MANY(digit, min:0)]));
-
-
-    var Argument = g['Argument'];
-    var Module = g['Module'];
-    var Member = g['Member'];
-    var Interface = g['Interface'];
-    var ExceptionDef = g['ExceptionDef'];
-    var Type = g['Type'];
-    var TypeDef = g['TypeDef'];
-    var ImplStmt = g['ImplStmt'];
-    var ValueTypeDef = g['ValueTypeDef'];
-    var Const = g['Const'];
-    var Attribute = g['Attribute'];
-    var Operation = g['Operation'];
-    var Snippet = g['Snippet'];
-    var ExtAttrs = g['ExtAttrs'];
-    var MaybeExtAttrs = g['MaybeExtAttrs'];
-    var MaybeAnnotations = g['MaybeAnnotations'];
-    var ParentInterfaces = g['ParentInterfaces'];
-
-
-    final ScopedName = TEXT(LEX('scoped-name', MANY(CHAR(idStartCharSet + '_:.<>'))));
-
-    final ScopedNames = MANY(ScopedName, separator:',');
-
-    // Types
-
-    final IntegerTypeName = OR([
-        ['byte', () => 'byte'],
-        ['int', () => 'int'],
-        ['long', 'long', () => 'long long'],
-        ['long', () => 'long'],
-        ['octet', () => 'octet'],
-        ['short', () => 'short']]);
-
-    final IntegerType = OR([
-        ['unsigned', IntegerTypeName, (name) => new IDLType('unsigned $name')],
-        [IntegerTypeName, (name) => new IDLType(name)]]);
-
-    final BooleanType = ['boolean', () => new IDLType('boolean')];
-    final OctetType = ['octet', () => new IDLType('octet')];
-    final FloatType = ['float', () => new IDLType('float')];
-    final DoubleType = ['double', () => new IDLType('double')];
-
-    final SequenceType = ['sequence', '<', Type, '>',
-                          (type) => new IDLType('sequence', type)];
-
-    final ScopedNameType = [ScopedName, (name) => new IDLType(name)];
-
-    final NullableType =
-        [OR([IntegerType, BooleanType, OctetType, FloatType,
-             DoubleType, SequenceType, ScopedNameType]),
-         MAYBE('?'),
-         (type, nullable) =>
-             nullable ? new IDLType(type.id, type.parameter, true) : type];
-
-    final VoidType = ['void', () => new IDLType('void')];
-    final AnyType = ['any', () => new IDLType('any')];
-    final ObjectType = ['object', () => new IDLType('object')];
-
-    Type.def = OR([AnyType, ObjectType, NullableType]);
-
-    final ReturnType = OR([VoidType, Type]);
-
-    var Definition = syntax_switch(
-        WebIDL: OR([Module, Interface, ExceptionDef, TypeDef, ImplStmt,
-                    ValueTypeDef, Const]),
-        WebKit: OR([Module, Interface]));
-
-    var Definitions = MANY(Definition, min:0);
-
-    Module.def = syntax_switch(
-        WebIDL: [MaybeExtAttrs, 'module', Id, '{', Definitions, '}',
-                 SKIP(MAYBE(';')),
-                 (ea, id, defs) => new IDLModule(id, ea, null, defs)],
-        WebKit: ['module', MaybeExtAttrs, Id, '{', Definitions, '}',
-                 SKIP(MAYBE(';')),
-                 (ea, id, defs) => new IDLModule(id, ea, null, defs)],
-        FremontCut: [MaybeAnnotations, MaybeExtAttrs, 'module', Id,
-                     '{', Definitions, '}', SKIP(MAYBE(';')),
-                     (ann, ea, id, defs) => new IDLModule(id, ea, ann, defs)]);
-
-    Interface.def = syntax_switch(
-        WebIDL: [MaybeExtAttrs, 'interface', Id, MAYBE(ParentInterfaces),
-                 MAYBE(['{', MANY0(Member), '}']), ';',
-                 (ea, id, p, ms) => new IDLInterface(id, ea, null, p, ms)],
-        WebKit: ['interface', MaybeExtAttrs, Id, MAYBE(ParentInterfaces),
-                 MAYBE(['{', MANY0(Member), '}']), ';',
-                 (ea, id, p, ms) => new IDLInterface(id, ea, null, p, ms)],
-        FremontCut: [MaybeAnnotations, MaybeExtAttrs, 'interface',
-                     Id, MAYBE(ParentInterfaces),
-                     MAYBE(['{', MANY0(Member), '}']), ';',
-                     (ann, ea, id, p, ms) => new IDLInterface(id, ea, ann, p, ms)]);
-
-    Member.def = syntax_switch(
-        WebIDL: OR([Const, Attribute, Operation, ExtAttrs]),
-        WebKit: OR([Const, Attribute, Operation]),
-        FremontCut: OR([Const, Attribute, Operation, Snippet]));
-
-    var InterfaceType = ScopedName;
-
-    var ParentInterface = syntax_switch(
-        WebIDL: [InterfaceType],
-        WebKit: [InterfaceType],
-        FremontCut: [MaybeAnnotations, InterfaceType]);
-
-    ParentInterfaces.def = [':', MANY(ParentInterface, ',')];
-
-    // TypeDef (Web IDL):
-    TypeDef.def = ['typedef', Type, Id, ';', (type, id) => new IDLTypeDef(id, type)];
-
-    // TypeDef (Old-school W3C IDLs)
-    ValueTypeDef.def = ['valuetype', Id, Type, ';'];
-
-    // Implements Statement (Web IDL):
-    var ImplStmtImplementor = ScopedName;
-    var ImplStmtImplemented = ScopedName;
-
-    ImplStmt.def = [ImplStmtImplementor, 'implements', ImplStmtImplemented, ';'];
-
-    var ConstExpr = OR([BooleanLiteral, IntegerLiteral, FloatLiteral]);
-
-    Const.def = syntax_switch(
-        WebIDL: [MaybeExtAttrs, 'const', Type, Id, '=', ConstExpr, ';',
-                 (ea, type, id, v) => new IDLConstant(id, type, ea, null, v)],
-        WebKit: ['const', MaybeExtAttrs, Type, Id, '=', ConstExpr, ';',
-                 (ea, type, id, v) => new IDLConstant(id, type, ea, null, v)],
-        FremontCut: [MaybeAnnotations, MaybeExtAttrs,
-                     'const', Type, Id, '=', ConstExpr, ';',
-                     (ann, ea, type, id, v) =>
-                         new IDLConstant(id, type, ea, ann, v)]);
-
-    // Attributes
-
-    var Stringifier = 'stringifier';
-    var AttrGetter = 'getter';
-    var AttrSetter = 'setter';
-    var ReadOnly = 'readonly';
-    var AttrGetterSetter = OR([AttrGetter, AttrSetter]);
-
-    var GetRaises = syntax_switch(
-        WebIDL: ['getraises', '(', ScopedNames, ')'],
-        WebKit: ['getter', 'raises', '(', ScopedNames, ')']);
-
-    var SetRaises = syntax_switch(
-        WebIDL: ['setraises', '(', ScopedNames, ')'],
-        WebKit: ['setter', 'raises', '(', ScopedNames, ')']);
-
-    var Raises = ['raises', '(', ScopedNames, ')'];
-
-    var AttrRaises = syntax_switch(
-        WebIDL: MANY(OR([GetRaises, SetRaises])),
-        WebKit: MANY(OR([GetRaises, SetRaises, Raises]), separator:','));
-
-    Attribute.def = syntax_switch(
-        WebIDL: [MaybeExtAttrs, MAYBE(Stringifier), MAYBE(ReadOnly),
-                 'attribute', Type, Id, MAYBE(AttrRaises), ';'],
-        WebKit: [MAYBE(Stringifier), MAYBE(ReadOnly), 'attribute',
-                 MaybeExtAttrs, Type, Id, MAYBE(AttrRaises), ';'],
-        FremontCut: [MaybeAnnotations, MaybeExtAttrs,
-                     MAYBE(AttrGetterSetter), MAYBE(Stringifier), MAYBE(ReadOnly),
-                     'attribute', Type, Id, MAYBE(AttrRaises), ';'
-                     ]);
-
-    // Operations
-
-    final Special = TEXT(OR(['getter', 'setter', 'creator', 'deleter', 'caller']));
-    final Specials = MANY(Special);
-
-    final Optional = 'optional';
-    final AnEllipsis = '...';
-
-    Argument.def = syntax_switch(
-        WebIDL: SEQ(MaybeExtAttrs, MAYBE(Optional), MAYBE(IN),
-                    MAYBE(Optional), Type, MAYBE(AnEllipsis), Id,
-                    (e, opt1, isin, opt2, type, el, id) =>
-                        new IDLArgument(id, type, e, opt1 || opt2, isin, el)),
-
-        WebKit: SEQ(MAYBE(Optional), MAYBE('in'), MAYBE(Optional),
-                    MaybeExtAttrs, Type, Id
-                    (opt1, isin, opt2, e, type, id) =>
-                        new IDLArgument(id, type, e, opt1 || opt2, isin, false)));
-
-    final Arguments = MANY0(Argument, ',');
-
-    Operation.def = syntax_switch(
-        WebIDL: [MaybeExtAttrs, MAYBE(Stringifier), MAYBE(Specials),
-                 ReturnType, MAYBE(Id), '(', Arguments, ')', MAYBE(Raises), ';',
-                 (ea, isStringifier, specials, type, id, args, raises) =>
-                     new IDLOperation(id, type, ea, null, args, specials, isStringifier)
-                 ],
-        WebKit: [MaybeExtAttrs, ReturnType, MAYBE(Id), '(', Arguments, ')',
-                 MAYBE(Raises), ';',
-                 (ea, type, id, args, raises) =>
-                     new IDLOperation(id, type, ea, null, args, [], false)
-                 ],
-        FremontCut: [MaybeAnnotations, MaybeExtAttrs, MAYBE(Stringifier),
-                     MAYBE(Specials), ReturnType, MAYBE(Id), '(', Arguments, ')',
-                     MAYBE(Raises), ';',
-                     (ann, ea, isStringifier, specials, type, id, args, raises) =>
-                       new IDLOperation(id, type, ea, ann, args, specials, isStringifier)
-                     ]);
-
-    // Exceptions
-
-    final ExceptionField = [Type, Id, ';'];
-    final ExceptionMember = OR([Const, ExceptionField, ExtAttrs]);
-    ExceptionDef.def = ['exception', Id, '{', MANY0(ExceptionMember), '}', ';'];
-
-    // ExtendedAttributes
-
-    var ExtAttrArgList = ['(', MANY0(Argument, ','), ')'];
-
-    var ExtAttrFunctionValue =
-        [Id, '(', MANY0(Argument, ','), ')',
-         (name, args) => new IDLExtAttrFunctionValue(name, args)
-         ];
-
-    var ExtAttrValue = OR([ExtAttrFunctionValue,
-                           TEXT(LEX('value', MANY(CHAR(idNextCharSet + '&:-|'))))]);
-
-    var ExtAttr = [Id, MAYBE(OR([['=', ExtAttrValue], ExtAttrArgList]))];
-
-    ExtAttrs.def = ['[', MANY(ExtAttr, ','), ']',
-                    (list) => new IDLExtAttrs(list)];;
-
-    MaybeExtAttrs.def = OR(ExtAttrs,
-                           [ () => new IDLExtAttrs() ] );
-
-    // Annotations - used in the FremontCut IDL grammar.
-
-    var AnnotationArgValue = TEXT(LEX('xx', MANY(CHAR(idNextCharSet + '&:-|'))));
-
-    var AnnotationArg = [Id, MAYBE(['=', AnnotationArgValue])];
-
-    var AnnotationBody = ['(', MANY0(AnnotationArg, ','), ')'];
-
-    var Annotation = ['@', Id, MAYBE(AnnotationBody),
-                      (id, body) => new IDLAnnotation(id, body)];
-
-    MaybeAnnotations.def = [MANY0(Annotation), (list) => new IDLAnnotations(list)];
-
-    // Snippets - used in the FremontCut IDL grammar.
-
-    final SnippetText = TEXT(LEX('snippet body', MANY0([NOT('}'), CHAR()])));
-    Snippet.def = [MaybeAnnotations, 'snippet', '{', SnippetText, '}', ';',
-                   (ann, text) => new IDLSnippet(ann, text)];
-
-
-    grammar.whitespace =
-        OR([MANY(CHAR(' \t\r\n')),
-            ['//', MANY0([NOT(CHAR('\r\n')), CHAR()])],
-            ['#', MANY0([NOT(CHAR('\r\n')), CHAR()])],
-            ['/*', MANY0([NOT('*/'), CHAR()]), '*/']]);
-
-    // Top level - at least one definition.
-    return MANY(Definition);
-
-  }
-}
diff --git a/elemental/idl/scripts/idlparser.py b/elemental/idl/scripts/idlparser.py
deleted file mode 100755
index ba67687..0000000
--- a/elemental/idl/scripts/idlparser.py
+++ /dev/null
@@ -1,446 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import re
-import subprocess
-import tempfile
-import os
-
-from pegparser import *
-
-# IDL grammar variants.
-WEBIDL_SYNTAX = 0
-WEBKIT_SYNTAX = 1
-FREMONTCUT_SYNTAX = 2
-
-
-class IDLParser(object):
-  """IDLParser is a PEG based IDL files parser."""
-
-  def __init__(self, syntax=WEBIDL_SYNTAX):
-    """Constructor.
-
-    Initializes the IDLParser by defining the grammar and initializing
-    a PEGParserinstance.
-
-    Args:
-      syntax -- supports either WEBIDL_SYNTAX (0) or WEBKIT_SYNTAX (1)
-    """
-    self._syntax = syntax
-    self._pegparser = PegParser(self._idl_grammar(),
-      self._whitespace_grammar(),
-      strings_are_tokens=True)
-
-  def _idl_grammar(self):
-    """Returns the PEG grammar for IDL parsing."""
-
-    # utilities:
-    def syntax_switch(w3c_syntax, webkit_syntax, fremontcut_syntax=None):
-      """Returns w3c_syntax or web_syntax, depending on the current
-      configuration.
-      """
-      if self._syntax == WEBIDL_SYNTAX:
-        return w3c_syntax
-      elif self._syntax == WEBKIT_SYNTAX:
-        return webkit_syntax
-      elif self._syntax == FREMONTCUT_SYNTAX:
-        if fremontcut_syntax is not None:
-          return fremontcut_syntax
-        return w3c_syntax
-      else:
-        raise RuntimeError('unsupported IDL syntax %s' % syntax)
-
-    # The following grammar is based on the Web IDL's LL(1) grammar
-    # (specified in: http://dev.w3.org/2006/webapi/WebIDL/#idl-grammar).
-    # It is adjusted to PEG grammar, as well as to also support
-    # WebKit IDL and FremontCut grammar.
-
-    ###################### BEGIN GRAMMAR #####################
-
-    def Id():
-      return re.compile(r'[\w\_]+')
-
-    def _Definitions():
-      return MAYBE(MANY(_Definition))
-
-    def _Definition():
-      return syntax_switch(
-        # Web IDL:
-        OR(Module, Interface, ExceptionDef, TypeDef, ImplStmt,
-           ValueTypeDef, Const),
-        # WebKit:
-        OR(Module, Interface))
-
-    def Module():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), 'module', Id, '{', _Definitions, '}',
-         MAYBE(';')],
-        # WebKit:
-        ['module', MAYBE(ExtAttrs), Id, '{', _Definitions, '}',
-         MAYBE(';')],
-        # FremontCut:
-        [MAYBE(_Annotations), MAYBE(ExtAttrs), 'module', Id,
-         '{', _Definitions, '}', MAYBE(';')])
-
-    def Interface():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), 'interface', Id, MAYBE(_ParentInterfaces),
-         MAYBE(['{', MAYBE(MANY(_Member)), '}']), ';'],
-        # WebKit:
-        [OR('interface', 'exception'), MAYBE(ExtAttrs), Id, MAYBE(_ParentInterfaces),
-         MAYBE(['{', MAYBE(MANY(_Member)), '}']), MAYBE(';')],
-        # FremontCut:
-        [MAYBE(_Annotations), MAYBE(ExtAttrs), 'interface',
-         Id, MAYBE(_ParentInterfaces), MAYBE(['{', MAYBE(MANY(_Member)),
-         '}']), ';'])
-
-    def _Member():
-      return syntax_switch(
-        # Web IDL:
-        OR(Const, Attribute, Operation, ExtAttrs),
-        # WebKit:
-        OR(Const, Attribute, Operation),
-        # FremontCut:
-        OR(Const, Attribute, Operation))
-
-    # Interface inheritance:
-    def _ParentInterfaces():
-      return [':', MANY(ParentInterface, separator=',')]
-
-    def ParentInterface():
-      return syntax_switch(
-        # Web IDL:
-        [InterfaceType],
-        # WebKit:
-        [InterfaceType],
-        # FremontCut:
-        [MAYBE(_Annotations), InterfaceType])
-
-    # TypeDef (Web IDL):
-    def TypeDef():
-      return ['typedef', Type, Id, ';']
-
-    # TypeDef (Old-school W3C IDLs)
-    def ValueTypeDef():
-      return ['valuetype', Id, Type, ';']
-
-    # Implements Statement (Web IDL):
-    def ImplStmt():
-      return [ImplStmtImplementor, 'implements', ImplStmtImplemented,
-          ';']
-
-    def ImplStmtImplementor():
-      return ScopedName
-
-    def ImplStmtImplemented():
-      return ScopedName
-
-    # Constants:
-    def Const():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), 'const', Type, Id, '=', ConstExpr, ';'],
-        # WebKit:
-        [MAYBE(ExtAttrs), 'const', Type, Id, '=', ConstExpr, ';'],
-        # FremontCut:
-        [MAYBE(_Annotations), MAYBE(ExtAttrs), 'const', Type, Id, '=',
-         ConstExpr, ';'])
-
-    def ConstExpr():
-      return OR(_BooleanLiteral,
-            _IntegerLiteral,
-            _FloatLiteral)
-
-    def _BooleanLiteral():
-      return re.compile(r'true|false')
-
-    def _IntegerLiteral():
-      return OR(re.compile(r'(0x)?[0-9ABCDEF]+'),
-            re.compile(r'[0-9]+'))
-
-    def _FloatLiteral():
-      return re.compile(r'[0-9]+\.[0-9]*')
-
-    # Attributes:
-    def Attribute():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), MAYBE(Stringifier), MAYBE(ReadOnly),
-         'attribute', Type, Id, MAYBE(_AttrRaises), ';'],
-        # WebKit:
-        [MAYBE(Stringifier), MAYBE(ReadOnly), 'attribute',
-         MAYBE(ExtAttrs), Type, Id, MAYBE(_AttrRaises), ';'],
-        # FremontCut:
-        [MAYBE(_Annotations), MAYBE(ExtAttrs),
-         MAYBE(_AttrGetterSetter), MAYBE(Stringifier), MAYBE(ReadOnly),
-         'attribute', Type, Id, MAYBE(_AttrRaises), ';'])
-
-    def _AttrRaises():
-      return syntax_switch(
-        # Web IDL:
-        MANY(OR(GetRaises, SetRaises)),
-        # WebKit:
-        MANY(OR(GetRaises, SetRaises, Raises), separator=','))
-
-    # Special fremontcut feature:
-    def _AttrGetterSetter():
-      return OR(AttrGetter, AttrSetter)
-
-    def AttrGetter():
-      return 'getter'
-
-    def AttrSetter():
-      return 'setter'
-
-    def ReadOnly():
-      return 'readonly'
-
-    def GetRaises():
-      return syntax_switch(
-        # Web IDL:
-        ['getraises', '(', _ScopedNames, ')'],
-        # WebKit:
-        ['getter', 'raises', '(', _ScopedNames, ')'])
-
-    def SetRaises():
-      return syntax_switch(
-        # Web IDL:
-        ['setraises', '(', _ScopedNames, ')'],
-        # WebKit:
-        ['setter', 'raises', '(', _ScopedNames, ')'])
-
-    # Operation:
-    def Operation():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), MAYBE(Static), MAYBE(Stringifier), MAYBE(_Specials),
-         ReturnType, MAYBE(Id), '(', _Arguments, ')', MAYBE(Raises),
-         ';'],
-        # WebKit:
-        [MAYBE(ExtAttrs), MAYBE(Static),
-         ReturnType, MAYBE(Id), '(', _Arguments, ')',
-         MAYBE(Raises), ';'],
-        # FremontCut:
-        [MAYBE(_Annotations), MAYBE(ExtAttrs), MAYBE(Static), MAYBE(Stringifier),
-         MAYBE(_Specials), ReturnType, MAYBE(Id), '(', _Arguments, ')',
-         MAYBE(Raises), ';'])
-
-    def Static():
-      return 'static'
-
-    def _Specials():
-      return MANY(Special)
-
-    def Special():
-      return re.compile(r'getter|setter|creator|deleter|caller')
-
-    def Stringifier():
-      return 'stringifier'
-
-    def Raises():
-      return ['raises', '(', _ScopedNames, ')']
-
-    # Operation arguments:
-    def _Arguments():
-      return MAYBE(MANY(Argument, ','))
-
-    def Argument():
-      return syntax_switch(
-        # Web IDL:
-        [MAYBE(ExtAttrs), MAYBE(Optional), MAYBE('in'),
-         MAYBE(Optional), Type, MAYBE(AnEllipsis), Id],
-        # WebKit:
-        [MAYBE(Optional), MAYBE('in'), MAYBE(Optional),
-         MAYBE(ExtAttrs), Type, Id])
-
-    def Optional():
-      return 'optional'
-
-    def AnEllipsis():
-      return '...'
-
-    # Exceptions (Web IDL).
-    def ExceptionDef():
-      return ['exception', Id, '{', MAYBE(MANY(_ExceptionMember)), '}',
-          ';']
-
-    def _ExceptionMember():
-      return OR(Const, ExceptionField, ExtAttrs)
-
-    def ExceptionField():
-      return [Type, Id, ';']
-
-    # Types:
-    def Type():
-      return _Type
-
-    def ReturnType():
-      return OR(VoidType, _Type)
-
-    def InterfaceType():
-      return ScopedName
-
-    def _Type():
-      return OR(AnyArrayType, AnyType, ObjectType, _NullableType)
-
-    def _NullableType():
-      return [OR(_IntegerType, BooleanType, OctetType, FloatType,
-             DoubleType, SequenceType, DOMStringArrayType, ScopedName),
-          MAYBE(Nullable)]
-
-    def Nullable():
-      return '?'
-
-    def SequenceType():
-      return ['sequence', '<', Type, '>']
-
-    def AnyType():
-      return 'any'
-
-    def AnyArrayType():
-      # TODO(sra): Do more general handling of array types.
-      return 'any[]'
-
-    def ObjectType():
-      return re.compile(r'(object|Object)\b')   # both spellings.
-
-    def VoidType():
-      return 'void'
-
-    def _IntegerType():
-      return [MAYBE(Unsigned), OR(ByteType, IntType, LongLongType,
-                    LongType, OctetType, ShortType)]
-
-    def Unsigned():
-      return 'unsigned'
-
-    def ShortType():
-      return 'short'
-
-    def LongLongType():
-      return ['long', 'long']
-
-    def LongType():
-      return 'long'
-
-    def IntType():
-      return 'int'
-
-    def ByteType():
-      return 'byte'
-
-    def OctetType():
-      return 'octet'
-
-    def BooleanType():
-      return 'boolean'
-
-    def FloatType():
-      return 'float'
-
-    def DoubleType():
-      return 'double'
-
-    def _ScopedNames():
-      return MANY(ScopedName, separator=',')
-
-    def ScopedName():
-      return re.compile(r'[\w\_\:\.\<\>]+')
-
-    def DOMStringArrayType():
-      return 'DOMString[]'
-
-    # Extended Attributes:
-    def ExtAttrs():
-      return ['[', MAYBE(MANY(ExtAttr, ',')), ']']
-
-    def ExtAttr():
-      return [Id, MAYBE(OR(['=', ExtAttrValue], ExtAttrArgList))]
-
-    def ExtAttrValue():
-      return OR(ExtAttrFunctionValue, re.compile(r'[\w&0-9:\-\|]+'))
-
-    def ExtAttrFunctionValue():
-      return [Id, ExtAttrArgList]
-
-    def ExtAttrArgList():
-      return ['(', MAYBE(MANY(Argument, ',')), ')']
-
-    # Annotations - used in the FremontCut IDL grammar:
-    def _Annotations():
-      return MANY(Annotation)
-
-    def Annotation():
-      return ['@', Id, MAYBE(_AnnotationBody)]
-
-    def _AnnotationBody():
-      return ['(', MAYBE(MANY(AnnotationArg, ',')), ')']
-
-    def AnnotationArg():
-      return [Id, MAYBE(['=', AnnotationArgValue])]
-
-    def AnnotationArgValue():
-      return re.compile(r'[\w&0-9:/\-\.]+')
-
-    ###################### END GRAMMAR #####################
-
-    # Return the grammar's root rule:
-    return MANY(_Definition)
-
-  def _whitespace_grammar(self):
-    return OR(re.compile(r'\s+'),
-          re.compile(r'//.*'),
-          re.compile(r'#.*'),
-          re.compile(r'/\*.*?\*/', re.S))
-
-  def _pre_process(self, content, defines, includePaths):
-    """Pre-processes the content using gcc.
-
-    WebKit IDLs require pre-processing by gcc. This is done by invoking
-    gcc in a sub-process and capturing the results.
-
-    Returns:
-      The result of running gcc on the content.
-
-    Args:
-      content -- text to process.
-      defines -- an array of pre-processor defines.
-      includePaths -- an array of path strings.
-    """
-    # FIXME: Handle gcc not found, or any other processing errors
-    gcc = os.environ.get('CC', None)
-    if not gcc:
-      gcc = 'gcc'
-    cmd = [gcc, '-E', '-P', '-C', '-x', 'c++'];
-    for define in defines:
-      cmd.append('-D%s' % define)
-
-    cmd.append('-')
-    pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE,
-      stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-    (content, stderr) = pipe.communicate(content)
-    return content
-
-  def parse(self, content, defines=[], includePaths=[]):
-    """Parse the give content string.
-
-    The WebKit IDL syntax also allows gcc pre-processing instructions.
-    Lists of defined variables and include paths can be provided.
-
-    Returns:
-      An abstract syntax tree (AST).
-
-    Args:
-      content -- text to parse.
-      defines -- an array of pre-processor defines.
-      includePaths -- an array of path strings used by the
-        gcc pre-processor.
-    """
-    if self._syntax == WEBKIT_SYNTAX:
-      content = self._pre_process(content, defines, includePaths)
-
-    return self._pegparser.parse(content)
diff --git a/elemental/idl/scripts/idlparser_test.dart b/elemental/idl/scripts/idlparser_test.dart
deleted file mode 100644
index 3ef11f3..0000000
--- a/elemental/idl/scripts/idlparser_test.dart
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#library('idlparser_test');
-#import('../../../utils/peg/pegparser.dart');
-#source('idlparser.dart');
-#source('idlrenderer.dart');
-
-main() {
-  IDLParser parser = new IDLParser(FREMONTCUT_SYNTAX);
-  Grammar g = parser.grammar;
-
-  var Type = g['Type'];
-
-  show(g, Type, 'int');
-  show(g, Type, 'int ?');
-  show(g, Type, 'sequence<int?> ?');
-  show(g, Type, 'unsigned long long?');
-  show(g, Type, 'unsignedlonglong?');
-
-
-  var MaybeAnnotations = g['MaybeAnnotations'];
-
-  show(g, MaybeAnnotations, '');
-  show(g, MaybeAnnotations, '@Foo');
-  show(g, MaybeAnnotations, '@Foo @Bar');
-  show(g, MaybeAnnotations, '@Foo(A,B=1) @Bar');
-
-  var MaybeExtAttrs = g['MaybeExtAttrs'];
-  print(MaybeExtAttrs);
-
-  show(g, MaybeExtAttrs, '');
-  show(g, MaybeExtAttrs, '[A]');
-
-  var Module = g['Module'];
-
-  show(g, Module, 'module Harry { const int bob = 30;};');
-  show(g, Module, """
-module Harry { [X,Y,Z=99] const int bob = 30; typedef x y;
-
-  interface Thing : SuperA, @Friendly SuperB {
-
-    [Nice] const unsigned long long kFoo = 12345;
-    [A,B,C,D,E] attribute int attr1;
-    [F=f(int a),K=99,DartName=Bert] int smudge(int a, int b, double x);
-
-    [X,Y,Z] int xyz([U,V] optional in optional int z);
-    [P,Q,R] int pqr();
-    int op1();
-    @Smurf @Beans(B=1,C,A=2) int op2();
-
-    snippet { yadda
-              yadda
-    };
-  };
-
-//[A] const unsigned long long dweeb = 0xff;
-
-};
-""");
-}
-
-
-
-show(grammar, rule, input) {
-  print('show: "$input"');
-  var ast;
-  try {
-    ast = grammar.parse(rule, input);
-  } catch (var exception) {
-    if (exception is ParseError)
-      ast = exception;
-    else
-      throw;
-  }
-  print('${printList(ast)}');
-  print(render(ast));
-}
-
-void check(grammar, rule, input, expected) {
-  // If [expected] is String then the result is coerced to string.
-  // If [expected] is !String, the result is compared directly.
-  print('check: "$input"');
-  var ast;
-  try {
-    ast = grammar.parse(rule, input);
-  } catch (var exception) {
-    ast = exception;
-  }
-
-  var formatted = ast;
-  if (expected is String)
-    formatted = printList(ast);
-
-  Expect.equals(expected, formatted, "parse: $input");
-}
-
-// Prints the list in [1,2,3] notation, including nested lists.
-void printList(item) {
-  if (item is List) {
-    StringBuffer sb = new StringBuffer();
-    sb.add('[');
-    var sep = '';
-    for (var x in item) {
-      sb.add(sep);
-      sb.add(printList(x));
-      sep = ',';
-    }
-    sb.add(']');
-    return sb.toString();
-  }
-  if (item == null)
-    return 'null';
-  return item.toString();
-}
diff --git a/elemental/idl/scripts/idlparser_test.py b/elemental/idl/scripts/idlparser_test.py
deleted file mode 100755
index 7155da7..0000000
--- a/elemental/idl/scripts/idlparser_test.py
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import idlparser
-import logging.config
-import sys
-import unittest
-
-
-class IDLParserTestCase(unittest.TestCase):
-
-  def _run_test(self, syntax, content, expected):
-    """Utility for running a IDL parsing tests and comparing results.
-
-    Program exits (sys.exit) if expected does not match actual.
-
-    Args:
-      syntax -- IDL grammar to use (either idlparser.WEBKIT_SYNTAX,
-        WEBIDL_SYNTAX or FREMONTCUT_SYNTAX). If None, will run
-        multiple tests, each with a different syntax.
-      content -- input text for the parser.
-      expected -- expected parse result.
-    """
-
-    all_syntaxes = {idlparser.WEBIDL_SYNTAX: 'Web IDL',
-            idlparser.WEBKIT_SYNTAX: 'WebKit',
-            idlparser.FREMONTCUT_SYNTAX: 'FremontCut'}
-
-    if syntax is None:
-      for syntax in all_syntaxes:
-        self._run_test(syntax, content, expected)
-      return
-
-    if syntax not in all_syntaxes:
-      raise RuntimeError('Unexpected syntax %s' % syntax)
-
-    actual = None
-    error = None
-    try:
-      parser = idlparser.IDLParser(syntax)
-      actual = parser.parse(content)
-    except SyntaxError, e:
-      error = e
-      pass
-    if actual != expected:
-      self.fail('''
-SYNTAX  : %s
-CONTENT :
-%s
-EXPECTED:
-%s
-ACTUAL  :
-%s
-ERROR   : %s''' % (all_syntaxes[syntax], content, expected, actual, error))
-
-  def test_empty_module(self):
-    self._run_test(
-      None,
-      'module M {};',
-      [('Module', [('Id', 'M')])])
-
-  def test_empty_interface(self):
-    self._run_test(
-      None,
-      'interface I {};',
-      [('Interface', [('Id', 'I')])])
-
-  def test_module_with_empty_interface(self):
-    self._run_test(
-      None,
-      'module M { interface I {}; };',
-      [('Module', [('Id', 'M'), ('Interface', [('Id', 'I')])])])
-
-  # testing the gcc pre-processing
-  def test_gcc_preprocessing(self):
-    self._run_test(
-      idlparser.WEBKIT_SYNTAX,
-      '''
-      #if 1
-        module M1 {};
-      #endif
-      #if 0
-        module M2 {};
-      #endif
-      ''',
-      [('Module', [('Id', 'M1')])])
-
-  def test_attribute_with_exceptoins(self):
-    self._run_test(
-      idlparser.WEBKIT_SYNTAX,
-      '''interface I {
-        attribute boolean A setter raises (E), getter raises (E);
-      };''',
-      [('Interface', [('Id', 'I'), ('Attribute', [('Type', [('BooleanType', None)]), ('Id', 'A'), ('SetRaises', [('ScopedName', 'E')]), ('GetRaises', [('ScopedName', 'E')])])])])
-
-  def test_interface_with_extended_attributes(self):
-    self._run_test(
-      idlparser.WEBKIT_SYNTAX,
-      'interface [ExAt1, ExAt2] I {};',
-      [('Interface', [('ExtAttrs', [('ExtAttr', [('Id', 'ExAt1')]), ('ExtAttr', [('Id', 'ExAt2')])]), ('Id', 'I')])])
-
-  def test_implements_statement(self):
-    self._run_test(
-      idlparser.WEBIDL_SYNTAX,
-      'X implements Y;',
-      [('ImplStmt', [('ImplStmtImplementor', ('ScopedName', 'X')), ('ImplStmtImplemented', ('ScopedName', 'Y'))])])
-
-  def test_operation(self):
-    self._run_test(
-      None,
-      'interface I { boolean func(); };',
-      [('Interface', [('Id', 'I'), ('Operation', [('ReturnType', [('BooleanType', None)]), ('Id', 'func')])])])
-
-  def test_attribute_types(self):
-    self._run_test(
-      None,
-      '''interface I {
-        attribute boolean boolAttr;
-        attribute DOMString strAttr;
-        attribute SomeType someAttr;
-      };''',
-      [('Interface', [('Id', 'I'), ('Attribute', [('Type', [('BooleanType', None)]), ('Id', 'boolAttr')]), ('Attribute', [('Type', [('ScopedName', 'DOMString')]), ('Id', 'strAttr')]), ('Attribute', [('Type', [('ScopedName', 'SomeType')]), ('Id', 'someAttr')])])])
-
-  def test_constants(self):
-    self._run_test(
-      None,
-      '''interface I {
-        const long c1 = 0;
-        const long c2 = 1;
-        const long c3 = 0x01;
-        const long c4 = 10;
-        const boolean b1 = true;
-        const boolean b1 = false;
-      };''',
-      [('Interface', [('Id', 'I'), ('Const', [('Type', [('LongType', None)]), ('Id', 'c1'), ('ConstExpr', '0')]), ('Const', [('Type', [('LongType', None)]), ('Id', 'c2'), ('ConstExpr', '1')]), ('Const', [('Type', [('LongType', None)]), ('Id', 'c3'), ('ConstExpr', '0x01')]), ('Const', [('Type', [('LongType', None)]), ('Id', 'c4'), ('ConstExpr', '10')]), ('Const', [('Type', [('BooleanType', None)]), ('Id', 'b1'), ('ConstExpr', 'true')]), ('Const', [('Type', [('BooleanType', None)]), ('Id', 'b1'), ('ConstExpr', 'false')])])])
-
-  def test_inheritance(self):
-    self._run_test(
-      None,
-      '''
-      interface Shape {};
-      interface Rectangle : Shape {};
-      interface Square : Rectangle, Shape {};
-      ''',
-      [('Interface', [('Id', 'Shape')]), ('Interface', [('Id', 'Rectangle'), ('ParentInterface', [('InterfaceType', ('ScopedName', 'Shape'))])]), ('Interface', [('Id', 'Square'), ('ParentInterface', [('InterfaceType', ('ScopedName', 'Rectangle'))]), ('ParentInterface', [('InterfaceType', ('ScopedName', 'Shape'))])])])
-
-  def test_annotations(self):
-    self._run_test(
-      idlparser.FREMONTCUT_SYNTAX,
-      '@Ano1 @Ano2() @Ano3(x) @Ano4(x=1,y=2) interface I {};',
-      [('Interface', [('Annotation', [('Id', 'Ano1')]), ('Annotation', [('Id', 'Ano2')]), ('Annotation', [('Id', 'Ano3'), ('AnnotationArg', [('Id', 'x')])]), ('Annotation', [('Id', 'Ano4'), ('AnnotationArg', [('Id', 'x'), ('AnnotationArgValue', '1')]), ('AnnotationArg', [('Id', 'y'), ('AnnotationArgValue', '2')])]), ('Id', 'I')])])
-
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/idlrenderer.dart b/elemental/idl/scripts/idlrenderer.dart
deleted file mode 100644
index e62c4a7..0000000
--- a/elemental/idl/scripts/idlrenderer.dart
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-List sorted(Iterable input, [compare, key]) {
-  comparator(compare, key) {
-    if (compare == null && key == null)
-      return (a, b) => a.compareTo(b);
-    if (compare == null)
-      return (a, b) => key(a).compareTo(key(b));
-    if (key == null)
-      return compare;
-    return (a, b) => compare(key(a), key(b));
-  }
-  List copy = new List.from(input);
-  copy.sort(comparator(compare, key));
-  return copy;
-}
-
-render(idl_node, [indent_str='  ']) {
-  var output = [''];
-  var indent_stack = [];
-
-  indented(action) {  // TODO: revert to  indented(action()) {
-    indent_stack.add(indent_str);
-    action();
-    indent_stack.removeLast();
-  }
-
-  sort(nodes) => sorted(nodes, key: (a) => a.id);
-
-  var w; // For some reason mutually recursive local functions don't work.
-
-  wln([node]) {
-    w(node);
-    output.add('\n');
-  }
-
-  w = (node, [list_separator]) {
-    /*
-     Writes the given node.
-
-    Args:
-      node -- a string, IDLNode instance or a list of such.
-      list_separator -- if provided, and node is a list,
-        list_separator will be written between the list items.
-    */
-    if (node == null) {
-      return;
-    } else if (node is String) {
-      if (output.last().endsWith('\n'))
-        output.addAll(indent_stack);
-      output.add(node);
-    } else if (node is List) {
-      var separator = null;
-      for (var element in node) {
-        w(separator);
-        separator = list_separator;
-        w(element);
-      }
-    } else if (node is IDLFile) {
-      w(node.modules);
-      w(node.interfaces);
-    } else if (node is IDLModule) {
-      w(node.annotations);
-      w(node.extAttrs);
-      wln('module ${node.id} {');
-      indented(() {
-          w(node.interfaces);
-          w(node.typedefs);
-        });
-      wln('};');
-    } else if (node is IDLInterface) {
-      w(node.annotations);
-      w(node.extAttrs);
-      w('interface ${node.id}');
-      indented(() {
-          if (!node.parents.isEmpty()) {
-            wln(' :');
-            w(node.parents, ',\n');
-          }
-          wln(' {');
-          section(list, comment) {
-            if (list != null && !list.isEmpty()) {
-              wln();
-              wln(comment);
-              w(sort(list));
-            }
-          }
-          section(node.constants, '/* Constants */');
-          section(node.attributes, '/* Attributes */');
-          section(node.operations, '/* Operations */');
-          section(node.snippets, '/* Snippets */');
-        });
-      wln('};');
-    } else if (node is IDLParentInterface) {
-      w(node.annotations);
-      w(node.type.id);
-    } else if (node is IDLAnnotations) {
-      for (var name in sorted(node.map.getKeys())) {
-        IDLAnnotation annotation = node.map[name];
-        var args = annotation.map;
-        if (args.isEmpty()) {
-          w('@$name');
-        } else {
-          var formattedArgs = [];
-          for (var argName in sorted(args.getKeys())) {
-            var argValue = args[argName];
-            if (argValue == null)
-              formattedArgs.add(argName);
-            else
-              formattedArgs.add('$argName=$argValue');
-          }
-          w('@$name(${Strings.join(formattedArgs,',')})');
-        }
-        w(' ');
-      }
-    } else if (node is IDLExtAttrs) {
-      if(!node.map.isEmpty()) {
-        w('[');
-        var sep = null;
-        for (var name in sorted(node.map.getKeys())) {
-          w(sep);
-          sep = ', ';
-          w(name);
-          var value = node.map[name];
-          if (value != null) {
-            w('=');
-            w(value);
-          }
-        }
-        w('] ');
-      }
-    } else if (node is IDLAttribute) {
-      w(node.annotations);
-      w(node.extAttrs);
-      //if (node.isFcGetter)
-      //  w('getter ');
-      //if (node.isFcSetter)
-      //  w('setter ');
-      wln('attribute ${node.type.id} ${node.id};');
-    } else if (node is IDLConstant) {
-      w(node.annotations);
-      w(node.extAttrs);
-      wln('const ${node.type.id} ${node.id} = ${node.value};');
-    } else if (node is IDLSnippet) {
-      w(node.annotations);
-      wln('snippet {${node.text}};');
-    } else if (node is IDLOperation) {
-      w(node.annotations);
-      w(node.extAttrs);
-      if (node.specials != null && !node.specials.isEmpty()) {
-        w(node.specials, ' ');
-        w(' ');
-      }
-      w('${node.type.id} ${node.id}');
-      w('(');
-      w(node.arguments, ', ');
-      wln(');');
-    } else if (node is IDLArgument) {
-      w(node.extAttrs);
-      w('in ');
-      if (node.isOptional)
-        w('optional ');
-      w('${node.type.id} ${node.id}');
-    } else if (node is IDLExtAttrFunctionValue) {
-      w(node.name);
-      w('(');
-      w(node.arguments, ', ');
-      w(')');
-    } else if (node is IDLTypeDef) {
-      wln('typedef ${node.type.id} ${node.id};');
-    } else {
-      w('// $node\n');
-    }
-  };
-
-  w(idl_node);
-  return Strings.concatAll(output);
-}
diff --git a/elemental/idl/scripts/idlrenderer.py b/elemental/idl/scripts/idlrenderer.py
deleted file mode 100755
index 131a476..0000000
--- a/elemental/idl/scripts/idlrenderer.py
+++ /dev/null
@@ -1,180 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-from idlnode import *
-
-
-def render(idl_node, indent_str='  '):
-  output = []
-  indent_stack = []
-
-  def begin_indent():
-    indent_stack.append(indent_str)
-  def end_indent():
-    indent_stack.pop()
-
-  def sort(nodes):
-    return sorted(nodes, key=lambda node: node.id)
-
-  def wln(node=None):
-    """Writes the given node and adds a new line."""
-    w(node)
-    output.append('\n')
-
-  def wsp(node):
-    """Writes the given node and adds a space if there was output."""
-    mark = len(output)
-    w(node)
-    if mark != len(output):
-      w(' ')
-
-  def w(node, list_separator=None):
-    """Writes the given node.
-
-    Args:
-      node -- a string, IDLNode instance or a list of such.
-      list_separator -- if provided, and node is a list,
-        list_separator will be written between the list items.
-    """
-    if node is None:
-      return
-    elif isinstance(node, str):
-      if output and output[-1].endswith('\n'):
-        # Auto-indent.
-        output.extend(indent_stack)
-      output.append(node)
-    elif isinstance(node, list):
-      for i in range(0, len(node)):
-        if i > 0:
-          w(list_separator)
-        w(node[i])
-    elif isinstance(node, IDLFile):
-      w(node.modules)
-      w(node.interfaces)
-    elif isinstance(node, IDLModule):
-      wsp(node.annotations)
-      wsp(node.ext_attrs)
-      wln('module %s {' % node.id)
-      begin_indent()
-      w(node.interfaces)
-      w(node.typeDefs)
-      end_indent()
-      wln('};')
-    elif isinstance(node, IDLInterface):
-      if node.annotations:
-        wln(node.annotations)
-      if node.ext_attrs:
-        wln(node.ext_attrs)
-      w('interface %s' % node.id)
-      begin_indent()
-      begin_indent()
-      if node.parents:
-        wln(' :')
-        w(node.parents, ',\n')
-      wln(' {')
-      end_indent()
-      if node.constants:
-        wln()
-        wln('/* Constants */')
-        w(sort(node.constants))
-      if node.attributes:
-        wln()
-        wln('/* Attributes */')
-        w(sort(node.attributes))
-      if node.operations:
-        wln()
-        wln('/* Operations */')
-        w(sort(node.operations))
-      end_indent()
-      wln('};')
-    elif isinstance(node, IDLParentInterface):
-      wsp(node.annotations)
-      w(node.type.id)
-    elif isinstance(node, IDLAnnotations):
-      sep = ''
-      for (name, annotation) in sorted(node.items()):
-        w(sep)
-        sep = ' '
-        if annotation and len(annotation):
-          subRes = []
-          for (argName, argValue) in sorted(annotation.items()):
-            if argValue is None:
-              subRes.append(argName)
-            else:
-              subRes.append('%s=%s' % (argName, argValue))
-          w('@%s(%s)' % (name, ', '.join(subRes)))
-        else:
-          w('@%s' % name)
-    elif isinstance(node, IDLExtAttrs):
-      if len(node):
-        w('[')
-        i = 0
-        for k in sorted(node):
-          if i > 0:
-            w(', ')
-          w(k)
-          v = node[k]
-          if v is not None:
-            if isinstance(v, IDLExtAttrFunctionValue):
-              if v.id:
-                w('=')
-              w(v)
-            else:
-              w('=%s' % v.__str__())
-          i += 1
-        w(']')
-    elif isinstance(node, IDLExtAttrFunctionValue):
-      if node.id:
-        w(node.id)
-      w('(')
-      w(node.arguments, ', ')
-      w(')')
-    elif isinstance(node, IDLAttribute):
-      wsp(node.annotations)
-      wsp(node.ext_attrs)
-      if node.is_fc_getter:
-        w('getter ')
-      if node.is_fc_setter:
-        w('setter ')
-      w('attribute %s %s' % (node.type.id, node.id))
-      if node.raises:
-        w(' raises (%s)' % node.raises.id)
-      elif node.is_fc_getter and node.get_raises:
-        w(' getraises (%s)' % node.get_raises.id)
-      elif node.is_fc_setter and node.set_raises:
-        w(' setraises (%s)' % node.set_raises.id)
-      wln(';')
-    elif isinstance(node, IDLConstant):
-      wsp(node.annotations)
-      wsp(node.ext_attrs)
-      wln('const %s %s = %s;' % (node.type.id, node.id, node.value))
-    elif isinstance(node, IDLOperation):
-      wsp(node.annotations)
-      wsp(node.ext_attrs)
-      if node.is_static:
-        w('static ')
-      if node.specials:
-        w(node.specials, ' ')
-        w(' ')
-      w('%s ' % node.type.id)
-      w(node.id)
-      w('(')
-      w(node.arguments, ', ')
-      w(')')
-      if node.raises:
-        w(' raises (%s)' % node.raises.id)
-      wln(';')
-    elif isinstance(node, IDLArgument):
-      wsp(node.ext_attrs)
-      w('in ')
-      if node.is_optional:
-        w('optional ')
-      w('%s %s' % (node.type.id, node.id))
-    else:
-      raise TypeError("Expected str or IDLNode but %s found" %
-        type(node))
-
-  w(idl_node)
-  return ''.join(output)
diff --git a/elemental/idl/scripts/idlrenderer_test.py b/elemental/idl/scripts/idlrenderer_test.py
deleted file mode 100755
index ba788af..0000000
--- a/elemental/idl/scripts/idlrenderer_test.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import idlnode
-import idlparser
-import idlrenderer
-import logging.config
-import unittest
-
-
-class IDLRendererTestCase(unittest.TestCase):
-
-  def _run_test(self, input_text, expected_text):
-    """Parses input, renders it and compares the results"""
-    parser = idlparser.IDLParser(idlparser.FREMONTCUT_SYNTAX)
-    idl_file = idlnode.IDLFile(parser.parse(input_text))
-    output_text = idlrenderer.render(idl_file)
-
-    if output_text != expected_text:
-      msg = '''
-EXPECTED:
-%s
-ACTUAL  :
-%s
-''' % (expected_text, output_text)
-      self.fail(msg)
-
-  def test_rendering(self):
-    input_text = \
-'''module M {
-  [Constructor(long x)] interface I : @A J, K {
-    attribute int attr;
-    readonly attribute long attr2;
-    getter attribute int get_attr;
-    setter attribute int set_attr;
-
-    [A,B=123] void function(in long x, in optional boolean y);
-
-    const boolean CONST = 1;
-
-    @A @B() @C(x) @D(x=1) @E(x,y=2)
-    void something();
-  };
-};
-@X module M2 {
-  @Y interface I {};
-};'''
-
-    expected_text = \
-'''module M {
-  [Constructor(in long x)]
-  interface I :
-      @A J,
-      K {
-
-    /* Constants */
-    const boolean CONST = 1;
-
-    /* Attributes */
-    attribute int attr;
-    attribute long attr2;
-    getter attribute int get_attr;
-    setter attribute int set_attr;
-
-    /* Operations */
-    [A, B=123] void function(in long x, in optional boolean y);
-    @A @B @C(x) @D(x=1) @E(x, y=2) void something();
-  };
-};
-@X module M2 {
-  @Y
-  interface I {
-  };
-};
-'''
-    self._run_test(input_text, expected_text)
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/idlsync.py b/elemental/idl/scripts/idlsync.py
deleted file mode 100755
index 930698f..0000000
--- a/elemental/idl/scripts/idlsync.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import optparse
-import os
-import os.path
-import re
-import shutil
-import subprocess
-import sys
-
-SCRIPT_PATH = os.path.abspath(os.path.dirname(__file__))
-DART_PATH = os.path.abspath(os.path.join(SCRIPT_PATH, '..', '..', '..'))
-
-# Path to install latest IDL.
-IDL_PATH = os.path.join(DART_PATH, 'third_party', 'WebCore')
-
-# Whitelist of files to keep.
-WHITELIST = [
-    r'LICENSE(\S+)',
-    r'(\S+)\.idl']
-
-# README file to generate.
-README = os.path.join(IDL_PATH, 'README')
-
-# SVN URL to latest Dartium version of WebKit.
-DEPS = 'http://dart.googlecode.com/svn/branches/bleeding_edge/deps/dartium.deps/DEPS'
-URL_PATTERN = r'"dartium_webkit_trunk": "(\S+)",'
-REV_PATTERN = r'"dartium_webkit_revision": "(\d+)",'
-WEBCORE_SUBPATH = 'Source/WebCore'
-
-
-def RunCommand(cmd):
-  """Executes a shell command and return its stdout."""
-  print ' '.join(cmd)
-  pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-  output = pipe.communicate()
-  if pipe.returncode == 0:
-    return output[0]
-  else:
-    print output[1]
-    print 'FAILED. RET_CODE=%d' % pipe.returncode
-    sys.exit(pipe.returncode)
-
-
-def GetWebkitSvnRevision():
-  """Returns a tuple with the (dartium webkit repo, latest revision)."""
-  deps = RunCommand(['svn', 'cat', DEPS])
-  url = re.search(URL_PATTERN, deps).group(1)
-  revision = re.search(REV_PATTERN, deps).group(1)
-  return (url, revision)
-
-
-def RefreshIDL(url, revision):
-  """Refreshes the IDL to specific WebKit url / revision."""
-  cwd = os.getcwd()
-  try:
-    shutil.rmtree(IDL_PATH)
-    os.chdir(os.path.dirname(IDL_PATH))
-    RunCommand(['svn', 'export', '-r', revision, url + '/' + WEBCORE_SUBPATH])
-  finally:
-    os.chdir(cwd)
-
-
-def PruneExtraFiles():
-  """Removes all files that do not match the whitelist."""
-  pattern = re.compile(reduce(lambda x,y: '%s|%s' % (x,y),
-                              map(lambda z: '(%s)' % z, WHITELIST)))
-  for (root, dirs, files) in os.walk(IDL_PATH, topdown=False):
-    for f in files:
-      if not pattern.match(f):
-        os.remove(os.path.join(root, f))
-    for d in dirs:
-      dirpath = os.path.join(root, d)
-      if not os.listdir(dirpath):
-        shutil.rmtree(dirpath)
-
-
-def ParseOptions():
-  parser = optparse.OptionParser()
-  parser.add_option('--revision', '-r', dest='revision',
-                    help='Revision to install', default=None)
-  args, _ = parser.parse_args()
-  return args.revision
-
-
-def GenerateReadme(url, revision):
-  readme = """This directory contains a copy of WebKit/WebCore IDL files.
-See the attached LICENSE-* files in this directory.
-
-Please do not modify the files here.  They are periodically copied
-using the script: $DART_ROOT/lib/dom/scripts/%(script)s
-
-The current version corresponds to:
-URL: %(url)s
-Current revision: %(revision)s
-""" % {
-    'script': os.path.basename(__file__),
-    'url': url,
-    'revision': revision }
-  out = open(README, 'w')
-  out.write(readme)
-  out.close()
-
-
-def main():
-  revision = ParseOptions()
-  url, latest = GetWebkitSvnRevision()
-  if not revision:
-    revision = latest
-  RefreshIDL(url, revision)
-  PruneExtraFiles()
-  GenerateReadme(url, revision)
-
-
-if __name__ == '__main__':
-  main()
diff --git a/elemental/idl/scripts/logging.conf b/elemental/idl/scripts/logging.conf
deleted file mode 100644
index 99e2496..0000000
--- a/elemental/idl/scripts/logging.conf
+++ /dev/null
@@ -1,64 +0,0 @@
-[loggers]
-keys=root,pegparser,database,databasebuilder,dartgenerator,elementalgenerator,snippet_manager,w3cscraper
-
-[handlers]
-keys=consoleHandler
-
-[formatters]
-keys=simpleFormatter
-
-[logger_root]
-level=INFO
-handlers=consoleHandler
-
-[logger_pegparser]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=pegparser
-
-[logger_database]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=database
-
-[logger_databasebuilder]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=databasebuilder
-
-[logger_w3cscraper]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=w3cscraper
-
-[logger_snippet_manager]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=snippet_manager
-
-[logger_dartgenerator]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=dartgenerator
-
-[logger_elementalgenerator]
-level=INFO
-propagate=0
-handlers=consoleHandler
-qualname=elementalgenerator
-
-[handler_consoleHandler]
-class=StreamHandler
-level=INFO
-formatter=simpleFormatter
-args=(sys.stdout,)
-
-[formatter_simpleFormatter]
-format=%(name)s - %(levelname)s - %(message)s
-datefmt=
diff --git a/elemental/idl/scripts/multiemitter.py b/elemental/idl/scripts/multiemitter.py
deleted file mode 100644
index 19d9000..0000000
--- a/elemental/idl/scripts/multiemitter.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Templating to help generate structured text."""
-
-import os
-import re
-import emitter
-import logging
-
-_logger = logging.getLogger('multiemitter')
-
-class MultiEmitter(object):
-  """A set of Emitters that write to different files.
-
-  Each entry has a key.
-
-  file --> emitter
-  key --> emitter
-
-  """
-
-  def __init__(self):
-    self._key_to_emitter = {}     # key -> Emitter
-    self._filename_to_emitter = {}    # filename -> Emitter
-
-
-  def FileEmitter(self, filename, key=None):
-    """Creates an emitter for writing to a file.
-
-    When this MultiEmitter is flushed, the contents of the emitter are written
-    to the file.
-
-    Arguments:
-      filename: a string, the path name of the file
-      key: provides an access key to retrieve the emitter.
-
-    Returns: the emitter.
-    """
-    e = emitter.Emitter()
-    self._filename_to_emitter[filename] = e
-    if key:
-      self.Associate(key, e)
-    return e
-
-  def Associate(self, key, emitter):
-    """Associates a key with an emitter."""
-    self._key_to_emitter[key] = emitter
-
-  def Find(self, key):
-    """Returns the emitter associated with |key|."""
-    return self._key_to_emitter[key]
-
-  def Flush(self, writer=None):
-    """Writes all pending files.
-
-    Arguments:
-      writer: a function called for each file and it's lines.
-    """
-    if not writer:
-      writer = _WriteFile
-    for file in sorted(self._filename_to_emitter.keys()):
-      emitter = self._filename_to_emitter[file]
-      writer(file, emitter.Fragments())
-
-
-def _WriteFile(path, lines):
-  (dir, file) = os.path.split(path)
-
-  # Ensure dir exists.
-  if dir:
-    if not os.path.isdir(dir):
-      os.makedirs(dir)
-
-  # Remove file if pre-existing.
-  if os.path.exists(path):
-    os.remove(path)
-
-  # Write the file.
-  # _logger.info('Flushing - %s' % path)
-  f = open(path, 'w')
-  f.writelines(lines)
-  f.close()
diff --git a/elemental/idl/scripts/multiemitter_test.py b/elemental/idl/scripts/multiemitter_test.py
deleted file mode 100644
index 00a28b7..0000000
--- a/elemental/idl/scripts/multiemitter_test.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""Tests for emitter module."""
-
-import logging.config
-import unittest
-import emitter
-import multiemitter
-
-
-class MultiEmitterTestCase(unittest.TestCase):
-
-  def setUp(self):
-    pass
-
-  def tearDown(self):
-    pass
-
-  def check(self, m, expected):
-    """Verifies that the multiemitter contains the expected contents.
-
-    Expected is a list of (filename, content) pairs, sorted by filename.
-    """
-    files = []
-    def _Collect(file, contents):
-      files.append((file, ''.join(contents)))
-    m.Flush(_Collect)
-    self.assertEquals(expected, files)
-
-  def testExample(self):
-    m = multiemitter.MultiEmitter()
-    e1 = m.FileEmitter('file1')
-    e2 = m.FileEmitter('file2', 'key2')
-    e1.Emit('Hi 1')
-    e2.Emit('Hi 2')
-    m.Find('key2').Emit('Bye 2')
-    self.check(m,
-               [('file1', 'Hi 1'),
-                ('file2', 'Hi 2Bye 2') ])
-
-if __name__ == '__main__':
-  logging.config.fileConfig('logging.conf')
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/pegparser.py b/elemental/idl/scripts/pegparser.py
deleted file mode 100755
index 1bdcc7b..0000000
--- a/elemental/idl/scripts/pegparser.py
+++ /dev/null
@@ -1,527 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import logging
-import re
-import weakref
-
-_logger = logging.getLogger('pegparser')
-
-# functions can refer to each other, hence creating infinite loops. The
-# following hashmap is used to memoize functions that were already compiled.
-_compiled_functions_memory = weakref.WeakKeyDictionary()
-
-_regex_type = type(re.compile(r''))
-_list_type = type([])
-_function_type = type(lambda func: 0)
-
-
-class _PegParserState(object):
-  """Object for storing parsing state variables and options"""
-
-  def __init__(self, text, whitespace_rule, strings_are_tokens):
-    # Parsing state:
-    self.text = text
-    self.is_whitespace_mode = False
-
-    # Error message helpers:
-    self.max_pos = None
-    self.max_rule = None
-
-    # Parsing options:
-    self.whitespace_rule = whitespace_rule
-    self.strings_are_tokens = strings_are_tokens
-
-
-class _PegParserRule(object):
-  """Base class for all rules"""
-
-  def __init__(self):
-    return
-
-  def __str__(self):
-    return self.__class__.__name__
-
-  def _match_impl(self, state, pos):
-    """Default implementation of the matching algorithm.
-    Should be overwritten by sub-classes.
-    """
-    raise RuntimeError('_match_impl not implemented')
-
-  def match(self, state, pos):
-    """Matches the rule against the text in the given position.
-
-    The actual rule evaluation is delegated to _match_impl,
-    while this function deals mostly with support tasks such as
-    skipping whitespace, debug information and data for exception.
-
-    Args:
-      state -- the current parsing state and options.
-      pos -- the current offset in the text.
-
-    Returns:
-      (next position, value) if the rule matches, or
-      (None, None) if it doesn't.
-    """
-    if not state.is_whitespace_mode:
-      # Skip whitespace
-      pos = _skip_whitespace(state, pos)
-
-      # Track position for possible error messaging
-      if pos > state.max_pos:
-        # Store position and the rule.
-        state.max_pos = pos
-        if isinstance(self, _StringRule):
-          state.max_rule = [self]
-        else:
-          state.max_rule = []
-      elif pos == state.max_pos:
-        if isinstance(self, _StringRule):
-          state.max_rule.append(self)
-
-      if _logger.isEnabledFor(logging.DEBUG):
-        # Used for debugging
-        _logger.debug('Try:   pos=%s char=%s rule=%s' % \
-          (pos, state.text[pos:pos + 1], self))
-
-    # Delegate the matching logic to the specialized function.
-    res = self._match_impl(state, pos)
-
-    if not state.is_whitespace_mode \
-      and _logger.isEnabledFor(logging.DEBUG):
-      # More debugging information
-      (nextPos, ast) = res
-      if nextPos is not None:
-        _logger.debug('Match! pos=%s char=%s rule=%s' % \
-          (pos, state.text[pos:pos + 1], self))
-      else:
-        _logger.debug('Fail.  pos=%s char=%s rule=%s' % \
-          (pos, state.text[pos:pos + 1], self))
-
-    return res
-
-
-def _compile(rule):
-  """Recursively compiles user-defined rules into parser rules.
-  Compilation is performed by converting strings, regular expressions, lists
-  and functions into _StringRule, _RegExpRule, SEQUENCE and _FunctionRule
-  (respectively). Memoization is used to avoid infinite recursion as rules
-  may refer to each other."""
-  if rule is None:
-    raise RuntimeError('None is not a valid rule')
-  elif isinstance(rule, str):
-    return _StringRule(rule)
-  elif isinstance(rule, _regex_type):
-    return _RegExpRule(rule)
-  elif isinstance(rule, _list_type):
-    return SEQUENCE(*rule)
-  elif isinstance(rule, _function_type):
-    # Memoize compiled functions to avoid infinite compliation loops.
-    if rule in _compiled_functions_memory:
-      return _compiled_functions_memory[rule]
-    else:
-      compiled_function = _FunctionRule(rule)
-      _compiled_functions_memory[rule] = compiled_function
-      compiled_function._sub_rule = _compile(rule())
-      return compiled_function
-  elif isinstance(rule, _PegParserRule):
-    return rule
-  else:
-    raise RuntimeError('Invalid rule type %s: %s', (type(rule), rule))
-
-
-def _skip_whitespace(state, pos):
-  """Returns the next non-whitespace position.
-  This is done by matching the optional whitespace_rule with the current
-  text."""
-  if not state.whitespace_rule:
-    return pos
-  state.is_whitespace_mode = True
-  nextPos = pos
-  while nextPos is not None:
-    pos = nextPos
-    (nextPos, ast) = state.whitespace_rule.match(state, pos)
-  state.is_whitespace_mode = False
-  return pos
-
-
-class _StringRule(_PegParserRule):
-  """This rule tries to match a whole string."""
-
-  def __init__(self, string):
-    """Constructor.
-    Args:
-      string -- string to match.
-    """
-    _PegParserRule.__init__(self)
-    self._string = string
-
-  def __str__(self):
-    return '"%s"' % self._string
-
-  def _match_impl(self, state, pos):
-    """Tries to match the string at the current position"""
-    if state.text.startswith(self._string, pos):
-      nextPos = pos + len(self._string)
-      if state.strings_are_tokens:
-        return (nextPos, None)
-      else:
-        return (nextPos, self._string)
-    return (None, None)
-
-
-class _RegExpRule(_PegParserRule):
-  """This rule tries to matches a regular expression."""
-
-  def __init__(self, reg_exp):
-    """Constructor.
-    Args:
-      reg_exp -- a regular expression used in matching.
-    """
-    _PegParserRule.__init__(self)
-    self.reg_exp = reg_exp
-
-  def __str__(self):
-    return 'regexp'
-
-  def _match_impl(self, state, pos):
-    """Tries to match the regular expression with current text"""
-    matchObj = self.reg_exp.match(state.text, pos)
-    if matchObj:
-      matchStr = matchObj.group()
-      return (pos + len(matchStr), matchStr)
-    return (None, None)
-
-
-class _FunctionRule(_PegParserRule):
-  """Function rule wraps a rule defined via a Python function.
-
-  Defining rules via functions helps break the grammar into parts, labeling
-  the ast, and supporting recursive definitions in the grammar
-
-  Usage Example:
-    def Func(): return ['function', TOKEN('('), TOKEN(')')]
-    def Var(): return OR('x', 'y')
-    def Program(): return OR(Func, Var)
-
-  When matched with 'function()', will return the tuple:
-    ('Program', ('Func', 'function'))
-  When matched with 'x', will return the tuple:
-    ('Program', ('Var', 'x'))
-
-  Functions who's name begins with '_' will not be labelled. This is useful
-  for creating utility rules. Extending the example above:
-
-    def _Program(): return OR(Func, Var)
-
-  When matched with 'function()', will return the tuple:
-    ('Func', 'function')
-  """
-
-  def __init__(self, func):
-    """Constructor.
-    Args:
-      func -- the original function will be used for labeling output.
-    """
-    _PegParserRule.__init__(self)
-    self._func = func
-    # Sub-rule is compiled by _compile to avoid infinite recursion.
-    self._sub_rule = None
-
-  def __str__(self):
-    return self._func.__name__
-
-  def _match_impl(self, state, pos):
-    """Simply invokes the sub rule"""
-    (nextPos, ast) = self._sub_rule.match(state, pos)
-    if nextPos is not None:
-      if not self._func.__name__.startswith('_'):
-        ast = (self._func.__name__, ast)
-      return (nextPos, ast)
-    return (None, None)
-
-
-class SEQUENCE(_PegParserRule):
-  """This rule expects all given rules to match in sequence.
-  Note that SEQUENCE is equivalent to a rule composed of a Python list of
-  rules.
-  Usage example: SEQUENCE('A', 'B', 'C')
-         or: ['A', 'B', 'C']
-  Will match 'ABC' but not 'A', 'B' or ''.
-  """
-  def __init__(self, *rules):
-    """Constructor.
-    Args:
-      rules -- one or more rules to match.
-    """
-    _PegParserRule.__init__(self)
-    self._sub_rules = []
-    for rule in rules:
-      self._sub_rules.append(_compile(rule))
-
-  def _match_impl(self, state, pos):
-    """Tries to match all the sub rules"""
-    sequence = []
-    for rule in self._sub_rules:
-      (nextPos, ast) = rule.match(state, pos)
-      if nextPos is not None:
-        if ast:
-          if isinstance(ast, _list_type):
-            sequence.extend(ast)
-          else:
-            sequence.append(ast)
-        pos = nextPos
-      else:
-        return (None, None)
-    return (pos, sequence)
-
-
-class OR(_PegParserRule):
-  """This rule matches one and only one of multiple sub-rules.
-  Usage example: OR('A', 'B', 'C')
-  Will match 'A', 'B' or 'C'.
-  """
-  def __init__(self, *rules):
-    """Constructor.
-    Args:
-      rules -- rules to choose from.
-    """
-    _PegParserRule.__init__(self)
-    self._sub_rules = []
-    for rule in rules:
-      self._sub_rules.append(_compile(rule))
-
-  def _match_impl(self, state, pos):
-    """Tries to match at leat one of the sub rules"""
-    for rule in self._sub_rules:
-      (nextPos, ast) = rule.match(state, pos)
-      if nextPos is not None:
-        return (nextPos, ast)
-    return (None, None)
-
-
-class MAYBE(_PegParserRule):
-  """Will try to match the given rule, tolerating absence.
-  Usage example: MAYBE('A')
-  Will match 'A' but also ''.
-  """
-  def __init__(self, rule):
-    """Constructor.
-    Args:
-      rule -- the rule that may be absent.
-    """
-    _PegParserRule.__init__(self)
-    self._sub_rule = _compile(rule)
-
-  def _match_impl(self, state, pos):
-    """Tries to match at leat one of the sub rules"""
-    (nextPos, ast) = self._sub_rule.match(state, pos)
-    if nextPos is not None:
-      return (nextPos, ast)
-    return (pos, None)
-
-
-class MANY(_PegParserRule):
-  """Will try to match the given rule one or more times.
-  Usage example 1: MANY('A')
-  Will match 'A', 'AAAAA' but not ''.
-  Usage example 2: MANY('A', separator=',')
-  Will match 'A', 'A,A' but not 'AA'.
-  """
-
-  def __init__(self, rule, separator=None):
-    """Constructor.
-    Args:
-      rule -- the rule to match multiple times.
-      separator -- this optional rule is used to match separators.
-    """
-    _PegParserRule.__init__(self)
-    self._sub_rule = _compile(rule)
-    self._separator = _compile(separator) if separator else None
-
-  def _match_impl(self, state, pos):
-    res = []
-    count = 0
-    while True:
-      if count > 0 and self._separator:
-        (nextPos, ast) = self._separator.match(state, pos)
-        if nextPos is not None:
-          pos = nextPos
-          if ast:
-            res.append(ast)
-        else:
-          break
-      (nextPos, ast) = self._sub_rule.match(state, pos)
-      if nextPos is None:
-        break
-      count += 1
-      pos = nextPos
-      res.append(ast)
-    if count > 0:
-      return (pos, res)
-    return (None, None)
-
-
-class TOKEN(_PegParserRule):
-  """The matched rule will not appear in the output.
-  Usage example: ['A', TOKEN('.'), 'B']
-  When matching 'A.B', will return the sequence ['A', 'B'].
-  """
-
-  def __init__(self, rule):
-    """Constructor.
-    Args:
-      rule -- the rule to match.
-    """
-    _PegParserRule.__init__(self)
-    self._sub_rule = _compile(rule)
-
-  def _match_impl(self, state, pos):
-    (nextPos, ast) = self._sub_rule.match(state, pos)
-    if nextPos is not None:
-      return (nextPos, None)
-    return (None, None)
-
-
-class LABEL(_PegParserRule):
-  """The matched rule will appear in the output with the given label.
-  Usage example: LABEL('number', re.compile(r'[0-9]+'))
-  When matched with '1234', will return ('number', '1234').
-
-  Keyword arguments:
-  label -- a string.
-  rule -- the rule to match.
-  """
-
-  def __init__(self, label, rule):
-    """Constructor.
-    Args:
-      rule -- the rule to match.
-    """
-    _PegParserRule.__init__(self)
-    self._label = label
-    self._sub_rule = _compile(rule)
-
-  def _match_impl(self, state, pos):
-    (nextPos, ast) = self._sub_rule.match(state, pos)
-    if nextPos is not None:
-      return (nextPos, (self._label, ast))
-    return (None, None)
-
-
-class RAISE(_PegParserRule):
-  """Raises a SyntaxError with a user-provided message.
-  Usage example: ['A','B', RAISE('should have not gotten here')]
-  Will not match 'A' but will raise an exception for 'AB'.
-  This rule is useful mostly for debugging grammars.
-  """
-  def __init__(self, message):
-    """Constructor.
-    Args:
-      message -- the message for the raised exception.
-    """
-    _PegParserRule.__init__(self)
-    self._message = message
-
-  def _match_impl(self, state, pos):
-    raise RuntimeError(self._message)
-
-
-class PegParser(object):
-  """PegParser class.
-  This generic parser can be configured with rules to parse a wide
-  range of inputs.
-  """
-
-  def __init__(self, root_rule, whitespace_rule=None,
-         strings_are_tokens=False):
-    """Initializes a PegParser with rules and parsing options.
-
-    Args:
-      root_rule -- the top level rule to start matching at. Rule can be
-        a regular expression, a string, or one of the special rules
-        such as SEQUENCE, MANY, OR, etc.
-      whitespace_rule -- used to identify and strip whitespace. Default
-        isNone, configuring the parser to not tolerate whitespace.
-      strings_are_tokens -- by default string rules are not treated as
-        tokens. In many programming languages, strings are tokens,
-        so this should be set to True.
-    """
-    self._strings_are_tokens = strings_are_tokens
-    self._root_rule = _compile(root_rule)
-    if whitespace_rule is None:
-      self._whitespace_rule = None
-    else:
-      self._whitespace_rule = _compile(whitespace_rule)
-
-  def parse(self, text, start_pos=0):
-    """Parses the given text input
-    Args:
-      text -- data to parse.
-      start_pos -- the offset to start parsing at.
-
-    Returns:
-      An abstract syntax tree, with nodes being pairs of the format
-      (label, value), where label is a string or a function, and value
-      is a string, a pair or a list of pairs.
-    """
-
-    def calculate_line_number_and_offset(globalOffset):
-      """Calculates the line number and in-line offset"""
-      i = 0
-      lineNumber = 1
-      lineOffset = 0
-      lineData = []
-      while i < globalOffset and i < len(text):
-        if text[i] == '\n':
-          lineNumber += 1
-          lineOffset = 0
-          lineData = []
-        else:
-          lineData.append(text[i])
-          lineOffset += 1
-        i += 1
-      while i < len(text) and  text[i] != '\n':
-        lineData.append(text[i])
-        i += 1
-      return (lineNumber, lineOffset, ''.join(lineData))
-
-    def analyze_result(state, pos, ast):
-      """Analyze match output"""
-      if pos is not None:
-        # Its possible that matching is successful but trailing
-        # whitespace remains, so skip it.
-        pos = _skip_whitespace(state, pos)
-      if pos == len(state.text):
-        # End of intput reached. Success!
-        return ast
-
-      # Failure - analyze and raise an error.
-      (lineNumber, lineOffset, lineData) = \
-        calculate_line_number_and_offset(state.max_pos)
-      message = 'unexpected error'
-      if state.max_rule:
-        set = {}
-        map(set.__setitem__, state.max_rule, [])
-
-        def to_str(item):
-          return item.__str__()
-
-        expected = ' or '.join(map(to_str, set.keys()))
-        found = state.text[state.max_pos:state.max_pos + 1]
-        message = 'Expected %s but "%s" found: "%s"' % \
-          (expected, found, lineData)
-      raise SyntaxError(
-        'At line %s offset %s: %s' % \
-        (lineNumber, lineOffset, message))
-
-    # Initialize state
-    state = _PegParserState(text,
-      whitespace_rule=self._whitespace_rule,
-      strings_are_tokens=self._strings_are_tokens)
-
-    # Match and analyze result
-    (pos, ast) = self._root_rule.match(state, start_pos)
-    return analyze_result(state, pos, ast)
diff --git a/elemental/idl/scripts/pegparser_test.py b/elemental/idl/scripts/pegparser_test.py
deleted file mode 100755
index 8af0f2d..0000000
--- a/elemental/idl/scripts/pegparser_test.py
+++ /dev/null
@@ -1,200 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import logging.config
-import pprint
-import re
-import sys
-import unittest
-from pegparser import *
-
-
-class PegParserTestCase(unittest.TestCase):
-
-  def _run_test(self, grammar, text, expected,
-          strings_are_tokens=False, whitespace_rule=None):
-    """Utility for running a parser test and comparing results.
-
-    Program exits (sys.exit) if expected does not match actual.
-
-    Args:
-      grammar -- the root rule to be used by the parser.
-      text -- the text to parse.
-      expected -- the expected abstract syntax tree. None means
-        failure is expected.
-      strings_are_tokens -- whether strings are treated as tokens.
-      whitespace_rule -- the rule used for matching whitespace.
-        Default is None, which means that no whitespace is tolerated.
-    """
-    parser = PegParser(grammar, whitespace_rule,
-               strings_are_tokens=strings_are_tokens)
-    actual = None
-    error = None
-    try:
-      actual = parser.parse(text)
-    except SyntaxError, e:
-      error = e
-      pass
-
-    if actual != expected:
-      msg = '''
-CONTENT:
-%s
-EXPECTED:
-%s
-ACTUAL:
-%s
-ERROR: %s''' % (text, pprint.pformat(expected), pprint.pformat(actual), error)
-      self.fail(msg)
-
-  def test_sequence(self):
-    sequence = SEQUENCE('A', 'BB', 'C')
-    self._run_test(grammar=sequence, text='ABBC', expected=['A', 'BB', 'C'])
-    self._run_test(grammar=sequence, text='BBAC', expected=None)
-    # Syntax Sugar
-    sequence = ['A', 'BB', 'C']
-    self._run_test(grammar=sequence, text='ABBC', expected=['A', 'BB', 'C'])
-    self._run_test(grammar=sequence, text='BBAC', expected=None)
-
-  def test_regex(self):
-    regex = re.compile(r'[A-Za-z]*')
-    self._run_test(grammar=regex, text='AaBb', expected='AaBb')
-    self._run_test(grammar=regex, text='0AaBb', expected=None)
-    self._run_test(grammar=regex, text='Aa0Bb', expected=None)
-
-  def test_function(self):
-    def Func():
-      return 'ABC'
-    self._run_test(grammar=Func, text='ABC', expected=('Func', 'ABC'))
-    self._run_test(grammar=Func, text='XYZ', expected=None)
-
-  def test_function_label(self):
-    def func():
-      return 'ABC'
-
-    def _func():
-      return 'ABC'
-
-    self._run_test(grammar=func, text='ABC', expected=('func', 'ABC'))
-    self._run_test(grammar=_func, text='ABC', expected='ABC')
-
-  def test_label(self):
-    sequence = [TOKEN('def'), LABEL('funcName', re.compile(r'[a-z0-9]*')),
-          TOKEN('():')]
-    self._run_test(grammar=sequence, text='def f1():',
-      whitespace_rule=' ', expected=[('funcName', 'f1')])
-    self._run_test(grammar=sequence, text='def f2():',
-      whitespace_rule=' ', expected=[('funcName', 'f2')])
-
-  def test_or(self):
-    grammer = OR('A', 'B')
-    self._run_test(grammar=grammer, text='A', expected='A')
-    self._run_test(grammar=grammer, text='B', expected='B')
-    self._run_test(grammar=grammer, text='C', expected=None)
-
-  def test_maybe(self):
-    seq = ['A', MAYBE('B'), 'C']
-    self._run_test(grammar=seq, text='ABC', expected=['A', 'B', 'C'])
-    self._run_test(grammar=seq, text='ADC', expected=None)
-    self._run_test(grammar=seq, text='AC', expected=['A', 'C'])
-    self._run_test(grammar=seq, text='AB', expected=None)
-
-  def test_many(self):
-    seq = ['A', MANY('B'), 'C']
-    self._run_test(grammar=seq, text='ABC', expected=['A', 'B', 'C'])
-    self._run_test(grammar=seq, text='ABBBBC',
-      expected=['A', 'B', 'B', 'B', 'B', 'C'])
-    self._run_test(grammar=seq, text='AC', expected=None)
-
-  def test_many_with_separator(self):
-    letter = OR('A', 'B', 'C')
-
-    def _gram():
-      return [letter, MAYBE([TOKEN(','), _gram])]
-
-    self._run_test(grammar=_gram, text='A,B,C,B',
-      expected=['A', 'B', 'C', 'B'])
-    self._run_test(grammar=_gram, text='A B C', expected=None)
-    shortergrammar = MANY(letter, TOKEN(','))
-    self._run_test(grammar=shortergrammar, text='A,B,C,B',
-      expected=['A', 'B', 'C', 'B'])
-    self._run_test(grammar=shortergrammar, text='A B C', expected=None)
-
-  def test_raise(self):
-    self._run_test(grammar=['A', 'B'], text='AB',
-      expected=['A', 'B'])
-    try:
-      self._run_test(grammar=['A', 'B', RAISE('test')], text='AB',
-        expected=None)
-      print 'Expected RuntimeError'
-      sys.exit(-1)
-    except RuntimeError, e:
-      return
-
-  def test_whitespace(self):
-    gram = MANY('A')
-    self._run_test(grammar=gram, text='A A  A', expected=None)
-    self._run_test(grammar=gram, whitespace_rule=' ', text='A A  A',
-      expected=['A', 'A', 'A'])
-
-  def test_math_expression_syntax(self):
-    operator = LABEL('op', OR('+', '-', '/', '*'))
-    literal = LABEL('num', re.compile(r'[0-9]+'))
-
-    def _exp():
-      return MANY(OR(literal, [TOKEN('('), _exp, TOKEN(')')]),
-            separator=operator)
-
-    self._run_test(grammar=_exp,
-      text='(1-2)+3*((4*5)*6)+(7+8/9)-10',
-      expected=[[('num', '1'), ('op', '-'), ('num', '2')],
-        ('op', '+'),
-        ('num', '3'),
-        ('op', '*'),
-        [[('num', '4'), ('op', '*'), ('num', '5')],
-          ('op', '*'), ('num', '6')],
-        ('op', '+'),
-        [('num', '7'), ('op', '+'), ('num', '8'),
-         ('op', '/'), ('num', '9')],
-        ('op', '-'),
-        ('num', '10')])
-
-  def test_mini_language(self):
-    def name():
-      return re.compile(r'[a-z]+')
-
-    def var_decl():
-      return ['var', name, ';']
-
-    def func_invoke():
-      return [name, '(', ')', ';']
-
-    def func_body():
-      return MANY(OR(var_decl, func_invoke))
-
-    def func_decl():
-      return ['function', name, '(', ')', '{', func_body, '}']
-
-    def args():
-      return MANY(name, ',')
-
-    def program():
-      return MANY(OR(var_decl, func_decl))
-
-    self._run_test(grammar=program,
-      whitespace_rule=OR('\n', ' '),
-      strings_are_tokens=True,
-      text='var x;\nfunction f(){\n  var y;\n  g();\n}\n',
-      expected=('program',[
-             ('var_decl', [('name', 'x')]),
-             ('func_decl', [('name', 'f'), ('func_body', [
-              ('var_decl', [('name', 'y')]),
-              ('func_invoke', [('name', 'g')])])])]))
-
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/scripts/systembase.py b/elemental/idl/scripts/systembase.py
deleted file mode 100644
index c4304b3..0000000
--- a/elemental/idl/scripts/systembase.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module provides base functionality for systems to generate
-Dart APIs from the IDL database."""
-
-import os
-#import re
-import generator
-
-def MassagePath(path):
-  # The most robust way to emit path separators is to use / always.
-  return path.replace('\\', '/')
-
-class System(object):
-  """A System generates all the files for one implementation.
-
-  This is a base class for all the specific systems.
-  The life-cycle of a System is:
-  - construction (__init__)
-  - (InterfaceGenerator | ProcessCallback)*  # for each IDL interface
-  - GenerateLibraries
-  - Finish
-  """
-
-  def __init__(self, templates, database, emitters, output_dir):
-    self._templates = templates
-    self._database = database
-    self._emitters = emitters
-    self._output_dir = output_dir
-    self._dart_callback_file_paths = []
-
-  def InterfaceGenerator(self,
-                         interface,
-                         common_prefix,
-                         super_interface_name,
-                         source_filter):
-    """Returns an interface generator for |interface|.
-
-    Called once for each interface that is not a callback function.
-    """
-    return None
-
-  def ProcessCallback(self, interface, info):
-    """Processes an interface that is a callback function."""
-    pass
-
-  def GenerateLibraries(self, lib_dir):
-    pass
-
-  def Finish(self):
-    pass
-
-
-  # Helper methods used by several systems.
-
-  def _ProcessCallback(self, interface, info, file_path):
-    """Generates a typedef for the callback interface."""
-    self._dart_callback_file_paths.append(file_path)
-    code = self._emitters.FileEmitter(file_path)
-
-    code.Emit(self._templates.Load('callback.darttemplate'))
-    code.Emit('typedef $TYPE $NAME($PARAMS);\n',
-              NAME=interface.id,
-              TYPE=info.type_name,
-              PARAMS=info.ParametersImplementationDeclaration())
-
-
-  def _GenerateLibFile(self, lib_template, lib_file_path, file_paths,
-                       **template_args):
-    """Generates a lib file from a template and a list of files.
-
-    Additional keyword arguments are passed to the template.
-    Typically called from self.GenerateLibraries.
-    """
-    # Load template.
-    template = self._templates.Load(lib_template)
-    # Generate the .lib file.
-    lib_file_contents = self._emitters.FileEmitter(lib_file_path)
-
-    # Emit the list of #source directives.
-    list_emitter = lib_file_contents.Emit(template, **template_args)
-    lib_file_dir = os.path.dirname(lib_file_path)
-    for path in sorted(file_paths):
-      relpath = os.path.relpath(path, lib_file_dir)
-      list_emitter.Emit("#source('$PATH');\n", PATH=MassagePath(relpath))
-
-
-  def _BaseDefines(self, interface):
-    """Returns a set of names (strings) for members defined in a base class.
-    """
-    def WalkParentChain(interface):
-      if interface.parents:
-        # Only consider primary parent, secondary parents are not on the
-        # implementation class inheritance chain.
-        parent = interface.parents[0]
-        if generator.IsDartCollectionType(parent.type.id):
-          return
-        if self._database.HasInterface(parent.type.id):
-          parent_interface = self._database.GetInterface(parent.type.id)
-          for attr in parent_interface.attributes:
-            result.add(attr.id)
-          for op in parent_interface.operations:
-            result.add(op.id)
-          WalkParentChain(parent_interface)
-
-    result = set()
-    WalkParentChain(interface)
-    return result;
diff --git a/elemental/idl/scripts/systembaseelemental.py b/elemental/idl/scripts/systembaseelemental.py
deleted file mode 100644
index 0258992..0000000
--- a/elemental/idl/scripts/systembaseelemental.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module provides base functionality for systems to generate
-Dart APIs from the IDL database."""
-
-import os
-#import re
-from generator_java import *
-
-
-def MassagePath(path):
-  # The most robust way to emit path separators is to use / always.
-  return path.replace('\\', '/')
-
-class SystemElemental(object):
-  """A System generates all the files for one implementation.
-
-  This is a base class for all the specific systems.
-  The life-cycle of a System is:
-  - construction (__init__)
-  - (InterfaceGenerator | ProcessCallback)*  # for each IDL interface
-  - GenerateLibraries
-  - Finish
-  """
-
-  def __init__(self, templates, database, emitters, output_dir):
-    self._templates = templates
-    self._database = database
-    self._emitters = emitters
-    self._output_dir = output_dir
-    self._dart_callback_file_paths = []
-
-  def InterfaceGenerator(self,
-                         interface,
-                         common_prefix,
-                         super_interface_name,
-                         source_filter):
-    """Returns an interface generator for |interface|.
-
-    Called once for each interface that is not a callback function.
-    """
-    return None
-
-  def ProcessCallback(self, interface, info):
-    """Processes an interface that is a callback function."""
-    pass
-
-  def GenerateLibraries(self, lib_dir):
-    pass
-
-  def Finish(self):
-    pass
-
-
-  # Helper methods used by several systems.
-
-  def _ProcessCallback(self, interface, info, file_path):
-    """Generates a typedef for the callback interface."""
-    self._dart_callback_file_paths.append(file_path)
-    code = self._emitters.FileEmitter(file_path)
-
-    code.Emit(self._templates.Load('callback.darttemplate'))
-    code.Emit('typedef $TYPE $NAME($PARAMS);\n',
-              NAME=interface.id,
-              TYPE=info.type_name,
-              PARAMS=info.ParametersImplementationDeclaration())
-
-
-  def _GenerateLibFile(self, lib_template, lib_file_path, file_paths,
-                       **template_args):
-    """Generates a lib file from a template and a list of files.
-
-    Additional keyword arguments are passed to the template.
-    Typically called from self.GenerateLibraries.
-    """
-    # Load template.
-    template = self._templates.Load(lib_template)
-    # Generate the .lib file.
-    lib_file_contents = self._emitters.FileEmitter(lib_file_path)
-
-    # Emit the list of #source directives.
-    list_emitter = lib_file_contents.Emit(template, **template_args)
-    lib_file_dir = os.path.dirname(lib_file_path)
-    for path in sorted(file_paths):
-      relpath = os.path.relpath(path, lib_file_dir)
-      list_emitter.Emit("#source('$PATH');\n", PATH=MassagePath(relpath))
-
-      
-  def _BaseDefines(self, interface):
-    """Returns a set of names (strings) for members defined in a base class.
-    """
-    def WalkParentChain(interface):
-      if interface.parents:
-        # Only consider primary parent, secondary parents are not on the
-        # implementation class inheritance chain.
-        parent = interface.parents[0]
-        if generator.IsDartCollectionType(parent.type.id):
-          return
-        if self._database.HasInterface(parent.type.id):
-          parent_interface = self._database.GetInterface(parent.type.id)
-          for attr in parent_interface.attributes:
-            result.add(attr.id)
-          for op in parent_interface.operations:
-            result.add(op.id)
-          WalkParentChain(parent_interface)
-
-    result = set()
-    WalkParentChain(interface)
-    return result;
-
-  def ProcessMixins(self, mixins):
-    """Handle interfaces which must be hoisted to a common JSO base class"""
-    self._mixins = mixins
-
-
-class ElementalBase(object):
-  def __init__(self):
-    self.reserved_keywords = []
-    self.reserved_keywords = ['continue', 'delete', 'for', 'while', 'do', 'class', 'switch', 'try', 'catch', 'finally',
-                'int', 'float', 'short', 'double', 'char', 'byte', 'long', 'implements', 'extends', 'throws', 'case', 'if',
-                'else', 'throw', 'instanceof', 'true', 'false', 'default', 'null', 'abstract', 'package', 'super',
-                'public', 'protected', 'private', 'volatile', 'transient', 'final', 'synchronized', 'import', 'enum', 'boolean', 'assert']
-
-  def getImplements(self, alreadyImplemented, iface):
-    if '<' in iface.type.id:
-      return DartType(iface.type.id)
-    if iface.type.id in alreadyImplemented:
-      return
-    alreadyImplemented[iface.type.id]=1
-    piface = self._database.GetInterface(iface.type.id)
-    for parent in piface.parents:
-        self.getImplements(alreadyImplemented, parent)
-
-  def fixReservedKeyWords(self, name):
-    if name in ['continue', 'delete', 'for', 'while', 'do', 'class', 'switch', 'try', 'catch', 'finally',
-                'int', 'float', 'short', 'double', 'char', 'byte', 'long', 'implements', 'extends', 'throws', 'case', 'if',
-                'else', 'throw', 'instanceof', 'true', 'false', 'default', 'null', 'abstract', 'package', 'super',
-                'public', 'protected', 'private', 'volatile', 'transient', 'final', 'synchronized', 'import', 'enum', 'boolean', 'assert']:
-      return '_' + name;
-    return name
-
-
-
diff --git a/elemental/idl/scripts/systemgwt.py b/elemental/idl/scripts/systemgwt.py
deleted file mode 100644
index f05f428..0000000
--- a/elemental/idl/scripts/systemgwt.py
+++ /dev/null
@@ -1,416 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module providesfunctionality for systems to generate
-Elemental interfaces from the IDL database."""
-
-import pdb
-import os
-import json
-import systembaseelemental
-from generator_java import *
-
-
-class ElementalInterfacesSystem(systembaseelemental.SystemElemental):
-
-  def __init__(self, templates, database, emitters, output_dir):
-    super(ElementalInterfacesSystem, self).__init__(
-        templates, database, emitters, output_dir)
-    self._dart_interface_file_paths = []
-
-  def InterfaceGenerator(self,
-                         interface,
-                         common_prefix,
-                         super_interface_name,
-                         source_filter):
-    """."""
-
-    module = getModule(interface.annotations)
-    if super_interface_name is not None:
-      interface_name = super_interface_name
-    else:
-      interface_name = interface.id
-
-    dart_interface_file_path = self._FilePathForElementalInterface(module, interface_name)
-
-    self._dart_interface_file_paths.append(dart_interface_file_path)
-
-    dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path)
-
-    template_file = 'java_interface_%s.darttemplate' % interface_name
-    template = self._templates.TryLoad(template_file)
-    if not template:
-      template = self._templates.Load('java_interface.darttemplate')
-
-    return ElementalInterfaceGenerator(module, self._database,
-        interface, dart_interface_code,
-        template,
-        common_prefix, super_interface_name,
-        source_filter)
-
-
-  def ProcessCallback(self, interface, info):
-    """Generates a typedef for the callback interface."""
-    interface_name = interface.id
-    module = getModule(interface.annotations)
-    file_path = self._FilePathForElementalInterface(module, interface_name)
-    self._dart_callback_file_paths.append(file_path)
-    code = self._emitters.FileEmitter(file_path)
-
-    code.Emit(self._templates.Load('javacallback.darttemplate'),
-              ID=interface.id,
-              NAME=interface.id,
-              TYPE=info.type_name,
-              PARAMS=info.ParametersImplementationDeclaration(),
-              PACKAGE='elemental.%s' % module,
-              IMPORTS='',
-              CLASSJAVADOC='')
-
-  def GenerateLibraries(self, lib_dir):
-    pass
-
-
-  def _FilePathForElementalInterface(self, module, interface_name):
-    """Returns the file path of the Dart interface definition."""
-    return os.path.join(self._output_dir, 'src', 'elemental', module,
-                        '%s.java' % interface_name)
-
-def _escapeComments(text):
-  return text.replace('*/', '*&#47;').encode('utf-8')
-
-# ------------------------------------------------------------------------------
-
-class ElementalInterfaceGenerator(systembaseelemental.ElementalBase):
-  """Generates Elemental Interface definition for one DOM IDL interface."""
-
-
-  def _GetJavaDoc(self, interface):
-    docid = interface.id
-    if docid not in self._docdatabase:
-        docid = 'HTML%s' % interface.id
-
-    if docid in self._docdatabase:
-        if 'summary' in self._docdatabase[docid]:
-          return _escapeComments(self._docdatabase[docid]['summary'])
-    return ""
-
-
-  def __init__(self, module, database, interface, emitter, template,
-               common_prefix, super_interface, source_filter):
-    """Generates Dart code for the given interface.
-
-    Args:
-      interface -- an IDLInterface instance. It is assumed that all types have
-        been converted to Dart types (e.g. int, String), unless they are in the
-        same package as the interface.
-      common_prefix -- the prefix for the common library, if any.
-      super_interface -- the name of the common interface that this interface
-        implements, if any.
-      source_filter -- if specified, rewrites the names of any superinterfaces
-        that are not from these sources to use the common prefix.
-    """
-    self._module = module
-    self._database = database
-    self._interface = interface
-    self._emitter = emitter
-    self._template = template
-    self._common_prefix = common_prefix
-    self._super_interface = super_interface
-    self._source_filter = source_filter
-
-    current_dir = os.path.dirname(__file__)
-    self._docdatabase = json.load(open(os.path.join(current_dir, '..', 'docs/database.json')))
-
-
-  def addImport(self, imports, typeid):
-      # skip primitive types that are all lowercase first letter
-      etype = DartType(typeid)
-      if '<' not in typeid and etype[0].isupper():
-        rawtype = etype.split('<')[0]
-
-        if rawtype in ['Indexable', 'Settable', 'Mappable']:
-          pmodule = 'util'
-          imports['import elemental.%s.%s;\n' % (pmodule, rawtype)]=1
-        elif etype not in java_lang and self._database.HasInterface(typeid):
-          pinterface = self._database.GetInterface(typeid)
-          pmodule = getModule(pinterface.annotations)
-          if pmodule != self._module:
-            imports['import elemental.%s.%s;\n' % (pmodule, rawtype)]=1
-
-  def StartInterface(self):
-    if self._super_interface:
-      typename = self._super_interface
-    else:
-      typename = self._interface.id
-
-
-    extends = []
-    suppressed_extends = []
-    imports = {}
-    implements_raw = {}
-
-    for attr in self._interface.attributes:
-      self.addImport(imports, attr.type.id)
-
-    for oper in self._interface.operations:
-      self.addImport(imports, oper.type.id)
-      for arg in oper.arguments:
-        self.addImport(imports, arg.type.id)
-
-
-    alreadyImplemented = {}        
-    if len(self._interface.parents) > 0:
-      self.getImplements(alreadyImplemented, self._interface.parents[0])
-
-    for parent in self._interface.parents:
-      if not parent.type.id in alreadyImplemented or parent.type.id == 'ElementalMixinBase':
-        self.addImport(imports, parent.type.id)
-      # TODO(vsm): Remove source_filter.
-        rawtype = DartType(parent.type.id).split('<')[0]
-        if MatchSourceFilter(self._source_filter, parent) and DartType(parent.type.id) != 'Object' and rawtype not in implements_raw:
-          # Parent is a DOM type.
-          extends.append(DartType(parent.type.id))
-          implements_raw[rawtype]=1
-
-#TODO(cromwellian) add in Indexable/IndexableInt/IndexableNumber
-#      elif '<' in parent.type.id:
-        # Parent is a Dart collection type.
-        # TODO(vsm): Make this check more robust.
-#        extends.append(parent.type.id)
-#      else:
-#        suppressed_extends.append('%s.%s' %
-#                                  (self._common_prefix, parent.type.id))
-
-    if self._interface.parents:
-      rawtype = DartType(self._interface.parents[0].type.id).split('<')[0]
-      if rawtype not in implements_raw:
-        extends.insert(0, DartType(self._interface.parents[0].type.id))
-        self.addImport(imports, self._interface.parents[0].type.id)          
-
-
-    comment = ' extends'
-    extends_str = ''
-    if extends:
-      extends_str += ' extends ' + ', '.join(extends)
-      comment = ','
-    if suppressed_extends:
-      extends_str += ' /*%s %s */' % (comment, ', '.join(suppressed_extends))
-
-    factory_provider = None
-    constructor_info = AnalyzeConstructor(self._interface)
-
-    # TODO(vsm): Add appropriate package / namespace syntax.
-    (self._members_emitter,
-     self._top_level_emitter) = self._emitter.Emit(
-         self._template + '$!TOP_LEVEL',
-         ID=typename,
-         EXTENDS=extends_str, PACKAGE='elemental.' + self._module,
-         CLASSJAVADOC = self._GetJavaDoc(self._interface),
-         IMPORTS = ''.join(imports.keys()))
-
-# TODO(cromwellian) auto-generate factory classes?
-
-#    if constructor_info:
-#      self._members_emitter.Emit(
-#          '\n'
-#          '  $CTOR($PARAMS);\n',
-#          CTOR=typename,
-#          PARAMS=constructor_info.ParametersInterfaceDeclaration());
-
-#    element_type = MaybeTypedArrayElementType(self._interface)
-#    if element_type:
-#      self._members_emitter.Emit(
-#          '\n'
-#          '  $CTOR(int length);\n'
-#          '\n'
-#          '  $CTOR.fromList(List<$TYPE> list);\n'
-#          '\n'
-#          '  $CTOR.fromBuffer(ArrayBuffer buffer,'
-#                            ' [int byteOffset, int length]);\n',
-#          CTOR=self._interface.id,
-#          TYPE=DartType(element_type))
-
-
-  def FinishInterface(self):
-    # TODO(vsm): Use typedef if / when that is supported in Dart.
-    # Define variant as subtype.
-    if (self._super_interface and
-        self._interface.id is not self._super_interface):
-      consts_emitter = self._top_level_emitter.Emit(
-          '\n'
-          'interface $NAME extends $BASE {\n'
-          '$!CONSTS'
-          '}\n',
-          NAME=self._interface.id,
-          BASE=self._super_interface)
-      for const in sorted(self._interface.constants, ConstantOutputOrder):
-        self._EmitConstant(consts_emitter, const)
-    if self._interface.id == 'Document':
-     for iface in self._database.GetInterfaces():
-       if iface.id.endswith("Element"):
-         if iface.id == 'Element' or iface.id == 'SVGElement':
-           continue
-         callName = DartType(iface.id)
-         if iface.id == 'SVGSVGElement':
-           callName = 'SVGElement'
-         self._members_emitter.Emit('\n  $TYPE create$CALL();\n',
-                                    CALL = callName,
-                                    TYPE=DartType(iface.id))
-
-    if self._interface.id == 'Window':
-     for iface in self._database.GetInterfaces():
-       element_type = MaybeTypedArrayElementType(iface)
-       if element_type:
-         self._members_emitter.Emit(
-           '\n'
-           '  $TYPE new$CTOR(int length);\n'
-           '\n'
-           '  $TYPE new$CTOR(IndexableNumber list);\n'
-           '\n'
-           '  $TYPE new$CTOR(ArrayBuffer buffer,'
-           ' int byteOffset, int length);\n',
-           CTOR=iface.id,
-           TYPE=iface.id)
-       constructor_info = AnalyzeConstructor(iface)
-       if constructor_info:
-         self._members_emitter.Emit(
-           '\n'
-           '  $TYPE new$CTOR($PARAMS);\n',
-           TYPE=iface.id,
-           CTOR=iface.id,
-           PARAMS=constructor_info.ParametersInterfaceDeclaration());
-           
-  def AddConstant(self, constant):
-    if (not self._super_interface or
-        self._interface.id is self._super_interface):
-      self._EmitConstant(self._members_emitter, constant)
-
-  def _EmitConstant(self, emitter, constant):
-    javadoc = self.find_doc(constant.id)
-    javadoctemplate = '\n  /**\n    * $JAVADOC\n    */\n';
-    if javadoc == '':
-      javadoctemplate = ''
-
-    emitter.Emit('%s\n    static final $TYPE$NAME = $VALUE;\n' % javadoctemplate,
-                 NAME=constant.id,
-                 TYPE=TypeOrNothing(DartType(constant.type.id),
-                                    None),
-                 VALUE=constant.value,
-                 JAVADOC = javadoc)
-
-
-  def AddAttribute(self, getter, setter, inheritedGetter, inheritedSetter):
-    javadoc = self.find_doc(getter.id)
-    javadoctemplate = '\n  /**\n    * $JAVADOC\n    */\n';
-    if javadoc == '':
-      javadoctemplate = ''
-
-    if getter:
-      self._members_emitter.Emit('\n%s  $TYPE $NAME();\n' % javadoctemplate,
-                                 NAME=getterName(getter),
-                                 TYPE=TypeOrVar(DartType(getter.type.id),
-                                                getter.type.id),
-                                 JAVADOC=javadoc)
-
-    if setter:
-      self._members_emitter.Emit('\n  void $NAME($TYPE arg);\n',
-                                 NAME=setterName(setter),
-                                 TYPE=TypeOrVar(DartType(setter.type.id),
-                                                setter.type.id),
-                                 ARG=setter.type.id)
-      return
-
-  def AddIndexer(self, element_type):
-    # Interface inherits all operations from List<element_type>.
-    pass
-
-  def AddOperation(self, info, inherited):
-    """
-    Arguments:
-      operations - contains the overloads, one or more operations with the same
-        name.
-    """
-    javadoc = self.find_doc(info.name)
-    javadoctemplate = '\n  /**\n    * $JAVADOC\n    */\n';
-    
-    if javadoc == '':
-      javadoctemplate = ''
-    get_attrs = []
-    set_attrs = []
-    for attr in self._interface.attributes:
-      get_attrs.append(getterName(attr))
-      set_attrs.append(setterName(attr))
-
-    if info.name in get_attrs or info.name in set_attrs:
-      return
-
-    return_type = info.type_name
-    if info.name == 'addEventListener':
-      return_type = 'EventRemover'
-
-    self._members_emitter.Emit('\n%s  $TYPE $NAME($PARAMS);\n' % javadoctemplate,
-                               TYPE=return_type,
-                               NAME=self.fixReservedKeyWords(info.name),
-                               PARAMS=info.ParametersInterfaceDeclaration(),
-                               JAVADOC=javadoc)
-
-  def AddStaticOperation(self, info, inherited):
-    pass
-
-  # Interfaces get secondary members directly via the superinterfaces.
-  def AddSecondaryAttribute(self, interface, getter, setter):
-    pass
-
-  def AddSecondaryOperation(self, interface, attr):
-    pass
-
-  def find_doc(self, name):
-    docid = self._interface.id
-    if docid not in self._docdatabase:
-        docid = 'HTML%s' % self._interface.id
-
-    docmembers = []
-    docmember = {}
-    if docid in self._docdatabase and 'members' in self._docdatabase[docid]:
-        docmembers  = self._docdatabase[docid]['members']
-    for member in docmembers:
-      if member['name'] == name:
-        docmember = member
-    if 'help' in docmember:
-      return _escapeComments(docmember['help'])
-    return ""
-
-def ucfirst(string):
-  """Upper cases the 1st character in a string"""
-  if len(string):
-    return '%s%s' % (string[0].upper(), string[1:])
-  return string
-
-def getterName(attr):
-  name = DartDomNameOfAttribute(attr)
-  if attr.type.id == 'boolean':
-    if name.startswith('is'):
-      name = name[2:]
-    return 'is%s' % ucfirst(name)
-  return 'get%s' % ucfirst(name)
-
-def setterName(attr):
-  name = DartDomNameOfAttribute(attr)
-  return 'set%s' % ucfirst(name)
-
-def getModule(annotations):
-  htmlaliases = ['audio', 'webaudio', 'inspector', 'offline', 'p2p', 'window', 'websockets', 'threads', 'view', 'storage', 'fileapi']
-
-  module = "dom"
-  if 'WebKit' in annotations and 'module' in annotations['WebKit']:
-    module = annotations['WebKit']['module']
-  if module in  htmlaliases:
-    return "html"
-  if module == 'core':
-    return 'dom'
-  return module
-
-java_lang = ['Object', 'String', 'Exception', 'DOMTimeStamp', 'DOMString']
-
diff --git a/elemental/idl/scripts/systemgwtjso.py b/elemental/idl/scripts/systemgwtjso.py
deleted file mode 100644
index ff3cb8e..0000000
--- a/elemental/idl/scripts/systemgwtjso.py
+++ /dev/null
@@ -1,442 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-"""This module providesfunctionality for systems to generate
-Elemental interfaces from the IDL database."""
-
-import pdb
-import os
-import json
-import systembaseelemental
-from generator_java import *
-
-
-class ElementalJsoSystem(systembaseelemental.SystemElemental):
-
-  def __init__(self, templates, database, emitters, output_dir):
-    super(ElementalJsoSystem, self).__init__(
-        templates, database, emitters, output_dir)
-    self._dart_interface_file_paths = []
-
-  def InterfaceGenerator(self,
-                         interface,
-                         common_prefix,
-                         super_interface_name,
-                         source_filter):
-    """."""
-
-    module = getModule(interface.annotations)
-    if super_interface_name is not None:
-      interface_name = super_interface_name
-    else:
-      interface_name = interface.id
-
-    template_file = 'jso_impl_%s.darttemplate' % interface_name
-    template = self._templates.TryLoad(template_file)
-    if not template:
-      template = self._templates.Load('jso_impl.darttemplate')
-
-    if interface_name in self._mixins or interface_name.endswith("Callback") or interface_name.endswith('Handler'):
-      return NullInterfaceGenerator(module, self._database,
-        interface, None,
-        template,
-        common_prefix, super_interface_name,
-        source_filter)
-
-    dart_interface_file_path = self._FilePathForElementalInterface(module, interface_name)
-
-    self._dart_interface_file_paths.append(dart_interface_file_path)
-
-    dart_interface_code = self._emitters.FileEmitter(dart_interface_file_path)
-
-    return ElementalInterfaceGenerator(module, self._database,
-        interface, dart_interface_code,
-        template,
-        common_prefix, super_interface_name,
-        source_filter, self._mixins)
-
-  def ProcessCallback(self, interface, info):
-    pass
-
-
-  def _FilePathForElementalInterface(self, module, interface_name):
-    """Returns the file path of the Dart interface definition."""
-    return os.path.join(self._output_dir, 'src', 'elemental', "js", module,
-                        'Js%s.java' % interface_name)
-
-
-# ------------------------------------------------------------------------------
-# Used to suppress generation of JSO classes that are not needed
-class NullInterfaceGenerator(systembaseelemental.ElementalBase):
-  def __init__(self, module, database, interface, emitter, template,
-               common_prefix, super_interface, source_filter):
-    pass
-
-  def StartInterface(self):
-    pass
-  def AddOperation(self, x, inherited):
-    pass
-
-  def AddIndexer(self, x):
-    pass
-
-  def AddConstant(self, x):
-    pass
-
-  def AddAttribute(self, x, y, inheritedGetter, inheritedSetter):
-    pass
-
-  def FinishInterface(self):
-    pass
-
-
-class ElementalInterfaceGenerator(systembaseelemental.ElementalBase):
-  """Generates Elemental Interface definition for one DOM IDL interface."""
-
-  def __init__(self, module, database, interface, emitter, template,
-               common_prefix, super_interface, source_filter, mixins):
-    """Generates Dart code for the given interface.
-
-    Args:
-      interface -- an IDLInterface instance. It is assumed that all types have
-        been converted to Dart types (e.g. int, String), unless they are in the
-        same package as the interface.
-      common_prefix -- the prefix for the common library, if any.
-      super_interface -- the name of the common interface that this interface
-        implements, if any.
-      source_filter -- if specified, rewrites the names of any superinterfaces
-        that are not from these sources to use the common prefix.
-    """
-    super(self.__class__, self).__init__()
-    self._module = module
-    self._database = database
-    self._interface = interface
-    self._emitter = emitter
-    self._template = template
-    self._common_prefix = common_prefix
-    self._super_interface = super_interface
-    self._source_filter = source_filter
-    self._mixins = mixins
-
-    current_dir = os.path.dirname(__file__)
-    self._docdatabase = json.load(open(os.path.join(current_dir, '..', 'docs/database.json')))
-
-
-  def addImport(self, imports, typeid):
-      # skip primitive types that are all lowercase first letter
-      etype = DartType(typeid)
-
-      if '<' not in typeid and etype[0].isupper():
-        rawtype = etype.split('<')[0]
-
-        if rawtype in ['Indexable', 'Settable', 'Mappable']:
-          pmodule = 'util'
-          imports['import elemental.js.%s.%s;\n' % (pmodule, 'Js' + rawtype)]=1
-          imports['import elemental.%s.%s;\n' % (pmodule, rawtype)]=1
-        elif etype not in java_lang and self._database.HasInterface(typeid):
-          pinterface = self._database.GetInterface(typeid)
-          pmodule = getModule(pinterface.annotations)
-          if pmodule != self._module and not rawtype.endswith("Callback") and not rawtype.endswith("Handler") and not rawtype == 'EventTarget':
-            imports['import elemental.js.%s.%s;\n' % (pmodule, 'Js' + rawtype)]=1
-          imports['import elemental.%s.%s;\n' % (pmodule, rawtype)]=1
-
-  def StartInterface(self):
-    if self._super_interface:
-      typename = self._super_interface
-    else:
-      typename = self._interface.id
-
-
-    implements = []
-    implements_raw = {}
-    extends = ''
-    suppressed_extends = []
-    imports = {}
-
-    alreadyImplemented = {}        
-    for p in self._interface.parents:
-      self.getImplements(alreadyImplemented, p)
-
-    for attr in self._interface.attributes:
-      self.addImport(imports, attr.type.id)
-
-    for oper in self._interface.operations:
-      self.addImport(imports, oper.type.id)
-      for arg in oper.arguments:
-        self.addImport(imports, arg.type.id)
-
-    for parent in self._interface.parents:
-      if not parent.type.id in alreadyImplemented or parent.type.id == 'ElementalMixinBase':
-        self.addImport(imports, parent.type.id)
-      # TODO(vsm): Remove source_filter.
-        rawtype = DartType(parent.type.id).split('<')[0]
-        if rawtype == 'Object':
-          continue
-        if MatchSourceFilter(self._source_filter, parent) and DartType(parent.type.id) != 'Object' and rawtype not in implements_raw:
-          # Parent is a DOM type.
-          implements.append(DartType(parent.type.id))
-          implements_raw[rawtype]=1
-
-#TODO(cromwellian) add in Indexable/IndexableInt/IndexableNumber
-#      elif '<' in parent.type.id:
-        # Parent is a Dart collection type.
-        # TODO(vsm): Make this check more robust.
-#        extends.append(parent.type.id)
-#      else:
-#        suppressed_extends.append('%s.%s' %
-#                                  (self._common_prefix, parent.type.id))
-
-    comment = ' extends'
-
-    implements_str = ''
-
-    # the Mixin base class is special, it extends JSO
-    if self._interface.id == 'ElementalMixinBase':
-      extends = ' extends JsElementalBase'
-      filtered_mixins = []
-      for mixin in self._mixins:
-        filtered_mixins.append(DartType(mixin))
-      implements.extend(filtered_mixins)
-    else:
-      # default, every type extends the Mixin base
-      extends = ' extends JsElementalMixinBase'
-    
-    rawtype = DartType(self._interface.id).split('<')[0]
-    if rawtype not in implements_raw and rawtype != 'Object':
-      implements.insert(0, DartType(self._interface.id))
-    self.addImport(imports, self._interface.id)
-
-    # parents[0] is the implementing superclass, if exists, but not a mixin, reference its JSO impl
-    if len(self._interface.parents) > 0 and not self._interface.parents[0].type.id in self._mixins:
-      extends = ' extends Js' + DartType(self._interface.parents[0].type.id)
-      self.addImport(imports, self._interface.parents[0].type.id)
-
-    if implements:
-      implements_str += ' implements ' + ', '.join(implements)
-      comment = ','
-
-    factory_provider = None
-    constructor_info = AnalyzeConstructor(self._interface)
-
-    # TODO(vsm): Add appropriate package / namespace syntax.
-    (self._members_emitter,
-     self._top_level_emitter) = self._emitter.Emit(
-         self._template + '$!TOP_LEVEL',
-         ID='Js' + typename,
-         IMPLEMENTS=implements_str,
-         EXTENDS=extends, PACKAGE='elemental.js.' + self._module,
-         IMPORTS = ''.join(imports.keys()))
-
-# TODO(cromwellian) auto-generate factory classes?
-
-#    if constructor_info:
-#      self._members_emitter.Emit(
-#          '\n'
-#          '  $CTOR($PARAMS);\n',
-#          CTOR=typename,
-#          PARAMS=constructor_info.ParametersInterfaceDeclaration());
-
-#    element_type = MaybeTypedArrayElementType(self._interface)
-#    if element_type:
-#      self._members_emitter.Emit(
-#          '\n'
-#          '  $CTOR(int length);\n'
-#          '\n'
-#          '  $CTOR.fromList(List<$TYPE> list);\n'
-#          '\n'
-#          '  $CTOR.fromBuffer(ArrayBuffer buffer,'
-#                            ' [int byteOffset, int length]);\n',
-#          CTOR=self._interface.id,
-#          TYPE=DartType(element_type))
-
-
-  def FinishInterface(self):
-     # add all create* method implementations to Document
-     if self._interface.id == 'Document':
-       for iface in self._database.GetInterfaces():
-         if iface.id.endswith("Element"):
-           # try to determine tag name from interface name
-           elementName = iface.id;
-           elementName = elementName[0:len(elementName) - len("Element")].lower()
-           # tablecaption -> <caption>
-           if elementName == 'tablecaption':
-             elementName = 'caption'
-           # SVG is special, it needs createElementNS, strip off prefix
-           if elementName.startswith("svg"):
-             elementName = elementName[3:]
-             # special case, SVGElement is a root class, not a createable element
-             if elementName != '':
-               callName = DartType(iface.id)
-               # SVGSVGElement -> createSVGElement with tag as <svg>
-               if elementName == 'svg':
-                 callName = 'SVGElement'
-               self._members_emitter.Emit('\n  public final Js$TYPE create$CALL() {\n    return createSvgElement("$ELEMENT").cast();\n  }\n',
-                                          TYPE=DartType(iface.id),
-                                          CALL = callName,
-                                          ELEMENT=elementName)
-           elif elementName != '':
-               self._members_emitter.Emit('\n  public final Js$TYPE create$TYPE() {\n    return createElement("$ELEMENT").cast();\n  }\n',
-                                          TYPE=DartType(iface.id),
-                                          ELEMENT=elementName)
-     if self._interface.id == 'Window':
-       for iface in self._database.GetInterfaces():
-         element_type = MaybeTypedArrayElementType(iface)
-         if element_type:
-           self._members_emitter.Emit(
-           '\n'
-           '  public final native Js$TYPE new$CTOR(int length) /*-{ return new $TYPE(length); }-*/;\n'
-           '\n'
-           '  public final native Js$TYPE new$CTOR(IndexableNumber list) /*-{ return new $TYPE(list); }-*/;\n'
-           '\n'
-           '  public final native Js$TYPE new$CTOR(ArrayBuffer buffer,'
-           ' int byteOffset, int length) /*-{ return new $TYPE(buffer, byteOffset, length); }-*/;\n',
-           CTOR=iface.id,
-           TYPE=iface.id)
-         constructor_info = AnalyzeConstructor(iface)
-         if constructor_info:
-           self._members_emitter.Emit(
-             '\n'
-             '  public final native Js$TYPE new$CTOR($PARAMS) /*-{ return new $JSTYPE($ARGS); }-*/;\n',
-             TYPE=iface.id,
-             CTOR=iface.id,
-             JSTYPE=JsType(iface.id),
-             PARAMS=constructor_info.ParametersInterfaceDeclaration(),
-             ARGS=constructor_info.ParametersAsArgumentList(self._database));
-
-
-  def AddConstant(self, constant):
-    pass
-
-  def AddAttribute(self, getter, setter, inheritedGetter, inheritedSetter):
-    # you can't override methods in a JSO superclass
-    if getter and not inheritedGetter:
-      if getter.type.id == 'EventListener':
-        self._members_emitter.Emit('\n  public final native $TYPE $NAME() /*-{\n    return @elemental.js.dom.JsElementalMixinBase::getListenerFor(Lcom/google/gwt/core/client/JavaScriptObject;)(this.$FIELD);\n  }-*/;\n',
-                                   NAME=getterName(getter),
-                                   TYPE=TypeOrVar(DartType(getter.type.id),
-                                                  getter.type.id),
-                                   FIELD=getter.id)
-      else:
-        field = 'this.$FIELD'
-        if getter.id in self.reserved_keywords:
-          field_template = "this['$FIELD']"
-        else:
-          field_template = "this.$FIELD"
-        self._members_emitter.Emit('\n  public final native $TYPE $NAME() /*-{\n    return %s;\n  }-*/;\n' % field_template ,
-                                   NAME=getterName(getter),
-                                   TYPE=JsoTypeOrVar(DartType(getter.type.id), self._mixins),
-                                   FIELD=getter.id)
-    if setter and not inheritedSetter:
-        if setter.type.id == 'EventListener':
-          self._members_emitter.Emit('\n  public final native void $NAME($TYPE listener) /*-{\n    this.$FIELD = @elemental.js.dom.JsElementalMixinBase::getHandlerFor(Lelemental/events/EventListener;)(listener);\n  }-*/;',
-                                     NAME=setterName(setter),
-                                     TYPE=TypeOrVar(DartType(setter.type.id),
-                                                    setter.type.id),
-                                     FIELD=setter.id)
-        else:
-          if setter.id in self.reserved_keywords:
-            field_template = "this['$FIELD']"
-          else:
-            field_template = "this.$FIELD"
-          self._members_emitter.Emit('\n  public final native void $NAME($TYPE param_$FIELD) /*-{\n    %s = param_$FIELD;\n  }-*/;\n' % field_template,
-                                     NAME=setterName(setter),
-                                     TYPE=TypeOrVar(DartType(setter.type.id)),
-                                     FIELD=setter.id)
-
-  def AddIndexer(self, element_type):
-    # Interface inherits all operations from List<element_type>.
-    pass
-
-  def AddOperation(self, info, inherited):
-    """
-    Arguments:
-      operations - contains the overloads, one or more operations with the same
-        name.
-    """
-    # you can't override methods on a JSO superclass
-    if inherited:
-      return
-    # implemented on mixin base template (hack)
-    if info.name == 'addEventListener' or info.name == 'removeEventListener':
-      return
-
-    get_attrs = []
-    set_attrs = []
-    for attr in self._interface.attributes:
-      get_attrs.append(getterName(attr))
-      set_attrs.append('set%s' % ucfirst(attr.id))
-
-    if info.name in get_attrs or info.name in set_attrs:
-      return
-    body = ''
-    if info.type_name != 'void':
-      body += 'return '
-#    if op.is_fc_deleter:
-#            w('delete ')
-#     if info.id is None:
-#            w('this[')
-#        else:
-    args = info.ParametersAsArgumentList(self._database)
-    if info.name in self.reserved_keywords:
-      body += "this['%s'](%s" % (info.name, args)
-    else:
-      body += 'this.%s(%s' % (info.name, args)
-
-
-    #if op.id is None:
-#            w('];\n')
-#        else:
-    body += ');'
-
-    self._members_emitter.Emit('\n  public final native $TYPE $NAME($PARAMS) /*-{\n    $BODY\n  }-*/;\n',
-                               TYPE=JsoTypeOrVar(info.type_name, self._mixins),
-                               NAME=self.fixReservedKeyWords(info.name),
-                               PARAMS=info.ParametersInterfaceDeclaration(),
-                               BODY=body)
-
-  def AddStaticOperation(self, info, inherited):
-    pass
-
-  # Interfaces get secondary members directly via the superinterfaces.
-  def AddSecondaryAttribute(self, interface, getter, setter):
-    pass
-
-  def AddSecondaryOperation(self, interface, attr):
-    pass
-
-
-def ucfirst(string):
-  """Upper cases the 1st character in a string"""
-  if len(string):
-    return '%s%s' % (string[0].upper(), string[1:])
-  return string
-
-def getterName(attr):
-  name = DartDomNameOfAttribute(attr)
-  if attr.type.id == 'boolean':
-    if name.startswith('is'):
-      name = name[2:]
-    return 'is%s' % ucfirst(name)
-  return 'get%s' % ucfirst(name)
-
-def setterName(attr):
-  name = DartDomNameOfAttribute(attr)
-  return 'set%s' % ucfirst(name)
-
-
-def getModule(annotations):
-  htmlaliases = ['audio', 'webaudio', 'inspector', 'offline', 'p2p', 'window', 'websockets', 'threads', 'view', 'storage', 'fileapi']
-
-  module = "dom"
-  if 'WebKit' in annotations and 'module' in annotations['WebKit']:
-    module = annotations['WebKit']['module']
-  if module in  htmlaliases:
-    return "html"
-  if module == 'core':
-    return 'dom'
-  return module
-
-java_lang = ['Object', 'String', 'Exception', 'DOMTimeStamp', 'DOMString']
-
diff --git a/elemental/idl/scripts/templateloader.py b/elemental/idl/scripts/templateloader.py
deleted file mode 100644
index 64e4a8d..0000000
--- a/elemental/idl/scripts/templateloader.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Template loader and preprocessor.
-#
-# Preprocessor language:
-#
-#   $if VAR
-#   $else
-#   $endif
-#
-# VAR must be defined in the conditions dictionary.
-
-import os
-
-class TemplateLoader(object):
-  """Loads template files from a path."""
-
-  def __init__(self, root, subpaths, conditions = {}):
-    """Initializes loader.
-
-    Args:
-      root - a string, the directory under which the templates are stored.
-      subpaths - a list of strings, subpaths of root in search order.
-      conditions - a dictionay from strings to booleans.  Any conditional
-        expression must be a key in the map.
-    """
-    self._root = root
-    self._subpaths = subpaths
-    self._conditions = conditions
-    self._cache = {}
-
-  def TryLoad(self, name):
-    """Returns content of template file as a string, or None of not found."""
-    if name in self._cache:
-      return self._cache[name]
-
-    for subpath in self._subpaths:
-      template_file = os.path.join(self._root, subpath, name)
-      if os.path.exists(template_file):
-        template = ''.join(open(template_file).readlines())
-        template = self._Preprocess(template, template_file)
-        self._cache[name] = template
-        return template
-
-    return None
-
-  def Load(self, name):
-    """Returns contents of template file as a string, or raises an exception."""
-    template = self.TryLoad(name)
-    if template is not None:  # Can be empty string
-      return template
-    raise Exception("Could not find template '%s' on %s / %s" % (
-        name, self._root, self._subpaths))
-
-  def _Preprocess(self, template, filename):
-    def error(lineno, message):
-      raise Exception('%s:%s: %s' % (filename, lineno, message))
-
-    lines = template.splitlines(True)
-    out = []
-
-    condition_stack = []
-    active = True
-    seen_else = False
-
-    for (lineno, full_line) in enumerate(lines):
-      line = full_line.strip()
-
-      if line.startswith('$'):
-        words = line.split()
-        directive = words[0]
-
-        if directive == '$if':
-          if len(words) != 2:
-            error(lineno, '$if does not have single variable')
-          variable = words[1]
-          if variable in self._conditions:
-            condition_stack.append((active, seen_else))
-            active = self._conditions[variable]
-            seen_else = False
-          else:
-            error(lineno, "Unknown $if variable '%s'" % variable)
-
-        elif directive == '$else':
-          if not condition_stack:
-            error(lineno, '$else without $if')
-          if seen_else:
-            raise error(lineno, 'Double $else')
-          seen_else = True
-          active = not active
-
-        elif directive == '$endif':
-          if not condition_stack:
-            error(lineno, '$endif without $if')
-          (active, seen_else) = condition_stack.pop()
-
-        else:
-          # Something else, like '$!MEMBERS'
-          if active:
-            out.append(full_line)
-
-      else:
-        if active:
-          out.append(full_line);
-        continue
-
-    if condition_stack:
-      error(len(lines), 'Unterminated $if')
-
-    return ''.join(out)
diff --git a/elemental/idl/scripts/templateloader_test.py b/elemental/idl/scripts/templateloader_test.py
deleted file mode 100755
index 165b566..0000000
--- a/elemental/idl/scripts/templateloader_test.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-import logging.config
-import unittest
-import templateloader
-
-class TemplateLoaderTestCase(unittest.TestCase):
-
-  def _preprocess(self, input_text, conds):
-    loader = templateloader.TemplateLoader('.', [], conds)
-    return loader._Preprocess(input_text, '<file>')
-
-
-  def _preprocess_test(self, input_text, conds, expected_text):
-    output_text = self._preprocess(input_text, conds)
-    if output_text != expected_text:
-      msg = '''
-EXPECTED:
-%s
----
-ACTUAL  :
-%s
----''' % (expected_text, output_text)
-      self.fail(msg)
-
-
-  def _preprocess_error_test(self, input_text, conds, expected_message):
-    threw = False
-    try:
-      output_text = self._preprocess(input_text, conds)
-    except Exception, e:
-      threw = True
-      if str(e).find(expected_message) == -1:
-        self.fail("'%s' does not contain '%s'" % (e, expected_message))
-    if not threw:
-      self.fail("missing error, expected '%s'" % expected_message)
-
-
-  def test_freevar(self):
-    input_text = '''$A
-$B'''
-    self._preprocess_test(input_text, {}, input_text)
-
-
-  def test_ite1(self):
-    input_text = '''
-        aaa
-        $if A
-        bbb
-        $else
-        ccc
-        $endif
-        ddd
-        '''
-    self._preprocess_test(input_text, {'A':True},
-        '''
-        aaa
-        bbb
-        ddd
-        ''')
-
-  def test_ite2(self):
-    input_text = '''
-        aaa
-        $if A
-        bbb
-        $else
-        ccc
-        $endif
-        ddd
-        '''
-    self._preprocess_test(input_text, {'A':False},
-        '''
-        aaa
-        ccc
-        ddd
-        ''')
-
-  def test_if1(self):
-    input_text = '''
-       $if
-       '''
-    self._preprocess_error_test(input_text, {},
-        '$if does not have single variable')
-
-  def test_if2(self):
-    input_text = '''
-       $if A
-       '''
-    self._preprocess_error_test(input_text, {}, 'Unknown $if variable')
-
-  def test_else1(self):
-    input_text = '''
-       $else
-       '''
-    self._preprocess_error_test(input_text, {}, '$else without $if')
-
-  def test_else2(self):
-    input_text = '''
-       $if A
-       $else
-       $else
-       '''
-    self._preprocess_error_test(input_text, {'A':True}, 'Double $else')
-
-  def test_eof1(self):
-    input_text = '''
-       $if A
-       '''
-    self._preprocess_error_test(input_text, {'A':True}, 'Unterminated')
-
-  def test_eof2(self):
-    input_text = '''
-       $if A
-       $else
-       '''
-    self._preprocess_error_test(input_text, {'A':True}, 'Unterminated')
-
-if __name__ == "__main__":
-  logging.config.fileConfig("logging.conf")
-  if __name__ == '__main__':
-    unittest.main()
diff --git a/elemental/idl/templates/java_impl.darttemplate b/elemental/idl/templates/java_impl.darttemplate
deleted file mode 100644
index f3d9363..0000000
--- a/elemental/idl/templates/java_impl.darttemplate
+++ /dev/null
@@ -1,11 +0,0 @@
-
-package $PACKAGE;
-import elemental.dom.*;
-import elemental.html.*;
-
-/**
-  * $CLASS_JAVADOC
-  */
-@Deprecated
-public class $CLASSNAME$EXTENDS$IMPLEMENTS {
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface.darttemplate b/elemental/idl/templates/java_interface.darttemplate
deleted file mode 100644
index a41fe81..0000000
--- a/elemental/idl/templates/java_interface.darttemplate
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface_Document.darttemplate b/elemental/idl/templates/java_interface_Document.darttemplate
deleted file mode 100644
index 0f8e283..0000000
--- a/elemental/idl/templates/java_interface_Document.darttemplate
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-import elemental.svg.*;
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-
-/**
- * Contains the set of standard values used with {@link #createEvent}.
- */
-@Deprecated
-public interface Events {
-  public static final String CUSTOM = "CustomEvent";
-  public static final String KEYBOARD = "KeyboardEvent";
-  public static final String MESSAGE = "MessageEvent";
-  public static final String MOUSE = "MouseEvent";
-  public static final String MUTATION = "MutationEvent";
-  public static final String OVERFLOW = "OverflowEvent";
-  public static final String PAGE_TRANSITION = "PageTransitionEvent";
-  public static final String PROGRESS = "ProgressEvent";
-  public static final String STORAGE = "StorageEvent";
-  public static final String TEXT = "TextEvent";
-  public static final String UI = "UIEvent";
-  public static final String WEBKIT_ANIMATION = "WebKitAnimationEvent";
-  public static final String WEBKIT_TRANSITION = "WebKitTransitionEvent";
-  public static final String WHEEL = "WheelEvent";
-  public static final String SVGS = "SVGEvents";
-  public static final String SVG_ZOOMS = "SVGZoomEvents";
-  public static final String TOUCH = "TouchEvent";
-}
-
-/**
- * Contains the set of standard values returned by {@link #readyState}.
- */
-@Deprecated
-public interface ReadyState {
-
-  /**
-   * Indicates the document is still loading and parsing.
-   */
-  public static final String LOADING = "loading";
-
-  /**
-   * Indicates the document is finished parsing but is still loading
-   * subresources.
-   */
-  public static final String INTERACTIVE = "interactive";
-
-  /**
-   * Indicates the document and all subresources have been loaded.
-   */
-  public static final String COMPLETE = "complete";
-}
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface_Event.darttemplate b/elemental/idl/templates/java_interface_Event.darttemplate
deleted file mode 100644
index 5433ea4..0000000
--- a/elemental/idl/templates/java_interface_Event.darttemplate
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-public static final String CLICK = "click";
-public static final String CONTEXTMENU = "contextmenu";
-public static final String DBLCLICK = "dblclick";
-public static final String CHANGE = "change";
-public static final String MOUSEDOWN = "mousedown";
-public static final String MOUSEMOVE = "mousemove";
-public static final String MOUSEOUT = "mouseout";
-public static final String MOUSEOVER = "mouseover";
-public static final String MOUSEUP = "mouseup";
-public static final String MOUSEWHEEL = "mousewheel";
-public static final String FOCUS = "focus";
-public static final String FOCUSIN = "focusin";
-public static final String FOCUSOUT = "focusout";
-public static final String BLUR = "blur";
-public static final String KEYDOWN = "keydown";
-public static final String KEYPRESS = "keypress";
-public static final String KEYUP = "keyup";
-public static final String SCROLL = "scroll";
-public static final String BEFORECUT = "beforecut";
-public static final String CUT = "cut";
-public static final String BEFORECOPY = "beforecopy";
-public static final String COPY = "copy";
-public static final String BEFOREPASTE = "beforepaste";
-public static final String PASTE = "paste";
-public static final String DRAGENTER = "dragenter";
-public static final String DRAGOVER = "dragover";
-public static final String DRAGLEAVE = "dragleave";
-public static final String DROP = "drop";
-public static final String DRAGSTART = "dragstart";
-public static final String DRAG = "drag";
-public static final String DRAGEND = "dragend";
-public static final String RESIZE = "resize";
-public static final String SELECTSTART = "selectstart";
-public static final String SUBMIT = "submit";
-public static final String ERROR = "error";
-public static final String WEBKITANIMATIONSTART = "webkitAnimationStart";
-public static final String WEBKITANIMATIONITERATION = "webkitAnimationIteration";
-public static final String WEBKITANIMATIONEND = "webkitAnimationEnd";
-public static final String WEBKITTRANSITIONEND = "webkitTransitionEnd";
-public static final String INPUT = "input";
-public static final String INVALID = "invalid";
-public static final String TOUCHSTART = "touchstart";
-public static final String TOUCHMOVE = "touchmove";
-public static final String TOUCHEND = "touchend";
-public static final String TOUCHCANCEL = "touchcancel";
-
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface_KeyboardEvent.darttemplate b/elemental/idl/templates/java_interface_KeyboardEvent.darttemplate
deleted file mode 100644
index 60a3812..0000000
--- a/elemental/idl/templates/java_interface_KeyboardEvent.darttemplate
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-/**
- * Defines the standard key locations returned by {@link #getKeyLocation}.
- */
-@Deprecated
-public interface KeyLocation {
-
-  /**
-   * The event key is not distinguished as the left or right version
-   * of the key, and did not originate from the numeric keypad (or did not
-   * originate with a virtual key corresponding to the numeric keypad).
-   */
-  public static final int STANDARD = 0;
-
-  /**
-   * The event key is in the left key location.
-   */
-  public static final int LEFT = 1;
-
-  /**
-   * The event key is in the right key location.
-   */
-  public static final int RIGHT = 2;
-
-  /**
-   * The event key originated on the numeric keypad or with a virtual key
-   * corresponding to the numeric keypad.
-   */
-  public static final int NUMPAD = 3;
-
-  /**
-   * The event key originated on a mobile device, either on a physical
-   * keypad or a virtual keyboard.
-   */
-  public static final int MOBILE = 4;
-
-  /**
-   * The event key originated on a game controller or a joystick on a mobile
-   * device.
-   */
-  public static final int JOYSTICK = 5;
-}
-
-/**
- * Defines the expected key codes returned by {@link #getKeyCode}.
- *
- * @see "http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/events/keycodes.js"
- */
-@Deprecated
-public interface KeyCode {
-  public static final int BACKSPACE = 8;
-  public static final int TAB = 9;
-  public static final int NUM_CENTER = 12; // NUMLOCK on FF/Safari Mac
-  public static final int ENTER = 13;
-  public static final int SHIFT = 16;
-  public static final int CTRL = 17;
-  public static final int ALT = 18;
-  public static final int PAUSE = 19;
-  public static final int CAPS_LOCK = 20;
-  public static final int ESC = 27;
-  public static final int SPACE = 32;
-  public static final int PAGE_UP = 33; // also NUM_NORTH_EAST
-  public static final int PAGE_DOWN = 34; // also NUM_SOUTH_EAST
-  public static final int END = 35; // also NUM_SOUTH_WEST
-  public static final int HOME = 36; // also NUM_NORTH_WEST
-  public static final int LEFT = 37; // also NUM_WEST
-  public static final int UP = 38; // also NUM_NORTH
-  public static final int RIGHT = 39; // also NUM_EAST
-  public static final int DOWN = 40; // also NUM_SOUTH
-  public static final int PRINT_SCREEN = 44;
-  public static final int INSERT = 45; // also NUM_INSERT
-  public static final int DELETE = 46; // also NUM_DELETE
-  public static final int ZERO = 48;
-  public static final int ONE = 49;
-  public static final int TWO = 50;
-  public static final int THREE = 51;
-  public static final int FOUR = 52;
-  public static final int FIVE = 53;
-  public static final int SIX = 54;
-  public static final int SEVEN = 55;
-  public static final int EIGHT = 56;
-  public static final int NINE = 57;
-  public static final int QUESTION_MARK = 63; // needs localization
-  public static final int A = 65;
-  public static final int B = 66;
-  public static final int C = 67;
-  public static final int D = 68;
-  public static final int E = 69;
-  public static final int F = 70;
-  public static final int G = 71;
-  public static final int H = 72;
-  public static final int I = 73;
-  public static final int J = 74;
-  public static final int K = 75;
-  public static final int L = 76;
-  public static final int M = 77;
-  public static final int N = 78;
-  public static final int O = 79;
-  public static final int P = 80;
-  public static final int Q = 81;
-  public static final int R = 82;
-  public static final int S = 83;
-  public static final int T = 84;
-  public static final int U = 85;
-  public static final int V = 86;
-  public static final int W = 87;
-  public static final int X = 88;
-  public static final int Y = 89;
-  public static final int Z = 90;
-  public static final int META = 91;
-  public static final int CONTEXT_MENU = 93;
-  public static final int NUM_ZERO = 96;
-  public static final int NUM_ONE = 97;
-  public static final int NUM_TWO = 98;
-  public static final int NUM_THREE = 99;
-  public static final int NUM_FOUR = 100;
-  public static final int NUM_FIVE = 101;
-  public static final int NUM_SIX = 102;
-  public static final int NUM_SEVEN = 103;
-  public static final int NUM_EIGHT = 104;
-  public static final int NUM_NINE = 105;
-  public static final int NUM_MULTIPLY = 106;
-  public static final int NUM_PLUS = 107;
-  public static final int NUM_MINUS = 109;
-  public static final int NUM_PERIOD = 110;
-  public static final int NUM_DIVISION = 111;
-  public static final int F1 = 112;
-  public static final int F2 = 113;
-  public static final int F3 = 114;
-  public static final int F4 = 115;
-  public static final int F5 = 116;
-  public static final int F6 = 117;
-  public static final int F7 = 118;
-  public static final int F8 = 119;
-  public static final int F9 = 120;
-  public static final int F10 = 121;
-  public static final int F11 = 122;
-  public static final int F12 = 123;
-  public static final int NUMLOCK = 144;
-  public static final int SEMICOLON = 186; // needs localization
-  public static final int DASH = 189; // needs localization
-  public static final int EQUALS = 187; // needs localization
-  public static final int COMMA = 188; // needs localization
-  public static final int PERIOD = 190; // needs localization
-  public static final int SLASH = 191; // needs localization
-  public static final int APOSTROPHE = 192; // needs localization
-  public static final int SINGLE_QUOTE = 222; // needs localization
-  public static final int OPEN_SQUARE_BRACKET = 219; // needs localization
-  public static final int BACKSLASH = 220;
-  public static final int CLOSE_SQUARE_BRACKET = 221;
-  public static final int WIN_KEY = 224;
-  public static final int WIN_IME = 229;
-}
-
-/**
- * Defines the standard keyboard identifier names for keys that are returned
- * by {@link #getKeyboardIdentifier} when the key does not have a direct
- * unicode mapping.
- */
-@Deprecated
-public interface KeyName {
-
-  /** The Accept (Commit, OK) key */
-  public static final String ACCEPT = "Accept";
-
-  /** The Add key */
-  public static final String ADD = "Add";
-
-  /** The Again key */
-  public static final String AGAIN = "Again";
-
-  /** The All Candidates key */
-  public static final String ALL_CANDIDATES = "AllCandidates";
-
-  /** The Alphanumeric key */
-  public static final String ALPHANUMERIC = "Alphanumeric";
-
-  /** The Alt (Menu) key */
-  public static final String ALT = "Alt";
-
-  /** The Alt-Graph key */
-  public static final String ALT_GRAPH = "AltGraph";
-
-  /** The Application key */
-  public static final String APPS = "Apps";
-
-  /** The ATTN key */
-  public static final String ATTN = "Attn";
-
-  /** The Browser Back key */
-  public static final String BROWSER_BACK = "BrowserBack";
-
-  /** The Browser Favorites key */
-  public static final String BROWSER_FAVORTIES = "BrowserFavorites";
-
-  /** The Browser Forward key */
-  public static final String BROWSER_FORWARD = "BrowserForward";
-
-  /** The Browser Home key */
-  public static final String BROWSER_NAME = "BrowserHome";
-
-  /** The Browser Refresh key */
-  public static final String BROWSER_REFRESH = "BrowserRefresh";
-
-  /** The Browser Search key */
-  public static final String BROWSER_SEARCH = "BrowserSearch";
-
-  /** The Browser Stop key */
-  public static final String BROWSER_STOP = "BrowserStop";
-
-  /** The Camera key */
-  public static final String CAMERA = "Camera";
-
-  /** The Caps Lock (Capital) key */
-  public static final String CAPS_LOCK = "CapsLock";
-
-  /** The Clear key */
-  public static final String CLEAR = "Clear";
-
-  /** The Code Input key */
-  public static final String CODE_INPUT = "CodeInput";
-
-  /** The Compose key */
-  public static final String COMPOSE = "Compose";
-
-  /** The Control (Ctrl) key */
-  public static final String CONTROL = "Control";
-
-  /** The Crsel key */
-  public static final String CRSEL = "Crsel";
-
-  /** The Convert key */
-  public static final String CONVERT = "Convert";
-
-  /** The Copy key */
-  public static final String COPY = "Copy";
-
-  /** The Cut key */
-  public static final String CUT = "Cut";
-
-  /** The Decimal key */
-  public static final String DECIMAL = "Decimal";
-
-  /** The Divide key */
-  public static final String DIVIDE = "Divide";
-
-  /** The Down Arrow key */
-  public static final String DOWN = "Down";
-
-  /** The diagonal Down-Left Arrow key */
-  public static final String DOWN_LEFT = "DownLeft";
-
-  /** The diagonal Down-Right Arrow key */
-  public static final String DOWN_RIGHT = "DownRight";
-
-  /** The Eject key */
-  public static final String EJECT = "Eject";
-
-  /** The End key */
-  public static final String END = "End";
-
-  /**
-   * The Enter key. Note: This key value must also be used for the Return
-   *  (Macintosh numpad) key
-   */
-  public static final String ENTER = "Enter";
-
-  /** The Erase EOF key */
-  public static final String ERASE_EOF= "EraseEof";
-
-  /** The Execute key */
-  public static final String EXECUTE = "Execute";
-
-  /** The Exsel key */
-  public static final String EXSEL = "Exsel";
-
-  /** The Function switch key */
-  public static final String FN = "Fn";
-
-  /** The F1 key */
-  public static final String F1 = "F1";
-
-  /** The F2 key */
-  public static final String F2 = "F2";
-
-  /** The F3 key */
-  public static final String F3 = "F3";
-
-  /** The F4 key */
-  public static final String F4 = "F4";
-
-  /** The F5 key */
-  public static final String F5 = "F5";
-
-  /** The F6 key */
-  public static final String F6 = "F6";
-
-  /** The F7 key */
-  public static final String F7 = "F7";
-
-  /** The F8 key */
-  public static final String F8 = "F8";
-
-  /** The F9 key */
-  public static final String F9 = "F9";
-
-  /** The F10 key */
-  public static final String F10 = "F10";
-
-  /** The F11 key */
-  public static final String F11 = "F11";
-
-  /** The F12 key */
-  public static final String F12 = "F12";
-
-  /** The F13 key */
-  public static final String F13 = "F13";
-
-  /** The F14 key */
-  public static final String F14 = "F14";
-
-  /** The F15 key */
-  public static final String F15 = "F15";
-
-  /** The F16 key */
-  public static final String F16 = "F16";
-
-  /** The F17 key */
-  public static final String F17 = "F17";
-
-  /** The F18 key */
-  public static final String F18 = "F18";
-
-  /** The F19 key */
-  public static final String F19 = "F19";
-
-  /** The F20 key */
-  public static final String F20 = "F20";
-
-  /** The F21 key */
-  public static final String F21 = "F21";
-
-  /** The F22 key */
-  public static final String F22 = "F22";
-
-  /** The F23 key */
-  public static final String F23 = "F23";
-
-  /** The F24 key */
-  public static final String F24 = "F24";
-
-  /** The Final Mode (Final) key used on some asian keyboards */
-  public static final String FINAL_MODE = "FinalMode";
-
-  /** The Find key */
-  public static final String FIND = "Find";
-
-  /** The Full-Width Characters key */
-  public static final String FULL_WIDTH = "FullWidth";
-
-  /** The Half-Width Characters key */
-  public static final String HALF_WIDTH = "HalfWidth";
-
-  /** The Hangul (Korean characters) Mode key */
-  public static final String HANGUL_MODE = "HangulMode";
-
-  /** The Hanja (Korean characters) Mode key */
-  public static final String HANJA_MODE = "HanjaMode";
-
-  /** The Help key */
-  public static final String HELP = "Help";
-
-  /** The Hiragana (Japanese Kana characters) key */
-  public static final String HIRAGANA = "Hiragana";
-
-  /** The Home key */
-  public static final String HOME = "Home";
-
-  /** The Insert (Ins) key */
-  public static final String INSERT = "Insert";
-
-  /** The Japanese-Hiragana key */
-  public static final String JAPANESE_HIRAGANA = "JapaneseHiragana";
-
-  /** The Japanese-Katakana key */
-  public static final String JAPANESE_KATAKANA = "JapaneseKatakana";
-
-  /** The Japanese-Romaji key */
-  public static final String JAPANESE_ROMAJI = "JapaneseRomaji";
-
-  /** The Junja Mode key */
-  public static final String JUNJA_MODE = "JunjaMode";
-
-  /** The Kana Mode (Kana Lock) key */
-  public static final String KANA_MODE = "KanaMode";
-
-  /**
-   * The Kanji (Japanese name for ideographic characters of Chinese origin)
-   * Mode key
-   */
-  public static final String KANJI_MODE = "KanjiMode";
-
-  /** The Katakana (Japanese Kana characters) key */
-  public static final String KATAKANA = "Katakana";
-
-  /** The Start Application One key */
-  public static final String LAUNCH_APPLICATION_1 = "LaunchApplication1";
-
-  /** The Start Application Two key */
-  public static final String LAUNCH_APPLICATION_2 = "LaunchApplication2";
-
-  /** The Start Mail key */
-  public static final String LAUNCH_MAIL = "LaunchMail";
-
-  /** The Left Arrow key */
-  public static final String LEFT = "Left";
-
-  /** The Menu key */
-  public static final String MENU = "Menu";
-
-  /**
-   * The Meta key. Note: This key value shall be also used for the Apple
-   * Command key
-   */
-  public static final String META = "Meta";
-
-  /** The Media Next Track key */
-  public static final String MEDIA_NEXT_TRACK = "MediaNextTrack";
-
-  /** The Media Play Pause key */
-  public static final String MEDIA_PAUSE_PLAY = "MediaPlayPause";
-
-  /** The Media Previous Track key */
-  public static final String MEDIA_PREVIOUS_TRACK = "MediaPreviousTrack";
-
-  /** The Media Stop key */
-  public static final String MEDIA_STOP = "MediaStop";
-
-  /** The Mode Change key */
-  public static final String MODE_CHANGE = "ModeChange";
-
-  /** The Next Candidate function key */
-  public static final String NEXT_CANDIDATE = "NextCandidate";
-
-  /** The Nonconvert (Don't Convert) key */
-  public static final String NON_CONVERT = "Nonconvert";
-
-  /** The Number Lock key */
-  public static final String NUM_LOCK = "NumLock";
-
-  /** The Page Down (Next) key */
-  public static final String PAGE_DOWN = "PageDown";
-
-  /** The Page Up key */
-  public static final String PAGE_UP = "PageUp";
-
-  /** The Paste key */
-  public static final String PASTE = "Paste";
-
-  /** The Pause key */
-  public static final String PAUSE = "Pause";
-
-  /** The Play key */
-  public static final String PLAY = "Play";
-
-  /**
-   * The Power key. Note: Some devices may not expose this key to the
-   * operating environment
-   */
-  public static final String POWER = "Power";
-
-  /** The Previous Candidate function key */
-  public static final String PREVIOUS_CANDIDATE = "PreviousCandidate";
-
-  /** The Print Screen (PrintScrn, SnapShot) key */
-  public static final String PRINT_SCREEN = "PrintScreen";
-
-  /** The Process key */
-  public static final String PROCESS = "Process";
-
-  /** The Props key */
-  public static final String PROPS = "Props";
-
-  /** The Right Arrow key */
-  public static final String RIGHT = "Right";
-
-  /** The Roman Characters function key */
-  public static final String ROMAN_CHARACTERS = "RomanCharacters";
-
-  /** The Scroll Lock key */
-  public static final String SCROLL = "Scroll";
-
-  /** The Select key */
-  public static final String SELECT = "Select";
-
-  /** The Select Media key */
-  public static final String SELECT_MEDIA = "SelectMedia";
-
-  /** The Separator key */
-  public static final String SEPARATOR = "Separator";
-
-  /** The Shift key */
-  public static final String SHIFT = "Shift";
-
-  /** The Soft1 key */
-  public static final String SOFT_1 = "Soft1";
-
-  /** The Soft2 key */
-  public static final String SOFT_2 = "Soft2";
-
-  /** The Soft3 key */
-  public static final String SOFT_3 = "Soft3";
-
-  /** The Soft4 key */
-  public static final String SOFT_4 = "Soft4";
-
-  /** The Stop key */
-  public static final String STOP = "Stop";
-
-  /** The Subtract key */
-  public static final String SUBTRACT = "Subtract";
-
-  /** The Symbol Lock key */
-  public static final String SYMBOL_LOCK = "SymbolLock";
-
-  /** The Up Arrow key */
-  public static final String UP = "Up";
-
-  /** The diagonal Up-Left Arrow key */
-  public static final String UP_LEFT = "UpLeft";
-
-  /** The diagonal Up-Right Arrow key */
-  public static final String UP_RIGHT = "UpRight";
-
-  /** The Undo key */
-  public static final String UNDO = "Undo";
-
-  /** The Volume Down key */
-  public static final String VOLUME_DOWN = "VolumeDown";
-
-  /** The Volume Mute key */
-  public static final String VOLUMN_MUTE = "VolumeMute";
-
-  /** The Volume Up key */
-  public static final String VOLUMN_UP = "VolumeUp";
-
-  /** The Windows Logo key */
-  public static final String WIN = "Win";
-
-  /** The Zoom key */
-  public static final String ZOOM = "Zoom";
-
-  /**
-   * The Backspace (Back) key. Note: This key value shall be also used for the
-   * key labeled 'delete' MacOS keyboards when not modified by the 'Fn' key
-   */
-  public static final String BACKSPACE = "Backspace";
-
-  /** The Horizontal Tabulation (Tab) key */
-  public static final String TAB = "Tab";
-
-  /** The Cancel key */
-  public static final String CANCEL = "Cancel";
-
-  /** The Escape (Esc) key */
-  public static final String ESC = "Esc";
-
-  /** The Space (Spacebar) key:   */
-  public static final String SPACEBAR = "Spacebar";
-
-  /**
-   * The Delete (Del) Key. Note: This key value shall be also used for the key
-   * labeled 'delete' MacOS keyboards when modified by the 'Fn' key
-   */
-  public static final String DEL = "Del";
-
-  /** The Combining Grave Accent (Greek Varia, Dead Grave) key */
-  public static final String DEAD_GRAVE = "DeadGrave";
-
-  /**
-   * The Combining Acute Accent (Stress Mark, Greek Oxia, Tonos, Dead Eacute)
-   * key
-   */
-  public static final String DEAD_EACUTE = "DeadEacute";
-
-  /** The Combining Circumflex Accent (Hat, Dead Circumflex) key */
-  public static final String DEAD_CIRCUMFLEX = "DeadCircumflex";
-
-  /** The Combining Tilde (Dead Tilde) key */
-  public static final String DEAD_TILDE = "DeadTilde";
-
-  /** The Combining Macron (Long, Dead Macron) key */
-  public static final String DEAD_MACRON = "DeadMacron";
-
-  /** The Combining Breve (Short, Dead Breve) key */
-  public static final String DEAD_BREVE = "DeadBreve";
-
-  /** The Combining Dot Above (Derivative, Dead Above Dot) key */
-  public static final String DEAD_ABOVE_DOT = "DeadAboveDot";
-
-  /**
-   * The Combining Diaeresis (Double Dot Abode, Umlaut, Greek Dialytika,
-   * Double Derivative, Dead Diaeresis) key
-   */
-  public static final String DEAD_UMLAUT = "DeadUmlaut";
-
-  /** The Combining Ring Above (Dead Above Ring) key */
-  public static final String DEAD_ABOVE_RING = "DeadAboveRing";
-
-  /** The Combining Double Acute Accent (Dead Doubleacute) key */
-  public static final String DEAD_DOUBLEACUTE = "DeadDoubleacute";
-
-  /** The Combining Caron (Hacek, V Above, Dead Caron) key */
-  public static final String DEAD_CARON = "DeadCaron";
-
-  /** The Combining Cedilla (Dead Cedilla) key */
-  public static final String DEAD_CEDILLA = "DeadCedilla";
-
-  /** The Combining Ogonek (Nasal Hook, Dead Ogonek) key */
-  public static final String DEAD_OGONEK = "DeadOgonek";
-
-  /**
-   * The Combining Greek Ypogegrammeni (Greek Non-Spacing Iota Below, Iota
-   * Subscript, Dead Iota) key
-   */
-  public static final String DEAD_IOTA = "DeadIota";
-
-  /**
-   * The Combining Katakana-Hiragana Voiced Sound Mark (Dead Voiced Sound) key
-   */
-  public static final String DEAD_VOICED_SOUND = "DeadVoicedSound";
-
-  /**
-   * The Combining Katakana-Hiragana Semi-Voiced Sound Mark (Dead Semivoiced
-   * Sound) key
-   */
-  public static final String DEC_SEMIVOICED_SOUND= "DeadSemivoicedSound";
-
-  /**
-   * Key value used when an implementation is unable to identify another key
-   * value, due to either hardware, platform, or software constraints
-   */
-  public static final String UNIDENTIFIED = "Unidentified";
-  }
-
-  int getKeyCode();
-    
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface_MouseEvent.darttemplate b/elemental/idl/templates/java_interface_MouseEvent.darttemplate
deleted file mode 100644
index 3d9ff37..0000000
--- a/elemental/idl/templates/java_interface_MouseEvent.darttemplate
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-  /**
-   * Contains the set of standard values returned by {@link #button}.
-   */
-  @Deprecated
-  public interface Button {
-    public static final short PRIMARY = 0;
-    public static final short AUXILIARY = 1;
-    public static final short SECONDARY = 2;
-  }
-$!MEMBERS}
diff --git a/elemental/idl/templates/java_interface_Window.darttemplate b/elemental/idl/templates/java_interface_Window.darttemplate
deleted file mode 100644
index f1455b2..0000000
--- a/elemental/idl/templates/java_interface_Window.darttemplate
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.stylesheets.*;
-import elemental.xpath.*;
-import elemental.xml.*;
-
-
-import java.util.Date;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $ID$EXTENDS {
-  void clearOpener();
-$!MEMBERS}
diff --git a/elemental/idl/templates/javacallback.darttemplate b/elemental/idl/templates/javacallback.darttemplate
deleted file mode 100644
index 0e6644e..0000000
--- a/elemental/idl/templates/javacallback.darttemplate
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-
-/**
-  * $CLASSJAVADOC
-  */
-@Deprecated
-public interface $NAME {
-  $TYPE on$NAME($PARAMS);
-}
diff --git a/elemental/idl/templates/jso_impl.darttemplate b/elemental/idl/templates/jso_impl.darttemplate
deleted file mode 100644
index 837a5b7..0000000
--- a/elemental/idl/templates/jso_impl.darttemplate
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.js.stylesheets.*;
-import elemental.js.events.*;
-import elemental.js.util.*;
-import elemental.js.dom.*;
-import elemental.js.html.*;
-import elemental.js.css.*;
-import elemental.js.stylesheets.*;
-
-import java.util.Date;
-
-@Deprecated
-public class $ID$EXTENDS $IMPLEMENTS {
-  protected $ID() {}
-$!MEMBERS}
diff --git a/elemental/idl/templates/jso_impl_Document.darttemplate b/elemental/idl/templates/jso_impl_Document.darttemplate
deleted file mode 100644
index e41d5e0..0000000
--- a/elemental/idl/templates/jso_impl_Document.darttemplate
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.js.stylesheets.*;
-import elemental.js.events.*;
-import elemental.js.util.*;
-import elemental.js.dom.*;
-import elemental.js.html.*;
-import elemental.js.css.*;
-import elemental.js.stylesheets.*;
-import elemental.js.svg.*;
-import elemental.svg.*;
-
-import java.util.Date;
-
-@Deprecated
-public class $ID$EXTENDS $IMPLEMENTS {
-  protected $ID() {}
-
-  public final native void clearOpener() /*-{
-    this.opener = null;
-  }-*/;
-
-  public final JsElement createSvgElement(String tag) {
-    return createElementNS("http://www.w3.org/2000/svg", tag).cast();
-  }
-
-$!MEMBERS}
diff --git a/elemental/idl/templates/jso_impl_ElementalMixinBase.darttemplate b/elemental/idl/templates/jso_impl_ElementalMixinBase.darttemplate
deleted file mode 100644
index 5e2c124..0000000
--- a/elemental/idl/templates/jso_impl_ElementalMixinBase.darttemplate
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.svg.*;
-import elemental.js.util.JsElementalBase;
-
-import java.util.Date;
-
-/**
-  * A base class containing all of the IDL interfaces which are shared
-  * between disjoint type hierarchies. Because of the GWT compiler
-  * SingleJsoImpl restriction that only a single JavaScriptObject
-  * may implement a given interface, we hoist all of the explicit
-  * mixin classes into a base JSO used by all of elemental.
-  */
-@Deprecated
-public class JsElementalMixinBase $EXTENDS $IMPLEMENTS {
-  protected JsElementalMixinBase() {}
-$!MEMBERS
-
-private static class Remover implements EventRemover {
-  private final EventTarget target;
-  private final String type;
-  private final JavaScriptObject handler;
-  private final boolean useCapture;
-
-  private Remover(EventTarget target, String type, JavaScriptObject handler,
-      boolean useCapture) {
-    this.target = target;
-    this.type = type;
-    this.handler = handler;
-    this.useCapture = useCapture;
-  }
-
-  @Override
-  public void remove() {
-    removeEventListener(target, type, handler, useCapture);
-  }
-
-  private static Remover create(EventTarget target, String type, JavaScriptObject handler,
-      boolean useCapture) {
-    return new Remover(target, type, handler, useCapture);
-  }
-}
-
-// NOTES:
-// - This handler/listener structure is currently the same in DevMode and ProdMode but it is
-//   subject to change. In fact, I would like to use:
-//     { listener : listener, handleEvent : function() }
-//   but Firefox doesn't properly support that form of handler for onEvent type events.
-// - The handler property on listener can be removed when removeEventListener is removed.
-private native static JavaScriptObject createHandler(EventListener listener) /*-{
-  var handler = listener.handler;
-  if (!handler) {
-    handler = $entry(function(event) {
-      @elemental.js.dom.JsElementalMixinBase::handleEvent(Lelemental/events/EventListener;Lelemental/events/Event;)(listener, event);
-    });
-    handler.listener = listener;
-    // TODO(knorton): Remove at Christmas when removeEventListener is removed.
-    listener.handler = handler;
-  }
-  return handler;
-}-*/;
-
-private static class ForDevMode {
-  private static java.util.Map<EventListener, JavaScriptObject> handlers;
-
-  static {
-    if (!com.google.gwt.core.client.GWT.isScript()) {
-      handlers = new java.util.HashMap<EventListener, JavaScriptObject>();
-    }
-  }
-
-  private static JavaScriptObject getHandlerFor(EventListener listener) {
-    if (listener == null) {
-      return null;
-    }
-
-    JavaScriptObject handler = handlers.get(listener);
-    if (handler == null) {
-      handler = createHandler(listener);
-      handlers.put(listener, handler);
-    }
-    return handler;
-  }
-
-  private native static JavaScriptObject createHandler(EventListener listener) /*-{
-    var handler = $entry(function(event) {
-      @elemental.js.dom.JsElementalMixinBase::handleEvent(Lelemental/events/EventListener;Lelemental/events/Event;)(listener, event);
-    });
-    handler.listener = listener;
-    return handler;
-  }-*/;
-
-  private native static EventListener getListenerFor(JavaScriptObject handler) /*-{
-    return handler && handler.listener;
-  }-*/;
-}
-
-private static class ForProdMode {
-  private static JavaScriptObject getHandlerFor(EventListener listener) {
-    return listener == null ? null : createHandler(listener);
-  }
-
-  private native static EventListener getListenerFor(JavaScriptObject handler) /*-{
-    return handler && handler.listener;
-  }-*/;
-}
-
-private static void handleEvent(EventListener listener, Event event) {
-  listener.handleEvent(event);
-}
-
-private static EventListener getListenerFor(JavaScriptObject handler) {
-  return com.google.gwt.core.client.GWT.isScript()
-    ? ForProdMode.getListenerFor(handler)
-    : ForDevMode.getListenerFor(handler);
-}
-
-private static JavaScriptObject getHandlerFor(EventListener listener) {
-  return com.google.gwt.core.client.GWT.isScript()
-    ? ForProdMode.getHandlerFor(listener)
-    : ForDevMode.getHandlerFor(listener);
-}
- 
-public native final EventRemover addEventListener(String type, EventListener listener, boolean useCapture) /*-{
-  var handler = @elemental.js.dom.JsElementalMixinBase::getHandlerFor(Lelemental/events/EventListener;)(listener);
-  this.addEventListener(type, handler, useCapture);
-  return @elemental.js.dom.JsElementalMixinBase.Remover::create(Lelemental/events/EventTarget;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;Z)
-      (this, type, handler, useCapture);
-}-*/;
-
-public final EventRemover addEventListener(String type, EventListener listener) {
-  return addEventListener(type, listener, false);
-}
-
-@Deprecated
-public final void removeEventListener(String type, EventListener listener, boolean useCapture) {
-  final JavaScriptObject handler = getHandlerFor(listener);
-  if (handler != null) {
-    removeEventListener(this, type, handler, useCapture);
-  }
-}
-
-@Deprecated
-public final void removeEventListener(String type, EventListener listener) {
-  final JavaScriptObject handler = getHandlerFor(listener);
-  if (handler != null) {
-    removeEventListener(this, type, handler);
-  }
-}
-
-private static native void removeEventListener(EventTarget target, String type,
-    JavaScriptObject handler, boolean useCapture) /*-{
-  target.removeEventListener(type, handler, useCapture);
-}-*/;
-
-private static native void removeEventListener(EventTarget target, String type,
-    JavaScriptObject handler) /*-{
-  target.removeEventListener(type, handler);
-}-*/;
-
-}
diff --git a/elemental/idl/templates/jso_impl_Window.darttemplate b/elemental/idl/templates/jso_impl_Window.darttemplate
deleted file mode 100644
index 9b6ae03..0000000
--- a/elemental/idl/templates/jso_impl_Window.darttemplate
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package $PACKAGE;
-$IMPORTS
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.events.*;
-import elemental.util.*;
-import elemental.dom.*;
-import elemental.html.*;
-import elemental.css.*;
-import elemental.js.stylesheets.*;
-import elemental.js.events.*;
-import elemental.js.util.*;
-import elemental.js.dom.*;
-import elemental.js.html.*;
-import elemental.js.css.*;
-import elemental.js.stylesheets.*;
-import elemental.xpath.*;
-import elemental.xml.*;
-import elemental.js.xpath.*;
-import elemental.js.xml.*;
-
-import java.util.Date;
-
-@Deprecated
-public class $ID$EXTENDS $IMPLEMENTS {
-  protected $ID() {}
-
-  public final native void clearOpener() /*-{
-    this.opener = null;
-  }-*/;
-
-$!MEMBERS}
diff --git a/elemental/idl/third_party/WebCore/LICENSE-APPLE b/elemental/idl/third_party/WebCore/LICENSE-APPLE
deleted file mode 100644
index f29b41c..0000000
--- a/elemental/idl/third_party/WebCore/LICENSE-APPLE
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1.  Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-2.  Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/elemental/idl/third_party/WebCore/LICENSE-LGPL-2 b/elemental/idl/third_party/WebCore/LICENSE-LGPL-2
deleted file mode 100644
index 0e1187b..0000000
--- a/elemental/idl/third_party/WebCore/LICENSE-LGPL-2
+++ /dev/null
@@ -1,481 +0,0 @@
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL.  It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-                  GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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; if not, write to the Free
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/elemental/idl/third_party/WebCore/LICENSE-LGPL-2.1 b/elemental/idl/third_party/WebCore/LICENSE-LGPL-2.1
deleted file mode 100644
index b2787a6..0000000
--- a/elemental/idl/third_party/WebCore/LICENSE-LGPL-2.1
+++ /dev/null
@@ -1,502 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/elemental/idl/third_party/WebCore/Modules/battery/BatteryManager.idl b/elemental/idl/third_party/WebCore/Modules/battery/BatteryManager.idl
deleted file mode 100644
index e552df3..0000000
--- a/elemental/idl/third_party/WebCore/Modules/battery/BatteryManager.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Copyright (C) 2012 Samsung Electronics
- *
- *  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.
- */
-
-module window {
-
-    // http://dev.w3.org/2009/dap/system-info/battery-status.html
-    interface [
-        Conditional=BATTERY_STATUS,
-        ActiveDOMObject,
-        EventTarget
-     ] BatteryManager {
-        readonly attribute boolean charging;
-        readonly attribute double chargingTime;
-        readonly attribute double dischargingTime;
-        readonly attribute double level;
-
-        attribute EventListener onchargingchange;
-        attribute EventListener onchargingtimechange;
-        attribute EventListener ondischargingtimechange;
-        attribute EventListener onlevelchange;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/Modules/battery/NavigatorBattery.idl b/elemental/idl/third_party/WebCore/Modules/battery/NavigatorBattery.idl
deleted file mode 100644
index 5c21472..0000000
--- a/elemental/idl/third_party/WebCore/Modules/battery/NavigatorBattery.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2012 Samsung Electronics
- *
- *  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.
- */
-
-module window {
-
-    interface [
-        Conditional=BATTERY_STATUS,
-        Supplemental=Navigator
-    ] NavigatorBattery {
-        readonly attribute BatteryManager webkitBattery;
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystem.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystem.idl
deleted file mode 100644
index 2e98fbf..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystem.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * 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:
- *
- *     * 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.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        ActiveDOMObject,
-        JSNoStaticTables
-    ] DOMFileSystem {
-        readonly attribute DOMString name;
-        readonly attribute DirectoryEntry root;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystemSync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystemSync.idl
deleted file mode 100644
index 706aa50..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMFileSystemSync.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSNoStaticTables
-    ] DOMFileSystemSync {
-        readonly attribute DOMString name;
-        readonly attribute DirectoryEntrySync root;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMWindowFileSystem.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DOMWindowFileSystem.idl
deleted file mode 100644
index b6ef513..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DOMWindowFileSystem.idl
+++ /dev/null
@@ -1,42 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=FILE_SYSTEM,
-        Supplemental=DOMWindow
-    ] DOMWindowFileSystem {
-        const unsigned short TEMPORARY = 0;
-        const unsigned short PERSISTENT = 1;
-
-        [V8EnabledAtRuntime=FileSystem] void webkitRequestFileSystem(in unsigned short type, in long long size,
-                in [Callback] FileSystemCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);
-        [V8EnabledAtRuntime=FileSystem] void webkitResolveLocalFileSystemURL(in DOMString url,
-                in [Callback, Optional] EntryCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DataTransferItemFileSystem.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DataTransferItemFileSystem.idl
deleted file mode 100644
index 35291dd..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DataTransferItemFileSystem.idl
+++ /dev/null
@@ -1,40 +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.
- *     * 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.
- */
-
-module core {
-
-    interface [
-        Conditional=DATA_TRANSFER_ITEMS&FILE_SYSTEM,
-        Supplemental=DataTransferItem
-    ] DataTransferItemFileSystem {
-        // FIXME: add webkitGetAsEntry()
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntry.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntry.idl
deleted file mode 100644
index c6c9ae9..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntry.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables
-    ] DirectoryEntry : Entry {
-        DirectoryReader createReader();
-        [Custom] void getFile(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, in [Optional] WebKitFlags flags, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        [Custom] void getDirectory(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, in [Optional] WebKitFlags flags, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        void removeRecursively(in [Callback] VoidCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntrySync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntrySync.idl
deleted file mode 100644
index 66c288f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryEntrySync.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables
-    ] DirectoryEntrySync : EntrySync {
-        DirectoryReaderSync createReader() raises (FileException);
-        [Custom] FileEntrySync getFile(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, in WebKitFlags flags) raises (FileException);
-        [Custom] DirectoryEntrySync getDirectory(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, in WebKitFlags flags) raises (FileException);
-        void removeRecursively() raises (FileException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReader.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReader.idl
deleted file mode 100644
index 87ce852..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReader.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSNoStaticTables
-    ] DirectoryReader {
-        void readEntries(in [Callback] EntriesCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReaderSync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReaderSync.idl
deleted file mode 100644
index a8ff685..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/DirectoryReaderSync.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSNoStaticTables
-    ] DirectoryReaderSync {
-        EntryArraySync readEntries() raises (FileException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/EntriesCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/EntriesCallback.idl
deleted file mode 100644
index 73b374d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/EntriesCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] EntriesCallback {
-        boolean handleEvent(in EntryArray entries);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/Entry.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/Entry.idl
deleted file mode 100644
index c6cdba5..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/Entry.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        CustomToJSObject,
-        JSNoStaticTables
-    ] Entry {
-        readonly attribute boolean isFile;
-        readonly attribute boolean isDirectory;
-        readonly attribute DOMString name;
-        readonly attribute DOMString fullPath;
-        readonly attribute DOMFileSystem filesystem;
-
-        void getMetadata(in [Callback] MetadataCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        void moveTo(in DirectoryEntry parent, in [Optional, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        void copyTo(in DirectoryEntry parent, in [Optional, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name, in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        DOMString toURL();
-        void remove(in [Callback] VoidCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        void getParent(in [Optional, Callback] EntryCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArray.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArray.idl
deleted file mode 100644
index 324dbc6..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArray.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        IndexedGetter,
-        JSNoStaticTables
-    ] EntryArray {
-        readonly attribute unsigned long length;
-        Entry item(in [IsIndex] unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArraySync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArraySync.idl
deleted file mode 100644
index 224a68a..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryArraySync.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        IndexedGetter,
-        JSNoStaticTables
-    ] EntryArraySync {
-        readonly attribute unsigned long length;
-        EntrySync item(in [IsIndex] unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/EntryCallback.idl
deleted file mode 100644
index bea3fd1..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/EntryCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] EntryCallback {
-        boolean handleEvent(in Entry entry);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/EntrySync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/EntrySync.idl
deleted file mode 100644
index cd4bae7..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/EntrySync.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        CustomToJSObject,
-        JSNoStaticTables
-    ] EntrySync {
-        readonly attribute boolean isFile;
-        readonly attribute boolean isDirectory;
-        readonly attribute DOMString name;
-        readonly attribute DOMString fullPath;
-        readonly attribute DOMFileSystemSync filesystem;
-
-        Metadata getMetadata() raises (FileException);
-        EntrySync moveTo(in DirectoryEntrySync parent, in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name) raises (FileException);
-        EntrySync copyTo(in DirectoryEntrySync parent, in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name) raises (FileException);
-        DOMString toURL();
-        void remove() raises (FileException);
-        DirectoryEntrySync getParent();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/ErrorCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/ErrorCallback.idl
deleted file mode 100644
index fc7fa85..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/ErrorCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] ErrorCallback {
-        boolean handleEvent(in FileError error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileCallback.idl
deleted file mode 100644
index 0ab814f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module fileapi {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] FileCallback {
-        boolean handleEvent(in File file);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntry.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntry.idl
deleted file mode 100644
index 63b0040..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntry.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables
-    ] FileEntry : Entry {
-        void createWriter(in [Callback] FileWriterCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-        void file(in [Callback] FileCallback successCallback, in [Optional, Callback] ErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntrySync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntrySync.idl
deleted file mode 100644
index 8ac40ba..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileEntrySync.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables
-    ] FileEntrySync : EntrySync {
-        File file() raises (FileException);
-        FileWriterSync createWriter() raises (FileException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileSystemCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileSystemCallback.idl
deleted file mode 100644
index cf686ff..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileSystemCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] FileSystemCallback {
-        boolean handleEvent(in DOMFileSystem fileSystem);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriter.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriter.idl
deleted file mode 100644
index 754fa0f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriter.idl
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- * 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:
- *
- *     * 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.
- */
-
-module html {
-    interface [
-        Conditional=FILE_SYSTEM,
-        ActiveDOMObject,
-        CallWith=ScriptExecutionContext,
-        EventTarget,
-        JSNoStaticTables
-    ] FileWriter {
-        // ready states
-        const unsigned short INIT = 0;
-        const unsigned short WRITING = 1;
-        const unsigned short DONE = 2;
-        readonly attribute unsigned short readyState;
-
-        // async write/modify methods
-        void write(in Blob data) raises (FileException);
-        void seek(in long long position) raises (FileException);
-        void truncate(in long long size) raises (FileException);
-
-        void abort() raises (FileException);
-
-        readonly attribute FileError error;
-        readonly attribute long long position;
-        readonly attribute long long length;
-
-                 attribute EventListener onwritestart;
-                 attribute EventListener onprogress;
-                 attribute EventListener onwrite;
-                 attribute EventListener onabort;
-                 attribute EventListener onerror;
-                 attribute EventListener onwriteend;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterCallback.idl
deleted file mode 100644
index df82fed..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module fileapi {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] FileWriterCallback {
-        boolean handleEvent(in FileWriter fileWriter);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterSync.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterSync.idl
deleted file mode 100644
index 57cd256..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/FileWriterSync.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * 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.
- */
-
-module html {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSNoStaticTables
-    ] FileWriterSync {
-        // synchronous write/modify methods
-        void write(in Blob data) raises (FileException);
-        void seek(in long long position) raises (FileException);
-        void truncate(in long long size) raises (FileException);
-
-        readonly attribute long long position;
-        readonly attribute long long length;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/Metadata.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/Metadata.idl
deleted file mode 100644
index ceaf21b..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/Metadata.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        JSNoStaticTables
-    ] Metadata {
-        readonly attribute Date modificationTime;
-        readonly attribute unsigned long long size;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/MetadataCallback.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/MetadataCallback.idl
deleted file mode 100644
index 44ca180..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/MetadataCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=FILE_SYSTEM,
-        Callback
-    ] MetadataCallback {
-        boolean handleEvent(in Metadata metadata);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/filesystem/WorkerContextFileSystem.idl b/elemental/idl/third_party/WebCore/Modules/filesystem/WorkerContextFileSystem.idl
deleted file mode 100644
index cb9c328..0000000
--- a/elemental/idl/third_party/WebCore/Modules/filesystem/WorkerContextFileSystem.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module threads {
-
-    interface [
-        Conditional=FILE_SYSTEM,
-        Supplemental=WorkerContext
-    ] WorkerContextFileSystem {
-        const unsigned short TEMPORARY = 0;
-        const unsigned short PERSISTENT = 1;
-
-        [V8EnabledAtRuntime=FileSystem] void webkitRequestFileSystem(in unsigned short type, in long long size, in [Callback, Optional] FileSystemCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);
-        [V8EnabledAtRuntime=FileSystem] DOMFileSystemSync webkitRequestFileSystemSync(in unsigned short type, in long long size) raises (FileException);
-        [V8EnabledAtRuntime=FileSystem] void webkitResolveLocalFileSystemURL(in DOMString url, in [Callback, Optional] EntryCallback successCallback, in [Callback, Optional] ErrorCallback errorCallback);
-        [V8EnabledAtRuntime=FileSystem] EntrySync webkitResolveLocalFileSystemSyncURL(in DOMString url) raises (FileException);
-
-        attribute [V8EnabledAtRuntime=FileSystem] FileErrorConstructor FileError;
-        attribute [V8EnabledAtRuntime=FileSystem] FileExceptionConstructor FileException;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/gamepad/Gamepad.idl b/elemental/idl/third_party/WebCore/Modules/gamepad/Gamepad.idl
deleted file mode 100644
index e00e2dc..0000000
--- a/elemental/idl/third_party/WebCore/Modules/gamepad/Gamepad.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
-
-module dom {
-
-    interface [
-        Conditional=GAMEPAD
-    ] Gamepad {
-        readonly attribute DOMString id;
-        readonly attribute unsigned long index;
-        readonly attribute unsigned long long timestamp;
-        readonly attribute float[] axes;
-        readonly attribute float[] buttons;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/gamepad/GamepadList.idl b/elemental/idl/third_party/WebCore/Modules/gamepad/GamepadList.idl
deleted file mode 100644
index 4f1e1df..0000000
--- a/elemental/idl/third_party/WebCore/Modules/gamepad/GamepadList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
-
-module dom {
-
-    interface [
-        Conditional=GAMEPAD,
-        IndexedGetter
-    ] GamepadList {
-        readonly attribute unsigned long length;
-        Gamepad item(in [Optional=DefaultIsUndefined] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/gamepad/NavigatorGamepad.idl b/elemental/idl/third_party/WebCore/Modules/gamepad/NavigatorGamepad.idl
deleted file mode 100644
index e8a945d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/gamepad/NavigatorGamepad.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    interface [
-        Conditional=GAMEPAD,
-        Supplemental=Navigator
-    ] NavigatorGamepad {
-        readonly attribute [V8EnabledAtRuntime] GamepadList webkitGamepads;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/Geolocation.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/Geolocation.idl
deleted file mode 100644
index 4f159bc..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/Geolocation.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module core {
-
-    // http://www.w3.org/TR/geolocation-API/#geolocation_interface
-    interface [
-        Conditional=GEOLOCATION, 
-        JSGenerateIsReachable=ImplFrame,
-        OmitConstructor
-    ] Geolocation {
-        [Custom] void getCurrentPosition(in PositionCallback successCallback,
-                                         in [Optional] PositionErrorCallback errorCallback,
-                                         in [Optional] PositionOptions options);
-
-        [Custom] long watchPosition(in PositionCallback successCallback,
-                                    in [Optional] PositionErrorCallback errorCallback,
-                                    in [Optional] PositionOptions options);
-
-        void clearWatch(in long watchId);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/Geoposition.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/Geoposition.idl
deleted file mode 100644
index cbe728a..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/Geoposition.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module core {
-
-    interface [
-        Conditional=GEOLOCATION,
-        OmitConstructor
-    ] Geoposition {
-        readonly attribute Coordinates coords;
-        readonly attribute DOMTimeStamp timestamp;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/NavigatorGeolocation.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/NavigatorGeolocation.idl
deleted file mode 100644
index e0b8f0e..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/NavigatorGeolocation.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    interface [
-        Conditional=GEOLOCATION,
-        Supplemental=Navigator
-    ] NavigatorGeolocation {
-        readonly attribute [V8EnabledAtRuntime] Geolocation geolocation;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionCallback.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/PositionCallback.idl
deleted file mode 100644
index 39cfa34..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionCallback.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=GEOLOCATION,
-        Callback
-    ] PositionCallback {
-        boolean handleEvent(in Geoposition position);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionError.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/PositionError.idl
deleted file mode 100644
index 98e036f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionError.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module core {
-
-    interface [
-        Conditional=GEOLOCATION
-    ] PositionError {
-        readonly attribute unsigned short code;
-        readonly attribute DOMString message;
-
-        const unsigned short PERMISSION_DENIED = 1;
-        const unsigned short POSITION_UNAVAILABLE = 2;
-        const unsigned short TIMEOUT = 3;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionErrorCallback.idl b/elemental/idl/third_party/WebCore/Modules/geolocation/PositionErrorCallback.idl
deleted file mode 100644
index a7dc932..0000000
--- a/elemental/idl/third_party/WebCore/Modules/geolocation/PositionErrorCallback.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=GEOLOCATION,
-        Callback
-    ] PositionErrorCallback {
-        boolean handleEvent(in PositionError error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.idl
deleted file mode 100644
index ad3998b..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.idl
+++ /dev/null
@@ -1,46 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        Supplemental=DOMWindow
-    ] DOMWindowIndexedDatabase {
-        readonly attribute IDBFactory webkitIndexedDB;
-
-        attribute IDBCursorConstructor webkitIDBCursor;
-        attribute IDBDatabaseConstructor webkitIDBDatabase;
-        attribute IDBDatabaseExceptionConstructor webkitIDBDatabaseException;
-        attribute IDBFactoryConstructor webkitIDBFactory;
-        attribute IDBIndexConstructor webkitIDBIndex;
-        attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-        attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-        attribute IDBRequestConstructor webkitIDBRequest;
-        attribute IDBTransactionConstructor webkitIDBTransaction;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBAny.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBAny.idl
deleted file mode 100644
index dd51c4d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBAny.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        CustomToJSObject
-    ] IDBAny {
-        // This space is intentionally left blank.
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursor.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursor.idl
deleted file mode 100644
index d73d146..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursor.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-    ] IDBCursor {
-        // FIXME: Eventually remove legacy enum constants, see https://bugs.webkit.org/show_bug.cgi?id=85315
-        const unsigned short NEXT = 0;
-        const unsigned short NEXT_NO_DUPLICATE = 1;
-        const unsigned short PREV = 2;
-        const unsigned short PREV_NO_DUPLICATE = 3;
-
-        readonly attribute DOMString direction;
-        readonly attribute IDBKey key;
-        readonly attribute IDBKey primaryKey;
-        readonly attribute IDBAny source;
-
-        [CallWith=ScriptExecutionContext] IDBRequest update(in SerializedScriptValue value)
-            raises (IDBDatabaseException);
-        void advance(in unsigned long count)
-            raises (IDBDatabaseException);
-        [ImplementedAs=continueFunction] void continue(in [Optional] IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext, ImplementedAs=deleteFunction] IDBRequest delete()
-            raises (IDBDatabaseException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursorWithValue.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursorWithValue.idl
deleted file mode 100644
index 6ffc5b5..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBCursorWithValue.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBCursorWithValue : IDBCursor {
-        readonly attribute IDBAny value;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabase.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabase.idl
deleted file mode 100644
index 95f6c23..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabase.idl
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * 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 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        ActiveDOMObject,
-        EventTarget
-    ] IDBDatabase {
-        readonly attribute DOMString name;
-        readonly attribute DOMString version;
-        readonly attribute DOMStringList objectStoreNames;
-
-        attribute EventListener onabort;
-        attribute EventListener onerror;
-        attribute EventListener onversionchange;
-
-        IDBObjectStore createObjectStore(in DOMString name, in [Optional] Dictionary options)
-            raises (IDBDatabaseException);
-        void deleteObjectStore(in DOMString name)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBVersionChangeRequest setVersion(in DOMString version)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMStringList storeNames, in [Optional=DefaultIsNullString] DOMString mode)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMString[] storeNames, in [Optional=DefaultIsNullString] DOMString mode)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMString storeName, in [Optional=DefaultIsNullString] DOMString mode)
-            raises (IDBDatabaseException);
-
-        // FIXME: remove these when https://bugs.webkit.org/show_bug.cgi?id=85326 is fixed.
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMStringList storeNames, in unsigned short mode)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMString[] storeNames, in unsigned short mode)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBTransaction transaction(in DOMString storeName, in unsigned short mode)
-            raises (IDBDatabaseException);
-
-        void close();
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabaseException.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabaseException.idl
deleted file mode 100644
index 67d811c..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBDatabaseException.idl
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    exception [
-        Conditional=INDEXED_DATABASE,
-        DoNotCheckConstants
-    ] IDBDatabaseException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        const unsigned short NO_ERR = 0;
-        const unsigned short UNKNOWN_ERR = 1;
-        const unsigned short NON_TRANSIENT_ERR = 2;
-        const unsigned short CONSTRAINT_ERR = 4;
-        const unsigned short DATA_ERR = 5;
-        const unsigned short NOT_ALLOWED_ERR = 6;
-        const unsigned short TRANSACTION_INACTIVE_ERR = 7;
-        const unsigned short READ_ONLY_ERR = 9;
-        const unsigned short VER_ERR = 12;
-
-        const unsigned short NOT_FOUND_ERR = 8;
-        const unsigned short ABORT_ERR = 20;
-        const unsigned short TIMEOUT_ERR = 23;
-        const unsigned short QUOTA_ERR = 22;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBFactory.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBFactory.idl
deleted file mode 100644
index c44996b..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBFactory.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBFactory {
-        [CallWith=ScriptExecutionContext] IDBRequest getDatabaseNames();
-
-        [CallWith=ScriptExecutionContext] IDBRequest open(in DOMString name)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBVersionChangeRequest deleteDatabase(in DOMString name)
-            raises (IDBDatabaseException);
-
-        short cmp(in IDBKey first, in IDBKey second)
-            raises (IDBDatabaseException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBIndex.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBIndex.idl
deleted file mode 100644
index 4c3d732..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBIndex.idl
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBIndex {
-        readonly attribute DOMString name;
-        readonly attribute IDBObjectStore objectStore;
-        readonly attribute IDBAny keyPath;
-        readonly attribute boolean unique;
-        readonly attribute boolean multiEntry;
-
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] IDBKeyRange range, in [Optional] DOMString direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKey key, in [Optional] DOMString direction)
-            raises (IDBDatabaseException);
-        
-        [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in [Optional] IDBKeyRange range, in [Optional] DOMString  direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in IDBKey key, in [Optional] DOMString direction)
-            raises (IDBDatabaseException);
-
-        // FIXME: remove these when
-        // https://bugs.webkit.org/show_bug.cgi?id=85326 is fixed.
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKeyRange range, in unsigned short direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKey key, in unsigned short direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in IDBKeyRange range, in unsigned short direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openKeyCursor(in IDBKey key, in unsigned short direction)
-            raises (IDBDatabaseException);
-        
-        [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKeyRange key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest getKey(in IDBKeyRange key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest getKey(in IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest count(in [Optional] IDBKeyRange range)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest count(in IDBKey key)
-            raises (IDBDatabaseException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKey.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKey.idl
deleted file mode 100644
index 1464d9f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKey.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        CustomToJSObject
-    ] IDBKey {
-        // This space is intentionally left blank.
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKeyRange.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKeyRange.idl
deleted file mode 100644
index 161cb9c..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBKeyRange.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBKeyRange {
-        readonly attribute IDBKey lower;
-        readonly attribute IDBKey upper;
-        readonly attribute boolean lowerOpen;
-        readonly attribute boolean upperOpen;
-
-        static IDBKeyRange only(in IDBKey value)
-            raises (IDBDatabaseException);
-        static IDBKeyRange lowerBound(in IDBKey bound, in [Optional] boolean open)
-            raises (IDBDatabaseException);
-        static IDBKeyRange upperBound(in IDBKey bound, in [Optional] boolean open)
-            raises (IDBDatabaseException);
-        static IDBKeyRange bound(in IDBKey lower, in IDBKey upper, in [Optional] boolean lowerOpen, in [Optional] boolean upperOpen)
-            raises (IDBDatabaseException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBObjectStore.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBObjectStore.idl
deleted file mode 100644
index 489f678..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBObjectStore.idl
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBObjectStore {
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString name;
-        readonly attribute IDBAny keyPath;
-        readonly attribute DOMStringList indexNames;
-        readonly attribute IDBTransaction transaction;
-        readonly attribute boolean autoIncrement;
-
-        [CallWith=ScriptExecutionContext] IDBRequest put(in SerializedScriptValue value, in [Optional] IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest add(in SerializedScriptValue value, in [Optional] IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext, ImplementedAs=deleteFunction] IDBRequest delete(in IDBKeyRange keyRange)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext, ImplementedAs=deleteFunction] IDBRequest delete(in IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest clear()
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKeyRange key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest get(in IDBKey key)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in [Optional] IDBKeyRange range, in [Optional] DOMString direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKey key, in [Optional] DOMString direction)
-            raises (IDBDatabaseException);
-
-        // FIXME: remove these when https://bugs.webkit.org/show_bug.cgi?id=85326 is fixed.
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKeyRange range, in unsigned short direction)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest openCursor(in IDBKey key, in unsigned short direction)
-            raises (IDBDatabaseException);
-
-        IDBIndex createIndex(in DOMString name, in DOMString[] keyPath, in [Optional] Dictionary options)
-            raises (IDBDatabaseException);
-        IDBIndex createIndex(in DOMString name, in DOMString keyPath, in [Optional] Dictionary options)
-            raises (IDBDatabaseException);
-        IDBIndex index(in DOMString name)
-            raises (IDBDatabaseException);
-        void deleteIndex(in DOMString name)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest count(in [Optional] IDBKeyRange range)
-            raises (IDBDatabaseException);
-        [CallWith=ScriptExecutionContext] IDBRequest count(in IDBKey key)
-            raises (IDBDatabaseException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBRequest.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBRequest.idl
deleted file mode 100644
index 1e49415..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBRequest.idl
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * 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.
- * 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        ActiveDOMObject,
-        EventTarget
-    ] IDBRequest {
-        readonly attribute IDBAny result
-            getter raises (IDBDatabaseException);
-        readonly attribute unsigned short errorCode
-            getter raises (IDBDatabaseException);
-        readonly attribute DOMError error
-            getter raises (IDBDatabaseException);
-        readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString webkitErrorMessage
-            getter raises (IDBDatabaseException);
-
-        readonly attribute IDBAny source;
-        readonly attribute IDBTransaction transaction;
-
-        // States
-        readonly attribute DOMString readyState;
-
-        // Events
-        attribute EventListener onsuccess;
-        attribute EventListener onerror;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBTransaction.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBTransaction.idl
deleted file mode 100644
index a0e54c0..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBTransaction.idl
+++ /dev/null
@@ -1,63 +0,0 @@
- /*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- * 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 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        ActiveDOMObject,
-        EventTarget
-    ] IDBTransaction {
-        // FIXME: Eventually remove legacy enum constants, see https://bugs.webkit.org/show_bug.cgi?id=85315
-        const unsigned short READ_ONLY = 0;
-        const unsigned short READ_WRITE = 1;
-        const unsigned short VERSION_CHANGE = 2;
-
-        // Properties
-        readonly attribute DOMString mode;
-        readonly attribute IDBDatabase db;
-        readonly attribute DOMError error 
-            getter raises (IDBDatabaseException);
-
-        // Methods
-        IDBObjectStore objectStore (in DOMString name)
-            raises (IDBDatabaseException);
-        void abort ();
-        // Events
-        attribute EventListener onabort;
-        attribute EventListener oncomplete;
-        attribute EventListener onerror;
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt) 
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl
deleted file mode 100644
index c6a4171..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeEvent.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE
-    ] IDBVersionChangeEvent : Event {
-        readonly attribute DOMString version;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeRequest.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeRequest.idl
deleted file mode 100644
index 2aa238a..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/IDBVersionChangeRequest.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module storage {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        ActiveDOMObject,
-        EventTarget
-    ] IDBVersionChangeRequest : IDBRequest {
-        attribute EventListener onblocked;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/indexeddb/WorkerContextIndexedDatabase.idl b/elemental/idl/third_party/WebCore/Modules/indexeddb/WorkerContextIndexedDatabase.idl
deleted file mode 100644
index c336c57..0000000
--- a/elemental/idl/third_party/WebCore/Modules/indexeddb/WorkerContextIndexedDatabase.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module threads {
-
-    interface [
-        Conditional=INDEXED_DATABASE,
-        Supplemental=WorkerContext
-    ] WorkerContextIndexedDatabase {
-        readonly attribute [V8EnabledAtRuntime] IDBFactory webkitIndexedDB;
-
-        attribute [V8EnabledAtRuntime] IDBCursorConstructor webkitIDBCursor;
-        attribute [V8EnabledAtRuntime] IDBDatabaseConstructor webkitIDBDatabase;
-        attribute [V8EnabledAtRuntime] IDBDatabaseExceptionConstructor webkitIDBDatabaseException;
-        attribute [V8EnabledAtRuntime] IDBFactoryConstructor webkitIDBFactory;
-        attribute [V8EnabledAtRuntime] IDBIndexConstructor webkitIDBIndex;
-        attribute [V8EnabledAtRuntime] IDBKeyRangeConstructor webkitIDBKeyRange;
-        attribute [V8EnabledAtRuntime] IDBObjectStoreConstructor webkitIDBObjectStore;
-        attribute [V8EnabledAtRuntime] IDBRequestConstructor webkitIDBRequest;
-        attribute [V8EnabledAtRuntime] IDBTransactionConstructor webkitIDBTransaction;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/intents/DOMWindowIntents.idl b/elemental/idl/third_party/WebCore/Modules/intents/DOMWindowIntents.idl
deleted file mode 100644
index d345209..0000000
--- a/elemental/idl/third_party/WebCore/Modules/intents/DOMWindowIntents.idl
+++ /dev/null
@@ -1,38 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=WEB_INTENTS,
-        Supplemental=DOMWindow
-    ] DOMWindowIntents {
-        attribute IntentConstructor WebKitIntent;
-
-        attribute [Replaceable] DeliveredIntent webkitIntent;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/intents/DeliveredIntent.idl b/elemental/idl/third_party/WebCore/Modules/intents/DeliveredIntent.idl
deleted file mode 100644
index 25e978d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/intents/DeliveredIntent.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module window {
-    interface [
-        Conditional=WEB_INTENTS,
-    ] DeliveredIntent : Intent {
-        readonly attribute MessagePortArray ports;
-
-        [TreatReturnedNullStringAs=Null] DOMString getExtra(in DOMString key);
-        void postResult(in SerializedScriptValue result);
-        void postFailure(in SerializedScriptValue result);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/intents/Intent.idl b/elemental/idl/third_party/WebCore/Modules/intents/Intent.idl
deleted file mode 100644
index 92657b4..0000000
--- a/elemental/idl/third_party/WebCore/Modules/intents/Intent.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module window {
-  interface [
-      Conditional=WEB_INTENTS,
-      CustomConstructor,
-      Constructor(in DOMString action, in DOMString type, in [Optional=DefaultIsNullString, TransferList=transferList] SerializedScriptValue data, in [Optional=DefaultIsUndefined] Array transferList),
-      ConstructorRaisesException
-  ] Intent {
-        readonly attribute DOMString action;
-        readonly attribute DOMString type;
-        readonly attribute SerializedScriptValue data;
-  };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/intents/IntentResultCallback.idl b/elemental/idl/third_party/WebCore/Modules/intents/IntentResultCallback.idl
deleted file mode 100644
index 0afa2ad..0000000
--- a/elemental/idl/third_party/WebCore/Modules/intents/IntentResultCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 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.
- */
-
-module window {
-  interface [
-      Conditional=WEB_INTENTS,
-      Callback
-  ] IntentResultCallback {
-      boolean handleEvent(in SerializedScriptValue result);
-  };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/intents/NavigatorIntents.idl b/elemental/idl/third_party/WebCore/Modules/intents/NavigatorIntents.idl
deleted file mode 100644
index 206337a..0000000
--- a/elemental/idl/third_party/WebCore/Modules/intents/NavigatorIntents.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    interface [
-        Conditional=WEB_INTENTS,
-        Supplemental=Navigator
-    ] NavigatorIntents {
-        void webkitStartActivity(in Intent intent,
-                                 in [Callback, Optional] IntentResultCallback successCallback,
-                                 in [Callback, Optional] IntentResultCallback failureCallback)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/DOMWindowMediaStream.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/DOMWindowMediaStream.idl
deleted file mode 100644
index 970d106..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/DOMWindowMediaStream.idl
+++ /dev/null
@@ -1,41 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Supplemental=DOMWindow
-    ] DOMWindowMediaStream {
-        attribute [V8EnabledAtRuntime] DeprecatedPeerConnectionConstructor webkitDeprecatedPeerConnection;
-        attribute [V8EnabledAtRuntime] MediaStreamConstructor webkitMediaStream;
-        attribute [V8EnabledAtRuntime] PeerConnection00Constructor webkitPeerConnection00;
-        attribute SessionDescriptionConstructor SessionDescription;
-        attribute IceCandidateConstructor IceCandidate;
-        attribute MediaStreamEventConstructor MediaStreamEvent;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/DeprecatedPeerConnection.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/DeprecatedPeerConnection.idl
deleted file mode 100644
index 01d9d51..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/DeprecatedPeerConnection.idl
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        ActiveDOMObject,
-        ConstructorParameters=2,
-        Constructor(in DOMString serverConfiguration, in [Callback] SignalingCallback signalingCallback),
-        CallWith=ScriptExecutionContext,
-        JSCustomConstructor,
-        EventTarget
-    ] DeprecatedPeerConnection {
-        void processSignalingMessage(in DOMString message)
-            raises(DOMException);
-
-        const unsigned short NEW = 0;
-        const unsigned short NEGOTIATING = 1;
-        const unsigned short ACTIVE = 2;
-        const unsigned short CLOSED = 3;
-        readonly attribute unsigned short readyState;
-
-        void send(in DOMString text)
-            raises(DOMException);
-        [StrictTypeChecking] void addStream(in MediaStream stream)
-            raises(DOMException);
-        [StrictTypeChecking] void removeStream(in MediaStream stream)
-            raises(DOMException);
-
-        readonly attribute MediaStreamList localStreams;
-        readonly attribute MediaStreamList remoteStreams;
-
-        void close()
-            raises(DOMException);
-
-        attribute EventListener onconnecting;
-        attribute EventListener onopen;
-        attribute EventListener onmessage;
-        attribute EventListener onstatechange;
-        attribute EventListener onaddstream;
-        attribute EventListener onremovestream;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/IceCallback.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/IceCallback.idl
deleted file mode 100644
index 69d646f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/IceCallback.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Callback
-    ] IceCallback {
-        boolean handleEvent(in IceCandidate candidate, in boolean moreToFollow, in PeerConnection00 source);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/IceCandidate.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/IceCandidate.idl
deleted file mode 100644
index e1c42fa..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/IceCandidate.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Constructor(in DOMString label, in DOMString candidateLine)
-    ] IceCandidate {
-        readonly attribute DOMString label;
-
-        DOMString toSdp();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/LocalMediaStream.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/LocalMediaStream.idl
deleted file mode 100644
index 5e769af..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/LocalMediaStream.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        EventTarget,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject
-    ] LocalMediaStream : MediaStream {
-        void stop();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStream.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStream.idl
deleted file mode 100644
index 65a1833..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStream.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        EventTarget,
-        Constructor(in MediaStreamTrackList audioTracks, in MediaStreamTrackList videoTracks),
-        CallWith=ScriptExecutionContext,
-        ConstructorRaisesException
-   ] MediaStream {
-        readonly attribute DOMString label;
-        readonly attribute MediaStreamTrackList audioTracks;
-        readonly attribute MediaStreamTrackList videoTracks;
-
-        // FIXME: implement the record method when MediaStreamRecorder is available.
-
-        const unsigned short LIVE = 1;
-        const unsigned short ENDED = 2;
-        readonly attribute unsigned short readyState;
-                 attribute EventListener onended;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamEvent.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamEvent.idl
deleted file mode 100644
index a1930a4..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    // According to the WHATWG specification:
-    // http://www.whatwg.org/specs/web-apps/current-work/multipage/video-conferencing-and-peer-to-peer-communication.html#mediastreamevent
-    interface [
-        Conditional=MEDIA_STREAM,
-    ] MediaStreamEvent : Event {
-       readonly attribute MediaStream stream;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamList.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamList.idl
deleted file mode 100644
index d182e6f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        IndexedGetter
-    ] MediaStreamList {
-        MediaStream item(in [IsIndex] unsigned long index);
-
-        readonly attribute unsigned long length;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrack.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrack.idl
deleted file mode 100644
index 7987597..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrack.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-    ] MediaStreamTrack {
-        readonly attribute DOMString kind;
-        readonly attribute DOMString label;
-                 attribute boolean enabled;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrackList.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrackList.idl
deleted file mode 100644
index 4dd9c29..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/MediaStreamTrackList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        IndexedGetter
-    ] MediaStreamTrackList {
-        MediaStreamTrack item(in [IsIndex] unsigned long index);
-
-        readonly attribute unsigned long length;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorMediaStream.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorMediaStream.idl
deleted file mode 100644
index 40f8f0d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorMediaStream.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Supplemental=Navigator
-    ] NavigatorMediaStream {
-        [V8EnabledAtRuntime] void webkitGetUserMedia(in Dictionary options,
-                                                     in [Callback] NavigatorUserMediaSuccessCallback successCallback,
-                                                     in [Callback, Optional] NavigatorUserMediaErrorCallback errorCallback)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaError.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaError.idl
deleted file mode 100644
index 293450b..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaError.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-    interface [
-        Conditional=MEDIA_STREAM
-    ] NavigatorUserMediaError {
-        const unsigned short PERMISSION_DENIED = 1;
-        readonly attribute unsigned short code;
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaErrorCallback.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaErrorCallback.idl
deleted file mode 100644
index 44928f8..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaErrorCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-    interface [
-        Conditional=MEDIA_STREAM,
-        Callback
-    ] NavigatorUserMediaErrorCallback {
-        boolean handleEvent(in NavigatorUserMediaError error);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaSuccessCallback.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaSuccessCallback.idl
deleted file mode 100644
index 0a66180..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/NavigatorUserMediaSuccessCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-    interface [
-        Conditional=MEDIA_STREAM,
-        Callback
-    ] NavigatorUserMediaSuccessCallback {
-        boolean handleEvent(in LocalMediaStream stream);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/PeerConnection00.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/PeerConnection00.idl
deleted file mode 100644
index bd56c87..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/PeerConnection00.idl
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        ActiveDOMObject,
-        Constructor(in DOMString serverConfiguration, in [Callback] IceCallback iceCallback),
-        CallWith=ScriptExecutionContext,
-        ConstructorRaisesException,
-        EventTarget
-    ] PeerConnection00 {
-        SessionDescription createOffer(in [Optional] Dictionary mediaHints)
-            raises(DOMException);
-        SessionDescription createAnswer(in DOMString offer, in [Optional] Dictionary mediaHints)
-            raises(DOMException);
-
-        // Actions, for setLocalDescription/setRemoteDescription.
-        const unsigned short SDP_OFFER = 0x100;
-        const unsigned short SDP_PRANSWER = 0x200;
-        const unsigned short SDP_ANSWER = 0x300;
-
-        void setLocalDescription(in unsigned short action, in SessionDescription desc)
-            raises(DOMException);
-        void setRemoteDescription(in unsigned short action, in SessionDescription desc)
-            raises(DOMException);
-
-        readonly attribute SessionDescription localDescription;
-        readonly attribute SessionDescription remoteDescription;
-
-        const unsigned short NEW = 0;
-        const unsigned short OPENING = 1;
-        const unsigned short ACTIVE = 2;
-        const unsigned short CLOSED = 3;
-        readonly attribute unsigned short readyState;
-
-        void startIce(in [Optional] Dictionary iceOptions)
-            raises(DOMException);
-
-        void processIceMessage(in IceCandidate candidate)
-            raises(DOMException);
-
-        const unsigned short ICE_GATHERING = 0x100;
-        const unsigned short ICE_WAITING = 0x200;
-        const unsigned short ICE_CHECKING = 0x300;
-        const unsigned short ICE_CONNECTED = 0x400;
-        const unsigned short ICE_COMPLETED = 0x500;
-        const unsigned short ICE_FAILED = 0x600;
-        const unsigned short ICE_CLOSED = 0x700;
-        readonly attribute unsigned short iceState;
-
-        [StrictTypeChecking] void addStream(in MediaStream stream, in [Optional] Dictionary mediaStreamHints)
-            raises(DOMException);
-        [StrictTypeChecking] void removeStream(in MediaStream stream)
-            raises(DOMException);
-
-        readonly attribute MediaStreamList localStreams;
-        readonly attribute MediaStreamList remoteStreams;
-
-        void close()
-            raises(DOMException);
-
-        attribute EventListener onconnecting;
-        attribute EventListener onopen;
-        attribute EventListener onstatechange;
-        attribute EventListener onaddstream;
-        attribute EventListener onremovestream;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/SessionDescription.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/SessionDescription.idl
deleted file mode 100644
index d4afeda..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/SessionDescription.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Google Inc. nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Constructor(in DOMString sdp)
-    ] SessionDescription {
-        [StrictTypeChecking] void addCandidate(in IceCandidate candidate)
-            raises(DOMException);
-
-        DOMString toSdp();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/mediastream/SignalingCallback.idl b/elemental/idl/third_party/WebCore/Modules/mediastream/SignalingCallback.idl
deleted file mode 100644
index 69e4b92..0000000
--- a/elemental/idl/third_party/WebCore/Modules/mediastream/SignalingCallback.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module p2p {
-
-    interface [
-        Conditional=MEDIA_STREAM,
-        Callback
-    ] SignalingCallback {
-        boolean handleEvent(in DOMString message, in DeprecatedPeerConnection source);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/networkinfo/NavigatorNetworkInfoConnection.idl b/elemental/idl/third_party/WebCore/Modules/networkinfo/NavigatorNetworkInfoConnection.idl
deleted file mode 100644
index f61d0f3..0000000
--- a/elemental/idl/third_party/WebCore/Modules/networkinfo/NavigatorNetworkInfoConnection.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2012 Samsung Electronics. All Rights Reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    interface [
-        Conditional=NETWORK_INFO,
-        Supplemental=Navigator
-    ] NavigatorNetworkInfoConnection {
-        readonly attribute NetworkInfoConnection webkitConnection;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/networkinfo/NetworkInfoConnection.idl b/elemental/idl/third_party/WebCore/Modules/networkinfo/NetworkInfoConnection.idl
deleted file mode 100644
index 8e56efa..0000000
--- a/elemental/idl/third_party/WebCore/Modules/networkinfo/NetworkInfoConnection.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2012 Samsung Electronics. All Rights Reserved.
- *
- * All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module window {
-
-    // http://dvcs.w3.org/hg/dap/raw-file/tip/network-api/index.html
-    interface [
-        Conditional=NETWORK_INFO,
-        ActiveDOMObject,
-        EventTarget
-    ] NetworkInfoConnection {
-        readonly attribute double bandwidth;
-        readonly attribute boolean metered;
-
-        attribute EventListener onwebkitnetworkinfochange;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/DOMWindowSpeech.idl b/elemental/idl/third_party/WebCore/Modules/speech/DOMWindowSpeech.idl
deleted file mode 100644
index 0c26f03..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/DOMWindowSpeech.idl
+++ /dev/null
@@ -1,37 +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.
- */
-
-module window {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        Supplemental=DOMWindow
-    ] DOMWindowSpeech {
-        attribute [V8EnabledAtRuntime] SpeechRecognitionConstructor webkitSpeechRecognition;
-        attribute [V8EnabledAtRuntime] SpeechRecognitionErrorConstructor webkitSpeechRecognitionError;
-        attribute [V8EnabledAtRuntime] SpeechRecognitionEventConstructor webkitSpeechRecognitionEvent;
-        attribute [V8EnabledAtRuntime] SpeechGrammarConstructor webkitSpeechGrammar;
-        attribute [V8EnabledAtRuntime] SpeechGrammarListConstructor webkitSpeechGrammarList;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammar.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammar.idl
deleted file mode 100644
index b793ac3..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammar.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * 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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        Constructor
-    ] SpeechGrammar {
-        attribute [URL,CallWith=ScriptExecutionContext] DOMString src;
-        attribute float weight;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammarList.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammarList.idl
deleted file mode 100644
index bf4d7c6..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechGrammarList.idl
+++ /dev/null
@@ -1,37 +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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        IndexedGetter,
-        Constructor,
-    ] SpeechGrammarList {
-        readonly attribute unsigned long length;
-        SpeechGrammar item(in [IsIndex] unsigned long index);
-        [CallWith=ScriptExecutionContext] void addFromUri(in DOMString src, in [Optional] float weight);
-        void addFromString(in DOMString string, in [Optional] float weight);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognition.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognition.idl
deleted file mode 100644
index 5fea70d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognition.idl
+++ /dev/null
@@ -1,65 +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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        ActiveDOMObject,
-        Constructor,
-        CallWith=ScriptExecutionContext,
-        EventTarget,
-    ] SpeechRecognition {
-        attribute SpeechGrammarList grammars;
-        attribute DOMString lang;
-        attribute boolean continuous;
-
-        void start();
-        [ImplementedAs=stopFunction] void stop();
-        void abort();
-
-        attribute EventListener onaudiostart;
-        attribute EventListener onsoundstart;
-        attribute EventListener onspeechstart;
-        attribute EventListener onspeechend;
-        attribute EventListener onsoundend;
-        attribute EventListener onaudioend;
-        attribute EventListener onresult;
-        attribute EventListener onnomatch;
-        attribute EventListener onresultdeleted;
-        attribute EventListener onerror;
-        attribute EventListener onstart;
-        attribute EventListener onend;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionAlternative.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionAlternative.idl
deleted file mode 100644
index a9d4dec..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionAlternative.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * 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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH
-    ] SpeechRecognitionAlternative {
-        readonly attribute DOMString transcript;
-        readonly attribute float confidence;
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionError.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionError.idl
deleted file mode 100644
index 39ecb1d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionError.idl
+++ /dev/null
@@ -1,43 +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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH
-    ] SpeechRecognitionError {
-        const unsigned short OTHER = 0;
-        const unsigned short NO_SPEECH = 1;
-        const unsigned short ABORTED = 2;
-        const unsigned short AUDIO_CAPTURE = 3;
-        const unsigned short NETWORK = 4;
-        const unsigned short NOT_ALLOWED = 5;
-        const unsigned short SERVICE_NOT_ALLOWED = 6;
-        const unsigned short BAD_GRAMMAR = 7;
-        const unsigned short LANGUAGE_NOT_SUPPORTED = 8;
-
-        readonly attribute unsigned short code;
-        readonly attribute DOMString message;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionEvent.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionEvent.idl
deleted file mode 100644
index 4900081..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionEvent.idl
+++ /dev/null
@@ -1,36 +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.
- */
-
-module events {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        ConstructorTemplate=Event
-    ] SpeechRecognitionEvent : Event {
-        readonly attribute [InitializedByEventConstructor] SpeechRecognitionResult result;
-        readonly attribute [InitializedByEventConstructor] SpeechRecognitionError error;
-        readonly attribute [InitializedByEventConstructor] short resultIndex;
-        readonly attribute [InitializedByEventConstructor] SpeechRecognitionResultList resultHistory;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResult.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResult.idl
deleted file mode 100644
index 3f91262..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResult.idl
+++ /dev/null
@@ -1,36 +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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        IndexedGetter
-    ] SpeechRecognitionResult {
-        readonly attribute unsigned long length;
-        SpeechRecognitionAlternative item(in [IsIndex] unsigned long index);
-        readonly attribute boolean final;
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResultList.idl b/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResultList.idl
deleted file mode 100644
index fd7be4f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/speech/SpeechRecognitionResultList.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * 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.
- */
-
-module core {
-    interface [
-        Conditional=SCRIPTED_SPEECH,
-        IndexedGetter
-    ] SpeechRecognitionResultList {
-        readonly attribute unsigned long length;
-        SpeechRecognitionResult item(in [IsIndex] unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/vibration/NavigatorVibration.idl b/elemental/idl/third_party/WebCore/Modules/vibration/NavigatorVibration.idl
deleted file mode 100644
index 624845d..0000000
--- a/elemental/idl/third_party/WebCore/Modules/vibration/NavigatorVibration.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Copyright (C) 2012 Samsung Electronics
- *
- *  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.
- */
-
-module window {
-
-    interface [
-        Conditional=VIBRATION,
-        Supplemental=Navigator
-    ] NavigatorVibration {
-        void webkitVibrate(in unsigned long[] pattern) raises(DOMException);
-        void webkitVibrate(in unsigned long time) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBuffer.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBuffer.idl
deleted file mode 100644
index 8a734e2..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBuffer.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioBuffer {
-        readonly attribute long length; // in sample-frames
-        readonly attribute float duration; // in seconds
-        readonly attribute float sampleRate; // in sample-frames per second
-
-        attribute float gain; // linear gain (default 1.0)
-
-        // Channel access
-        readonly attribute unsigned long numberOfChannels;
-        Float32Array getChannelData(in unsigned long channelIndex);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferCallback.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferCallback.idl
deleted file mode 100644
index 9b35477..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject,
-        Callback
-    ] AudioBufferCallback {
-        boolean handleEvent(in AudioBuffer audioBuffer);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferSourceNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferSourceNode.idl
deleted file mode 100644
index ae6af93..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioBufferSourceNode.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    // A cached (non-streamed), memory-resident audio source
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioBufferSourceNode : AudioSourceNode {
-        attribute [CustomSetter] AudioBuffer buffer
-            setter raises (DOMException);
-
-        const unsigned short UNSCHEDULED_STATE = 0;
-        const unsigned short SCHEDULED_STATE = 1;
-        const unsigned short PLAYING_STATE = 2;
-        const unsigned short FINISHED_STATE = 3;
-
-        readonly attribute unsigned short playbackState;
-
-        readonly attribute AudioGain gain;
-        readonly attribute AudioParam playbackRate;
-
-        attribute boolean loop; // This is the proper attribute name from the specification.
-        attribute boolean looping; // This is an alias for the .loop attribute for backwards compatibility.
-
-        void noteOn(in double when);
-        void noteGrainOn(in double when, in double grainOffset, in double grainDuration);
-        void noteOff(in double when);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelMerger.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelMerger.idl
deleted file mode 100644
index 3862af9..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelMerger.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioChannelMerger : AudioNode {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelSplitter.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelSplitter.idl
deleted file mode 100644
index 076c051..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioChannelSplitter.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioChannelSplitter : AudioNode {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioContext.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioContext.idl
deleted file mode 100644
index 1d02288..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioContext.idl
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- * 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 INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module webaudio {
-    interface [
-        Conditional=WEB_AUDIO,
-        ActiveDOMObject,
-        CustomConstructor,
-        ConstructorParameters=0,
-        JSCustomMarkFunction,
-        EventTarget
-    ] AudioContext {
-        // All rendered audio ultimately connects to destination, which represents the audio hardware.
-        readonly attribute AudioDestinationNode destination;
-
-        // All scheduled times are relative to this time in seconds.
-        readonly attribute float currentTime;
-
-        // All AudioNodes in the context run at this sample-rate (in sample-frames per second).
-        readonly attribute float sampleRate;
-
-        // All panning is relative to this listener.
-        readonly attribute AudioListener listener;
-
-        // Number of AudioBufferSourceNodes that are currently playing.
-        readonly attribute unsigned long activeSourceCount;
-        
-        AudioBuffer createBuffer(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate)
-            raises(DOMException);
-        AudioBuffer createBuffer(in ArrayBuffer buffer, in boolean mixToMono)
-            raises(DOMException);
-
-        // Asynchronous audio file data decoding.
-        void decodeAudioData(in ArrayBuffer audioData, in [Callback] AudioBufferCallback successCallback, in [Optional, Callback] AudioBufferCallback errorCallback)
-            raises(DOMException);
-
-        // Sources
-        AudioBufferSourceNode createBufferSource();
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-        MediaElementAudioSourceNode createMediaElementSource(in HTMLMediaElement mediaElement)
-            raises(DOMException);
-#endif
-        // Processing nodes
-        AudioGainNode createGainNode();
-        DelayNode createDelayNode(in [Optional] double maxDelayTime);
-        BiquadFilterNode createBiquadFilter();
-        WaveShaperNode createWaveShaper();
-        AudioPannerNode createPanner();
-        ConvolverNode createConvolver();
-        DynamicsCompressorNode createDynamicsCompressor();
-        RealtimeAnalyserNode createAnalyser();
-        JavaScriptAudioNode createJavaScriptNode(in unsigned long bufferSize, in [Optional] unsigned long numberOfInputChannels, in [Optional] unsigned long numberOfOutputChannels)
-            raises(DOMException);
-        Oscillator createOscillator();
-        WaveTable createWaveTable(in Float32Array real, in Float32Array imag)
-            raises(DOMException);
-
-        // Channel splitting and merging
-        AudioChannelSplitter createChannelSplitter(in [Optional] unsigned long numberOfOutputs)
-            raises(DOMException);
-        AudioChannelMerger createChannelMerger(in [Optional] unsigned long numberOfInputs)
-            raises(DOMException);
-
-        // Offline rendering
-        // void prepareOfflineBufferRendering(in unsigned long numberOfChannels, in unsigned long numberOfFrames, in float sampleRate);
-        attribute EventListener oncomplete;
-        void startRendering();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioDestinationNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioDestinationNode.idl
deleted file mode 100644
index 7ce4043..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioDestinationNode.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioDestinationNode : AudioNode {
-        readonly attribute long numberOfChannels;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGain.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGain.idl
deleted file mode 100644
index 7597427..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGain.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioGain : AudioParam {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGainNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGainNode.idl
deleted file mode 100644
index ba3163f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioGainNode.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioGainNode : AudioNode {
-        // FIXME: eventually it will be interesting to remove the readonly restriction, but need to properly deal with thread safety here.
-        readonly attribute AudioGain gain;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioListener.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioListener.idl
deleted file mode 100644
index cf6d8cf..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioListener.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioListener {
-        attribute float dopplerFactor;  // same as OpenAL (default 1.0)
-        attribute float speedOfSound;   // in meters / second (default 343.3)
-
-        void setPosition(in float x, in float y, in float z);
-        void setOrientation(in float x, in float y, in float z, in float xUp, in float yUp, in float zUp);
-        void setVelocity(in float x, in float y, in float z);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioNode.idl
deleted file mode 100644
index 13bdc75..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioNode.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioNode {
-        readonly attribute AudioContext context;
-        readonly attribute unsigned long numberOfInputs;
-        readonly attribute unsigned long numberOfOutputs;
-
-        void connect(in AudioNode destination, in [Optional=DefaultIsUndefined] unsigned long output, in [Optional=DefaultIsUndefined] unsigned long input)
-            raises(DOMException);
-
-        void connect(in AudioParam destination, in [Optional=DefaultIsUndefined] unsigned long output)
-            raises(DOMException);
-
-        void disconnect(in [Optional=DefaultIsUndefined] unsigned long output)
-            raises(DOMException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioPannerNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioPannerNode.idl
deleted file mode 100644
index 5061e78..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioPannerNode.idl
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioPannerNode : AudioNode {
-        // Panning model
-        const unsigned short EQUALPOWER = 0;
-        const unsigned short HRTF = 1;
-        const unsigned short SOUNDFIELD = 2;
-
-        // Distance model
-        const unsigned short LINEAR_DISTANCE = 0;
-        const unsigned short INVERSE_DISTANCE = 1;
-        const unsigned short EXPONENTIAL_DISTANCE = 2;
-
-        // Default model for stereo is HRTF 
-        // FIXME: use unsigned short when glue generation supports it
-        attribute unsigned long panningModel
-            setter raises(DOMException);
-
-        // Uses a 3D cartesian coordinate system 
-        void setPosition(in float x, in float y, in float z);
-        void setOrientation(in float x, in float y, in float z);
-        void setVelocity(in float x, in float y, in float z);
-
-        // Distance model
-        attribute unsigned long distanceModel; // FIXME: use unsigned short when glue generation supports it
-        attribute float refDistance;
-        attribute float maxDistance;
-        attribute float rolloffFactor;
-
-        // Directional sound cone
-        attribute float coneInnerAngle;
-        attribute float coneOuterAngle;
-        attribute float coneOuterGain;
-
-        // Dynamically calculated gain values          
-        readonly attribute AudioGain coneGain;
-        readonly attribute AudioGain distanceGain;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioParam.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioParam.idl
deleted file mode 100644
index d9946f8..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioParam.idl
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module webaudio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioParam {
-        attribute float value;
-        readonly attribute float minValue;
-        readonly attribute float maxValue;
-        readonly attribute float defaultValue;
-
-        readonly attribute DOMString name;
-
-        // FIXME: Could define units constants here (seconds, decibels, cents, etc.)...
-        readonly attribute unsigned short units;
-
-        // Parameter automation.
-        void setValueAtTime(in float value, in float time);
-        void linearRampToValueAtTime(in float value, in float time);
-        void exponentialRampToValueAtTime(in float value, in float time);
-
-        // Exponentially approach the target value with a rate having the given time constant.
-        void setTargetValueAtTime(in float targetValue, in float time, in float timeConstant);
-
-        // Sets an array of arbitrary parameter values starting at time for the given duration.
-        // The number of values will be scaled to fit into the desired duration.
-        void setValueCurveAtTime(in Float32Array values, in float time, in float duration);
-
-        // Cancels all scheduled parameter changes with times greater than or equal to startTime.
-        void cancelScheduledValues(in float startTime);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioProcessingEvent.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioProcessingEvent.idl
deleted file mode 100644
index b6995f7..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioProcessingEvent.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] AudioProcessingEvent : Event {
-        readonly attribute AudioBuffer inputBuffer;
-        readonly attribute AudioBuffer outputBuffer; 
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioSourceNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/AudioSourceNode.idl
deleted file mode 100644
index ec3c356..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/AudioSourceNode.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO
-    ] AudioSourceNode : AudioNode {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/BiquadFilterNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/BiquadFilterNode.idl
deleted file mode 100644
index d143065..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/BiquadFilterNode.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] BiquadFilterNode : AudioNode {
-        // Filter type.
-        const unsigned short LOWPASS = 0;
-        const unsigned short HIGHPASS = 1;
-        const unsigned short BANDPASS = 2;
-        const unsigned short LOWSHELF = 3;
-        const unsigned short HIGHSHELF = 4;
-        const unsigned short PEAKING = 5;
-        const unsigned short NOTCH = 6;
-        const unsigned short ALLPASS = 7;
-
-        attribute unsigned short type
-            setter raises(DOMException);
-        
-        readonly attribute AudioParam frequency; // in Hertz
-        readonly attribute AudioParam Q; // Quality factor
-        readonly attribute AudioParam gain; // in Decibels
-
-        void getFrequencyResponse(in Float32Array frequencyHz,
-                                  in Float32Array magResponse,
-                                  in Float32Array phaseResponse);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/ConvolverNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/ConvolverNode.idl
deleted file mode 100644
index 0f561f0..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/ConvolverNode.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    // A linear convolution effect
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] ConvolverNode : AudioNode {
-        attribute [JSCustomSetter] AudioBuffer buffer;
-        attribute boolean normalize;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/DOMWindowWebAudio.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/DOMWindowWebAudio.idl
deleted file mode 100644
index ca8e50e..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/DOMWindowWebAudio.idl
+++ /dev/null
@@ -1,41 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=WEB_AUDIO,
-        Supplemental=DOMWindow
-    ] DOMWindowWebAudio {
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        attribute [JSCustomGetter, V8EnabledAtRuntime] AudioContextConstructor webkitAudioContext;
-        attribute AudioPannerNodeConstructor webkitAudioPannerNode;
-        attribute AudioProcessingEventConstructor AudioProcessingEvent;
-        attribute OfflineAudioCompletionEventConstructor OfflineAudioCompletionEvent;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/DelayNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/DelayNode.idl
deleted file mode 100644
index a21ac30..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/DelayNode.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] DelayNode : AudioNode {
-        readonly attribute AudioParam delayTime;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/DynamicsCompressorNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/DynamicsCompressorNode.idl
deleted file mode 100644
index a2e3565..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/DynamicsCompressorNode.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] DynamicsCompressorNode : AudioNode {
-        readonly attribute AudioParam threshold; // in Decibels
-        readonly attribute AudioParam knee; // in Decibels
-        readonly attribute AudioParam ratio; // unit-less
-        readonly attribute AudioParam reduction; // in Decibels
-        readonly attribute AudioParam attack; // in Seconds
-        readonly attribute AudioParam release; // in Seconds
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/JavaScriptAudioNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/JavaScriptAudioNode.idl
deleted file mode 100644
index 97da0c1..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/JavaScriptAudioNode.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    // For real-time audio stream synthesis/processing in JavaScript 
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject,
-        JSCustomMarkFunction,
-        EventTarget
-    ] JavaScriptAudioNode : AudioNode {
-        // Rendering callback
-        attribute EventListener onaudioprocess;
-        
-        readonly attribute long bufferSize;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/MediaElementAudioSourceNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/MediaElementAudioSourceNode.idl
deleted file mode 100644
index f09e98f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/MediaElementAudioSourceNode.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO&VIDEO,
-        JSGenerateToJSObject
-    ] MediaElementAudioSourceNode : AudioSourceNode {
-        readonly attribute HTMLMediaElement mediaElement;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.idl
deleted file mode 100644
index 4ef6939..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] OfflineAudioCompletionEvent : Event {
-        readonly attribute AudioBuffer renderedBuffer;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/Oscillator.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/Oscillator.idl
deleted file mode 100644
index fb68e40..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/Oscillator.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2012, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    // Oscillator is an audio generator of periodic waveforms.
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] Oscillator : AudioSourceNode {
-
-        // Type constants.
-        const unsigned short SINE = 0;
-        const unsigned short SQUARE = 1;
-        const unsigned short SAWTOOTH = 2;
-        const unsigned short TRIANGLE = 3;
-        const unsigned short CUSTOM = 4;
-
-        attribute unsigned short type;
-
-        // Playback state constants.
-        const unsigned short UNSCHEDULED_STATE = 0;
-        const unsigned short SCHEDULED_STATE = 1;
-        const unsigned short PLAYING_STATE = 2;
-        const unsigned short FINISHED_STATE = 3;
-
-        readonly attribute unsigned short playbackState;
-
-        readonly attribute AudioParam frequency; // in Hertz
-        readonly attribute AudioParam detune; // in Cents
-
-        void noteOn(in double when);
-        void noteOff(in double when);
-        void setWaveTable(in WaveTable waveTable);
-
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/RealtimeAnalyserNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/RealtimeAnalyserNode.idl
deleted file mode 100644
index dc2db80..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/RealtimeAnalyserNode.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] RealtimeAnalyserNode : AudioNode {
-        attribute unsigned long fftSize
-            setter raises(DOMException);
-        readonly attribute unsigned long frequencyBinCount;
-
-        // minDecibels / maxDecibels represent the range to scale the FFT analysis data for conversion to unsigned byte values.
-        attribute float minDecibels;
-        attribute float maxDecibels;
-
-        // A value from 0.0 -> 1.0 where 0.0 represents no time averaging with the last analysis frame.
-        attribute float smoothingTimeConstant;
-
-        // Copies the current frequency data into the passed array.
-        // If the array has fewer elements than the frequencyBinCount, the excess elements will be dropped.
-        void getFloatFrequencyData(in Float32Array array);
-        void getByteFrequencyData(in Uint8Array array);
-
-        // Real-time waveform data
-        void getByteTimeDomainData(in Uint8Array array);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/WaveShaperNode.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/WaveShaperNode.idl
deleted file mode 100644
index 16a4acf..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/WaveShaperNode.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    interface [
-        Conditional=WEB_AUDIO,
-        JSGenerateToJSObject
-    ] WaveShaperNode : AudioNode {
-        attribute [JSCustomSetter] Float32Array curve;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webaudio/WaveTable.idl b/elemental/idl/third_party/WebCore/Modules/webaudio/WaveTable.idl
deleted file mode 100644
index 22403c3..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webaudio/WaveTable.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2012, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module audio {
-    // WaveTable represents a periodic audio waveform given by its Fourier coefficients.
-    interface [
-        Conditional=WEB_AUDIO
-    ] WaveTable {
-
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/DOMWindowWebDatabase.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/DOMWindowWebDatabase.idl
deleted file mode 100644
index d85aad7..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/DOMWindowWebDatabase.idl
+++ /dev/null
@@ -1,40 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        Supplemental=DOMWindow
-    ] DOMWindowWebDatabase {
-        [V8EnabledAtRuntime] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in [Callback, Optional] DatabaseCallback creationCallback)
-            raises(DOMException);
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        attribute SQLExceptionConstructor SQLException;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/Database.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/Database.idl
deleted file mode 100644
index ddc544a..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/Database.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] Database {
-        readonly attribute DOMString version;
-        void changeVersion(in DOMString oldVersion, in DOMString newVersion, in [Callback, Optional] SQLTransactionCallback callback, in [Callback, Optional] SQLTransactionErrorCallback errorCallback, in [Callback, Optional] VoidCallback successCallback);
-        void transaction(in [Callback] SQLTransactionCallback callback, in [Callback, Optional] SQLTransactionErrorCallback errorCallback, in [Callback, Optional] VoidCallback successCallback);
-        void readTransaction(in [Callback] SQLTransactionCallback callback, in [Callback, Optional] SQLTransactionErrorCallback errorCallback, in [Callback, Optional] VoidCallback successCallback);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseCallback.idl
deleted file mode 100644
index 8d31648..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseCallback.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] DatabaseCallback {
-        boolean handleEvent(in Database database);
-        boolean handleEvent(in DatabaseSync database);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseSync.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseSync.idl
deleted file mode 100644
index cfb0b59..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/DatabaseSync.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] DatabaseSync {
-        readonly attribute DOMString version;
-        readonly attribute DOMString lastErrorMessage;
-        void changeVersion(in DOMString oldVersion, in DOMString newVersion, in [Callback, Optional] SQLTransactionSyncCallback callback) raises(DOMException);
-        void transaction(in [Callback] SQLTransactionSyncCallback callback) raises(DOMException);
-        void readTransaction(in [Callback] SQLTransactionSyncCallback callback) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLError.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLError.idl
deleted file mode 100644
index ad84759..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLError.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] SQLError {
-        readonly attribute unsigned long code;
-        readonly attribute DOMString message;
-
-        // SQLErrorCode: used only in the async DB API
-        const unsigned short UNKNOWN_ERR = 0;
-        const unsigned short DATABASE_ERR = 1;
-        const unsigned short VERSION_ERR = 2;
-        const unsigned short TOO_LARGE_ERR = 3;
-        const unsigned short QUOTA_ERR = 4;
-        const unsigned short SYNTAX_ERR = 5;
-        const unsigned short CONSTRAINT_ERR = 6;
-        const unsigned short TIMEOUT_ERR = 7;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLException.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLException.idl
deleted file mode 100644
index 856e5cd..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLException.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    exception [
-        Conditional=SQL_DATABASE,
-        JSNoStaticTables,
-        DoNotCheckConstants
-    ] SQLException {
-        readonly attribute unsigned long code;
-        readonly attribute DOMString message;
-
-        // SQLExceptionCode: used only in the sync DB API
-        const unsigned short UNKNOWN_ERR = 0;
-        const unsigned short DATABASE_ERR = 1;
-        const unsigned short VERSION_ERR = 2;
-        const unsigned short TOO_LARGE_ERR = 3;
-        const unsigned short QUOTA_ERR = 4;
-        const unsigned short SYNTAX_ERR = 5;
-        const unsigned short CONSTRAINT_ERR = 6;
-        const unsigned short TIMEOUT_ERR = 7;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSet.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSet.idl
deleted file mode 100644
index 60692cb..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSet.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] SQLResultSet {
-        readonly attribute SQLResultSetRowList rows;
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        readonly attribute long insertId
-            getter raises(DOMException);
-#else
-        // Explicitely choose 'long long' here to avoid a 64bit->32bit shortening warning for us.
-        readonly attribute long long insertId
-            getter raises(DOMException);
-#endif
-        readonly attribute long rowsAffected;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSetRowList.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSetRowList.idl
deleted file mode 100644
index ba0cb4c..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLResultSetRowList.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] SQLResultSetRowList {
-        readonly attribute unsigned long length;
-        [Custom] DOMObject item(in unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementCallback.idl
deleted file mode 100644
index c3053c0..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementCallback.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] SQLStatementCallback {
-        boolean handleEvent(in SQLTransaction transaction, in SQLResultSet resultSet);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementErrorCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementErrorCallback.idl
deleted file mode 100644
index 1fc96cb..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLStatementErrorCallback.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] SQLStatementErrorCallback {
-        [Custom] boolean handleEvent(in SQLTransaction transaction, in SQLError error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransaction.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransaction.idl
deleted file mode 100644
index f0994a1..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransaction.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] SQLTransaction {
-        [Custom] void executeSql(in DOMString sqlStatement,
-                                 in ObjectArray arguments,
-                                 in [Optional, Callback] SQLStatementCallback callback,
-                                 in [Optional, Callback] SQLStatementErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionCallback.idl
deleted file mode 100644
index 1b50bee..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionCallback.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] SQLTransactionCallback {
-        boolean handleEvent(in SQLTransaction transaction);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionErrorCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionErrorCallback.idl
deleted file mode 100644
index f6ec156..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionErrorCallback.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] SQLTransactionErrorCallback {
-        boolean handleEvent(in SQLError error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSync.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSync.idl
deleted file mode 100644
index e5bdedf..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSync.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        OmitConstructor,
-        JSNoStaticTables
-    ] SQLTransactionSync {
-        [Custom] SQLResultSet executeSql(in DOMString sqlStatement, in ObjectArray arguments);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSyncCallback.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSyncCallback.idl
deleted file mode 100644
index ea22e5f..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/SQLTransactionSyncCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] SQLTransactionSyncCallback {
-        boolean handleEvent(in SQLTransactionSync transaction);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/webdatabase/WorkerContextWebDatabase.idl b/elemental/idl/third_party/WebCore/Modules/webdatabase/WorkerContextWebDatabase.idl
deleted file mode 100644
index 80eb942..0000000
--- a/elemental/idl/third_party/WebCore/Modules/webdatabase/WorkerContextWebDatabase.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module window {
-
-    interface [
-        Conditional=SQL_DATABASE,
-        Supplemental=WorkerContext
-    ] WorkerContextWebDatabase {
-        [V8EnabledAtRuntime] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in [Callback, Optional] DatabaseCallback creationCallback)
-            raises(DOMException);
-
-        [V8EnabledAtRuntime] DatabaseSync openDatabaseSync(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in [Callback, Optional] DatabaseCallback creationCallback)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/websockets/CloseEvent.idl b/elemental/idl/third_party/WebCore/Modules/websockets/CloseEvent.idl
deleted file mode 100644
index ea75111..0000000
--- a/elemental/idl/third_party/WebCore/Modules/websockets/CloseEvent.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    interface [
-        JSNoStaticTables,
-        ConstructorTemplate=Event
-    ] CloseEvent : Event {
-        readonly attribute [InitializedByEventConstructor] boolean wasClean;
-        readonly attribute [InitializedByEventConstructor] unsigned short code;
-        readonly attribute [InitializedByEventConstructor] DOMString reason;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/websockets/DOMWindowWebSocket.idl b/elemental/idl/third_party/WebCore/Modules/websockets/DOMWindowWebSocket.idl
deleted file mode 100644
index 2b5fca8..0000000
--- a/elemental/idl/third_party/WebCore/Modules/websockets/DOMWindowWebSocket.idl
+++ /dev/null
@@ -1,39 +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.
- */
-
-module window {
-
-    interface [
-        Conditional=WEB_SOCKETS,
-        Supplemental=DOMWindow
-    ] DOMWindowWebSocket {
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        attribute CloseEventConstructor CloseEvent;
-        attribute [JSCustomGetter, V8EnabledAtRuntime] WebSocketConstructor WebSocket; // Usable with the new operator
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/websockets/WebSocket.idl b/elemental/idl/third_party/WebCore/Modules/websockets/WebSocket.idl
deleted file mode 100644
index 92835ae..0000000
--- a/elemental/idl/third_party/WebCore/Modules/websockets/WebSocket.idl
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc.  All rights reserved.
- * Copyright (C) 2010, 2011 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * 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.
- */
-
-module websockets {
-
-    interface [
-        Conditional=WEB_SOCKETS,
-        ActiveDOMObject,
-        CustomConstructor,
-        ConstructorParameters=1,
-        EventTarget,
-        JSNoStaticTables
-    ] WebSocket {
-        readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
-        readonly attribute DOMString url;
-
-        // ready state
-        const unsigned short CONNECTING = 0;
-        const unsigned short OPEN = 1;
-        const unsigned short CLOSING = 2;
-        const unsigned short CLOSED = 3;
-        readonly attribute unsigned short readyState;
-
-        readonly attribute unsigned long bufferedAmount;
-
-        // networking
-        attribute EventListener onopen;
-        attribute EventListener onmessage;
-        attribute EventListener onerror;
-        attribute EventListener onclose;
-
-        readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString protocol;
-        readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString extensions;
-
-        attribute [TreatReturnedNullStringAs=Undefined] DOMString binaryType
-            setter raises(DOMException);
-
-        // FIXME: Use overloading provided by our IDL code generator.
-        // According to Web IDL specification, overloaded function with DOMString argument
-        // should accept anything that can be converted to a string (including numbers,
-        // booleans, null, undefined and objects except ArrayBuffer and Blob). Current code
-        // generator does not handle this rule correctly.
-        // boolean send(in ArrayBuffer data) raises(DOMException);
-        // boolean send(in Blob data) raises(DOMException);
-        // boolean send(in DOMString data) raises(DOMException);
-        [Custom] boolean send(in DOMString data) raises(DOMException);
-
-        // FIXME: Implement and apply [Clamp] attribute instead of [Custom].
-        [Custom] void close(in [Optional] unsigned short code, in [Optional] DOMString reason) raises(DOMException);
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/Modules/websockets/WorkerContextWebSocket.idl b/elemental/idl/third_party/WebCore/Modules/websockets/WorkerContextWebSocket.idl
deleted file mode 100644
index 9cd2524..0000000
--- a/elemental/idl/third_party/WebCore/Modules/websockets/WorkerContextWebSocket.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module window {
-
-    interface [
-        Conditional=WEB_SOCKETS,
-        Supplemental=WorkerContext
-    ] WorkerContextWebSocket {
-        attribute [JSCustomGetter,V8EnabledAtRuntime] WebSocketConstructor WebSocket; // Usable with the new operator
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/README b/elemental/idl/third_party/WebCore/README
deleted file mode 100644
index a4996d5..0000000
--- a/elemental/idl/third_party/WebCore/README
+++ /dev/null
@@ -1,9 +0,0 @@
-This directory contains a copy of WebKit/WebCore IDL files.
-See the attached LICENSE-* files in this directory.
-
-Please do not modify the files here.  They are periodically copied
-using the script: $DART_ROOT/lib/dom/scripts/idlsync.py
-
-The current version corresponds to:
-URL: http://src.chromium.org/multivm/trunk/webkit
-Current revision: 576
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCallback.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCallback.idl
deleted file mode 100644
index 354859a..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCallback.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator with an interface
-// that has the "Callback" attribute and for tracking changes in its ouput.
-module test {
-    interface [
-        Conditional=SQL_DATABASE,
-        Callback
-    ] TestCallback {
-      boolean callbackWithNoParam();
-      boolean callbackWithClass1Param(in Class1 class1Param);
-      boolean callbackWithClass2Param(in Class2 class2Param, in DOMString strArg);
-      long callbackWithNonBoolReturnType(in Class3 class3Param);
-      [Custom] long customCallback(in Class5 class5Param, in Class6 class6Param);
-      boolean callbackWithStringList(in DOMStringList listParam);
-      boolean callbackWithBoolean(in boolean boolParam);
-      [PassThisToCallback=ThisClass] boolean callbackRequiresThisToPass(in Class8 class8Param, in ThisClass thisClassParam);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCustomNamedGetter.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCustomNamedGetter.idl
deleted file mode 100644
index 329fa5d..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestCustomNamedGetter.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-module events {
-
-    interface [
-        CustomNamedGetter
-    ] TestCustomNamedGetter {
-        void anotherFunction(in DOMString str);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestDomainSecurity.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestDomainSecurity.idl
deleted file mode 100644
index bbd46e0..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestDomainSecurity.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-module test {
-    interface [
-        CheckSecurity
-    ] TestActiveDOMObject {
-        readonly attribute long excitingAttr;
-        void excitingFunction(in Node nextChild);
-        [DoNotCheckSecurity] void postMessage(in DOMString message);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventConstructor.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventConstructor.idl
deleted file mode 100644
index 706f1e2..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventConstructor.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        ConstructorTemplate=Event
-    ] TestEventConstructor {
-        // Attributes
-        readonly attribute DOMString attr1;
-        readonly attribute [InitializedByEventConstructor] DOMString attr2;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventTarget.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventTarget.idl
deleted file mode 100644
index 22e5b96..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestEventTarget.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-module events {
-
-    interface [
-        EventTarget,
-        IndexedGetter,
-        NamedGetter,
-        MasqueradesAsUndefined
-    ] TestEventTarget {
-
-        Node item(in [IsIndex] unsigned long index);
-
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestException.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestException.idl
deleted file mode 100644
index f34af00..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestException.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-module test {
-    exception TestException {
-       readonly attribute DOMString name;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestInterface.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestInterface.idl
deleted file mode 100644
index a058f1a..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestInterface.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        ActiveDOMObject,
-        CustomNamedSetter,
-        Conditional=Condition1|Condition2,
-        CallWith=ScriptExecutionContext,
-        Constructor(in DOMString str1, in [Optional=DefaultIsUndefined] DOMString str2),
-        ConstructorRaisesException
-    ] TestInterface {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestMediaQueryListListener.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestMediaQueryListListener.idl
deleted file mode 100644
index 536393b..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestMediaQueryListListener.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-// This IDL file is for testing the bindings code generator with an interface
-// that has methods receiving a parameter of the type MediaQueryListListener.
-module test {
-    interface TestMediaQueryListListener {
-        void method(in MediaQueryListListener listener);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNamedConstructor.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNamedConstructor.idl
deleted file mode 100644
index e0f8539..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNamedConstructor.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        ActiveDOMObject,
-        NamedConstructor=Audio(in DOMString str1, in [Optional=DefaultIsUndefined] DOMString str2, in [Optional=DefaultIsNullString] DOMString str3),
-        ConstructorRaisesException
-    ] TestNamedConstructor {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNode.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNode.idl
deleted file mode 100644
index 321621c..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestNode.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module test {
-
-    interface [
-        EventTarget,
-        Constructor,
-        V8DependentLifetime
-    ] TestNode : Node {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestObj.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestObj.idl
deleted file mode 100644
index 08b9856..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestObj.idl
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        Constructor(in [Callback] TestCallback testCallback),
-        InterfaceName=TestObject
-    ] TestObj {
-        // Attributes
-        readonly attribute long            readOnlyIntAttr;
-        readonly attribute DOMString       readOnlyStringAttr;
-        readonly attribute TestObj         readOnlyTestObjAttr;
-        attribute short                    shortAttr;
-        attribute unsigned short           unsignedShortAttr;
-        attribute long                     intAttr;
-        attribute long long                longLongAttr;
-        attribute unsigned long long       unsignedLongLongAttr;
-        attribute DOMString                stringAttr;
-        attribute TestObj                  testObjAttr;
-
-        // Sequence Attributes
-        attribute sequence<ScriptProfile>  sequenceAttr;
-        attribute sequence<int> intSequenceAttr;
-        attribute sequence<short> shortSequenceAttr;
-        attribute sequence<long> longSequenceAttr;
-        attribute sequence<long long> longLongSequenceAttr;
-        attribute sequence<unsigned int> unsignedIntSequenceAttr;
-        attribute sequence<unsigned short> unsignedShortSequenceAttr;
-        attribute sequence<unsigned long> unsignedLongSequenceAttr;
-        attribute sequence<unsigned long long> unsignedLongLongSequenceAttr;
-        attribute sequence<float> floatSequenceAttr;
-        attribute sequence<double> doubleSequenceAttr;
-        attribute sequence<boolean> booleanSequenceAttr;
-        attribute sequence<void> voidSequenceAttr;
-        attribute sequence<Date> dateSequenceAttr;
-
-        JS, V8
-        // WK_ucfirst, WK_lcfirst exceptional cases.
-        attribute TestObj                  XMLObjAttr;
-        attribute boolean                  create;
-
-        // Reflected DOM attributes
-        attribute [Reflect] DOMString reflectedStringAttr;
-        attribute [Reflect] long reflectedIntegralAttr;
-        attribute [Reflect] unsigned long reflectedUnsignedIntegralAttr;
-        attribute [Reflect] boolean reflectedBooleanAttr;
-        attribute [Reflect, URL] DOMString reflectedURLAttr;
-        attribute [Reflect=customContentStringAttr] DOMString reflectedStringAttr;
-        attribute [Reflect=customContentIntegralAttr] long reflectedCustomIntegralAttr;
-        attribute [Reflect=customContentBooleanAttr] boolean reflectedCustomBooleanAttr;
-        attribute [Reflect=customContentURLAttr, URL] DOMString reflectedCustomURLAttr;
-
-        // Methods
-        void    voidMethod();
-        void    voidMethodWithArgs(in long intArg, in DOMString strArg, in TestObj objArg);
-        long    intMethod();
-        long    intMethodWithArgs(in long intArg, in DOMString strArg, in TestObj objArg);
-        TestObj objMethod();
-        TestObj objMethodWithArgs(in long intArg, in DOMString strArg, in TestObj objArg);
-
-        void methodWithSequenceArg(in sequence<ScriptProfile> sequenceArg);
-        sequence<ScriptProfile> methodReturningSequence(in long intArg);
-
-        TestObj methodThatRequiresAllArgsAndThrows(in DOMString strArg, in TestObj objArg)
-            raises(DOMException);
-
-        void serializedValue(in SerializedScriptValue serializedArg);
-        void idbKey(in IDBKey key);
-        void optionsObject(in Dictionary oo, in [Optional] Dictionary ooo);
-
-        // Exceptions
-        void methodWithException() raises(DOMException);
-        attribute long attrWithGetterException getter raises(DOMException);
-        attribute long attrWithSetterException setter raises(DOMException);
-        attribute DOMString stringAttrWithGetterException getter raises(DOMException);
-        attribute DOMString stringAttrWithSetterException setter raises(DOMException);
-
-        // 'Custom' extended attribute
-        attribute [Custom] long            customAttr;
-        [Custom] void customMethod();
-        [Custom] void customMethodWithArgs(in long intArg, in DOMString strArg, in TestObj objArg);
-
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-
-        // 'CallWith' extended attribute
-        [CallWith=ScriptState] void withScriptStateVoid();
-        [CallWith=ScriptState] TestObj withScriptStateObj();
-        [CallWith=ScriptState] void withScriptStateVoidException()
-            raises(DOMException);
-        [CallWith=ScriptState] TestObj withScriptStateObjException()
-            raises(DOMException);
-        [CallWith=ScriptExecutionContext] void withScriptExecutionContext();
-        [CallWith=ScriptExecutionContext|ScriptState] void withScriptExecutionContextAndScriptState();
-        [CallWith=ScriptExecutionContext|ScriptState] TestObj withScriptExecutionContextAndScriptStateObjException()
-            raises(DOMException);
-        [CallWith=  ScriptExecutionContext  |  ScriptState  ] TestObj withScriptExecutionContextAndScriptStateWithSpaces();
-        [CallWith=ScriptArguments|CallStack] void withScriptArgumentsAndCallStack();
-
-        attribute [CallWith=ScriptState] long withScriptStateAttribute;
-        attribute [CallWith=ScriptExecutionContext] TestObj withScriptExecutionContextAttribute;
-        attribute [CallWith=ScriptState] TestObj withScriptStateAttributeRaises
-            getter raises(DOMException);
-        attribute [CallWith=ScriptExecutionContext] TestObj withScriptExecutionContextAttributeRaises
-            getter raises(DOMException);
-        attribute [CallWith=ScriptExecutionContext|ScriptState] TestObj withScriptExecutionContextAndScriptStateAttribute;
-        attribute [CallWith=ScriptExecutionContext|ScriptState] TestObj withScriptExecutionContextAndScriptStateAttributeRaises
-            getter raises(DOMException);
-        attribute [CallWith=  ScriptExecutionContext  |  ScriptState  ] TestObj withScriptExecutionContextAndScriptStateWithSpacesAttribute;
-        attribute [CallWith=ScriptArguments|CallStack] TestObj withScriptArgumentsAndCallStackAttribute;
-
-        // 'Optional' extended attribute
-        void    methodWithOptionalArg(in [Optional] long opt);
-        void    methodWithNonOptionalArgAndOptionalArg(in long nonOpt, in [Optional] long opt);
-        void    methodWithNonOptionalArgAndTwoOptionalArgs(in long nonOpt, in [Optional] long opt1, in [Optional] long opt2);
-        void    methodWithOptionalString(in [Optional] DOMString str);
-        void    methodWithOptionalStringIsUndefined(in [Optional=DefaultIsUndefined] DOMString str);
-        void    methodWithOptionalStringIsNullString(in [Optional=DefaultIsNullString] DOMString str);
-
-#if defined(TESTING_V8) || defined(TESTING_JS)
-        // 'Callback' extended attribute
-        void    methodWithCallbackArg(in [Callback] TestCallback callback);
-        void    methodWithNonCallbackArgAndCallbackArg(in long nonCallback, in [Callback] TestCallback callback);
-        void    methodWithCallbackAndOptionalArg(in [Callback, Optional] TestCallback callback);
-#endif
-
-        // 'Conditional' extended attribute
-        attribute [Conditional=Condition1] long conditionalAttr1;
-        attribute [Conditional=Condition1&Condition2] long conditionalAttr2;
-        attribute [Conditional=Condition1|Condition2] long conditionalAttr3;
-
-        // 'Conditional' extended method
-        [Conditional=Condition1] DOMString conditionalMethod1();
-        [Conditional=Condition1&Condition2] void conditionalMethod2();
-        [Conditional=Condition1|Condition2] void conditionalMethod3();
-
-        attribute [Conditional=Condition1] TestObjectAConstructor conditionalAttr4;
-        attribute [Conditional=Condition1&Condition2] TestObjectBConstructor conditionalAttr5;
-        attribute [Conditional=Condition1|Condition2] TestObjectCConstructor conditionalAttr6;
-
-        [Conditional=Condition1] const unsigned short CONDITIONAL_CONST = 0;
-
-#if defined(TESTING_V8) || defined(TESTING_JS)
-        readonly attribute [CachedAttribute] any cachedAttribute1;
-        readonly attribute [CachedAttribute] any cachedAttribute2;
-#endif
-
-#if defined(TESTING_V8) || defined(TESTING_JS)
-        // Overloads
-        void    overloadedMethod(in TestObj objArg, in DOMString strArg);
-        void    overloadedMethod(in TestObj objArg, in [Optional] long intArg);
-        void    overloadedMethod(in DOMString strArg);
-        void    overloadedMethod(in long intArg);
-        void    overloadedMethod(in [Callback] TestCallback callback);
-        void    overloadedMethod(in DOMStringList listArg);
-        void    overloadedMethod(in DOMString[] arrayArg);
-#endif
-
-        // Class methods within JavaScript (like what's used for IDBKeyRange).
-        static void classMethod();
-        static long classMethodWithOptional(in [Optional] long arg);
-        [Custom] static void classMethod2(in long arg);
-
-        // Static method with conditional on overloaded methods
-        [Conditional=Condition1] static void overloadedMethod1(in long arg);
-        [Conditional=Condition1] static void overloadedMethod1(in DOMString type);
-
-#if defined(TESTING_V8)
-        // 'V8EnabledAtRuntime' methods and attributes.
-        [V8EnabledAtRuntime] void enabledAtRuntimeMethod1(in int intArg);
-        [V8EnabledAtRuntime=FeatureName] void enabledAtRuntimeMethod2(in int intArg);
-        attribute [V8EnabledAtRuntime] long enabledAtRuntimeAttr1;
-        attribute [V8EnabledAtRuntime=FeatureName] long enabledAtRuntimeAttr2;
-        // V8EnabledPerContext currently only supports attributes.
-        attribute [V8EnabledPerContext] long enabledAtContextAttr1;
-        attribute [V8EnabledPerContext=FeatureName] long enabledAtContextAttr2;
-#endif
-
-
-#if defined(TESTING_V8)
-        attribute float[]                   floatArray;
-        attribute double[]                  doubleArray;
-#endif
-
-#if defined(TESTING_JS)
-        void methodWithUnsignedLongArray(in unsigned long[] unsignedLongArray);
-#endif
-
-        readonly attribute [CheckSecurityForNode] Document contentDocument;
-        [CheckSecurityForNode] SVGDocument getSVGDocument()
-            raises(DOMException);
-
-        void convert1(in [TreatReturnedNullStringAs=Null] a);
-        void convert2(in [TreatReturnedNullStringAs=Undefined] b);
-        void convert3(in [TreatReturnedNullStringAs=False] c);
-        void convert4(in [TreatNullAs=NullString] d);
-        void convert5(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] e);
-
-        attribute SVGPoint mutablePoint;
-        attribute [Immutable] SVGPoint immutablePoint;
-        SVGPoint mutablePointFunction();
-        [Immutable] SVGPoint immutablePointFunction();
-
-        [ImplementedAs=banana] void orange();
-        attribute [ImplementedAs=blueberry] int strawberry;
-
-        attribute [StrictTypeChecking] float strictFloat;
-        [StrictTypeChecking] bool strictFunction(in DOMString str, in float a, in int b)
-            raises(DOMException);
-
-        // ObjectiveC reserved words.
-        readonly attribute long      description;
-        attribute long               id;
-        readonly attribute DOMString hash;
-
-        // Check constants and enums.
-        const unsigned short CONST_VALUE_0 = 0;
-        const unsigned short CONST_VALUE_1 = 1;
-        const unsigned short CONST_VALUE_2 = 2;
-        const unsigned short CONST_VALUE_4 = 4;
-        const unsigned short CONST_VALUE_8 = 8;
-        const short CONST_VALUE_9 = -1;
-        const DOMString CONST_VALUE_10 = "my constant string";
-        const unsigned short CONST_VALUE_11 = 0xffffffff;
-        const unsigned short CONST_VALUE_12 = 0x01;
-        const unsigned short CONST_VALUE_13 = 0X20;
-        const unsigned short CONST_VALUE_14 = 0x1abc;
-        [Reflect=CONST_IMPL] const unsigned short CONST_JAVASCRIPT = 15;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl
deleted file mode 100644
index facf7cb..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        Conditional=Condition1|Condition2,
-        Constructor(in DOMString hello, in SerializedScriptValue value),
-        Constructor(in DOMString hello, in [TransferList=transferList] SerializedScriptValue data, in [Optional=DefaultIsUndefined] Array transferList),
-    ] TestSerializedScriptValueInterface {
-        attribute SerializedScriptValue value;
-        readonly attribute SerializedScriptValue readonlyValue;
-        attribute [CachedAttribute] SerializedScriptValue cachedValue;
-        readonly attribute MessagePortArray ports;
-        readonly attribute [CachedAttribute] SerializedScriptValue cachedReadonlyValue;
-        void acceptTransferList(in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList);
-        void multiTransferList(in [Optional, TransferList=tx] SerializedScriptValue first, in [Optional] Array tx, in [Optional, TransferList=txx] SerializedScriptValue second, in [Optional] Array txx);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSupplemental.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSupplemental.idl
deleted file mode 100644
index 6051412..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestSupplemental.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary formstrArg, 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 WARRANTIEstrArg, 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.
- */
-
-// This IDL file is for testing the bindings code generator and for tracking
-// changes in its ouput.
-module test {
-    interface [
-        Conditional=Condition11|Condition12,
-        Supplemental=TestInterface
-    ] TestSupplemental {
-        readonly attribute DOMString supplementalStr1;
-        attribute DOMString supplementalStr2;
-        attribute [CustomGetter, CustomSetter] DOMString supplementalStr3;
-        attribute Node supplementalNode;
-
-        void supplementalMethod1();
-        [CallWith=ScriptExecutionContext] TestObj supplementalMethod2(in DOMString strArg, in TestObj objArg) raises(DOMException);
-        [Custom] void supplementalMethod3();
-        static void supplementalMethod4();
-
-        const unsigned short SUPPLEMENTALCONSTANT1 = 1;
-        [Reflect=CONST_IMPL] const unsigned short SUPPLEMENTALCONSTANT2 = 2;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestTypedArray.idl b/elemental/idl/third_party/WebCore/bindings/scripts/test/TestTypedArray.idl
deleted file mode 100644
index e816b38..0000000
--- a/elemental/idl/third_party/WebCore/bindings/scripts/test/TestTypedArray.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=123,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Float64Array : ArrayBufferView {
-        Int32Array foo(in Float32Array array);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSCharsetRule.idl b/elemental/idl/third_party/WebCore/css/CSSCharsetRule.idl
deleted file mode 100644
index 3cdaf4a..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSCharsetRule.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSCharsetRule : CSSRule {
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString encoding;
-#else
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString encoding
-                     setter raises(DOMException);
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSFontFaceRule.idl b/elemental/idl/third_party/WebCore/css/CSSFontFaceRule.idl
deleted file mode 100644
index bd38a61..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSFontFaceRule.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSFontFaceRule : CSSRule {
-        readonly attribute CSSStyleDeclaration style;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSImportRule.idl b/elemental/idl/third_party/WebCore/css/CSSImportRule.idl
deleted file mode 100644
index ddd0a8b..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSImportRule.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSImportRule : CSSRule {
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString href;
-        readonly attribute MediaList media;
-        readonly attribute CSSStyleSheet styleSheet;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSMediaRule.idl b/elemental/idl/third_party/WebCore/css/CSSMediaRule.idl
deleted file mode 100644
index f52a6ce..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSMediaRule.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSMediaRule : CSSRule {
-        readonly attribute MediaList media;
-        readonly attribute CSSRuleList cssRules;
-        
-        [ObjCLegacyUnnamedParameters] unsigned long      insertRule(in [Optional=DefaultIsUndefined] DOMString rule, 
-                                                     in [Optional=DefaultIsUndefined] unsigned long index)
-            raises(DOMException);
-        void               deleteRule(in [Optional=DefaultIsUndefined] unsigned long index)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSPageRule.idl b/elemental/idl/third_party/WebCore/css/CSSPageRule.idl
deleted file mode 100644
index b3ea228..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSPageRule.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSPageRule : CSSRule {
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString selectorText;
-
-        readonly attribute CSSStyleDeclaration style;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSPrimitiveValue.idl b/elemental/idl/third_party/WebCore/css/CSSPrimitiveValue.idl
deleted file mode 100644
index 6c637c9..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSPrimitiveValue.idl
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    interface CSSPrimitiveValue : CSSValue {
-
-        // UnitTypes
-        const unsigned short CSS_UNKNOWN    = 0;
-        const unsigned short CSS_NUMBER     = 1;
-        const unsigned short CSS_PERCENTAGE = 2;
-        const unsigned short CSS_EMS        = 3;
-        const unsigned short CSS_EXS        = 4;
-        const unsigned short CSS_PX         = 5;
-        const unsigned short CSS_CM         = 6;
-        const unsigned short CSS_MM         = 7;
-        const unsigned short CSS_IN         = 8;
-        const unsigned short CSS_PT         = 9;
-        const unsigned short CSS_PC         = 10;
-        const unsigned short CSS_DEG        = 11;
-        const unsigned short CSS_RAD        = 12;
-        const unsigned short CSS_GRAD       = 13;
-        const unsigned short CSS_MS         = 14;
-        const unsigned short CSS_S          = 15;
-        const unsigned short CSS_HZ         = 16;
-        const unsigned short CSS_KHZ        = 17;
-        const unsigned short CSS_DIMENSION  = 18;
-        const unsigned short CSS_STRING     = 19;
-        const unsigned short CSS_URI        = 20;
-        const unsigned short CSS_IDENT      = 21;
-        const unsigned short CSS_ATTR       = 22;
-        const unsigned short CSS_COUNTER    = 23;
-        const unsigned short CSS_RECT       = 24;
-        const unsigned short CSS_RGBCOLOR   = 25;
-        const unsigned short CSS_VW         = 26;
-        const unsigned short CSS_VH         = 27;
-        const unsigned short CSS_VMIN       = 28;
-        
-        readonly attribute unsigned short primitiveType;
-
-        [ObjCLegacyUnnamedParameters] void setFloatValue(in [Optional=DefaultIsUndefined] unsigned short unitType,
-                                          in [Optional=DefaultIsUndefined] float floatValue)
-            raises(DOMException);
-        float getFloatValue(in [Optional=DefaultIsUndefined] unsigned short unitType)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters] void setStringValue(in [Optional=DefaultIsUndefined] unsigned short stringType, 
-                                           in [Optional=DefaultIsUndefined] DOMString stringValue)
-            raises(DOMException);
-        DOMString getStringValue()
-            raises(DOMException);
-        Counter getCounterValue()
-            raises(DOMException);
-        Rect getRectValue()
-            raises(DOMException);
-        RGBColor getRGBColorValue()
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSRule.idl b/elemental/idl/third_party/WebCore/css/CSSRule.idl
deleted file mode 100644
index 05854a2..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSRule.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateIsReachable,
-        CustomToJSObject,
-        ObjCPolymorphic,
-        V8DependentLifetime
-    ] CSSRule {
-
-        // RuleType
-        const unsigned short UNKNOWN_RULE = 0;
-        const unsigned short STYLE_RULE = 1;
-        const unsigned short CHARSET_RULE = 2;
-        const unsigned short IMPORT_RULE = 3;
-        const unsigned short MEDIA_RULE = 4;
-        const unsigned short FONT_FACE_RULE = 5;
-        const unsigned short PAGE_RULE = 6;
-        const unsigned short WEBKIT_KEYFRAMES_RULE = 7;
-        const unsigned short WEBKIT_KEYFRAME_RULE = 8;
-#if defined(ENABLE_CSS_REGIONS) && ENABLE_CSS_REGIONS
-        const unsigned short WEBKIT_REGION_RULE = 10;
-#endif
-
-        readonly attribute unsigned short   type;
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        cssText
-                     setter raises (DOMException);
-
-        readonly attribute CSSStyleSheet    parentStyleSheet;
-        readonly attribute CSSRule          parentRule;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSRuleList.idl b/elemental/idl/third_party/WebCore/css/CSSRuleList.idl
deleted file mode 100644
index 7ac533b..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSRuleList.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomIsReachable,
-        IndexedGetter,
-        V8DependentLifetime
-    ] CSSRuleList {
-        readonly attribute unsigned long    length;
-        CSSRule           item(in [Optional=DefaultIsUndefined] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSStyleDeclaration.idl b/elemental/idl/third_party/WebCore/css/CSSStyleDeclaration.idl
deleted file mode 100644
index 9846c54..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSStyleDeclaration.idl
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateIsReachable,
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomNamedSetter,
-#if defined(V8_BINDING) && V8_BINDING
-        NamedGetter,
-#endif
-        IndexedGetter,
-        CustomEnumerateProperty,
-        V8DependentLifetime
-    ] CSSStyleDeclaration {
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        cssText
-                     setter raises(DOMException);
-
-        [TreatReturnedNullStringAs=Null] DOMString          getPropertyValue(in [Optional=DefaultIsUndefined] DOMString propertyName);
-        [JSCustom] CSSValue           getPropertyCSSValue(in [Optional=DefaultIsUndefined] DOMString propertyName);
-        [TreatReturnedNullStringAs=Null] DOMString          removeProperty(in [Optional=DefaultIsUndefined] DOMString propertyName)
-            raises(DOMException);
-        [TreatReturnedNullStringAs=Null] DOMString          getPropertyPriority(in [Optional=DefaultIsUndefined] DOMString propertyName);
-        [ObjCLegacyUnnamedParameters] void setProperty(in [Optional=DefaultIsUndefined] DOMString propertyName, 
-                                        in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString value, 
-                                        in [Optional=DefaultIsUndefined] DOMString priority)
-            raises(DOMException);
-
-        readonly attribute unsigned long    length;
-        DOMString          item(in [Optional=DefaultIsUndefined] unsigned long index);
-        readonly attribute CSSRule          parentRule;
-
-        // Extensions
-        [TreatReturnedNullStringAs=Null] DOMString          getPropertyShorthand(in [Optional=DefaultIsUndefined] DOMString propertyName);
-        boolean            isPropertyImplicit(in [Optional=DefaultIsUndefined] DOMString propertyName);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSStyleRule.idl b/elemental/idl/third_party/WebCore/css/CSSStyleRule.idl
deleted file mode 100644
index c576329..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSStyleRule.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface CSSStyleRule : CSSRule {
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString selectorText;
-
-        readonly attribute CSSStyleDeclaration style;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSStyleSheet.idl b/elemental/idl/third_party/WebCore/css/CSSStyleSheet.idl
deleted file mode 100644
index 962c9db..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSStyleSheet.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        V8CustomToJSObject
-    ] CSSStyleSheet : StyleSheet {
-        readonly attribute CSSRule          ownerRule;
-        readonly attribute CSSRuleList      cssRules;
-
-        [ObjCLegacyUnnamedParameters] unsigned long insertRule(in [Optional=DefaultIsUndefined] DOMString rule, 
-                                                in [Optional=DefaultIsUndefined] unsigned long index)
-            raises(DOMException);
-        void               deleteRule(in [Optional=DefaultIsUndefined] unsigned long index)
-            raises(DOMException);
-
-        // IE Extensions
-        readonly attribute CSSRuleList      rules;
-
-        long addRule(in [Optional=DefaultIsUndefined] DOMString selector,
-                     in [Optional=DefaultIsUndefined] DOMString style,
-                     in [Optional] unsigned long index)
-            raises(DOMException);
-        void removeRule(in [Optional=DefaultIsUndefined] unsigned long index)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSUnknownRule.idl b/elemental/idl/third_party/WebCore/css/CSSUnknownRule.idl
deleted file mode 100644
index b62ceb8..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSUnknownRule.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        OmitConstructor
-    ] CSSUnknownRule : CSSRule {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSValue.idl b/elemental/idl/third_party/WebCore/css/CSSValue.idl
deleted file mode 100644
index 2b0ceb3..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSValue.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    interface [
-        CustomToJSObject,
-        JSCustomIsReachable,
-        JSCustomFinalize,
-        ObjCPolymorphic,
-        V8DependentLifetime
-    ] CSSValue {
-
-        // UnitTypes
-        const unsigned short CSS_INHERIT         = 0;
-        const unsigned short CSS_PRIMITIVE_VALUE = 1;
-        const unsigned short CSS_VALUE_LIST      = 2;
-        const unsigned short CSS_CUSTOM          = 3;
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString cssText
-                     setter raises(DOMException);
-
-        readonly attribute unsigned short cssValueType;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/CSSValueList.idl b/elemental/idl/third_party/WebCore/css/CSSValueList.idl
deleted file mode 100644
index 23e27ec..0000000
--- a/elemental/idl/third_party/WebCore/css/CSSValueList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface [
-        IndexedGetter
-    ] CSSValueList : CSSValue {
-        readonly attribute unsigned long    length;
-        CSSValue           item(in [Optional=DefaultIsUndefined] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/Counter.idl b/elemental/idl/third_party/WebCore/css/Counter.idl
deleted file mode 100644
index 6236c45..0000000
--- a/elemental/idl/third_party/WebCore/css/Counter.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface Counter {
-        readonly attribute DOMString identifier;
-        readonly attribute DOMString listStyle;
-        readonly attribute DOMString separator;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/MediaList.idl b/elemental/idl/third_party/WebCore/css/MediaList.idl
deleted file mode 100644
index 35445a3..0000000
--- a/elemental/idl/third_party/WebCore/css/MediaList.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module stylesheets {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSGenerateIsReachable,
-        IndexedGetter
-    ] MediaList {
-
-                 attribute [TreatNullAs=NullString, TreatReturnedNullStringAs=Null] DOMString mediaText
-                     setter raises(DOMException);
-        readonly attribute unsigned long length;
-
-        [TreatReturnedNullStringAs=Null] DOMString item(in [Optional=DefaultIsUndefined] unsigned long index);
-        void deleteMedium(in [Optional=DefaultIsUndefined] DOMString oldMedium)
-            raises(DOMException);
-        void appendMedium(in [Optional=DefaultIsUndefined] DOMString newMedium)
-            raises(DOMException);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/MediaQueryList.idl b/elemental/idl/third_party/WebCore/css/MediaQueryList.idl
deleted file mode 100644
index b4f7b95..0000000
--- a/elemental/idl/third_party/WebCore/css/MediaQueryList.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  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.
- */
-
-module view {
-    interface MediaQueryList {
-        readonly attribute DOMString media;
-        readonly attribute boolean matches;
-        void addListener(in [Optional=DefaultIsUndefined] MediaQueryListListener listener);
-        void removeListener(in [Optional=DefaultIsUndefined] MediaQueryListListener listener);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/css/MediaQueryListListener.idl b/elemental/idl/third_party/WebCore/css/MediaQueryListListener.idl
deleted file mode 100644
index d8f383a..0000000
--- a/elemental/idl/third_party/WebCore/css/MediaQueryListListener.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- *  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.
- */
-
-module view {
-    interface [
-        JSNoStaticTables,
-        ObjCProtocol,
-        CPPPureInterface,
-        OmitConstructor
-    ] MediaQueryListListener {
-        void queryChanged(in [Optional=DefaultIsUndefined] MediaQueryList list);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/css/RGBColor.idl b/elemental/idl/third_party/WebCore/css/RGBColor.idl
deleted file mode 100644
index 1dc87bc..0000000
--- a/elemental/idl/third_party/WebCore/css/RGBColor.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    // Introduced in DOM Level 2:
-    interface RGBColor {
-        readonly attribute CSSPrimitiveValue  red;
-        readonly attribute CSSPrimitiveValue  green;
-        readonly attribute CSSPrimitiveValue  blue;
-
-        // WebKit extensions
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        readonly attribute CSSPrimitiveValue  alpha;
-#endif
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        readonly attribute Color              color;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/Rect.idl b/elemental/idl/third_party/WebCore/css/Rect.idl
deleted file mode 100644
index 60eb70e..0000000
--- a/elemental/idl/third_party/WebCore/css/Rect.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module css {
-
-    interface Rect {
-        readonly attribute CSSPrimitiveValue  top;
-        readonly attribute CSSPrimitiveValue  right;
-        readonly attribute CSSPrimitiveValue  bottom;
-        readonly attribute CSSPrimitiveValue  left;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/StyleMedia.idl b/elemental/idl/third_party/WebCore/css/StyleMedia.idl
deleted file mode 100644
index 5dd58da..0000000
--- a/elemental/idl/third_party/WebCore/css/StyleMedia.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module view {
-    interface [
-        JSGenerateIsReachable=ImplFrame
-    ] StyleMedia {
-        readonly attribute DOMString type;
-        boolean matchMedium(in [Optional=DefaultIsUndefined] DOMString mediaquery);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/css/StyleSheet.idl b/elemental/idl/third_party/WebCore/css/StyleSheet.idl
deleted file mode 100644
index 9e20d84..0000000
--- a/elemental/idl/third_party/WebCore/css/StyleSheet.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module stylesheets {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateIsReachable,
-        CustomToJSObject,
-        ObjCPolymorphic,
-        V8DependentLifetime
-    ] StyleSheet {
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        type;
-                 attribute boolean          disabled;
-        readonly attribute Node             ownerNode;
-        readonly attribute StyleSheet       parentStyleSheet;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        href;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        title;
-        readonly attribute MediaList        media;
-
-#if defined(LANGUAGE_CPP) && LANGUAGE_CPP
-        // Extra WebCore methods exposed to allowe compile-time casting in C++
-        boolean isCSSStyleSheet();
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/StyleSheetList.idl b/elemental/idl/third_party/WebCore/css/StyleSheetList.idl
deleted file mode 100644
index 3a7b185..0000000
--- a/elemental/idl/third_party/WebCore/css/StyleSheetList.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module stylesheets {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSGenerateIsReachable=ImplDocument,
-        IndexedGetter,
-        NamedGetter,
-        V8DependentLifetime
-    ] StyleSheetList {
-        readonly attribute unsigned long    length;
-        StyleSheet         item(in [Optional=DefaultIsUndefined] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSFilterValue.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSFilterValue.idl
deleted file mode 100644
index 3f21913..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSFilterValue.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module css {
-
-    interface [
-            Conditional=CSS_FILTERS,
-            IndexedGetter,
-            DoNotCheckConstants
-    ] WebKitCSSFilterValue : 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;
-
-#if defined(ENABLE_CSS_SHADERS) && ENABLE_CSS_SHADERS
-        const unsigned short CSS_FILTER_CUSTOM = 12;
-#endif
-
-        readonly attribute unsigned short operationType;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframeRule.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframeRule.idl
deleted file mode 100644
index f6eac77..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframeRule.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module css {
-
-    // Introduced in DOM Level ?:
-    interface WebKitCSSKeyframeRule : CSSRule {
-
-        attribute DOMString keyText;
-        readonly attribute CSSStyleDeclaration style;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframesRule.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframesRule.idl
deleted file mode 100644
index fa0ea2a..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSKeyframesRule.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module css {
-
-    // Introduced in DOM Level ?:
-    interface [
-        IndexedGetter
-    ] WebKitCSSKeyframesRule : CSSRule {
-
-        attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString name;
-        readonly attribute CSSRuleList cssRules;
-        
-        void insertRule(in [Optional=DefaultIsUndefined] DOMString rule);
-        void deleteRule(in [Optional=DefaultIsUndefined] DOMString key);
-        WebKitCSSKeyframeRule findRule(in [Optional=DefaultIsUndefined] DOMString key);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSMatrix.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSMatrix.idl
deleted file mode 100644
index 08c41aa..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSMatrix.idl
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module css {
-
-    // Introduced in DOM Level ?:
-    interface [
-        Constructor(in [Optional=DefaultIsNullString] DOMString cssValue),
-        ConstructorRaisesException,
-    ] WebKitCSSMatrix {
-
-        // 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;
-
-        void setMatrixValue(in [Optional=DefaultIsUndefined] DOMString string) raises (DOMException);
-        
-        // Multiply this matrix by secondMatrix, on the right (result = this * secondMatrix)
-        [Immutable] WebKitCSSMatrix multiply(in [Optional=DefaultIsUndefined] WebKitCSSMatrix secondMatrix);
-        
-        // Return the inverse of this matrix. Throw an exception if the matrix is not invertible
-        [Immutable] WebKitCSSMatrix inverse() raises (DOMException);
-        
-        // Return this matrix translated by the passed values.
-        // Passing a NaN will use a value of 0. This allows the 3D form to used for 2D operations    
-        [Immutable] WebKitCSSMatrix translate(in [Optional=DefaultIsUndefined] double x, 
-                                              in [Optional=DefaultIsUndefined] double y, 
-                                              in [Optional=DefaultIsUndefined] double z);
-        
-        // Returns this matrix scaled by the passed values.
-        // Passing scaleX or scaleZ as NaN uses a value of 1, but passing scaleY of NaN 
-        // makes it the same as scaleX. This allows the 3D form to used for 2D operations
-        [Immutable] WebKitCSSMatrix scale(in [Optional=DefaultIsUndefined] double scaleX, 
-                                          in [Optional=DefaultIsUndefined] double scaleY, 
-                                          in [Optional=DefaultIsUndefined] double scaleZ);
-        
-        // Returns this matrix rotated by the passed values.
-        // If rotY and rotZ are NaN, rotate about Z (rotX=0, rotateY=0, rotateZ=rotX).
-        // Otherwise use a rotation value of 0 for any passed NaN.    
-        [Immutable] WebKitCSSMatrix rotate(in [Optional=DefaultIsUndefined] double rotX, 
-                                           in [Optional=DefaultIsUndefined] double rotY, 
-                                           in [Optional=DefaultIsUndefined] double rotZ);
-        
-        // Returns this matrix rotated about the passed axis by the passed angle.
-        // Passing a NaN will use a value of 0. If the axis is (0,0,0) use a value
-        // of (0,0,1).
-        [Immutable] WebKitCSSMatrix rotateAxisAngle(in [Optional=DefaultIsUndefined] double x, 
-                                                    in [Optional=DefaultIsUndefined] double y, 
-                                                    in [Optional=DefaultIsUndefined] double z, 
-                                                    in [Optional=DefaultIsUndefined] double angle);
-
-        // Returns this matrix skewed along the X axis by the passed values.
-        // Passing a NaN will use a value of 0.
-        [Immutable] WebKitCSSMatrix skewX(in [Optional=DefaultIsUndefined] double angle);
-
-        // Returns this matrix skewed along the Y axis by the passed values.
-        // Passing a NaN will use a value of 0.
-        [Immutable] WebKitCSSMatrix skewY(in [Optional=DefaultIsUndefined] double angle);
-
-        [NotEnumerable] DOMString toString();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSRegionRule.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSRegionRule.idl
deleted file mode 100644
index ec3e6d5..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSRegionRule.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.
- */
-
-module css {
-
-    interface [
-        Conditional=CSS_REGIONS,
-    ] WebKitCSSRegionRule : CSSRule {
-        readonly attribute CSSRuleList cssRules;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/css/WebKitCSSTransformValue.idl b/elemental/idl/third_party/WebCore/css/WebKitCSSTransformValue.idl
deleted file mode 100644
index 92fde1d..0000000
--- a/elemental/idl/third_party/WebCore/css/WebKitCSSTransformValue.idl
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module css {
-
-    interface [
-            IndexedGetter,
-            DoNotCheckConstants
-    ] WebKitCSSTransformValue : 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;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Attr.idl b/elemental/idl/third_party/WebCore/dom/Attr.idl
deleted file mode 100644
index 3008967..0000000
--- a/elemental/idl/third_party/WebCore/dom/Attr.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateToNativeObject
-    ] Attr : Node {
-
-        // DOM Level 1
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString name;
-
-        readonly attribute boolean specified;
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString value 
-                     setter raises(DOMException);
-
-        // DOM Level 2
-
-        readonly attribute Element ownerElement;
-
-        // DOM Level 3
-
-        readonly attribute boolean isId;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // This extension is no longer needed, but it has to remain available in Objective C, as it's public API.
-        readonly attribute CSSStyleDeclaration style;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/BeforeLoadEvent.idl b/elemental/idl/third_party/WebCore/dom/BeforeLoadEvent.idl
deleted file mode 100644
index 08dfbbb..0000000
--- a/elemental/idl/third_party/WebCore/dom/BeforeLoadEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE, 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. 
- *
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event
-    ] BeforeLoadEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString url;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/CDATASection.idl b/elemental/idl/third_party/WebCore/dom/CDATASection.idl
deleted file mode 100644
index 70a4f55..0000000
--- a/elemental/idl/third_party/WebCore/dom/CDATASection.idl
+++ /dev/null
@@ -1,25 +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.
- */
-
-module core {
-
-    interface CDATASection : Text {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/CharacterData.idl b/elemental/idl/third_party/WebCore/dom/CharacterData.idl
deleted file mode 100644
index 2bb3d4e..0000000
--- a/elemental/idl/third_party/WebCore/dom/CharacterData.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface CharacterData : Node {
-
-        attribute [TreatNullAs=NullString] DOMString data
-            setter raises(DOMException);
-
-        readonly attribute unsigned long length;
-        
-        [TreatReturnedNullStringAs=Null, ObjCLegacyUnnamedParameters] DOMString substringData(in [IsIndex,Optional=DefaultIsUndefined] unsigned long offset, 
-                                                                         in [IsIndex,Optional=DefaultIsUndefined] unsigned long length)
-            raises(DOMException);
-
-        void appendData(in [Optional=DefaultIsUndefined] DOMString data)
-            raises(DOMException);
-
-        [ObjCLegacyUnnamedParameters] void insertData(in [IsIndex,Optional=DefaultIsUndefined] unsigned long offset, 
-                                       in [Optional=DefaultIsUndefined] DOMString data)
-            raises(DOMException);
-
-        [ObjCLegacyUnnamedParameters] void deleteData(in [IsIndex,Optional=DefaultIsUndefined] unsigned long offset, 
-                                       in [IsIndex,Optional=DefaultIsUndefined] unsigned long length)
-            raises(DOMException);
-
-        [ObjCLegacyUnnamedParameters] void replaceData(in [IsIndex,Optional=DefaultIsUndefined] unsigned long offset, 
-                                        in [IsIndex,Optional=DefaultIsUndefined] unsigned long length,
-                                        in [Optional=DefaultIsUndefined] DOMString data)
-            raises(DOMException);
-    
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ClientRect.idl b/elemental/idl/third_party/WebCore/dom/ClientRect.idl
deleted file mode 100644
index 7dbdd68..0000000
--- a/elemental/idl/third_party/WebCore/dom/ClientRect.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
- */
-
-module view {
-
-    interface ClientRect {
-        readonly attribute float top;
-        readonly attribute float right;
-        readonly attribute float bottom;
-        readonly attribute float left;
-        readonly attribute float width;
-        readonly attribute float height;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ClientRectList.idl b/elemental/idl/third_party/WebCore/dom/ClientRectList.idl
deleted file mode 100644
index 02f055e..0000000
--- a/elemental/idl/third_party/WebCore/dom/ClientRectList.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
- */
-
-module view {
-
-    interface [
-        IndexedGetter
-    ] ClientRectList {
-        readonly attribute unsigned long length;
-        ClientRect item(in [IsIndex,Optional=DefaultIsUndefined] unsigned long index);
-        // FIXME: Fix list behavior to allow custom exceptions to be thrown.
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Clipboard.idl b/elemental/idl/third_party/WebCore/dom/Clipboard.idl
deleted file mode 100644
index c94621b..0000000
--- a/elemental/idl/third_party/WebCore/dom/Clipboard.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module core {
-
-    interface Clipboard {
-                 attribute [TreatReturnedNullStringAs=Undefined] DOMString dropEffect;
-                 attribute [TreatReturnedNullStringAs=Undefined] DOMString effectAllowed;
-        readonly attribute [CustomGetter] Array types;
-        readonly attribute FileList files;
-
-        [Custom] void clearData(in [Optional] DOMString type)
-            raises(DOMException);
-        DOMString getData(in DOMString type);
-        boolean setData(in DOMString type, in DOMString data);
-        [Custom] void setDragImage(in HTMLImageElement image, in long x, in long y)
-            raises(DOMException);
-
-        readonly attribute [Conditional=DATA_TRANSFER_ITEMS, V8EnabledAtRuntime=DataTransferItems] DataTransferItemList items;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Comment.idl b/elemental/idl/third_party/WebCore/dom/Comment.idl
deleted file mode 100644
index b9f4e31..0000000
--- a/elemental/idl/third_party/WebCore/dom/Comment.idl
+++ /dev/null
@@ -1,25 +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.
- */
-
-module core {
-
-    interface Comment : CharacterData {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/CompositionEvent.idl b/elemental/idl/third_party/WebCore/dom/CompositionEvent.idl
deleted file mode 100644
index f66ed5a..0000000
--- a/elemental/idl/third_party/WebCore/dom/CompositionEvent.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module events {
-
-    // Introduced in DOM Level 3:
-    interface CompositionEvent : UIEvent {
-
-        readonly attribute DOMString data;
-
-        void initCompositionEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                                  in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                                  in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                                  in [Optional=DefaultIsUndefined] DOMWindow viewArg, 
-                                  in [Optional=DefaultIsUndefined] DOMString dataArg);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/CustomEvent.idl b/elemental/idl/third_party/WebCore/dom/CustomEvent.idl
deleted file mode 100644
index 9158d58..0000000
--- a/elemental/idl/third_party/WebCore/dom/CustomEvent.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module events {
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-    // Introduced in DOM Level 3:
-    interface [
-        ConstructorTemplate=Event
-    ] CustomEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMObject detail;
-
-        void initCustomEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                             in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                             in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                             in [Optional=DefaultIsUndefined] DOMObject detailArg);
-    };
-#endif
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DOMCoreException.idl b/elemental/idl/third_party/WebCore/dom/DOMCoreException.idl
deleted file mode 100644
index 387bb6b..0000000
--- a/elemental/idl/third_party/WebCore/dom/DOMCoreException.idl
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    exception [
-        JSNoStaticTables,
-        DoNotCheckConstants,
-        InterfaceName=DOMException
-    ] DOMCoreException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // ExceptionCode
-        const unsigned short      INDEX_SIZE_ERR                 = 1;
-        const unsigned short      DOMSTRING_SIZE_ERR             = 2;
-        const unsigned short      HIERARCHY_REQUEST_ERR          = 3;
-        const unsigned short      WRONG_DOCUMENT_ERR             = 4;
-        const unsigned short      INVALID_CHARACTER_ERR          = 5;
-        const unsigned short      NO_DATA_ALLOWED_ERR            = 6;
-        const unsigned short      NO_MODIFICATION_ALLOWED_ERR    = 7;
-        const unsigned short      NOT_FOUND_ERR                  = 8;
-        const unsigned short      NOT_SUPPORTED_ERR              = 9;
-        const unsigned short      INUSE_ATTRIBUTE_ERR            = 10;
-        // Introduced in DOM Level 2:
-        const unsigned short      INVALID_STATE_ERR              = 11;
-        // Introduced in DOM Level 2:
-        const unsigned short      SYNTAX_ERR                     = 12;
-        // Introduced in DOM Level 2:
-        const unsigned short      INVALID_MODIFICATION_ERR       = 13;
-        // Introduced in DOM Level 2:
-        const unsigned short      NAMESPACE_ERR                  = 14;
-        // Introduced in DOM Level 2:
-        const unsigned short      INVALID_ACCESS_ERR             = 15;
-        // Introduced in DOM Level 3:
-        const unsigned short      VALIDATION_ERR                 = 16;
-        // Introduced in DOM Level 3:
-        const unsigned short      TYPE_MISMATCH_ERR              = 17;
-        // Introduced as an XHR extension:
-        const unsigned short      SECURITY_ERR                   = 18;
-        // Introduced in HTML5:
-        const unsigned short      NETWORK_ERR                    = 19;
-        const unsigned short      ABORT_ERR                      = 20;
-        const unsigned short      URL_MISMATCH_ERR               = 21;
-        const unsigned short      QUOTA_EXCEEDED_ERR             = 22;
-        // TIMEOUT_ERR is currently unused but was added for completeness.
-        const unsigned short      TIMEOUT_ERR                    = 23;
-        // INVALID_NODE_TYPE_ERR is currently unused but was added for completeness.
-        const unsigned short      INVALID_NODE_TYPE_ERR          = 24;
-        const unsigned short      DATA_CLONE_ERR                 = 25;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DOMError.idl b/elemental/idl/third_party/WebCore/dom/DOMError.idl
deleted file mode 100644
index ee059d4..0000000
--- a/elemental/idl/third_party/WebCore/dom/DOMError.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-  interface [
-    ] DOMError {
-        readonly attribute DOMString name;
-  };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DOMImplementation.idl b/elemental/idl/third_party/WebCore/dom/DOMImplementation.idl
deleted file mode 100644
index cd57099..0000000
--- a/elemental/idl/third_party/WebCore/dom/DOMImplementation.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSGenerateIsReachable=ImplDocument,
-        V8DependentLifetime
-    ] DOMImplementation {
-
-        // DOM Level 1
-
-        [ObjCLegacyUnnamedParameters] boolean hasFeature(in [Optional=DefaultIsUndefined] DOMString feature, 
-                                          in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString version);
-
-        // DOM Level 2
-
-        [ObjCLegacyUnnamedParameters] DocumentType createDocumentType(in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString qualifiedName,
-                                                       in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString publicId,
-                                                       in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString systemId)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters] Document createDocument(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI, 
-                                               in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString qualifiedName, 
-                                               in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DocumentType doctype)
-            raises(DOMException);
-
-        // DOMImplementationCSS interface from DOM Level 2 CSS
-
-        [ObjCLegacyUnnamedParameters] CSSStyleSheet createCSSStyleSheet(in [Optional=DefaultIsUndefined] DOMString title,
-                                                         in [Optional=DefaultIsUndefined] DOMString media)
-            raises(DOMException);
-
-        // HTMLDOMImplementation interface from DOM Level 2 HTML
-
-        HTMLDocument createHTMLDocument(in [Optional=DefaultIsUndefined] DOMString title);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DOMStringList.idl b/elemental/idl/third_party/WebCore/dom/DOMStringList.idl
deleted file mode 100644
index 8f059ae..0000000
--- a/elemental/idl/third_party/WebCore/dom/DOMStringList.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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.
- */
-
-module core {
-
-    interface [
-        IndexedGetter
-    ] DOMStringList {
-        readonly attribute unsigned long length;
-        [TreatReturnedNullStringAs=Null] DOMString item(in [IsIndex,Optional=DefaultIsUndefined] unsigned long index);
-        boolean contains(in [Optional=DefaultIsUndefined] DOMString string);
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/dom/DOMStringMap.idl b/elemental/idl/third_party/WebCore/dom/DOMStringMap.idl
deleted file mode 100644
index 980d044..0000000
--- a/elemental/idl/third_party/WebCore/dom/DOMStringMap.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 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. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        JSGenerateIsReachable=ImplElementRoot,
-        NamedGetter,
-        CustomDeleteProperty,
-        CustomEnumerateProperty,
-        CustomNamedSetter,
-        V8CustomToJSObject
-    ] DOMStringMap {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DataTransferItem.idl b/elemental/idl/third_party/WebCore/dom/DataTransferItem.idl
deleted file mode 100644
index 0dad338..0000000
--- a/elemental/idl/third_party/WebCore/dom/DataTransferItem.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=DATA_TRANSFER_ITEMS,
-    ] DataTransferItem {
-        readonly attribute DOMString kind;
-        readonly attribute DOMString type;
-
-        void getAsString(in [Callback,Optional=DefaultIsUndefined] StringCallback callback);
-        Blob getAsFile();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DataTransferItemList.idl b/elemental/idl/third_party/WebCore/dom/DataTransferItemList.idl
deleted file mode 100644
index d1de50e..0000000
--- a/elemental/idl/third_party/WebCore/dom/DataTransferItemList.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=DATA_TRANSFER_ITEMS,
-        IndexedGetter,
-        JSGenerateToNativeObject,
-#if defined(V8_BINDING) && V8_BINDING
-        CustomDeleteProperty,
-#endif
-    ] DataTransferItemList {
-        readonly attribute long length;
-        DataTransferItem item(in [Optional=DefaultIsUndefined] unsigned long index);
-
-        void clear();
-        void add(in File file);
-        void add(in [Optional=DefaultIsUndefined] DOMString data, 
-                 in [Optional=DefaultIsUndefined] DOMString type) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DeviceMotionEvent.idl b/elemental/idl/third_party/WebCore/dom/DeviceMotionEvent.idl
deleted file mode 100644
index bb55f7c..0000000
--- a/elemental/idl/third_party/WebCore/dom/DeviceMotionEvent.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module core {
-
-    interface [
-        Conditional=DEVICE_ORIENTATION,
-    ] DeviceMotionEvent : Event {
-        readonly attribute [Custom] Acceleration acceleration;
-        readonly attribute [Custom] Acceleration accelerationIncludingGravity;
-        readonly attribute [Custom] RotationRate rotationRate;
-        readonly attribute [Custom] double interval;
-        [Custom] void initDeviceMotionEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                            in [Optional=DefaultIsUndefined] boolean bubbles, 
-                                            in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                            in [Optional=DefaultIsUndefined] Acceleration acceleration, 
-                                            in [Optional=DefaultIsUndefined] Acceleration accelerationIncludingGravity, 
-                                            in [Optional=DefaultIsUndefined] RotationRate rotationRate, 
-                                            in [Optional=DefaultIsUndefined] double interval);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DeviceOrientationEvent.idl b/elemental/idl/third_party/WebCore/dom/DeviceOrientationEvent.idl
deleted file mode 100644
index aed38ff..0000000
--- a/elemental/idl/third_party/WebCore/dom/DeviceOrientationEvent.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 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.
- */
-
-module core {
-
-    interface [
-        Conditional=DEVICE_ORIENTATION,
-    ] DeviceOrientationEvent : Event {
-        readonly attribute [Custom] double alpha;
-        readonly attribute [Custom] double beta;
-        readonly attribute [Custom] double gamma;
-        readonly attribute [Custom] boolean absolute;
-        [Custom] void initDeviceOrientationEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                                 in [Optional=DefaultIsUndefined] boolean bubbles, 
-                                                 in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                                 in [Optional=DefaultIsUndefined] double alpha, 
-                                                 in [Optional=DefaultIsUndefined] double beta, 
-                                                 in [Optional=DefaultIsUndefined] double gamma,
-                                                 in [Optional=DefaultIsUndefined] boolean absolute);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Document.idl b/elemental/idl/third_party/WebCore/dom/Document.idl
deleted file mode 100644
index b922ca6..0000000
--- a/elemental/idl/third_party/WebCore/dom/Document.idl
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2006, 2007 Samuel Weinig <sam@webkit.org>
- *
- * 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.
- */
-
-module core {
-
-    interface [
-        CustomToJSObject,
-        JSGenerateToNativeObject,
-        JSInlineGetOwnPropertySlot
-    ] Document : Node {
-
-        // DOM Level 1 Core
-        readonly attribute DocumentType doctype;
-        readonly attribute DOMImplementation implementation;
-        readonly attribute Element documentElement;
-
-        [ReturnNewObject] Element createElement(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString tagName)
-            raises (DOMException);
-        DocumentFragment   createDocumentFragment();
-        [ReturnNewObject] Text createTextNode(in [Optional=DefaultIsUndefined] DOMString data);
-        [ReturnNewObject] Comment createComment(in [Optional=DefaultIsUndefined] DOMString data);
-        [ReturnNewObject] CDATASection createCDATASection(in [Optional=DefaultIsUndefined] DOMString data)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters, ReturnNewObject] ProcessingInstruction createProcessingInstruction(in [Optional=DefaultIsUndefined] DOMString target,
-                                                                                     in [Optional=DefaultIsUndefined] DOMString data)
-            raises (DOMException);
-        [ReturnNewObject] Attr createAttribute(in [Optional=DefaultIsUndefined] DOMString name)
-            raises (DOMException);
-        [ReturnNewObject] EntityReference createEntityReference(in [Optional=DefaultIsUndefined] DOMString name)
-            raises(DOMException);
-        NodeList           getElementsByTagName(in [Optional=DefaultIsUndefined] DOMString tagname);
-
-        // Introduced in DOM Level 2:
-
-        [ObjCLegacyUnnamedParameters, ReturnNewObject] Node importNode(in [Optional=DefaultIsUndefined] Node importedNode,
-                                                   in [Optional] boolean deep)
-            raises (DOMException);
-        [ObjCLegacyUnnamedParameters, ReturnNewObject] Element createElementNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                                           in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString qualifiedName)
-            raises (DOMException);
-        [ObjCLegacyUnnamedParameters, ReturnNewObject] Attr createAttributeNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                                          in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString qualifiedName)
-            raises (DOMException);
-        [ObjCLegacyUnnamedParameters] NodeList getElementsByTagNameNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                                       in [Optional=DefaultIsUndefined] DOMString localName);
-        Element            getElementById(in [Optional=DefaultIsUndefined] DOMString elementId);
-
-        // DOM Level 3 Core
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString inputEncoding;
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString xmlEncoding;
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString xmlVersion
-                    setter raises (DOMException);
-                 attribute boolean xmlStandalone
-                    setter raises (DOMException);
-
-        Node               adoptNode(in [Optional=DefaultIsUndefined] Node source)
-            raises (DOMException);
-
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString documentURI;
-
-        // DOM Level 2 Events (DocumentEvents interface)
-
-        Event              createEvent(in [Optional=DefaultIsUndefined] DOMString eventType)
-            raises(DOMException);
-
-        // DOM Level 2 Tranversal and Range (DocumentRange interface)
-
-        Range              createRange();
-
-        // DOM Level 2 Tranversal and Range (DocumentTraversal interface)
-
-        [ObjCLegacyUnnamedParameters] NodeIterator createNodeIterator(in [Optional=DefaultIsUndefined] Node root,
-                                                       in [Optional=DefaultIsUndefined] unsigned long whatToShow,
-                                                       in [Optional=DefaultIsUndefined] NodeFilter filter,
-                                                       in [Optional=DefaultIsUndefined] boolean expandEntityReferences)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters] TreeWalker createTreeWalker(in [Optional=DefaultIsUndefined] Node root,
-                                                   in [Optional=DefaultIsUndefined] unsigned long whatToShow,
-                                                   in [Optional=DefaultIsUndefined] NodeFilter filter,
-                                                   in [Optional=DefaultIsUndefined] boolean expandEntityReferences)
-            raises(DOMException);
-
-        // DOM Level 2 Abstract Views (DocumentView interface)
-
-        readonly attribute DOMWindow defaultView;
-
-        // DOM Level 2 Style (DocumentStyle interface)
-
-        readonly attribute StyleSheetList styleSheets;
-
-        // DOM Level 2 Style (DocumentCSS interface)
-
-        [ObjCLegacyUnnamedParameters] CSSStyleDeclaration getOverrideStyle(in [Optional=DefaultIsUndefined] Element element,
-                                                            in [Optional=DefaultIsUndefined] DOMString pseudoElement);
-
-        // DOM Level 3 XPath (XPathEvaluator interface)
-        [ObjCLegacyUnnamedParameters] XPathExpression createExpression(in [Optional=DefaultIsUndefined] DOMString expression,
-                                                        in [Optional=DefaultIsUndefined] XPathNSResolver resolver)
-            raises(DOMException);
-        XPathNSResolver    createNSResolver(in Node nodeResolver);
-        [ObjCLegacyUnnamedParameters, V8Custom] XPathResult evaluate(in [Optional=DefaultIsUndefined] DOMString expression,
-                                                      in [Optional=DefaultIsUndefined] Node contextNode,
-                                                      in [Optional=DefaultIsUndefined] XPathNSResolver resolver,
-                                                      in [Optional=DefaultIsUndefined] unsigned short type,
-                                                      in [Optional=DefaultIsUndefined] XPathResult inResult)
-            raises(DOMException);
-
-        // Common extensions
-
-        boolean            execCommand(in [Optional=DefaultIsUndefined] DOMString command,
-                                       in [Optional=DefaultIsUndefined] boolean userInterface,
-                                       in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString value);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // FIXME: remove the these two versions once [Optional] is implemented for Objective-C.
-        boolean            execCommand(in DOMString command,
-                                       in boolean userInterface);
-        boolean            execCommand(in DOMString command);
-#endif
-
-        boolean            queryCommandEnabled(in [Optional=DefaultIsUndefined] DOMString command);
-        boolean            queryCommandIndeterm(in [Optional=DefaultIsUndefined] DOMString command);
-        boolean            queryCommandState(in [Optional=DefaultIsUndefined] DOMString command);
-        boolean            queryCommandSupported(in [Optional=DefaultIsUndefined] DOMString command);
-        DOMString          queryCommandValue(in [Optional=DefaultIsUndefined] DOMString command);
-
-        // Moved down from HTMLDocument
-
-                 attribute [TreatNullAs=NullString] DOMString title;
-        readonly attribute DOMString referrer;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-                 attribute [TreatNullAs=NullString] DOMString domain
-                     setter raises (DOMException);
-#else
-        readonly attribute DOMString domain;
-#endif
-        readonly attribute DOMString URL;
-
-                 attribute [TreatNullAs=NullString] DOMString cookie
-                     setter raises (DOMException),
-                     getter raises (DOMException);
-
-        // FIXME: the DOM spec does NOT have this attribute
-        // raising an exception.
-                 attribute HTMLElement body
-                     setter raises (DOMException);
-
-        readonly attribute HTMLHeadElement head;
-        readonly attribute HTMLCollection images;
-        readonly attribute HTMLCollection applets;
-        readonly attribute HTMLCollection links;
-        readonly attribute HTMLCollection forms;
-        readonly attribute HTMLCollection anchors;
-        readonly attribute DOMString lastModified;
-
-        NodeList getElementsByName(in [Optional=DefaultIsUndefined] DOMString elementName);
-
-#if defined(ENABLE_MICRODATA) && ENABLE_MICRODATA
-        NodeList getItems(in [TreatNullAs=NullString, TreatUndefinedAs=NullString, Optional=DefaultIsUndefined] DOMString typeNames);
-#endif
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-                 attribute [Custom] Location location;
-#endif
-
-        // IE extensions
-
-                 attribute [TreatReturnedNullStringAs=Undefined, TreatNullAs=NullString] DOMString charset;
-        readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString defaultCharset;
-        readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString readyState;
-
-        Element            elementFromPoint(in [Optional=DefaultIsUndefined] long x, 
-                                            in [Optional=DefaultIsUndefined] long y);
-        Range              caretRangeFromPoint(in [Optional=DefaultIsUndefined] long x, 
-                                               in [Optional=DefaultIsUndefined] long y);
-
-        // Mozilla extensions
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        DOMSelection       getSelection();
-#endif
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString characterSet;
-
-        // WebKit extensions
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString preferredStylesheetSet;
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString selectedStylesheetSet;
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        CSSStyleDeclaration createCSSStyleDeclaration();
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // DOM Level 2 Style Interface
-        [ObjCLegacyUnnamedParameters, ObjCUseDefaultView] CSSStyleDeclaration getComputedStyle(in Element element,
-                                                                      in DOMString pseudoElement);
-
-        // WebKit extension
-        // FIXME: remove the first version once [Optional] is implemented for Objective-C.
-        [ObjCUseDefaultView] CSSRuleList getMatchedCSSRules(in Element element,
-                                                  in DOMString pseudoElement);
-        [ObjCUseDefaultView] CSSRuleList getMatchedCSSRules(in Element element,
-                                                  in DOMString pseudoElement,
-                                                  in [Optional] boolean authorOnly);
-                                                  
-#endif
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        [V8Custom] DOMObject getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);
-#endif
-#endif
-
-        // HTML 5
-        NodeList getElementsByClassName(in [Optional=DefaultIsUndefined] DOMString tagname);
-
-        readonly attribute DOMString compatMode;
-
-        // NodeSelector - Selector API
-        Element querySelector(in DOMString selectors)
-            raises(DOMException);
-        NodeList querySelectorAll(in DOMString selectors)
-            raises(DOMException);
-
-#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
-        // Mozilla version
-        readonly attribute [V8EnabledAtRuntime] boolean webkitIsFullScreen;
-        readonly attribute [V8EnabledAtRuntime] boolean webkitFullScreenKeyboardInputAllowed;
-        readonly attribute [V8EnabledAtRuntime] Element webkitCurrentFullScreenElement;
-        [V8EnabledAtRuntime] void webkitCancelFullScreen();
-
-        // W3C version
-        readonly attribute [V8EnabledAtRuntime] boolean webkitFullscreenEnabled;
-        readonly attribute [V8EnabledAtRuntime] Element webkitFullscreenElement;
-        [V8EnabledAtRuntime] void webkitExitFullscreen();
-#endif
-
-#if defined(ENABLE_CSS_REGIONS) && ENABLE_CSS_REGIONS
-        WebKitNamedFlow webkitGetFlowByName(in DOMString name);
-#endif
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // Event handler DOM attributes
-        attribute [NotEnumerable] EventListener onabort;
-        attribute [NotEnumerable] EventListener onblur;
-        attribute [NotEnumerable] EventListener onchange;
-        attribute [NotEnumerable] EventListener onclick;
-        attribute [NotEnumerable] EventListener oncontextmenu;
-        attribute [NotEnumerable] EventListener ondblclick;
-        attribute [NotEnumerable] EventListener ondrag;
-        attribute [NotEnumerable] EventListener ondragend;
-        attribute [NotEnumerable] EventListener ondragenter;
-        attribute [NotEnumerable] EventListener ondragleave;
-        attribute [NotEnumerable] EventListener ondragover;
-        attribute [NotEnumerable] EventListener ondragstart;
-        attribute [NotEnumerable] EventListener ondrop;
-        attribute [NotEnumerable] EventListener onerror;
-        attribute [NotEnumerable] EventListener onfocus;
-        attribute [NotEnumerable] EventListener oninput;
-        attribute [NotEnumerable] EventListener oninvalid;
-        attribute [NotEnumerable] EventListener onkeydown;
-        attribute [NotEnumerable] EventListener onkeypress;
-        attribute [NotEnumerable] EventListener onkeyup;
-        attribute [NotEnumerable] EventListener onload;
-        attribute [NotEnumerable] EventListener onmousedown;
-        attribute [NotEnumerable] EventListener onmousemove;
-        attribute [NotEnumerable] EventListener onmouseout;
-        attribute [NotEnumerable] EventListener onmouseover;
-        attribute [NotEnumerable] EventListener onmouseup;
-        attribute [NotEnumerable] EventListener onmousewheel;
-        attribute [NotEnumerable] EventListener onreadystatechange;
-        attribute [NotEnumerable] EventListener onscroll;
-        attribute [NotEnumerable] EventListener onselect;
-        attribute [NotEnumerable] EventListener onsubmit;
-
-        // attribute [NotEnumerable] EventListener oncanplay;
-        // attribute [NotEnumerable] EventListener oncanplaythrough;
-        // attribute [NotEnumerable] EventListener ondurationchange;
-        // attribute [NotEnumerable] EventListener onemptied;
-        // attribute [NotEnumerable] EventListener onended;
-        // attribute [NotEnumerable] EventListener onloadeddata;
-        // attribute [NotEnumerable] EventListener onloadedmetadata;
-        // attribute [NotEnumerable] EventListener onloadstart;
-        // attribute [NotEnumerable] EventListener onpause;
-        // attribute [NotEnumerable] EventListener onplay;
-        // attribute [NotEnumerable] EventListener onplaying;
-        // attribute [NotEnumerable] EventListener onprogress;
-        // attribute [NotEnumerable] EventListener onratechange;
-        // attribute [NotEnumerable] EventListener onseeked;
-        // attribute [NotEnumerable] EventListener onseeking;
-        // attribute [NotEnumerable] EventListener onshow;
-        // attribute [NotEnumerable] EventListener onstalled;
-        // attribute [NotEnumerable] EventListener onsuspend;
-        // attribute [NotEnumerable] EventListener ontimeupdate;
-        // attribute [NotEnumerable] EventListener onvolumechange;
-        // attribute [NotEnumerable] EventListener onwaiting;
-
-        // WebKit extensions
-        attribute [NotEnumerable] EventListener onbeforecut;
-        attribute [NotEnumerable] EventListener oncut;
-        attribute [NotEnumerable] EventListener onbeforecopy;
-        attribute [NotEnumerable] EventListener oncopy;
-        attribute [NotEnumerable] EventListener onbeforepaste;
-        attribute [NotEnumerable] EventListener onpaste;
-        attribute [NotEnumerable] EventListener onreset;
-        attribute [NotEnumerable] EventListener onsearch;
-        attribute [NotEnumerable] EventListener onselectstart;
-        attribute [NotEnumerable] EventListener onselectionchange;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchstart;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchmove;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchend;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchcancel;
-        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenchange;
-        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenerror;
-#endif
-
-#if defined(ENABLE_TOUCH_EVENTS) && ENABLE_TOUCH_EVENTS
-        [ReturnNewObject, V8EnabledAtRuntime] Touch createTouch(in [Optional=DefaultIsUndefined] DOMWindow window,
-                                                         in [Optional=DefaultIsUndefined] EventTarget target,
-                                                         in [Optional=DefaultIsUndefined] long identifier,
-                                                         in [Optional=DefaultIsUndefined] long pageX,
-                                                         in [Optional=DefaultIsUndefined] long pageY,
-                                                         in [Optional=DefaultIsUndefined] long screenX,
-                                                         in [Optional=DefaultIsUndefined] long screenY,
-                                                         in [Optional=DefaultIsUndefined] long webkitRadiusX,
-                                                         in [Optional=DefaultIsUndefined] long webkitRadiusY,
-                                                         in [Optional=DefaultIsUndefined] float webkitRotationAngle,
-                                                         in [Optional=DefaultIsUndefined] float webkitForce)
-            raises (DOMException);
-        [ReturnNewObject, V8EnabledAtRuntime, Custom] TouchList createTouchList()
-            raises (DOMException);
-#endif
-
-#if defined(LANGUAGE_CPP) && LANGUAGE_CPP
-        // Extra WebCore methods exposed to allow compile-time casting in C++
-        boolean isHTMLDocument();
-#endif
-
-        // Page visibility API.
-        readonly attribute [Conditional=PAGE_VISIBILITY_API] DOMString webkitVisibilityState;
-        readonly attribute [Conditional=PAGE_VISIBILITY_API] boolean webkitHidden;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DocumentFragment.idl b/elemental/idl/third_party/WebCore/dom/DocumentFragment.idl
deleted file mode 100644
index 882b62d..0000000
--- a/elemental/idl/third_party/WebCore/dom/DocumentFragment.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface DocumentFragment : Node {
-        // NodeSelector - Selector API
-        Element querySelector(in DOMString selectors)
-            raises(DOMException);
-        NodeList querySelectorAll(in DOMString selectors)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/DocumentType.idl b/elemental/idl/third_party/WebCore/dom/DocumentType.idl
deleted file mode 100644
index 7290232..0000000
--- a/elemental/idl/third_party/WebCore/dom/DocumentType.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSGenerateToNativeObject
-    ] DocumentType : Node {
-
-        // DOM Level 1
-
-        readonly attribute DOMString name;
-        readonly attribute NamedNodeMap entities;
-        readonly attribute NamedNodeMap notations;
-
-        // DOM Level 2
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString publicId;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString systemId;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString internalSubset;        
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Element.idl b/elemental/idl/third_party/WebCore/dom/Element.idl
deleted file mode 100644
index 955bd47..0000000
--- a/elemental/idl/third_party/WebCore/dom/Element.idl
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSGenerateToNativeObject,
-        JSInlineGetOwnPropertySlot
-    ] Element : Node {
-
-        // DOM Level 1 Core
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString tagName;
-
-        [TreatReturnedNullStringAs=Null] DOMString getAttribute(in [Optional=DefaultIsUndefined] DOMString name);
-        [ObjCLegacyUnnamedParameters] void setAttribute(in [Optional=DefaultIsUndefined] DOMString name,
-                                         in [Optional=DefaultIsUndefined] DOMString value)
-            raises(DOMException);
-        void removeAttribute(in [Optional=DefaultIsUndefined] DOMString name);
-        Attr getAttributeNode(in [Optional=DefaultIsUndefined] DOMString name);
-        Attr setAttributeNode(in [Optional=DefaultIsUndefined] Attr newAttr)
-            raises(DOMException);
-        Attr removeAttributeNode(in [Optional=DefaultIsUndefined] Attr oldAttr)
-            raises(DOMException);
-        NodeList getElementsByTagName(in [Optional=DefaultIsUndefined] DOMString name);
-
-        // DOM Level 2 Core
-
-        [ObjCLegacyUnnamedParameters] DOMString getAttributeNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                                in [Optional=DefaultIsUndefined] DOMString localName);
-        [ObjCLegacyUnnamedParameters] void setAttributeNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                           in [Optional=DefaultIsUndefined] DOMString qualifiedName, 
-                                           in [Optional=DefaultIsUndefined] DOMString value)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters] void removeAttributeNS(in [TreatNullAs=NullString] DOMString namespaceURI,
-                                              in DOMString localName);
-        [ObjCLegacyUnnamedParameters] NodeList getElementsByTagNameNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                                       in [Optional=DefaultIsUndefined] DOMString localName);
-        [ObjCLegacyUnnamedParameters] Attr getAttributeNodeNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                               in [Optional=DefaultIsUndefined] DOMString localName);
-        Attr setAttributeNodeNS(in [Optional=DefaultIsUndefined] Attr newAttr)
-            raises(DOMException);
-        boolean hasAttribute(in DOMString name);
-        [ObjCLegacyUnnamedParameters] boolean hasAttributeNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                              in [Optional=DefaultIsUndefined] DOMString localName);
-
-        readonly attribute CSSStyleDeclaration style;
-
-        // Common extensions
-
-        readonly attribute long offsetLeft;
-        readonly attribute long offsetTop;
-        readonly attribute long offsetWidth;
-        readonly attribute long offsetHeight;
-        readonly attribute Element offsetParent;
-        readonly attribute long clientLeft;
-        readonly attribute long clientTop;
-        readonly attribute long clientWidth;
-        readonly attribute long clientHeight;
-                 attribute long scrollLeft;
-                 attribute long scrollTop;
-        readonly attribute long scrollWidth;
-        readonly attribute long scrollHeight;
-
-        void focus();
-        void blur();
-        void scrollIntoView(in [Optional] boolean alignWithTop);
-
-        // WebKit extensions
-
-        void scrollIntoViewIfNeeded(in [Optional] boolean centerIfNeeded);
-        void scrollByLines(in [Optional=DefaultIsUndefined] long lines);
-        void scrollByPages(in [Optional=DefaultIsUndefined] long pages);
-
-#if defined(ENABLE_ANIMATION_API) && ENABLE_ANIMATION_API
-        WebKitAnimationList webkitGetAnimations();
-#endif
-
-        // HTML 5
-        NodeList getElementsByClassName(in [Optional=DefaultIsUndefined] DOMString name);
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        readonly attribute DOMStringMap dataset;
-#endif
-
-        // NodeSelector - Selector API
-        Element querySelector(in DOMString selectors)
-            raises(DOMException);
-        NodeList querySelectorAll(in DOMString selectors)
-            raises(DOMException);
-
-        // WebKit extension, pending specification.
-        boolean webkitMatchesSelector(in [Optional=DefaultIsUndefined] DOMString selectors)
-            raises(DOMException);
-
-        // ElementTraversal API
-        readonly attribute Element firstElementChild;
-        readonly attribute Element lastElementChild;
-        readonly attribute Element previousElementSibling;
-        readonly attribute Element nextElementSibling;
-        readonly attribute unsigned long childElementCount;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // CSSOM View Module API
-        ClientRectList getClientRects();
-        ClientRect getBoundingClientRect();
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extensions
-        readonly attribute DOMString innerText;
-#endif
-
-#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
-        // Mozilla version
-        const unsigned short ALLOW_KEYBOARD_INPUT = 1;
-        [V8EnabledAtRuntime] void webkitRequestFullScreen(in [Optional=DefaultIsUndefined] unsigned short flags);
-
-        // W3C version
-        [V8EnabledAtRuntime] void webkitRequestFullscreen();
-#endif
-
-        // CSS Regions API
-        readonly attribute DOMString webkitRegionOverflow;
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // Event handler DOM attributes
-        attribute [NotEnumerable] EventListener onabort;
-        attribute [NotEnumerable] EventListener onblur;
-        attribute [NotEnumerable] EventListener onchange;
-        attribute [NotEnumerable] EventListener onclick;
-        attribute [NotEnumerable] EventListener oncontextmenu;
-        attribute [NotEnumerable] EventListener ondblclick;
-        attribute [NotEnumerable] EventListener ondrag;
-        attribute [NotEnumerable] EventListener ondragend;
-        attribute [NotEnumerable] EventListener ondragenter;
-        attribute [NotEnumerable] EventListener ondragleave;
-        attribute [NotEnumerable] EventListener ondragover;
-        attribute [NotEnumerable] EventListener ondragstart;
-        attribute [NotEnumerable] EventListener ondrop;
-        attribute [NotEnumerable] EventListener onerror;
-        attribute [NotEnumerable] EventListener onfocus;
-        attribute [NotEnumerable] EventListener oninput;
-        attribute [NotEnumerable] EventListener oninvalid;
-        attribute [NotEnumerable] EventListener onkeydown;
-        attribute [NotEnumerable] EventListener onkeypress;
-        attribute [NotEnumerable] EventListener onkeyup;
-        attribute [NotEnumerable] EventListener onload;
-        attribute [NotEnumerable] EventListener onmousedown;
-        attribute [NotEnumerable] EventListener onmousemove;
-        attribute [NotEnumerable] EventListener onmouseout;
-        attribute [NotEnumerable] EventListener onmouseover;
-        attribute [NotEnumerable] EventListener onmouseup;
-        attribute [NotEnumerable] EventListener onmousewheel;
-        attribute [NotEnumerable] EventListener onscroll;
-        attribute [NotEnumerable] EventListener onselect;
-        attribute [NotEnumerable] EventListener onsubmit;
-
-        // attribute [NotEnumerable] EventListener oncanplay;
-        // attribute [NotEnumerable] EventListener oncanplaythrough;
-        // attribute [NotEnumerable] EventListener ondurationchange;
-        // attribute [NotEnumerable] EventListener onemptied;
-        // attribute [NotEnumerable] EventListener onended;
-        // attribute [NotEnumerable] EventListener onloadeddata;
-        // attribute [NotEnumerable] EventListener onloadedmetadata;
-        // attribute [NotEnumerable] EventListener onloadstart;
-        // attribute [NotEnumerable] EventListener onpause;
-        // attribute [NotEnumerable] EventListener onplay;
-        // attribute [NotEnumerable] EventListener onplaying;
-        // attribute [NotEnumerable] EventListener onprogress;
-        // attribute [NotEnumerable] EventListener onratechange;
-        // attribute [NotEnumerable] EventListener onreadystatechange;
-        // attribute [NotEnumerable] EventListener onseeked;
-        // attribute [NotEnumerable] EventListener onseeking;
-        // attribute [NotEnumerable] EventListener onshow;
-        // attribute [NotEnumerable] EventListener onstalled;
-        // attribute [NotEnumerable] EventListener onsuspend;
-        // attribute [NotEnumerable] EventListener ontimeupdate;
-        // attribute [NotEnumerable] EventListener onvolumechange;
-        // attribute [NotEnumerable] EventListener onwaiting;
-
-        // WebKit extensions
-        attribute [NotEnumerable] EventListener onbeforecut;
-        attribute [NotEnumerable] EventListener oncut;
-        attribute [NotEnumerable] EventListener onbeforecopy;
-        attribute [NotEnumerable] EventListener oncopy;
-        attribute [NotEnumerable] EventListener onbeforepaste;
-        attribute [NotEnumerable] EventListener onpaste;
-        attribute [NotEnumerable] EventListener onreset;
-        attribute [NotEnumerable] EventListener onsearch;
-        attribute [NotEnumerable] EventListener onselectstart;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchstart;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchmove;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchend;
-        attribute [NotEnumerable,Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchcancel;
-        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenchange;
-        attribute [NotEnumerable, Conditional=FULLSCREEN_API] EventListener onwebkitfullscreenerror;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Entity.idl b/elemental/idl/third_party/WebCore/dom/Entity.idl
deleted file mode 100644
index b9ec406..0000000
--- a/elemental/idl/third_party/WebCore/dom/Entity.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface Entity : Node {
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString publicId;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString systemId;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString notationName;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/EntityReference.idl b/elemental/idl/third_party/WebCore/dom/EntityReference.idl
deleted file mode 100644
index f652d9a..0000000
--- a/elemental/idl/third_party/WebCore/dom/EntityReference.idl
+++ /dev/null
@@ -1,25 +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.
- */
-
-module core {
-
-    interface EntityReference : Node {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ErrorEvent.idl b/elemental/idl/third_party/WebCore/dom/ErrorEvent.idl
deleted file mode 100644
index 2a0c2c5..0000000
--- a/elemental/idl/third_party/WebCore/dom/ErrorEvent.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.
- */
-
-module events {
-
-    interface [
-        JSNoStaticTables,
-        ConstructorTemplate=Event
-    ] ErrorEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString message;
-        readonly attribute [InitializedByEventConstructor] DOMString filename;
-        readonly attribute [InitializedByEventConstructor] unsigned long lineno;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Event.idl b/elemental/idl/third_party/WebCore/dom/Event.idl
deleted file mode 100644
index ab039d0..0000000
--- a/elemental/idl/third_party/WebCore/dom/Event.idl
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface [
-        CustomToJSObject,
-        ConstructorTemplate=Event,
-        JSNoStaticTables,
-        ObjCPolymorphic
-    ] Event {
-
-        // DOM PhaseType
-        const unsigned short NONE                = 0;
-        const unsigned short CAPTURING_PHASE     = 1;
-        const unsigned short AT_TARGET           = 2;
-        const unsigned short BUBBLING_PHASE      = 3;
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // Reverse-engineered from Netscape
-        const unsigned short MOUSEDOWN           = 1;
-        const unsigned short MOUSEUP             = 2;
-        const unsigned short MOUSEOVER           = 4;
-        const unsigned short MOUSEOUT            = 8;
-        const unsigned short MOUSEMOVE           = 16;
-        const unsigned short MOUSEDRAG           = 32;
-        const unsigned short CLICK               = 64;
-        const unsigned short DBLCLICK            = 128;
-        const unsigned short KEYDOWN             = 256;
-        const unsigned short KEYUP               = 512;
-        const unsigned short KEYPRESS            = 1024;
-        const unsigned short DRAGDROP            = 2048;
-        const unsigned short FOCUS               = 4096;
-        const unsigned short BLUR                = 8192;
-        const unsigned short SELECT              = 16384;
-        const unsigned short CHANGE              = 32768;
-#endif
-
-        readonly attribute DOMString        type;
-        readonly attribute EventTarget      target;
-        readonly attribute EventTarget      currentTarget;
-        readonly attribute unsigned short   eventPhase;
-        readonly attribute [InitializedByEventConstructor] boolean bubbles;
-        readonly attribute [InitializedByEventConstructor] boolean cancelable;
-        readonly attribute DOMTimeStamp     timeStamp;
-
-        void               stopPropagation();
-        void               preventDefault();
-        [ObjCLegacyUnnamedParameters] void initEvent(in [Optional=DefaultIsUndefined] DOMString eventTypeArg, 
-                                      in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                                      in [Optional=DefaultIsUndefined] boolean cancelableArg);
-
-        // DOM Level 3 Additions.
-        readonly attribute boolean defaultPrevented;
-        void stopImmediatePropagation();
-
-        // IE Extensions
-        readonly attribute EventTarget      srcElement;
-                 attribute boolean          returnValue;
-                 attribute boolean          cancelBubble;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        readonly attribute [Custom] Clipboard        clipboardData;
-#endif
-
-#if defined(LANGUAGE_CPP) && LANGUAGE_CPP
-        // Extra WebCore methods exposed to allow compile-time casting in C++
-        boolean isMouseEvent();
-        boolean isUIEvent();
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/EventException.idl b/elemental/idl/third_party/WebCore/dom/EventException.idl
deleted file mode 100644
index 9d105cb..0000000
--- a/elemental/idl/third_party/WebCore/dom/EventException.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    exception [
-        JSNoStaticTables,
-        DoNotCheckConstants
-    ] EventException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // EventExceptionCode
-        const unsigned short UNSPECIFIED_EVENT_TYPE_ERR = 0;
-        const unsigned short DISPATCH_REQUEST_ERR = 1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/EventListener.idl b/elemental/idl/third_party/WebCore/dom/EventListener.idl
deleted file mode 100644
index 4e83b44..0000000
--- a/elemental/idl/third_party/WebCore/dom/EventListener.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSNoStaticTables,
-        ObjCProtocol,
-        CPPPureInterface,
-        OmitConstructor
-    ] EventListener {
-        void               handleEvent(in Event evt);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/EventTarget.idl b/elemental/idl/third_party/WebCore/dom/EventTarget.idl
deleted file mode 100644
index f1b0ef0..0000000
--- a/elemental/idl/third_party/WebCore/dom/EventTarget.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * 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.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface [
-        ObjCProtocol,
-        CPPPureInterface,
-        OmitConstructor
-    ] EventTarget {
-        [ObjCLegacyUnnamedParameters] void addEventListener(in DOMString type, 
-                                             in EventListener listener, 
-                                             in [Optional] boolean useCapture);
-        [ObjCLegacyUnnamedParameters] void removeEventListener(in DOMString type, 
-                                                in EventListener listener, 
-                                                in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/HashChangeEvent.idl b/elemental/idl/third_party/WebCore/dom/HashChangeEvent.idl
deleted file mode 100644
index 6c80a95..0000000
--- a/elemental/idl/third_party/WebCore/dom/HashChangeEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange
-    interface [
-        ConstructorTemplate=Event
-    ] HashChangeEvent : Event {
-        void initHashChangeEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                 in [Optional=DefaultIsUndefined] boolean canBubble, 
-                                 in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                 in [Optional=DefaultIsUndefined] DOMString oldURL, 
-                                 in [Optional=DefaultIsUndefined] DOMString newURL); 
-        readonly attribute [InitializedByEventConstructor] DOMString oldURL;
-        readonly attribute [InitializedByEventConstructor] DOMString newURL;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/KeyboardEvent.idl b/elemental/idl/third_party/WebCore/dom/KeyboardEvent.idl
deleted file mode 100644
index 2c2b7ba..0000000
--- a/elemental/idl/third_party/WebCore/dom/KeyboardEvent.idl
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 3:
-    interface KeyboardEvent : UIEvent {
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        // KeyLocationCode
-        const unsigned long       KEY_LOCATION_STANDARD      = 0x00;
-        const unsigned long       KEY_LOCATION_LEFT          = 0x01;
-        const unsigned long       KEY_LOCATION_RIGHT         = 0x02;
-        const unsigned long       KEY_LOCATION_NUMPAD        = 0x03;
-#endif
-
-        readonly attribute DOMString        keyIdentifier;
-        readonly attribute unsigned long    keyLocation;
-        readonly attribute boolean          ctrlKey;
-        readonly attribute boolean          shiftKey;
-        readonly attribute boolean          altKey;
-        readonly attribute boolean          metaKey;
-        readonly attribute boolean          altGraphKey;
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        boolean getModifierState(in [Optional=DefaultIsUndefined] DOMString keyIdentifierArg);
-#endif
-
-        // FIXME: this does not match the version in the DOM spec.
-        void initKeyboardEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                               in [Optional=DefaultIsUndefined] boolean canBubble, 
-                               in [Optional=DefaultIsUndefined] boolean cancelable, 
-                               in [Optional=DefaultIsUndefined] DOMWindow view, 
-                               in [Optional=DefaultIsUndefined] DOMString keyIdentifier,
-                               in [Optional=DefaultIsUndefined] unsigned long keyLocation,
-                               in [Optional=DefaultIsUndefined] boolean ctrlKey,
-                               in [Optional=DefaultIsUndefined] boolean altKey,
-                               in [Optional=DefaultIsUndefined] boolean shiftKey,
-                               in [Optional=DefaultIsUndefined] boolean metaKey,
-                               in [Optional=DefaultIsUndefined] boolean altGraphKey);
-
-        // WebKit Extensions
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        readonly attribute long             keyCode;
-        readonly attribute long             charCode;
-        
-        void initKeyboardEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                               in [Optional=DefaultIsUndefined] boolean canBubble, 
-                               in [Optional=DefaultIsUndefined] boolean cancelable, 
-                               in [Optional=DefaultIsUndefined] DOMWindow view, 
-                               in [Optional=DefaultIsUndefined] DOMString keyIdentifier,
-                               in [Optional=DefaultIsUndefined] unsigned long keyLocation,
-                               in [Optional=DefaultIsUndefined] boolean ctrlKey,
-                               in [Optional=DefaultIsUndefined] boolean altKey,
-                               in [Optional=DefaultIsUndefined] boolean shiftKey,
-                               in [Optional=DefaultIsUndefined] boolean metaKey);
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MessageChannel.idl b/elemental/idl/third_party/WebCore/dom/MessageChannel.idl
deleted file mode 100644
index d21eb11..0000000
--- a/elemental/idl/third_party/WebCore/dom/MessageChannel.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2008, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *
- */
-
-module events {
-
-    interface [
-        Constructor,
-        CallWith=ScriptExecutionContext,
-        V8CustomConstructor,
-        JSCustomMarkFunction,
-        JSNoStaticTables
-    ] MessageChannel {
-
-        readonly attribute MessagePort port1;
-        readonly attribute MessagePort port2;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MessageEvent.idl b/elemental/idl/third_party/WebCore/dom/MessageEvent.idl
deleted file mode 100644
index c8356ed..0000000
--- a/elemental/idl/third_party/WebCore/dom/MessageEvent.idl
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2007 Henry Mason <hmason@mac.com>
- * 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. 
- *
- */
-
-module events {
-
-    interface [
-        JSNoStaticTables,
-        ConstructorTemplate=Event
-    ] MessageEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString origin;
-        readonly attribute [InitializedByEventConstructor] DOMString lastEventId;
-        readonly attribute [InitializedByEventConstructor] DOMWindow source;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        readonly attribute [InitializedByEventConstructor, CachedAttribute, CustomGetter] DOMObject data;
-        readonly attribute [InitializedByEventConstructor, CustomGetter] Array ports;
-
-        [Custom] void initMessageEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                                       in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                                       in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                                       in [Optional=DefaultIsUndefined] DOMObject dataArg, 
-                                       in [Optional=DefaultIsUndefined] DOMString originArg, 
-                                       in [Optional=DefaultIsUndefined] DOMString lastEventIdArg, 
-                                       in [Optional=DefaultIsUndefined] DOMWindow sourceArg, 
-                                       in [Optional=DefaultIsUndefined] Array messagePorts);
-
-        [Custom] void webkitInitMessageEvent(in [Optional=DefaultIsUndefined] DOMString typeArg,
-                                             in [Optional=DefaultIsUndefined] boolean canBubbleArg,
-                                             in [Optional=DefaultIsUndefined] boolean cancelableArg,
-                                             in [Optional=DefaultIsUndefined] DOMObject dataArg,
-                                             in [Optional=DefaultIsUndefined] DOMString originArg,
-                                             in [Optional=DefaultIsUndefined] DOMString lastEventIdArg,
-                                             in [Optional=DefaultIsUndefined] DOMWindow sourceArg,
-                                             in [Optional=DefaultIsUndefined] Array transferables);
-#else
-        // Code generator for ObjC bindings does not support custom bindings, thus there is no good way to
-        // return a variant value. As workaround, expose the data attribute as SerializedScriptValue.
-        readonly attribute SerializedScriptValue data;
-
-        // There's no good way to expose an array via the ObjC bindings, so for now just expose a single port.
-        readonly attribute MessagePort messagePort;
-
-        void initMessageEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                              in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                              in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                              in [Optional=DefaultIsUndefined] SerializedScriptValue dataArg, 
-                              in [Optional=DefaultIsUndefined] DOMString originArg, 
-                              in [Optional=DefaultIsUndefined] DOMString lastEventIdArg, 
-                              in [Optional=DefaultIsUndefined] DOMWindow sourceArg, 
-                              in [Optional=DefaultIsUndefined] MessagePort messagePort);
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MessagePort.idl b/elemental/idl/third_party/WebCore/dom/MessagePort.idl
deleted file mode 100644
index f318f79..0000000
--- a/elemental/idl/third_party/WebCore/dom/MessagePort.idl
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2008 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. 
- *
- */
-
-module events {
-
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateIsReachable=Impl,
-        ActiveDOMObject,
-        EventTarget,
-        JSNoStaticTables
-    ] MessagePort {
-// We need to have something as an ObjC binding, because MessagePort is used in MessageEvent, which already has one,
-// but we don't want to actually expose the API while it is in flux.
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [Custom] void postMessage(in DOMString message, in [Optional] Array messagePorts)
-            raises(DOMException);
-        [Custom] void webkitPostMessage(in DOMString message, in [Optional] Array transfer)
-            raises(DOMException);
-        void start();
-        void close();
-
-        // event handler attributes
-        attribute EventListener onmessage;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MouseEvent.idl b/elemental/idl/third_party/WebCore/dom/MouseEvent.idl
deleted file mode 100644
index 48eff1e..0000000
--- a/elemental/idl/third_party/WebCore/dom/MouseEvent.idl
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface MouseEvent : UIEvent {
-        readonly attribute long             screenX;
-        readonly attribute long             screenY;
-        readonly attribute long             clientX;
-        readonly attribute long             clientY;
-        readonly attribute [Conditional=POINTER_LOCK, V8EnabledAtRuntime] long webkitMovementX;
-        readonly attribute [Conditional=POINTER_LOCK, V8EnabledAtRuntime] long webkitMovementY;
-        readonly attribute boolean          ctrlKey;
-        readonly attribute boolean          shiftKey;
-        readonly attribute boolean          altKey;
-        readonly attribute boolean          metaKey;
-        readonly attribute unsigned short   button;
-        readonly attribute EventTarget      relatedTarget;
-        
-        [ObjCLegacyUnnamedParameters] void initMouseEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                           in [Optional=DefaultIsUndefined] boolean canBubble, 
-                                           in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                           in [Optional=DefaultIsUndefined] DOMWindow view, 
-                                           in [Optional=DefaultIsUndefined] long detail, 
-                                           in [Optional=DefaultIsUndefined] long screenX, 
-                                           in [Optional=DefaultIsUndefined] long screenY, 
-                                           in [Optional=DefaultIsUndefined] long clientX, 
-                                           in [Optional=DefaultIsUndefined] long clientY, 
-                                           in [Optional=DefaultIsUndefined] boolean ctrlKey, 
-                                           in [Optional=DefaultIsUndefined] boolean altKey, 
-                                           in [Optional=DefaultIsUndefined] boolean shiftKey, 
-                                           in [Optional=DefaultIsUndefined] boolean metaKey, 
-                                           in [Optional=DefaultIsUndefined] unsigned short button, 
-                                           in [Optional=DefaultIsUndefined] EventTarget relatedTarget);
-
-        // extensions
-        readonly attribute long             offsetX;
-        readonly attribute long             offsetY;
-        readonly attribute long             x;
-        readonly attribute long             y;
-        readonly attribute Node             fromElement;
-        readonly attribute Node             toElement;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        readonly attribute Clipboard        dataTransfer;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MutationCallback.idl b/elemental/idl/third_party/WebCore/dom/MutationCallback.idl
deleted file mode 100644
index 1638171..0000000
--- a/elemental/idl/third_party/WebCore/dom/MutationCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=MUTATION_OBSERVERS,
-        Callback
-    ] MutationCallback {
-        [Custom] boolean handleEvent(in MutationRecordArray mutations, in WebKitMutationObserver observer);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MutationEvent.idl b/elemental/idl/third_party/WebCore/dom/MutationEvent.idl
deleted file mode 100644
index 2765dc9..0000000
--- a/elemental/idl/third_party/WebCore/dom/MutationEvent.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface MutationEvent : Event {
-
-        // attrChangeType
-        const unsigned short MODIFICATION = 1;
-        const unsigned short ADDITION     = 2;
-        const unsigned short REMOVAL      = 3;
-
-        readonly attribute Node           relatedNode;
-        readonly attribute DOMString      prevValue;
-        readonly attribute DOMString      newValue;
-        readonly attribute DOMString      attrName;
-        readonly attribute unsigned short attrChange;
-
-        [ObjCLegacyUnnamedParameters] void initMutationEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                              in [Optional=DefaultIsUndefined] boolean canBubble, 
-                                              in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                              in [Optional=DefaultIsUndefined] Node relatedNode, 
-                                              in [Optional=DefaultIsUndefined] DOMString prevValue, 
-                                              in [Optional=DefaultIsUndefined] DOMString newValue, 
-                                              in [Optional=DefaultIsUndefined] DOMString attrName, 
-                                              in [Optional=DefaultIsUndefined] unsigned short attrChange);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/MutationRecord.idl b/elemental/idl/third_party/WebCore/dom/MutationRecord.idl
deleted file mode 100644
index a7883c5..0000000
--- a/elemental/idl/third_party/WebCore/dom/MutationRecord.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=MUTATION_OBSERVERS
-    ] MutationRecord {
-        readonly attribute DOMString type;
-        readonly attribute Node target;
-
-        readonly attribute NodeList addedNodes;
-        readonly attribute NodeList removedNodes;
-        readonly attribute Node previousSibling;
-        readonly attribute Node nextSibling;
-
-        readonly attribute DOMString attributeName;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString attributeNamespace;
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString oldValue;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/NamedNodeMap.idl b/elemental/idl/third_party/WebCore/dom/NamedNodeMap.idl
deleted file mode 100644
index 88820c0..0000000
--- a/elemental/idl/third_party/WebCore/dom/NamedNodeMap.idl
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSGenerateIsReachable=ImplElementRoot,
-        JSCustomMarkFunction,
-        IndexedGetter,
-        NamedGetter,
-        V8CustomToJSObject
-    ] NamedNodeMap {
-
-        Node getNamedItem(in [Optional=DefaultIsUndefined] DOMString name);
-
-        Node setNamedItem(in [Optional=DefaultIsUndefined] Node node)
-            raises(DOMException);
-
-        Node removeNamedItem(in [Optional=DefaultIsUndefined] DOMString name)
-            raises(DOMException);
-
-        Node item(in [Optional=DefaultIsUndefined] unsigned long index);
-        
-        readonly attribute unsigned long length;
-
-
-        // Introduced in DOM Level 2:
-
-        [ObjCLegacyUnnamedParameters] Node getNamedItemNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI, 
-                                           in [Optional=DefaultIsUndefined] DOMString localName)
-            // FIXME: the implementation does take an exceptioncode parameter.
-            /*raises(DOMException)*/;
-
-        Node setNamedItemNS(in [Optional=DefaultIsUndefined] Node node)
-            raises(DOMException);
-
-        [ObjCLegacyUnnamedParameters] Node removeNamedItemNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI, 
-                                              in [Optional=DefaultIsUndefined] DOMString localName)
-            raises(DOMException);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Node.idl b/elemental/idl/third_party/WebCore/dom/Node.idl
deleted file mode 100644
index fc4a882..0000000
--- a/elemental/idl/third_party/WebCore/dom/Node.idl
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSCustomHeader,
-        JSCustomMarkFunction,
-        JSCustomPushEventHandlerScope,
-        JSCustomIsReachable,
-        JSCustomFinalize,
-        CustomToJSObject,
-        EventTarget,
-        JSGenerateToNativeObject,
-        JSInlineGetOwnPropertySlot,
-        ObjCPolymorphic,
-        V8DependentLifetime
-    ] Node
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        : Object, EventTarget
-#endif /* defined(LANGUAGE_OBJECTIVE_C) */
-     {
-        // NodeType
-        const unsigned short      ELEMENT_NODE                   = 1;
-        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_NODE                    = 6;
-        const unsigned short      PROCESSING_INSTRUCTION_NODE    = 7;
-        const unsigned short      COMMENT_NODE                   = 8;
-        const unsigned short      DOCUMENT_NODE                  = 9;
-        const unsigned short      DOCUMENT_TYPE_NODE             = 10;
-        const unsigned short      DOCUMENT_FRAGMENT_NODE         = 11;
-        const unsigned short      NOTATION_NODE                  = 12;
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        nodeName;
-
-                 // FIXME: the spec says this can also raise on retrieval.
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        nodeValue
-                     setter raises(DOMException);
-
-        readonly attribute unsigned short   nodeType;
-        readonly attribute Node             parentNode;
-        readonly attribute NodeList         childNodes;
-        readonly attribute Node             firstChild;
-        readonly attribute Node             lastChild;
-        readonly attribute Node             previousSibling;
-        readonly attribute Node             nextSibling;
-        readonly attribute NamedNodeMap     attributes;
-        readonly attribute Document         ownerDocument;
-
-        [ObjCLegacyUnnamedParameters, Custom] Node insertBefore(in [CustomReturn] Node newChild,
-                                                                in Node refChild)
-            raises(DOMException);
-        [ObjCLegacyUnnamedParameters, Custom] Node replaceChild(in Node newChild,
-                                                                in [CustomReturn] Node oldChild)
-            raises(DOMException);
-        [Custom] Node               removeChild(in [CustomReturn] Node oldChild)
-            raises(DOMException);
-        [Custom] Node               appendChild(in [CustomReturn] Node newChild)
-            raises(DOMException);
-
-        boolean            hasChildNodes();
-        Node               cloneNode(in [Optional=DefaultIsUndefined] boolean deep);
-        void               normalize();
-
-        // Introduced in DOM Level 2:
-
-        [ObjCLegacyUnnamedParameters] boolean isSupported(in [Optional=DefaultIsUndefined] DOMString feature, 
-                                           in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString version);
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        namespaceURI;
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        prefix
-                     setter raises(DOMException);
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString        localName;
-
-        boolean            hasAttributes();
-
-        // Introduced in DOM Level 3:
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString       baseURI;
-
-                 // FIXME: the spec says this can also raise on retrieval.
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString       textContent
-                     setter raises(DOMException);
-
-        boolean            isSameNode(in [Optional=DefaultIsUndefined] Node other);
-        boolean            isEqualNode(in [Optional=DefaultIsUndefined] Node other);
-        [TreatReturnedNullStringAs=Null] DOMString          lookupPrefix(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI);
-        boolean            isDefaultNamespace(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI);
-        [TreatReturnedNullStringAs=Null] DOMString          lookupNamespaceURI(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString prefix);
-
-        // DocumentPosition
-        const unsigned short      DOCUMENT_POSITION_DISCONNECTED = 0x01;
-        const unsigned short      DOCUMENT_POSITION_PRECEDING    = 0x02;
-        const unsigned short      DOCUMENT_POSITION_FOLLOWING    = 0x04;
-        const unsigned short      DOCUMENT_POSITION_CONTAINS     = 0x08;
-        const unsigned short      DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-        const unsigned short      DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-
-        unsigned short     compareDocumentPosition(in [Optional=DefaultIsUndefined] Node other);
-
-        // Introduced in DOM4
-        boolean contains(in [Optional=DefaultIsUndefined] Node other);
-
-#if 0
-        DOMObject          getFeature(in DOMString feature, 
-                                      in DOMString version);
-        DOMUserData        setUserData(in DOMString key, 
-                                       in DOMUserData data, 
-                                       in UserDataHandler handler);
-        DOMUserData        getUserData(in DOMString key);
-#endif /* 0 */
-
-        // IE extensions
-        readonly attribute Element          parentElement;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extensions
-        readonly attribute boolean          isContentEditable;
-
-        void inspect();
-#endif /* defined(LANGUAGE_OBJECTIVE_C) */
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-#endif
-#endif
-
-#if defined(LANGUAGE_CPP) && LANGUAGE_CPP
-        [Custom] void addEventListener(in DOMString type, 
-                                          in EventListener listener, 
-                                          in boolean useCapture);
-        [Custom] void removeEventListener(in DOMString type, 
-                                             in EventListener listener, 
-                                             in boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/NodeFilter.idl b/elemental/idl/third_party/WebCore/dom/NodeFilter.idl
deleted file mode 100644
index 5caa5ff..0000000
--- a/elemental/idl/third_party/WebCore/dom/NodeFilter.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module traversal {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction,
-        JSCustomToNativeObject,
-        ObjCProtocol,
-        CPPPureInterface
-    ] NodeFilter {
-        // Constants returned by acceptNode
-        const short               FILTER_ACCEPT                  = 1;
-        const short               FILTER_REJECT                  = 2;
-        const short               FILTER_SKIP                    = 3;
-
-        // Constants for whatToShow
-        const unsigned long       SHOW_ALL                       = 0xFFFFFFFF;
-        const unsigned long       SHOW_ELEMENT                   = 0x00000001;
-        const unsigned long       SHOW_ATTRIBUTE                 = 0x00000002;
-        const unsigned long       SHOW_TEXT                      = 0x00000004;
-        const unsigned long       SHOW_CDATA_SECTION             = 0x00000008;
-        const unsigned long       SHOW_ENTITY_REFERENCE          = 0x00000010;
-        const unsigned long       SHOW_ENTITY                    = 0x00000020;
-        const unsigned long       SHOW_PROCESSING_INSTRUCTION    = 0x00000040;
-        const unsigned long       SHOW_COMMENT                   = 0x00000080;
-        const unsigned long       SHOW_DOCUMENT                  = 0x00000100;
-        const unsigned long       SHOW_DOCUMENT_TYPE             = 0x00000200;
-        const unsigned long       SHOW_DOCUMENT_FRAGMENT         = 0x00000400;
-        const unsigned long       SHOW_NOTATION                  = 0x00000800;
-
-        [CallWith=ScriptState] short acceptNode(in [Optional=DefaultIsUndefined] Node n);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/NodeIterator.idl b/elemental/idl/third_party/WebCore/dom/NodeIterator.idl
deleted file mode 100644
index 5b3f288..0000000
--- a/elemental/idl/third_party/WebCore/dom/NodeIterator.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module traversal {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction
-    ] NodeIterator {
-        readonly attribute Node root;
-        readonly attribute unsigned long whatToShow;
-        readonly attribute NodeFilter filter;
-        readonly attribute boolean expandEntityReferences;
-        readonly attribute Node referenceNode;
-        readonly attribute boolean pointerBeforeReferenceNode;
-
-        [CallWith=ScriptState] Node nextNode() 
-            raises (DOMException);
-        [CallWith=ScriptState] Node previousNode()
-            raises (DOMException);
-        void detach();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/NodeList.idl b/elemental/idl/third_party/WebCore/dom/NodeList.idl
deleted file mode 100644
index 71544d1..0000000
--- a/elemental/idl/third_party/WebCore/dom/NodeList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface [
-        JSCustomIsReachable,
-        IndexedGetter,
-        NamedGetter
-    ] NodeList {
-
-        Node item(in [IsIndex,Optional=DefaultIsUndefined] unsigned long index);
-
-        readonly attribute unsigned long length;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Notation.idl b/elemental/idl/third_party/WebCore/dom/Notation.idl
deleted file mode 100644
index 2917cb2..0000000
--- a/elemental/idl/third_party/WebCore/dom/Notation.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface Notation : Node {
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString publicId;
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString systemId;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/OverflowEvent.idl b/elemental/idl/third_party/WebCore/dom/OverflowEvent.idl
deleted file mode 100644
index 10b9504..0000000
--- a/elemental/idl/third_party/WebCore/dom/OverflowEvent.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event
-    ] OverflowEvent : Event {
-        const unsigned short HORIZONTAL = 0;
-        const unsigned short VERTICAL   = 1;
-        const unsigned short BOTH       = 2;
-        
-        readonly attribute [InitializedByEventConstructor] unsigned short orient;
-        readonly attribute [InitializedByEventConstructor] boolean horizontalOverflow;
-        readonly attribute [InitializedByEventConstructor] boolean verticalOverflow;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        void initOverflowEvent(in [Optional=DefaultIsUndefined] unsigned short orient,
-                               in [Optional=DefaultIsUndefined] boolean horizontalOverflow,
-                               in [Optional=DefaultIsUndefined] boolean verticalOverflow);
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/PageTransitionEvent.idl b/elemental/idl/third_party/WebCore/dom/PageTransitionEvent.idl
deleted file mode 100644
index 76c8727..0000000
--- a/elemental/idl/third_party/WebCore/dom/PageTransitionEvent.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event
-    ] PageTransitionEvent : Event {
-        readonly attribute [InitializedByEventConstructor] boolean persisted;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/PopStateEvent.idl b/elemental/idl/third_party/WebCore/dom/PopStateEvent.idl
deleted file mode 100644
index c9343ca..0000000
--- a/elemental/idl/third_party/WebCore/dom/PopStateEvent.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE, 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. 
- *
- */
-
-module events {
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-    interface [
-        ConstructorTemplate=Event
-    ] PopStateEvent : Event {
-        readonly attribute [InitializedByEventConstructor, CachedAttribute, CustomGetter] DOMObject state;
-    };
-#endif
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ProcessingInstruction.idl b/elemental/idl/third_party/WebCore/dom/ProcessingInstruction.idl
deleted file mode 100644
index 02499a2..0000000
--- a/elemental/idl/third_party/WebCore/dom/ProcessingInstruction.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface ProcessingInstruction : Node {
-
-        // DOM Level 1
-
-        readonly attribute [TreatReturnedNullStringAs=Null] DOMString target;
-                 attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString data
-                     setter raises(DOMException);
-
-        // interface LinkStyle from DOM Level 2 Style Sheets
-        readonly attribute StyleSheet sheet;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ProgressEvent.idl b/elemental/idl/third_party/WebCore/dom/ProgressEvent.idl
deleted file mode 100644
index 525fa4a..0000000
--- a/elemental/idl/third_party/WebCore/dom/ProgressEvent.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event,
-        JSNoStaticTables
-    ] ProgressEvent : Event {
-        readonly attribute [InitializedByEventConstructor] boolean lengthComputable;
-        readonly attribute [InitializedByEventConstructor] unsigned long long loaded;
-        readonly attribute [InitializedByEventConstructor] unsigned long long total;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Range.idl b/elemental/idl/third_party/WebCore/dom/Range.idl
deleted file mode 100644
index 67f4aee..0000000
--- a/elemental/idl/third_party/WebCore/dom/Range.idl
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module ranges {
-
-    // Introduced in DOM Level 2:
-    interface Range {
-
-        readonly attribute Node startContainer
-            getter raises(DOMException);
-        readonly attribute long startOffset
-            getter raises(DOMException);
-        readonly attribute Node endContainer
-            getter raises(DOMException);
-        readonly attribute long endOffset
-            getter raises(DOMException);
-        readonly attribute boolean collapsed
-            getter raises(DOMException);
-        readonly attribute Node commonAncestorContainer
-            getter raises(DOMException);
-
-        [ObjCLegacyUnnamedParameters] void setStart(in [Optional=DefaultIsUndefined] Node refNode, 
-                                     in [Optional=DefaultIsUndefined] long offset)
-            raises(RangeException, DOMException);
-        [ObjCLegacyUnnamedParameters] void setEnd(in [Optional=DefaultIsUndefined] Node refNode, 
-                                   in [Optional=DefaultIsUndefined] long offset)
-            raises(RangeException, DOMException);
-        void setStartBefore(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-        void setStartAfter(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-        void setEndBefore(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-        void setEndAfter(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-        void collapse(in [Optional=DefaultIsUndefined] boolean toStart)
-            raises(DOMException);
-        void selectNode(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-        void selectNodeContents(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-
-        // CompareHow
-        const unsigned short START_TO_START = 0;
-        const unsigned short START_TO_END   = 1;
-        const unsigned short END_TO_END     = 2;
-        const unsigned short END_TO_START   = 3;
-
-        [ObjCLegacyUnnamedParameters] short compareBoundaryPoints(in [Optional=DefaultIsUndefined] CompareHow how,
-                                                   in [Optional=DefaultIsUndefined] Range sourceRange)
-            raises(DOMException);
-
-        void deleteContents()
-            raises(DOMException);
-        DocumentFragment extractContents()
-            raises(DOMException);
-        DocumentFragment cloneContents()
-            raises(DOMException);
-        void insertNode(in [Optional=DefaultIsUndefined] Node newNode)
-            raises(DOMException, RangeException);
-        void surroundContents(in [Optional=DefaultIsUndefined] Node newParent)
-            raises(DOMException, RangeException);
-        Range cloneRange()
-            raises(DOMException);
-        DOMString toString()
-            raises(DOMException);
-
-        void detach()
-            raises(DOMException);
-
-#if defined(LANGUAGE_JAVASCRIPT) || LANGUAGE_JAVASCRIPT
-        // CSSOM View Module API extensions
-
-        ClientRectList getClientRects();
-        ClientRect getBoundingClientRect();
-#endif
-
-        // extensions
-
-        DocumentFragment createContextualFragment(in [Optional=DefaultIsUndefined] DOMString html)
-            raises(DOMException);
-
-        // WebKit extensions
-
-        boolean intersectsNode(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-
-        short compareNode(in [Optional=DefaultIsUndefined] Node refNode)
-            raises(RangeException, DOMException);
-
-        // CompareResults
-        const unsigned short NODE_BEFORE           = 0;
-        const unsigned short NODE_AFTER            = 1;
-        const unsigned short NODE_BEFORE_AND_AFTER = 2;
-        const unsigned short NODE_INSIDE           = 3;
-
-        short comparePoint(in [Optional=DefaultIsUndefined] Node refNode, 
-                           in [Optional=DefaultIsUndefined] long offset)
-            raises(RangeException, DOMException);
-
-        boolean isPointInRange(in [Optional=DefaultIsUndefined] Node refNode, 
-                               in [Optional=DefaultIsUndefined] long offset)
-            raises(RangeException, DOMException);
-
-        void expand(in [Optional=DefaultIsUndefined] DOMString unit)
-            raises(RangeException, DOMException);
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        readonly attribute DOMString text;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/RangeException.idl b/elemental/idl/third_party/WebCore/dom/RangeException.idl
deleted file mode 100644
index 7ef8c4a..0000000
--- a/elemental/idl/third_party/WebCore/dom/RangeException.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module ranges {
-
-    exception [
-        DoNotCheckConstants
-    ] RangeException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // DOM Level 2
-
-        const unsigned short BAD_BOUNDARYPOINTS_ERR = 1;
-        const unsigned short INVALID_NODE_TYPE_ERR = 2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/RequestAnimationFrameCallback.idl b/elemental/idl/third_party/WebCore/dom/RequestAnimationFrameCallback.idl
deleted file mode 100644
index 4da6820..0000000
--- a/elemental/idl/third_party/WebCore/dom/RequestAnimationFrameCallback.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Callback,
-        Conditional=REQUEST_ANIMATION_FRAME,
-    ] RequestAnimationFrameCallback{
-#if defined(V8_BINDING) && V8_BINDING
-        boolean handleEvent(in DOMTimeStamp time);
-#else
-        [Custom] boolean handleEvent(in DOMTimeStamp time);
-#endif
-        
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/ShadowRoot.idl b/elemental/idl/third_party/WebCore/dom/ShadowRoot.idl
deleted file mode 100644
index 8110c1e..0000000
--- a/elemental/idl/third_party/WebCore/dom/ShadowRoot.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=SHADOW_DOM,
-        Constructor(in Element host),
-        ConstructorRaisesException
-    ] ShadowRoot : DocumentFragment {
-        readonly attribute Element host;
-        readonly attribute Element activeElement;
-        attribute boolean applyAuthorStyles;
-
-        attribute [TreatNullAs=NullString] DOMString innerHTML
-            setter raises(DOMException);
-
-        DOMSelection getSelection();
-        Element getElementById(in [Optional=DefaultIsUndefined] DOMString elementId);
-        NodeList getElementsByClassName(in [Optional=DefaultIsUndefined] DOMString className);
-        NodeList getElementsByTagName(in [Optional=DefaultIsUndefined] DOMString tagName);
-        NodeList getElementsByTagNameNS(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString namespaceURI,
-                                        in [Optional=DefaultIsUndefined] DOMString localName);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/StringCallback.idl b/elemental/idl/third_party/WebCore/dom/StringCallback.idl
deleted file mode 100644
index 1e18d83..0000000
--- a/elemental/idl/third_party/WebCore/dom/StringCallback.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Callback
-    ] StringCallback {
-        boolean handleEvent(in DOMString data);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Text.idl b/elemental/idl/third_party/WebCore/dom/Text.idl
deleted file mode 100644
index 4736e22..0000000
--- a/elemental/idl/third_party/WebCore/dom/Text.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module core {
-
-    interface Text : CharacterData {
-
-        // DOM Level 1
-
-        Text splitText(in [IsIndex,Optional=DefaultIsUndefined] unsigned long offset)
-            raises (DOMException);
-
-        // Introduced in DOM Level 3:
-        readonly attribute DOMString       wholeText;
-        Text               replaceWholeText(in [Optional=DefaultIsUndefined] DOMString content)
-                                            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/TextEvent.idl b/elemental/idl/third_party/WebCore/dom/TextEvent.idl
deleted file mode 100644
index 36f507c..0000000
--- a/elemental/idl/third_party/WebCore/dom/TextEvent.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module events {
-
-    // Introduced in DOM Level 3:
-    interface TextEvent : UIEvent {
-
-        readonly attribute DOMString data;
-
-        void initTextEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                           in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                           in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                           in [Optional=DefaultIsUndefined] DOMWindow viewArg, 
-                           in [Optional=DefaultIsUndefined] DOMString dataArg);
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/Touch.idl b/elemental/idl/third_party/WebCore/dom/Touch.idl
deleted file mode 100644
index d2937b3..0000000
--- a/elemental/idl/third_party/WebCore/dom/Touch.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    interface [
-        Conditional=TOUCH_EVENTS
-    ] Touch {
-        readonly attribute long             clientX;
-        readonly attribute long             clientY;
-        readonly attribute long             screenX;
-        readonly attribute long             screenY;
-        readonly attribute long             pageX;
-        readonly attribute long             pageY;
-        readonly attribute EventTarget      target;
-        readonly attribute unsigned long    identifier;
-        readonly attribute int              webkitRadiusX;
-        readonly attribute int              webkitRadiusY;
-        readonly attribute float            webkitRotationAngle;
-        readonly attribute float            webkitForce;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/TouchEvent.idl b/elemental/idl/third_party/WebCore/dom/TouchEvent.idl
deleted file mode 100644
index 4b79757..0000000
--- a/elemental/idl/third_party/WebCore/dom/TouchEvent.idl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    interface [
-        Conditional=TOUCH_EVENTS
-    ] TouchEvent : UIEvent {
-        readonly attribute TouchList touches;
-        readonly attribute TouchList targetTouches;
-        readonly attribute TouchList changedTouches;
-        readonly attribute boolean ctrlKey;
-        readonly attribute boolean shiftKey;
-        readonly attribute boolean altKey;
-        readonly attribute boolean metaKey;
-
-        void initTouchEvent(in [Optional=DefaultIsUndefined] TouchList touches,
-                            in [Optional=DefaultIsUndefined] TouchList targetTouches,
-                            in [Optional=DefaultIsUndefined] TouchList changedTouches,
-                            in [Optional=DefaultIsUndefined] DOMString type,
-                            in [Optional=DefaultIsUndefined] DOMWindow view,
-                            in [Optional=DefaultIsUndefined] long screenX, 
-                            in [Optional=DefaultIsUndefined] long screenY, 
-                            in [Optional=DefaultIsUndefined] long clientX, 
-                            in [Optional=DefaultIsUndefined] long clientY,
-                            in [Optional=DefaultIsUndefined] boolean ctrlKey,
-                            in [Optional=DefaultIsUndefined] boolean altKey,
-                            in [Optional=DefaultIsUndefined] boolean shiftKey,
-                            in [Optional=DefaultIsUndefined] boolean metaKey);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/TouchList.idl b/elemental/idl/third_party/WebCore/dom/TouchList.idl
deleted file mode 100644
index 542325c..0000000
--- a/elemental/idl/third_party/WebCore/dom/TouchList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    interface [
-        Conditional=TOUCH_EVENTS,
-        IndexedGetter
-    ] TouchList {
-        readonly attribute unsigned long length;
-
-        Touch item(in unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/TreeWalker.idl b/elemental/idl/third_party/WebCore/dom/TreeWalker.idl
deleted file mode 100644
index d9ed36e..0000000
--- a/elemental/idl/third_party/WebCore/dom/TreeWalker.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module traversal {
-
-    // Introduced in DOM Level 2:
-    interface [
-        JSCustomMarkFunction
-    ] TreeWalker {
-        readonly attribute Node root;
-        readonly attribute unsigned long whatToShow;
-        readonly attribute NodeFilter filter;
-        readonly attribute boolean expandEntityReferences;        
-                 attribute Node currentNode
-                     setter raises(DOMException);
-
-        [CallWith=ScriptState] Node parentNode();
-        [CallWith=ScriptState] Node firstChild();
-        [CallWith=ScriptState] Node lastChild();
-        [CallWith=ScriptState] Node previousSibling();
-        [CallWith=ScriptState] Node nextSibling();
-        [CallWith=ScriptState] Node previousNode();
-        [CallWith=ScriptState] Node nextNode();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/UIEvent.idl b/elemental/idl/third_party/WebCore/dom/UIEvent.idl
deleted file mode 100644
index 39a2caf..0000000
--- a/elemental/idl/third_party/WebCore/dom/UIEvent.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Introduced in DOM Level 2:
-    interface UIEvent : Event {
-        readonly attribute DOMWindow            view;
-        readonly attribute long                 detail;
-        
-        [ObjCLegacyUnnamedParameters] void initUIEvent(in [Optional=DefaultIsUndefined] DOMString type, 
-                                        in [Optional=DefaultIsUndefined] boolean canBubble, 
-                                        in [Optional=DefaultIsUndefined] boolean cancelable, 
-                                        in [Optional=DefaultIsUndefined] DOMWindow view, 
-                                        in [Optional=DefaultIsUndefined] long detail);
-
-        // extensions
-        readonly attribute long                 keyCode;
-        readonly attribute long                 charCode;
-        readonly attribute long                 layerX;
-        readonly attribute long                 layerY;
-        readonly attribute long                 pageX;
-        readonly attribute long                 pageY;
-        readonly attribute long                 which;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/WebKitAnimationEvent.idl b/elemental/idl/third_party/WebCore/dom/WebKitAnimationEvent.idl
deleted file mode 100644
index 5e52250..0000000
--- a/elemental/idl/third_party/WebCore/dom/WebKitAnimationEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event
-    ] WebKitAnimationEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString animationName;
-        readonly attribute [InitializedByEventConstructor] double elapsedTime;
-};
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/WebKitMutationObserver.idl b/elemental/idl/third_party/WebCore/dom/WebKitMutationObserver.idl
deleted file mode 100644
index e535f45..0000000
--- a/elemental/idl/third_party/WebCore/dom/WebKitMutationObserver.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=MUTATION_OBSERVERS,
-        CustomConstructor,
-        ConstructorParameters=1
-    ] WebKitMutationObserver {
-        [Custom] void observe(in Node target, in MutationObserverOptions options)
-            raises(DOMException);
-        sequence<MutationRecord> takeRecords();
-        void disconnect();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/dom/WebKitNamedFlow.idl b/elemental/idl/third_party/WebCore/dom/WebKitNamedFlow.idl
deleted file mode 100644
index 0da90e0..0000000
--- a/elemental/idl/third_party/WebCore/dom/WebKitNamedFlow.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-
-module core {
-    interface [
-        JSGenerateToJSObject
-    ] WebKitNamedFlow {
-        readonly attribute DOMString name;
-        readonly attribute boolean overset;
-        NodeList getRegionsByContentNode(in Node contentNode);
-        readonly attribute NodeList contentNodes;
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/dom/WebKitTransitionEvent.idl b/elemental/idl/third_party/WebCore/dom/WebKitTransitionEvent.idl
deleted file mode 100644
index 39903bd..0000000
--- a/elemental/idl/third_party/WebCore/dom/WebKitTransitionEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module events {
-
-    interface [
-        ConstructorTemplate=Event
-    ] WebKitTransitionEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString propertyName;
-        readonly attribute [InitializedByEventConstructor] double elapsedTime;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/dom/WheelEvent.idl b/elemental/idl/third_party/WebCore/dom/WheelEvent.idl
deleted file mode 100644
index 0282525..0000000
--- a/elemental/idl/third_party/WebCore/dom/WheelEvent.idl
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module events {
-
-    // Based off of proposed IDL interface for WheelEvent:
-    interface WheelEvent : UIEvent {
-        readonly attribute long    screenX;
-        readonly attribute long    screenY;
-        readonly attribute long    clientX;
-        readonly attribute long    clientY;
-        readonly attribute boolean ctrlKey;
-        readonly attribute boolean shiftKey;
-        readonly attribute boolean altKey;
-        readonly attribute boolean metaKey;
-        readonly attribute long    wheelDelta;
-        readonly attribute long    wheelDeltaX;
-        readonly attribute long    wheelDeltaY;
-
-        // WebKit Extensions
-        readonly attribute long    offsetX;
-        readonly attribute long    offsetY;
-        readonly attribute long    x;
-        readonly attribute long    y;
-        readonly attribute boolean webkitDirectionInvertedFromDevice;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        readonly attribute boolean isHorizontal;
-#endif /* defined(LANGUAGE_OBJECTIVE_C) */
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        void initWheelEvent(in [Optional=DefaultIsUndefined] long wheelDeltaX,
-                            in [Optional=DefaultIsUndefined] long wheelDeltaY, 
-                            in [Optional=DefaultIsUndefined] DOMWindow view, 
-                            in [Optional=DefaultIsUndefined] long screenX,
-                            in [Optional=DefaultIsUndefined] long screenY,
-                            in [Optional=DefaultIsUndefined] long clientX,
-                            in [Optional=DefaultIsUndefined] long clientY,
-                            in [Optional=DefaultIsUndefined] boolean ctrlKey,
-                            in [Optional=DefaultIsUndefined] boolean altKey,
-                            in [Optional=DefaultIsUndefined] boolean shiftKey,
-                            in [Optional=DefaultIsUndefined] boolean metaKey);
-#endif /* !defined(LANGUAGE_JAVASCRIPT) */
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        void initWebKitWheelEvent(in [Optional=DefaultIsUndefined] long wheelDeltaX,
-                                  in [Optional=DefaultIsUndefined] long wheelDeltaY, 
-                                  in [Optional=DefaultIsUndefined] DOMWindow view, 
-                                  in [Optional=DefaultIsUndefined] long screenX,
-                                  in [Optional=DefaultIsUndefined] long screenY,
-                                  in [Optional=DefaultIsUndefined] long clientX,
-                                  in [Optional=DefaultIsUndefined] long clientY,
-                                  in [Optional=DefaultIsUndefined] boolean ctrlKey,
-                                  in [Optional=DefaultIsUndefined] boolean altKey,
-                                  in [Optional=DefaultIsUndefined] boolean shiftKey,
-                                  in [Optional=DefaultIsUndefined] boolean metaKey);
-#endif /* defined(LANGUAGE_JAVASCRIPT) */
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/Blob.idl b/elemental/idl/third_party/WebCore/fileapi/Blob.idl
deleted file mode 100644
index 6b7e59d..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/Blob.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        JSGenerateIsReachable=Impl,
-        CustomToJSObject,
-        JSNoStaticTables,
-        CustomConstructor,
-        ConstructorParameters=2
-    ] Blob {
-        readonly attribute unsigned long long size;
-        readonly attribute DOMString type;
-
-#if !defined(LANGUAGE_OBJECTIVE_C)
-#if defined(ENABLE_BLOB) && ENABLE_BLOB
-        Blob webkitSlice(in [Optional] long long start, in [Optional] long long end, in [Optional, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString contentType);
-#endif
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/File.idl b/elemental/idl/third_party/WebCore/fileapi/File.idl
deleted file mode 100644
index 00bdde6..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/File.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables
-    ] File : Blob {
-        readonly attribute DOMString name;
-#if !defined(LANGUAGE_GOBJECT) || !LANGUAGE_GOBJECT
-        readonly attribute [ImplementedAs=lastModifiedDateForBinding] Date lastModifiedDate;
-#endif
-#if defined(ENABLE_DIRECTORY_UPLOAD) && ENABLE_DIRECTORY_UPLOAD
-        readonly attribute DOMString webkitRelativePath;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/FileError.idl b/elemental/idl/third_party/WebCore/fileapi/FileError.idl
deleted file mode 100644
index 158d784..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/FileError.idl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=BLOB|FILE_SYSTEM,
-        JSNoStaticTables
-    ] FileError {
-#if !defined(LANGUAGE_OBJECTIVE_C)
-        // 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;
-        const unsigned short SECURITY_ERR = 2;
-        const unsigned short ABORT_ERR = 3;
-        const unsigned short NOT_READABLE_ERR = 4;
-        const unsigned short ENCODING_ERR = 5;
-        const unsigned short NO_MODIFICATION_ALLOWED_ERR = 6;
-        const unsigned short INVALID_STATE_ERR = 7;
-        const unsigned short SYNTAX_ERR = 8;
-        const unsigned short INVALID_MODIFICATION_ERR = 9;
-        const unsigned short QUOTA_EXCEEDED_ERR = 10;
-        const unsigned short TYPE_MISMATCH_ERR = 11;
-        const unsigned short PATH_EXISTS_ERR = 12;
-#endif
-        readonly attribute unsigned short code;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/FileException.idl b/elemental/idl/third_party/WebCore/fileapi/FileException.idl
deleted file mode 100644
index 33244f9..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/FileException.idl
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    exception [
-        Conditional=BLOB|FILE_SYSTEM,
-        DoNotCheckConstants,
-        JSNoStaticTables
-    ] FileException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // FileExceptionCode
-        const unsigned short NOT_FOUND_ERR = 1;
-        const unsigned short SECURITY_ERR = 2;
-        const unsigned short ABORT_ERR = 3;
-        const unsigned short NOT_READABLE_ERR = 4;
-        const unsigned short ENCODING_ERR = 5;
-        const unsigned short NO_MODIFICATION_ALLOWED_ERR = 6;
-        const unsigned short INVALID_STATE_ERR = 7;
-        const unsigned short SYNTAX_ERR = 8;
-        const unsigned short INVALID_MODIFICATION_ERR = 9;
-        const unsigned short QUOTA_EXCEEDED_ERR = 10;
-        const unsigned short TYPE_MISMATCH_ERR = 11;
-        const unsigned short PATH_EXISTS_ERR = 12;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/FileList.idl b/elemental/idl/third_party/WebCore/fileapi/FileList.idl
deleted file mode 100644
index 0cdf861..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/FileList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        IndexedGetter,
-        JSNoStaticTables
-    ] FileList {
-        readonly attribute unsigned long length;
-        File item(in [IsIndex] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/FileReader.idl b/elemental/idl/third_party/WebCore/fileapi/FileReader.idl
deleted file mode 100644
index 9a6440c..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/FileReader.idl
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- * 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:
- *
- *     * 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.
- */
-
-module html {
-    interface [
-        Conditional=BLOB,
-        ActiveDOMObject,
-        Constructor,
-        CallWith=ScriptExecutionContext,
-        EventTarget,
-        JSNoStaticTables
-    ] FileReader {
-        // ready states
-        const unsigned short EMPTY = 0;
-        const unsigned short LOADING = 1;
-        const unsigned short DONE = 2;
-        readonly attribute unsigned short readyState;
-
-        // async read methods
-        void readAsArrayBuffer(in Blob blob)
-            raises(OperationNotAllowedException);
-        void readAsBinaryString(in Blob blob)
-            raises(OperationNotAllowedException);
-        void readAsText(in Blob blob, in [Optional] DOMString encoding)
-            raises(OperationNotAllowedException);
-        void readAsDataURL(in Blob blob)
-            raises(OperationNotAllowedException);
-
-        void abort();
-
-        // file data
-        readonly attribute [Custom] DOMObject result;
-
-        readonly attribute FileError error;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-
-        attribute EventListener onloadstart;
-        attribute EventListener onprogress;
-        attribute EventListener onload;
-        attribute EventListener onabort;
-        attribute EventListener onerror;
-        attribute EventListener onloadend;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/FileReaderSync.idl b/elemental/idl/third_party/WebCore/fileapi/FileReaderSync.idl
deleted file mode 100644
index 920f368..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/FileReaderSync.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=BLOB,
-        Constructor,
-        JSNoStaticTables
-    ] FileReaderSync {
-        [CallWith=ScriptExecutionContext] ArrayBuffer readAsArrayBuffer(in Blob blob)
-            raises(FileException);
-        [CallWith=ScriptExecutionContext] DOMString readAsBinaryString(in Blob blob)
-            raises(FileException);
-        [CallWith=ScriptExecutionContext] DOMString readAsText(in Blob blob, in [Optional] DOMString encoding)
-            raises(FileException);
-        [CallWith=ScriptExecutionContext] DOMString readAsDataURL(in Blob blob)
-            raises(FileException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/OperationNotAllowedException.idl b/elemental/idl/third_party/WebCore/fileapi/OperationNotAllowedException.idl
deleted file mode 100644
index 50040df..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/OperationNotAllowedException.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    exception [
-        Conditional=BLOB,
-        DoNotCheckConstants,
-        JSNoStaticTables
-    ] OperationNotAllowedException {
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        const unsigned short NOT_ALLOWED_ERR = 1;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/fileapi/WebKitBlobBuilder.idl b/elemental/idl/third_party/WebCore/fileapi/WebKitBlobBuilder.idl
deleted file mode 100644
index e0c7c5c..0000000
--- a/elemental/idl/third_party/WebCore/fileapi/WebKitBlobBuilder.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=LEGACY_WEBKIT_BLOB_BUILDER,
-        Constructor,
-        JSGenerateToNativeObject,
-        JSNoStaticTables
-    ] WebKitBlobBuilder {
-#if !defined(LANGUAGE_OBJECTIVE_C)
-        Blob getBlob(in [Optional, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString contentType);
-#endif
-        void append(in Blob blob);
-#if defined(ENABLE_BLOB) && ENABLE_BLOB
-        void append(in ArrayBuffer arrayBuffer);
-#endif
-        void append(in DOMString value, in [Optional, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString endings) raises (DOMException);
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/DOMFormData.idl b/elemental/idl/third_party/WebCore/html/DOMFormData.idl
deleted file mode 100644
index 73eaa66..0000000
--- a/elemental/idl/third_party/WebCore/html/DOMFormData.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        InterfaceName=FormData
-    ] DOMFormData {
-        // void append(DOMString name, DOMString value);
-        // void append(DOMString name, Blob value, optional DOMString filename);
-        [Custom] void append(in [Optional=DefaultIsUndefined] DOMString name, 
-                             in [Optional=DefaultIsUndefined] DOMString value,
-                             in [Optional=DefaultIsUndefined] DOMString filename);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/DOMSettableTokenList.idl b/elemental/idl/third_party/WebCore/html/DOMSettableTokenList.idl
deleted file mode 100644
index 93bf67f..0000000
--- a/elemental/idl/third_party/WebCore/html/DOMSettableTokenList.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        IndexedGetter,
-        JSGenerateToJSObject
-    ] DOMSettableTokenList : DOMTokenList {
-        attribute DOMString value;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/DOMTokenList.idl b/elemental/idl/third_party/WebCore/html/DOMTokenList.idl
deleted file mode 100644
index 55b636f..0000000
--- a/elemental/idl/third_party/WebCore/html/DOMTokenList.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        JSGenerateIsReachable=ImplElementRoot,
-        IndexedGetter,
-        V8CustomToJSObject
-    ] DOMTokenList {
-        readonly attribute unsigned long length;
-        [TreatReturnedNullStringAs=Null] DOMString item(in unsigned long index);
-        boolean contains(in DOMString token) raises(DOMException);
-        void add(in DOMString token) raises(DOMException);
-        void remove(in DOMString token) raises(DOMException);
-        boolean toggle(in DOMString token) raises(DOMException);
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [NotEnumerable] DOMString toString();
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/DOMURL.idl b/elemental/idl/third_party/WebCore/html/DOMURL.idl
deleted file mode 100644
index 44bb638..0000000
--- a/elemental/idl/third_party/WebCore/html/DOMURL.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2012 Motorola Mobility Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=BLOB,
-        Constructor,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject,
-        JSNoStaticTables,
-        InterfaceName=URL
-    ] DOMURL {
-#if defined(ENABLE_MEDIA_STREAM) && ENABLE_MEDIA_STREAM
-        [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(in MediaStream stream);
-#endif
-        [CallWith=ScriptExecutionContext,TreatReturnedNullStringAs=Null] static DOMString createObjectURL(in Blob blob);
-        [CallWith=ScriptExecutionContext] static void revokeObjectURL(in DOMString url);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLAllCollection.idl b/elemental/idl/third_party/WebCore/html/HTMLAllCollection.idl
deleted file mode 100644
index 5ceae01..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLAllCollection.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-
-    interface [
-        IndexedGetter,
-        NamedGetter,
-        CustomCall,
-        MasqueradesAsUndefined,
-        JSGenerateIsReachable
-    ] HTMLAllCollection {
-        readonly attribute unsigned long length;
-        [Custom] Node item(in [Optional=DefaultIsUndefined] unsigned long index);
-        [Custom] Node namedItem(in DOMString name);
-
-        // FIXME: This should return an HTMLAllCollection.
-        NodeList tags(in DOMString name);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLAnchorElement.idl b/elemental/idl/third_party/WebCore/html/HTMLAnchorElement.idl
deleted file mode 100644
index 7bd174c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLAnchorElement.idl
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLAnchorElement : HTMLElement {
-        attribute [Reflect] DOMString charset;
-        attribute [Reflect] DOMString coords;
-        attribute [Conditional=DOWNLOAD_ATTRIBUTE, Reflect] DOMString download;
-        attribute [Reflect, URL] DOMString href;
-        attribute [Reflect] DOMString hreflang;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString ping;
-        attribute [Reflect] DOMString rel;
-        attribute [Reflect] DOMString rev;
-        attribute [Reflect] DOMString shape;
-        attribute [Reflect] DOMString target;
-        attribute [Reflect] DOMString type;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        readonly attribute DOMString hash;
-        readonly attribute DOMString host;
-        readonly attribute DOMString hostname;
-        readonly attribute DOMString pathname;
-        readonly attribute DOMString port;
-        readonly attribute DOMString protocol;
-        readonly attribute DOMString search;
-#else
-        attribute [TreatNullAs=NullString] DOMString hash;
-        attribute [TreatNullAs=NullString] DOMString host;
-        attribute [TreatNullAs=NullString] DOMString hostname;
-        attribute [TreatNullAs=NullString] DOMString pathname;
-        attribute [TreatNullAs=NullString] DOMString port;
-        attribute [TreatNullAs=NullString] DOMString protocol;
-        attribute [TreatNullAs=NullString] DOMString search;
-
-        readonly attribute [TreatNullAs=NullString] DOMString origin;
-#endif
-
-        readonly attribute DOMString text;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [NotEnumerable] DOMString toString();
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute URL absoluteLinkURL;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLAppletElement.idl b/elemental/idl/third_party/WebCore/html/HTMLAppletElement.idl
deleted file mode 100644
index 8f16a40..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLAppletElement.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        CustomNamedSetter,
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomCall
-    ] HTMLAppletElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString alt;
-        attribute [Reflect] DOMString archive;
-        attribute [Reflect] DOMString code;
-        attribute [Reflect] DOMString codeBase;
-        attribute [Reflect] DOMString height;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        attribute [Reflect] DOMString hspace;
-#else
-        attribute [Reflect] long hspace;
-#endif
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString object;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        attribute [Reflect] DOMString vspace;
-#else
-        attribute [Reflect] long vspace;
-#endif
-        attribute [Reflect] DOMString width;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLAreaElement.idl b/elemental/idl/third_party/WebCore/html/HTMLAreaElement.idl
deleted file mode 100644
index dfb9c9b..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLAreaElement.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLAreaElement : HTMLElement {
-        attribute [Reflect] DOMString alt;
-        attribute [Reflect] DOMString coords;
-        attribute [Reflect, URL] DOMString href;
-        attribute [Reflect] boolean noHref;
-        attribute [Reflect] DOMString ping;
-        attribute [Reflect] DOMString shape;
-        attribute [Reflect] DOMString target;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-        // IE Extensions
-        readonly attribute DOMString hash;
-        readonly attribute DOMString host;
-        readonly attribute DOMString hostname;
-        readonly attribute DOMString pathname;
-        readonly attribute DOMString port;
-        readonly attribute DOMString protocol;
-        readonly attribute DOMString search;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute URL absoluteLinkURL;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLAudioElement.idl b/elemental/idl/third_party/WebCore/html/HTMLAudioElement.idl
deleted file mode 100644
index 1adf01c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLAudioElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        ActiveDOMObject,
-        Conditional=VIDEO,
-        NamedConstructor=Audio(in [Optional=DefaultIsNullString] DOMString src)
-    ] HTMLAudioElement : HTMLMediaElement {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLBRElement.idl b/elemental/idl/third_party/WebCore/html/HTMLBRElement.idl
deleted file mode 100644
index a6d215d..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLBRElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2009 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLBRElement : HTMLElement {
-        attribute [Reflect] DOMString clear;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLBaseElement.idl b/elemental/idl/third_party/WebCore/html/HTMLBaseElement.idl
deleted file mode 100644
index 2750c9e..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLBaseElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2009, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLBaseElement : HTMLElement {
-        attribute [Reflect, URL] DOMString href;
-        attribute [Reflect] DOMString target;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLBaseFontElement.idl b/elemental/idl/third_party/WebCore/html/HTMLBaseFontElement.idl
deleted file mode 100644
index 95bc92c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLBaseFontElement.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2006, 2009, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLBaseFontElement : HTMLElement {
-        attribute [Reflect] DOMString color;
-        attribute [Reflect] DOMString face;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString size; // this changed to a long, but our existing API is a string
-#else
-        attribute [Reflect] long size;
-#endif
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLBodyElement.idl b/elemental/idl/third_party/WebCore/html/HTMLBodyElement.idl
deleted file mode 100644
index a6b7f56..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLBodyElement.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2006, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLBodyElement : HTMLElement {
-        attribute [Reflect] DOMString aLink;
-        attribute [Reflect] DOMString background;
-        attribute [Reflect] DOMString bgColor;
-        attribute [Reflect] DOMString link;
-        attribute [Reflect] DOMString text;
-        attribute [Reflect] DOMString vLink;
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // Event handler attributes
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onbeforeunload;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onhashchange;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onmessage;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onoffline;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener ononline;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onpopstate;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onresize;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onstorage;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onunload;
-
-        attribute [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] EventListener onorientationchange;
-
-        // Overrides of Element attributes (with different implementation in bindings).
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onblur;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onerror;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onfocus;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onload;
-
-        // Not implemented yet.
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onafterprint;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onbeforeprint;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onredo;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onundo;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLButtonElement.idl b/elemental/idl/third_party/WebCore/html/HTMLButtonElement.idl
deleted file mode 100644
index 692fd61..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLButtonElement.idl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLButtonElement : HTMLElement {
-        attribute [Reflect] boolean autofocus;
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect, URL] DOMString formAction;
-        attribute [TreatNullAs=NullString] DOMString formEnctype;
-        attribute [TreatNullAs=NullString] DOMString formMethod;
-        attribute [Reflect] boolean formNoValidate;
-        attribute [Reflect] DOMString formTarget;
-        attribute [Reflect] DOMString name;
-        readonly attribute DOMString type;
-        attribute [Reflect] DOMString value;
-
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        void click();
-#endif
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLCanvasElement.idl b/elemental/idl/third_party/WebCore/html/HTMLCanvasElement.idl
deleted file mode 100644
index 2be96a5..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLCanvasElement.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2006, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. 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. 
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject
-    ] HTMLCanvasElement : HTMLElement {
-
-        attribute long width;
-        attribute long height;
-
-        [Custom] DOMString toDataURL(in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString type)
-            raises(DOMException);
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // The custom binding is needed to handle context creation attributes.
-        [Custom] DOMObject getContext(in [Optional=DefaultIsUndefined] DOMString contextId);
-#endif
-#endif
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLCollection.idl b/elemental/idl/third_party/WebCore/html/HTMLCollection.idl
deleted file mode 100644
index 7783776..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLCollection.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        IndexedGetter,
-        NamedGetter,
-        CustomToJSObject,
-        JSGenerateIsReachable,
-        ObjCPolymorphic
-    ] HTMLCollection {
-        readonly attribute unsigned long length;
-        Node item(in [Optional=DefaultIsUndefined] unsigned long index);
-        [Custom] Node namedItem(in [Optional=DefaultIsUndefined] DOMString name);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        NodeList tags(in [Optional=DefaultIsUndefined] DOMString name);
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDListElement.idl b/elemental/idl/third_party/WebCore/html/HTMLDListElement.idl
deleted file mode 100644
index 1a9326f..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDListElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLDListElement : HTMLElement {
-        attribute [Reflect] boolean compact;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDataListElement.idl b/elemental/idl/third_party/WebCore/html/HTMLDataListElement.idl
deleted file mode 100644
index 1f38105..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDataListElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=DATALIST,
-    ] HTMLDataListElement : HTMLElement {
-        readonly attribute HTMLCollection options;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDetailsElement.idl b/elemental/idl/third_party/WebCore/html/HTMLDetailsElement.idl
deleted file mode 100644
index 5ad9508..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDetailsElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
- *
- * 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.
- */
-
-module html {
-
-    interface HTMLDetailsElement : HTMLElement {
-        attribute [Reflect] boolean open;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDirectoryElement.idl b/elemental/idl/third_party/WebCore/html/HTMLDirectoryElement.idl
deleted file mode 100644
index b096974..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDirectoryElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLDirectoryElement : HTMLElement {
-        attribute [Reflect] boolean compact;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDivElement.idl b/elemental/idl/third_party/WebCore/html/HTMLDivElement.idl
deleted file mode 100644
index 90fb84f..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDivElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLDivElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLDocument.idl b/elemental/idl/third_party/WebCore/html/HTMLDocument.idl
deleted file mode 100644
index de9b51d..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLDocument.idl
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        CustomNamedGetter,
-        V8CustomToJSObject
-    ] HTMLDocument : Document {
-        [JSCustom, V8Custom] void open();
-        void close();
-        [Custom] void write(in [Optional=DefaultIsUndefined] DOMString text);
-        [Custom] void writeln(in [Optional=DefaultIsUndefined] DOMString text);
-
-        readonly attribute HTMLCollection embeds;
-        readonly attribute HTMLCollection plugins;
-        readonly attribute HTMLCollection scripts;
-
-        // Extensions
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // FIXME: This should eventually be available (if they are wanted) for all languages.
-                 attribute [Custom, Deletable] HTMLAllCollection all;
-#endif
-
-        void clear();
-
-        void captureEvents();
-        void releaseEvents();
-
-        readonly attribute long width;
-        readonly attribute long height;
-                 attribute [TreatNullAs=NullString] DOMString dir;
-                 attribute [TreatNullAs=NullString] DOMString designMode;
-        readonly attribute DOMString compatMode;
-
-        readonly attribute Element activeElement;
-        boolean hasFocus();
-
-        // Deprecated attributes
-                 attribute [TreatNullAs=NullString] DOMString bgColor;
-                 attribute [TreatNullAs=NullString] DOMString fgColor;
-                 attribute [TreatNullAs=NullString] DOMString alinkColor;
-                 attribute [TreatNullAs=NullString] DOMString linkColor;
-                 attribute [TreatNullAs=NullString] DOMString vlinkColor;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLElement.idl b/elemental/idl/third_party/WebCore/html/HTMLElement.idl
deleted file mode 100644
index 4f5f236..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLElement.idl
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject,
-        JSCustomPushEventHandlerScope,
-        V8CustomToJSObject
-    ] 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.
-                 attribute [Reflect] DOMString id;
-                 attribute [Reflect] DOMString title;
-                 attribute [Reflect] DOMString lang;
-                 attribute boolean             translate;
-                 attribute [Reflect] DOMString dir;
-                 attribute [Reflect=class] DOMString className;
-                 readonly attribute DOMTokenList classList;
-
-                 attribute long              tabIndex;
-                 attribute boolean           draggable;
-                 attribute [Reflect] DOMString webkitdropzone;
-                 attribute [Reflect] boolean hidden;
-                 attribute [Reflect] DOMString accessKey;
-
-        // Extensions
-                 attribute [TreatNullAs=NullString] DOMString innerHTML
-                     setter raises(DOMException);
-                 attribute [TreatNullAs=NullString] DOMString innerText
-                     setter raises(DOMException);
-                 attribute [TreatNullAs=NullString] DOMString outerHTML
-                     setter raises(DOMException);
-                 attribute [TreatNullAs=NullString] DOMString outerText
-                     setter raises(DOMException);
-
-        Element insertAdjacentElement(in [Optional=DefaultIsUndefined] DOMString where,
-                                      in [Optional=DefaultIsUndefined] Element element)
-            raises(DOMException);
-        void insertAdjacentHTML(in [Optional=DefaultIsUndefined] DOMString where,
-                                in [Optional=DefaultIsUndefined] DOMString html)
-            raises(DOMException);
-        void insertAdjacentText(in [Optional=DefaultIsUndefined] DOMString where,
-                                in [Optional=DefaultIsUndefined] DOMString text)
-            raises(DOMException);
-
-        readonly attribute HTMLCollection children;
-
-                 attribute [TreatNullAs=NullString] DOMString contentEditable
-                     setter raises(DOMException);
-        readonly attribute boolean isContentEditable;
-
-                 attribute boolean spellcheck;
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C // No Objective-C bindings yet.
-                 attribute [Conditional=MICRODATA, Reflect] boolean itemScope;
-        readonly attribute [Conditional=MICRODATA] DOMSettableTokenList itemType;
-                 attribute [Conditional=MICRODATA, Reflect, URL] DOMString itemId;
-
-        readonly attribute [Conditional=MICRODATA] DOMSettableTokenList itemRef;
-        readonly attribute [Conditional=MICRODATA] DOMSettableTokenList itemProp;
-
-#if defined(ENABLE_MICRODATA) && ENABLE_MICRODATA
-        readonly attribute [Conditional=MICRODATA] HTMLPropertiesCollection properties;
-#endif
-#endif
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-                 attribute [Conditional=MICRODATA, Custom] DOMObject itemValue
-                     setter raises(DOMException);
-#endif
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        readonly attribute DOMString titleDisplayString;
-#endif
-
-        void click();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLEmbedElement.idl b/elemental/idl/third_party/WebCore/html/HTMLEmbedElement.idl
deleted file mode 100644
index b6e3c16..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLEmbedElement.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        CustomNamedSetter,
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomCall
-    ] HTMLEmbedElement : HTMLElement {
-    attribute [Reflect] DOMString align;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    attribute [Reflect] DOMString height;
-#else
-    attribute [Reflect] long height;
-#endif
-    attribute [Reflect] DOMString name;
-    attribute [Reflect, URL] DOMString src;
-    attribute [Reflect] DOMString type;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    attribute [Reflect] DOMString width;
-#else
-    attribute [Reflect] long width;
-#endif
-
-#if defined(ENABLE_SVG) && ENABLE_SVG
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C || defined(ENABLE_SVG_DOM_OBJC_BINDINGS) && ENABLE_SVG_DOM_OBJC_BINDINGS
-    [CheckSecurityForNode] SVGDocument getSVGDocument() raises(DOMException);
-#endif
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLFieldSetElement.idl b/elemental/idl/third_party/WebCore/html/HTMLFieldSetElement.idl
deleted file mode 100644
index d67b3f6..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLFieldSetElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLFieldSetElement : HTMLElement {
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect] DOMString name;
-
-        readonly attribute DOMString type;
-
-        readonly attribute HTMLCollection elements;
-
-        readonly attribute boolean         willValidate;
-        readonly attribute ValidityState   validity;
-        readonly attribute DOMString       validationMessage;
-        boolean  checkValidity();
-        void     setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLFontElement.idl b/elemental/idl/third_party/WebCore/html/HTMLFontElement.idl
deleted file mode 100644
index 141816d..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLFontElement.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLFontElement : HTMLElement {
-        attribute [Reflect] DOMString color;
-        attribute [Reflect] DOMString face;
-        attribute [Reflect] DOMString size;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLFormElement.idl b/elemental/idl/third_party/WebCore/html/HTMLFormElement.idl
deleted file mode 100644
index b6a536c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLFormElement.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        IndexedGetter,
-        CustomNamedGetter
-    ] HTMLFormElement : HTMLElement {
-        attribute [Reflect=accept_charset] DOMString acceptCharset;
-        attribute [Reflect, URL] DOMString action;
-        attribute [Reflect] DOMString autocomplete;
-        attribute [TreatNullAs=NullString] DOMString enctype;
-        attribute [TreatNullAs=NullString] DOMString encoding;
-        attribute [TreatNullAs=NullString] DOMString method;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] boolean noValidate;
-        attribute [Reflect] DOMString target;
-
-        readonly attribute HTMLCollection elements;
-        readonly attribute long length;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [ImplementedAs=submitFromJavaScript] void submit();
-#else
-        void submit();
-#endif
-        void reset();
-        boolean checkValidity();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLFrameElement.idl b/elemental/idl/third_party/WebCore/html/HTMLFrameElement.idl
deleted file mode 100644
index f40f7b1..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLFrameElement.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLFrameElement : HTMLElement {
-
-        attribute [Reflect] DOMString frameBorder;
-        attribute [Reflect] DOMString longDesc;
-        attribute [Reflect] DOMString marginHeight;
-        attribute [Reflect] DOMString marginWidth;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] boolean noResize;
-        attribute [Reflect] DOMString scrolling;
-        attribute [Reflect, URL] DOMString src;
-
-        // Introduced in DOM Level 2:
-        readonly attribute [CheckSecurityForNode] Document contentDocument;
-
-        // Extensions
-        readonly attribute DOMWindow contentWindow;
-
-#if defined(ENABLE_SVG) && ENABLE_SVG
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C || defined(ENABLE_SVG_DOM_OBJC_BINDINGS) && ENABLE_SVG_DOM_OBJC_BINDINGS
-        [CheckSecurityForNode] SVGDocument getSVGDocument()
-            raises(DOMException);
-#endif
-#endif
-
-        attribute [TreatNullAs=NullString, CustomSetter] DOMString location;
-
-        readonly attribute long width;
-        readonly attribute long height;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLFrameSetElement.idl b/elemental/idl/third_party/WebCore/html/HTMLFrameSetElement.idl
deleted file mode 100644
index a3d4b3e..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLFrameSetElement.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserve
- * 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.
- */
-
-module html {
-
-    interface [
-        CustomNamedGetter
-    ] HTMLFrameSetElement : HTMLElement {
-        attribute [Reflect] DOMString cols;
-        attribute [Reflect] DOMString rows;
-
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        // Event handler attributes
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onbeforeunload;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onhashchange;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onmessage;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onoffline;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener ononline;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onpopstate;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onresize;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onstorage;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onunload;
-
-        attribute [Conditional=ORIENTATION_EVENTS, NotEnumerable, JSWindowEventListener] EventListener onorientationchange;
-
-        // Overrides of Element attributes (with different implementation in bindings).
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onblur;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onerror;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onfocus;
-        attribute [NotEnumerable, JSWindowEventListener] EventListener onload;
-
-        // Not implemented yet.
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onafterprint;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onbeforeprint;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onredo;
-        // attribute [NotEnumerable, JSWindowEventListener] EventListener onundo;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLHRElement.idl b/elemental/idl/third_party/WebCore/html/HTMLHRElement.idl
deleted file mode 100644
index 23a57da..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLHRElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLHRElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] boolean noShade;
-        attribute [Reflect] DOMString size;
-        attribute [Reflect] DOMString width;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLHeadElement.idl b/elemental/idl/third_party/WebCore/html/HTMLHeadElement.idl
deleted file mode 100644
index 59bdbf0..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLHeadElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLHeadElement : HTMLElement {
-        attribute [Reflect] DOMString profile;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLHeadingElement.idl b/elemental/idl/third_party/WebCore/html/HTMLHeadingElement.idl
deleted file mode 100644
index e419c1c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLHeadingElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLHeadingElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLHtmlElement.idl b/elemental/idl/third_party/WebCore/html/HTMLHtmlElement.idl
deleted file mode 100644
index 03c661c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLHtmlElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLHtmlElement : HTMLElement {
-        attribute [Reflect] DOMString version;
-        attribute [Reflect, URL] DOMString manifest;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLIFrameElement.idl b/elemental/idl/third_party/WebCore/html/HTMLIFrameElement.idl
deleted file mode 100644
index 2dbf38d..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLIFrameElement.idl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLIFrameElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString frameBorder;
-        attribute [Reflect] DOMString height;
-        attribute [Reflect] DOMString longDesc;
-        attribute [Reflect] DOMString marginHeight;
-        attribute [Reflect] DOMString marginWidth;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString sandbox;
-        attribute [Reflect, Conditional=IFRAME_SEAMLESS] boolean seamless;
-        attribute [Reflect] DOMString scrolling;
-        attribute [Reflect, URL] DOMString src;
-        attribute [Reflect] DOMString srcdoc;
-        attribute [Reflect] DOMString width;
-
-        // Introduced in DOM Level 2:
-        readonly attribute [CheckSecurityForNode] Document contentDocument;
-
-        // Extensions
-        readonly attribute DOMWindow contentWindow;
-
-#if defined(ENABLE_SVG) && ENABLE_SVG
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C || defined(ENABLE_SVG_DOM_OBJC_BINDINGS) && ENABLE_SVG_DOM_OBJC_BINDINGS
-        [CheckSecurityForNode] SVGDocument getSVGDocument()
-            raises(DOMException);
-#endif
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLImageElement.idl b/elemental/idl/third_party/WebCore/html/HTMLImageElement.idl
deleted file mode 100644
index d893b6c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLImageElement.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2006, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject
-    ] HTMLImageElement : HTMLElement {
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString alt;
-        attribute [Reflect] DOMString border;
-        attribute [Reflect] DOMString crossOrigin;
-        attribute long height;
-        attribute [Reflect] long hspace;
-        attribute [Reflect] boolean isMap;
-        attribute [Reflect, URL] DOMString longDesc;
-        attribute [Reflect, URL] DOMString src;
-        attribute [Reflect] DOMString useMap;
-        attribute [Reflect] long vspace;
-        attribute long width;
-        
-        // Extensions
-        readonly attribute boolean complete;
-        attribute [Reflect,URL] DOMString lowsrc;
-        readonly attribute long naturalHeight;
-        readonly attribute long naturalWidth;
-        readonly attribute long x;
-        readonly attribute long y;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute DOMString altDisplayString;
-        readonly attribute URL absoluteImageURL;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLInputElement.idl b/elemental/idl/third_party/WebCore/html/HTMLInputElement.idl
deleted file mode 100644
index e326ce7..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLInputElement.idl
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2012 Samsung Electronics. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLInputElement : HTMLElement {
-        attribute [Reflect] DOMString accept;
-        attribute [Reflect] DOMString alt;
-        attribute [Reflect] DOMString autocomplete;
-        attribute [Reflect] boolean autofocus;
-        attribute [Reflect=checked] boolean defaultChecked;
-        attribute boolean checked;
-        attribute [Reflect] DOMString dirName;
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute FileList files;
-        attribute [Reflect, URL] DOMString formAction;
-        attribute [TreatNullAs=NullString] DOMString formEnctype;
-        attribute [TreatNullAs=NullString] DOMString formMethod;
-        attribute [Reflect] boolean formNoValidate;
-        attribute [Reflect] DOMString formTarget;
-        attribute unsigned long height;
-        attribute boolean indeterminate;
-        readonly attribute [Conditional=DATALIST] HTMLElement list;
-        attribute [Reflect] DOMString max;
-        attribute long maxLength setter raises(DOMException);
-        attribute [Reflect] DOMString min;
-        attribute [Reflect] boolean multiple;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString pattern;
-        attribute [Reflect] DOMString placeholder;
-        attribute [Reflect] boolean readOnly;
-        attribute [Reflect] boolean required;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [ObjCImplementedAsUnsignedLong] DOMString size; // DOM level 2 changed this to a long, but ObjC API is a string
-#else
-        attribute unsigned long size; // Changed string -> long -> unsigned long
-#endif
-        attribute [Reflect, URL] DOMString src;
-        attribute [Reflect] DOMString step;
-        attribute [TreatNullAs=NullString] DOMString type; // readonly dropped as part of DOM level 2
-        attribute [TreatNullAs=NullString] DOMString defaultValue;
-        attribute [TreatNullAs=NullString] DOMString value;
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        attribute Date valueAsDate setter raises(DOMException);
-#endif
-        attribute double valueAsNumber setter raises(DOMException);
-
-        void stepUp(in [Optional] long n) raises(DOMException);
-        void stepDown(in [Optional] long n) raises(DOMException);
-
-        attribute unsigned long width;
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-
-        void select();
-        attribute [Custom] long selectionStart;
-        attribute [Custom] long selectionEnd;
-        attribute [Custom] DOMString selectionDirection;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        [Custom] void setSelectionRange(in long start, in long end);
-#else
-        [Custom] void setSelectionRange(in [Optional=DefaultIsUndefined] long start, 
-                                        in [Optional=DefaultIsUndefined] long end, 
-                                        in [Optional] DOMString direction);
-#endif
-
-        // Non-standard attributes
-        attribute [Reflect] DOMString align;
-        attribute [Conditional=DIRECTORY_UPLOAD, Reflect] boolean webkitdirectory;
-        attribute [Reflect] DOMString useMap;
-        attribute [Reflect] boolean incremental;
-        attribute [Conditional=INPUT_SPEECH, Reflect, V8EnabledAtRuntime] boolean webkitSpeech;
-        attribute [Conditional=INPUT_SPEECH, Reflect, V8EnabledAtRuntime] boolean webkitGrammar;
-        attribute [Conditional=INPUT_SPEECH, NotEnumerable] EventListener onwebkitspeechchange;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        void click();
-#endif
-
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        void setValueForUser(in [TreatNullAs=NullString] DOMString value);
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute DOMString altDisplayString;
-        readonly attribute URL absoluteImageURL;
-#endif
-
-        // See http://www.w3.org/TR/html-media-capture/
-        attribute [Conditional=MEDIA_CAPTURE] DOMString capture;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLIntentElement.idl b/elemental/idl/third_party/WebCore/html/HTMLIntentElement.idl
deleted file mode 100644
index 608c5ac..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLIntentElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-
-    interface [
-        Conditional=WEB_INTENTS_TAG
-    ] HTMLIntentElement : HTMLElement {
-        attribute [Reflect] DOMString action;
-        attribute [Reflect] DOMString type;
-        attribute [Reflect, URL] DOMString href;
-        attribute [Reflect] DOMString title;
-        attribute [Reflect] DOMString disposition;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLKeygenElement.idl b/elemental/idl/third_party/WebCore/html/HTMLKeygenElement.idl
deleted file mode 100644
index 914fb99..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLKeygenElement.idl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface HTMLKeygenElement : HTMLElement {
-        attribute [Reflect] boolean autofocus;
-        attribute [Reflect] DOMString challenge;
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect] DOMString keytype;
-        attribute DOMString name;
-
-        readonly attribute DOMString type;
-
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLLIElement.idl b/elemental/idl/third_party/WebCore/html/HTMLLIElement.idl
deleted file mode 100644
index 2dc541b..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLLIElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLLIElement : HTMLElement {
-        attribute [Reflect] DOMString type;
-        attribute [Reflect] long value;    
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLLabelElement.idl b/elemental/idl/third_party/WebCore/html/HTMLLabelElement.idl
deleted file mode 100644
index bf79680..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLLabelElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLLabelElement : HTMLElement {
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect=for] DOMString htmlFor;
-        readonly attribute HTMLElement control;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLLegendElement.idl b/elemental/idl/third_party/WebCore/html/HTMLLegendElement.idl
deleted file mode 100644
index bf755a5..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLLegendElement.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLLegendElement : HTMLElement {
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect] DOMString align;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLLinkElement.idl b/elemental/idl/third_party/WebCore/html/HTMLLinkElement.idl
deleted file mode 100644
index 8d16f25..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLLinkElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLLinkElement : HTMLElement {
-        attribute [Reflect] boolean disabled;
-        attribute [Reflect] DOMString charset;
-        attribute [Reflect, URL] DOMString href;
-        attribute [Reflect] DOMString hreflang;
-        attribute [Reflect] DOMString media;
-        attribute [Reflect] DOMString rel;
-        attribute [Reflect] DOMString rev;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        attribute [Custom] DOMSettableTokenList sizes;
-#endif
-        attribute [Reflect] DOMString target;
-        attribute [Reflect] DOMString type;
-
-        // DOM Level 2 Style
-        readonly attribute StyleSheet sheet;
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute URL absoluteLinkURL;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMapElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMapElement.idl
deleted file mode 100644
index 7811c9a..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMapElement.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLMapElement : HTMLElement {
-        readonly attribute HTMLCollection areas;
-        attribute [Reflect] DOMString name;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMarqueeElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMarqueeElement.idl
deleted file mode 100644
index 3174fac..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMarqueeElement.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLMarqueeElement : HTMLElement {
-        void start();
-        void stop();
-        
-        attribute [Reflect] DOMString behavior;
-        attribute [Reflect] DOMString bgColor;
-        attribute [Reflect] DOMString direction;
-        attribute [Reflect] DOMString height;
-        attribute [Reflect] unsigned long hspace;
-        attribute long loop setter raises(DOMException);
-        attribute long scrollAmount setter raises(DOMException);
-        attribute long scrollDelay setter raises(DOMException);
-        attribute [Reflect] boolean trueSpeed;
-        attribute [Reflect] unsigned long vspace;
-        attribute [Reflect] DOMString width;
-
-        // FIXME: Implement the following event handler attributes
-        // https://bugs.webkit.org/show_bug.cgi?id=49788
-        // attribute EventListener onbounce;
-        // attribute EventListener onfinish;
-        // attribute EventListener onstart;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMediaElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMediaElement.idl
deleted file mode 100644
index ac0fa46..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMediaElement.idl
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2007, 2010, 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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. 
- */
-
-module html {
-    interface [
-        Conditional=VIDEO,
-        JSGenerateToNativeObject
-    ] HTMLMediaElement : HTMLElement {
-
-    // error state
-    readonly attribute MediaError error;
-
-    // network state
-    attribute [Reflect, URL] DOMString src;
-    readonly attribute [URL] DOMString currentSrc;
-    
-    const unsigned short NETWORK_EMPTY = 0;
-    const unsigned short NETWORK_IDLE = 1;
-    const unsigned short NETWORK_LOADING = 2;
-    const unsigned short NETWORK_NO_SOURCE = 3;
-    readonly attribute unsigned short networkState;
-    attribute DOMString preload;
-
-    readonly attribute TimeRanges buffered;
-    void load() 
-        raises (DOMException);
-#if defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA
-    DOMString canPlayType(in [Optional=DefaultIsUndefined] DOMString type, in [Optional=DefaultIsNullString, TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem);
-#else
-    DOMString canPlayType(in [Optional=DefaultIsUndefined] DOMString type);
-#endif
-
-    // ready state
-    const unsigned short HAVE_NOTHING = 0;
-    const unsigned short HAVE_METADATA = 1;
-    const unsigned short HAVE_CURRENT_DATA = 2;
-    const unsigned short HAVE_FUTURE_DATA = 3;
-    const unsigned short HAVE_ENOUGH_DATA = 4;
-    readonly attribute unsigned short readyState;
-    readonly attribute boolean seeking;
-
-    // playback state
-    attribute float currentTime
-        setter raises (DOMException);
-    readonly attribute double initialTime;
-    readonly attribute float startTime;
-    readonly attribute float duration;
-    readonly attribute boolean paused;
-    attribute float defaultPlaybackRate;
-    attribute float playbackRate;
-    readonly attribute TimeRanges played;
-    readonly attribute TimeRanges seekable;
-    readonly attribute boolean ended;
-    attribute [Reflect] boolean autoplay;
-    attribute [Reflect] boolean loop;
-    void play();
-    void pause();
-
-    // controls
-    attribute boolean controls;
-    attribute float volume 
-        setter raises (DOMException);
-    attribute boolean muted;
-    attribute [Reflect=muted] boolean defaultMuted;
-
-    // WebKit extensions
-    attribute boolean webkitPreservesPitch;
-
-    readonly attribute boolean webkitHasClosedCaptions;
-    attribute boolean webkitClosedCaptionsVisible;
-
-    // The number of bytes consumed by the media decoder.
-    readonly attribute [Conditional=MEDIA_STATISTICS] unsigned long webkitAudioDecodedByteCount;
-    readonly attribute [Conditional=MEDIA_STATISTICS] unsigned long webkitVideoDecodedByteCount;
-
-#if defined(ENABLE_MEDIA_SOURCE) && ENABLE_MEDIA_SOURCE
-    // URL passed to src attribute to enable the media source logic.
-    readonly attribute [V8EnabledAtRuntime=mediaSource, URL] DOMString webkitMediaSourceURL;
-
-    // Manages IDs for appending media to the source.
-    [V8EnabledAtRuntime=mediaSource] void webkitSourceAddId(in DOMString id, in DOMString type) raises (DOMException);
-    [V8EnabledAtRuntime=mediaSource] void webkitSourceRemoveId(in DOMString id) raises (DOMException);
-
-    // Returns the time ranges buffered for a specific source ID.
-    [V8EnabledAtRuntime=mediaSource] TimeRanges webkitSourceBuffered(in DOMString id) raises (DOMException);
-    
-    // Appends segment data.
-    [V8EnabledAtRuntime=mediaSource] void webkitSourceAppend(in DOMString id, in Uint8Array data) raises (DOMException);
-
-    // Aborts the current segment.
-    [V8EnabledAtRuntime=mediaSource] void webkitSourceAbort(in DOMString id) raises (DOMException);
-
-    // Signals the end of stream.
-    [V8EnabledAtRuntime=mediaSource] const unsigned short EOS_NO_ERROR = 0; // End of stream reached w/o error.
-    [V8EnabledAtRuntime=mediaSource] const unsigned short EOS_NETWORK_ERR = 1; // A network error triggered end of stream.
-    [V8EnabledAtRuntime=mediaSource] const unsigned short EOS_DECODE_ERR = 2; // A decode error triggered end of stream.
-    [V8EnabledAtRuntime=mediaSource] void webkitSourceEndOfStream(in unsigned short status) raises (DOMException);
-
-    // Indicates the current state of the media source.
-    [V8EnabledAtRuntime=mediaSource] const unsigned short SOURCE_CLOSED = 0;
-    [V8EnabledAtRuntime=mediaSource] const unsigned short SOURCE_OPEN = 1;
-    [V8EnabledAtRuntime=mediaSource] const unsigned short SOURCE_ENDED = 2;
-    readonly attribute [V8EnabledAtRuntime=mediaSource] unsigned short webkitSourceState;
-
-    attribute [V8EnabledAtRuntime=mediaSource] EventListener onwebkitsourceopen;
-    attribute [V8EnabledAtRuntime=mediaSource] EventListener onwebkitsourceended;
-    attribute [V8EnabledAtRuntime=mediaSource] EventListener onwebkitsourceclose;
-#endif
-
-#if defined(ENABLE_ENCRYPTED_MEDIA) && ENABLE_ENCRYPTED_MEDIA
-    [V8EnabledAtRuntime=encryptedMedia] void webkitGenerateKeyRequest(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, in [Optional] Uint8Array initData)
-        raises (DOMException);
-    [V8EnabledAtRuntime=encryptedMedia] void webkitAddKey(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, in Uint8Array key, in [Optional] Uint8Array initData, in [Optional=DefaultIsNullString] DOMString sessionId)
-        raises (DOMException);
-    [V8EnabledAtRuntime=encryptedMedia] void webkitCancelKeyRequest(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, in [Optional=DefaultIsNullString] DOMString sessionId)
-        raises (DOMException);
-
-    attribute [V8EnabledAtRuntime=encryptedMedia] EventListener onwebkitkeyadded;
-    attribute [V8EnabledAtRuntime=encryptedMedia] EventListener onwebkitkeyerror;
-    attribute [V8EnabledAtRuntime=encryptedMedia] EventListener onwebkitkeymessage;
-    attribute [V8EnabledAtRuntime=encryptedMedia] EventListener onwebkitneedkey;
-#endif
-
-#if defined(ENABLE_VIDEO_TRACK) && ENABLE_VIDEO_TRACK
-    [V8EnabledAtRuntime=webkitVideoTrack] TextTrack addTextTrack(in DOMString kind, in [Optional] DOMString label, in [Optional] DOMString language)
-        raises (DOMException);
-    readonly attribute [V8EnabledAtRuntime=webkitVideoTrack] TextTrackList textTracks;
-#endif
-
-    attribute [Reflect, TreatNullAs=NullString] DOMString mediaGroup;
-    attribute [CustomSetter] MediaController controller;
-};
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMenuElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMenuElement.idl
deleted file mode 100644
index ff14754..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMenuElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLMenuElement : HTMLElement {
-        attribute [Reflect] boolean compact;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMetaElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMetaElement.idl
deleted file mode 100644
index f4ffb2d..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMetaElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLMetaElement : HTMLElement {
-        attribute [Reflect] DOMString content;
-        attribute [Reflect=http_equiv] DOMString httpEquiv;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString scheme;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLMeterElement.idl b/elemental/idl/third_party/WebCore/html/HTMLMeterElement.idl
deleted file mode 100644
index 7c11fe4..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLMeterElement.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- *
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=METER_TAG
-    ] HTMLMeterElement : HTMLElement {
-                 attribute double value
-                     setter raises(DOMException);
-                 attribute double min
-                     setter raises(DOMException);
-                 attribute double max
-                     setter raises(DOMException);
-                 attribute double low
-                     setter raises(DOMException);
-                 attribute double high
-                     setter raises(DOMException);
-                 attribute double optimum
-                     setter raises(DOMException);
-        readonly attribute NodeList labels;
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/HTMLModElement.idl b/elemental/idl/third_party/WebCore/html/HTMLModElement.idl
deleted file mode 100644
index ad8281c..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLModElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLModElement : HTMLElement {
-        attribute [Reflect, URL] DOMString cite;
-        attribute [Reflect] DOMString dateTime;
-    };
-    
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLOListElement.idl b/elemental/idl/third_party/WebCore/html/HTMLOListElement.idl
deleted file mode 100644
index 8d1d3a4..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLOListElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLOListElement : HTMLElement {
-        attribute [Reflect] boolean compact;
-        attribute long start;
-        attribute [Reflect] boolean reversed;
-        attribute [Reflect] DOMString type;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLObjectElement.idl b/elemental/idl/third_party/WebCore/html/HTMLObjectElement.idl
deleted file mode 100644
index f1055fd..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLObjectElement.idl
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        CustomNamedSetter,
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomCall
-    ] HTMLObjectElement : HTMLElement {
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect] DOMString code;
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString archive;
-        attribute [Reflect] DOMString border;
-        attribute [Reflect] DOMString codeBase;
-        attribute [Reflect] DOMString codeType;
-        attribute [Reflect, URL] DOMString data;
-        attribute [Reflect] boolean declare;
-        attribute [Reflect] DOMString height;
-        attribute [Reflect] long hspace;
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString standby;
-        attribute [Reflect] DOMString type;
-        attribute [Reflect] DOMString useMap;
-        attribute [Reflect] long vspace;
-        attribute [Reflect] DOMString width;
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        // Introduced in DOM Level 2:
-        readonly attribute [CheckSecurityForNode] Document contentDocument;
-
-#if defined(ENABLE_SVG) && ENABLE_SVG
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C || defined(ENABLE_SVG_DOM_OBJC_BINDINGS) && ENABLE_SVG_DOM_OBJC_BINDINGS
-        [CheckSecurityForNode] SVGDocument getSVGDocument() raises(DOMException);
-#endif
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // Objective-C extension:
-        readonly attribute URL absoluteImageURL;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLOptGroupElement.idl b/elemental/idl/third_party/WebCore/html/HTMLOptGroupElement.idl
deleted file mode 100644
index 75cead0..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLOptGroupElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLOptGroupElement : HTMLElement {
-        attribute [Reflect] boolean disabled;
-        attribute [Reflect] DOMString label;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLOptionElement.idl b/elemental/idl/third_party/WebCore/html/HTMLOptionElement.idl
deleted file mode 100644
index b7b3489..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLOptionElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple, Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject,
-        NamedConstructor=Option(in [Optional=DefaultIsNullString] DOMString data, in [Optional=DefaultIsNullString] DOMString value, in [Optional=DefaultIsUndefined] boolean defaultSelected, in [Optional=DefaultIsUndefined] boolean selected),
-        ConstructorRaisesException
-    ] HTMLOptionElement : HTMLElement {
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute DOMString label;
-        attribute [Reflect=selected] boolean defaultSelected;
-        attribute boolean selected;
-        attribute DOMString value;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        attribute DOMString text setter raises(DOMException);
-#else
-        readonly attribute DOMString text;
-#endif
-        readonly attribute long index;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLOptionsCollection.idl b/elemental/idl/third_party/WebCore/html/HTMLOptionsCollection.idl
deleted file mode 100644
index 0476e65..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLOptionsCollection.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject,
-        CustomIndexedSetter
-    ] HTMLOptionsCollection : HTMLCollection {
-                 attribute long selectedIndex;
-                 attribute [Custom] unsigned long length
-                        setter raises (DOMException);
-
-        [Custom] void add(in [Optional=DefaultIsUndefined] HTMLOptionElement option, 
-                          in [Optional] unsigned long index)
-             raises (DOMException);
-        [Custom] void remove(in [Optional=DefaultIsUndefined] unsigned long index);
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        Node item(in unsigned long index); 
-        Node namedItem(in DOMString name); 
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLOutputElement.idl b/elemental/idl/third_party/WebCore/html/HTMLOutputElement.idl
deleted file mode 100644
index 35761c3..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLOutputElement.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface HTMLOutputElement : HTMLElement {
-        attribute [Custom] DOMSettableTokenList htmlFor;
-        readonly attribute HTMLFormElement form;
-        attribute [Reflect] DOMString name;
-
-        readonly attribute DOMString type;
-        attribute [TreatNullAs=NullString] DOMString defaultValue;
-        attribute [TreatNullAs=NullString] DOMString value;
-
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLParagraphElement.idl b/elemental/idl/third_party/WebCore/html/HTMLParagraphElement.idl
deleted file mode 100644
index 246e9e9..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLParagraphElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLParagraphElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLParamElement.idl b/elemental/idl/third_party/WebCore/html/HTMLParamElement.idl
deleted file mode 100644
index 1f0c0de..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLParamElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLParamElement : HTMLElement {
-        attribute [Reflect] DOMString name;
-        attribute [Reflect] DOMString type;
-        attribute [Reflect] DOMString value;
-        attribute [Reflect] DOMString valueType;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLPreElement.idl b/elemental/idl/third_party/WebCore/html/HTMLPreElement.idl
deleted file mode 100644
index ae137f0..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLPreElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All right reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLPreElement : HTMLElement {
-        // FIXME: DOM spec says that width should be of type DOMString
-        // see http://bugs.webkit.org/show_bug.cgi?id=8992
-        attribute [Reflect] long width;
-        
-        // Extensions
-        attribute [Reflect] boolean wrap;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLProgressElement.idl b/elemental/idl/third_party/WebCore/html/HTMLProgressElement.idl
deleted file mode 100644
index ace4def..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLProgressElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
- *
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=PROGRESS_TAG
-    ] HTMLProgressElement : HTMLElement {
-                 attribute  double                value
-                     setter raises(DOMException);
-                 attribute  double                max
-                     setter raises(DOMException);
-        readonly attribute  double                position;
-        readonly attribute  NodeList              labels;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLPropertiesCollection.idl b/elemental/idl/third_party/WebCore/html/HTMLPropertiesCollection.idl
deleted file mode 100644
index d2c8e31..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLPropertiesCollection.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2011 Motorola Mobility, Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 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 Motorola Mobility, 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 HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        Conditional=MICRODATA,
-        JSGenerateToJSObject,
-        IndexedGetter,
-        NamedGetter
-    ] HTMLPropertiesCollection : HTMLCollection {
-        readonly attribute unsigned long length;
-        Node item(in unsigned long index);
-
-        readonly attribute DOMStringList names;
-
-        // FIXME: HTML5 specifies that this should return PropertyNodeList.
-        NodeList namedItem(in DOMString name);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLQuoteElement.idl b/elemental/idl/third_party/WebCore/html/HTMLQuoteElement.idl
deleted file mode 100644
index fa1bcdb..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLQuoteElement.idl
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLQuoteElement : HTMLElement {
-        attribute [Reflect, URL] DOMString cite;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLScriptElement.idl b/elemental/idl/third_party/WebCore/html/HTMLScriptElement.idl
deleted file mode 100644
index a41e104..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLScriptElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLScriptElement : HTMLElement {
-        attribute [TreatNullAs=NullString] DOMString text;
-        attribute [Reflect=for] DOMString htmlFor;
-        attribute [Reflect] DOMString event;
-        attribute [Reflect] DOMString charset;
-        attribute boolean async;
-        attribute [Reflect] boolean defer;
-        attribute [Reflect, URL] DOMString src;
-        attribute [Reflect] DOMString type;
-        attribute [Reflect] DOMString crossOrigin;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLSelectElement.idl b/elemental/idl/third_party/WebCore/html/HTMLSelectElement.idl
deleted file mode 100644
index 415b1b9..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLSelectElement.idl
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        IndexedGetter,
-        CustomIndexedSetter
-    ] HTMLSelectElement : HTMLElement {
-        attribute [Reflect] boolean autofocus;
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute boolean multiple;
-        attribute [TreatNullAs=NullString] DOMString name;
-        attribute [Reflect] boolean required;
-        attribute long size;
-
-        readonly attribute DOMString type;
-
-        readonly attribute HTMLOptionsCollection options;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        // DOM Level 2 changes type of length attribute to unsigned long, 
-        // for compatibility we keep DOM Level 1 definition.
-        readonly attribute long length;
-#else
-        attribute unsigned long length setter raises (DOMException);
-#endif
-        Node item(in [IsIndex,Optional=DefaultIsUndefined] unsigned long index);
-        Node namedItem(in [Optional=DefaultIsUndefined] DOMString name);
-        [ObjCLegacyUnnamedParameters] void add(in [Optional=DefaultIsUndefined] HTMLElement element,
-                                in [Optional=DefaultIsUndefined] HTMLElement before) raises(DOMException);
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // In JavaScript, we support both option index and option object parameters.
-        // As of this writing this cannot be auto-generated.
-        [Custom] void remove(in long index);
-        [Custom] void remove(in HTMLOptionElement option);
-#else
-        void remove(in long index);
-#endif
-        readonly attribute HTMLCollection selectedOptions;
-        attribute long selectedIndex;
-        attribute [TreatNullAs=NullString] DOMString value;
-
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLSourceElement.idl b/elemental/idl/third_party/WebCore/html/HTMLSourceElement.idl
deleted file mode 100644
index dc70714..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLSourceElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2007, 2010 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=VIDEO,
-    ] HTMLSourceElement : HTMLElement {
-    attribute [Reflect, URL] DOMString src;
-    attribute DOMString type;
-    attribute DOMString media;
-};
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLSpanElement.idl b/elemental/idl/third_party/WebCore/html/HTMLSpanElement.idl
deleted file mode 100644
index d6d4e59..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLSpanElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2011 Google, Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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.
- */
-
-module html {
-
-    // http://www.whatwg.org/specs/web-apps/current-work/#htmlspanelement
-    interface HTMLSpanElement : HTMLElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLStyleElement.idl b/elemental/idl/third_party/WebCore/html/HTMLStyleElement.idl
deleted file mode 100644
index 1b9abd4..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLStyleElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLStyleElement : HTMLElement {
-        attribute boolean disabled;
-        attribute [Conditional=STYLE_SCOPED, V8EnabledAtRuntime=styleScoped] boolean scoped;
-        attribute [Reflect] DOMString media;
-        attribute [Reflect] DOMString type;
-
-        // DOM Level 2 Style
-        readonly attribute StyleSheet sheet;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableCaptionElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableCaptionElement.idl
deleted file mode 100644
index 0759539..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableCaptionElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject
-    ] HTMLTableCaptionElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableCellElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableCellElement.idl
deleted file mode 100644
index ae286f4..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableCellElement.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTableCellElement : HTMLElement {
-        readonly attribute long cellIndex;
-        attribute [Reflect] DOMString abbr;
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString axis;
-        attribute [Reflect] DOMString bgColor;
-        attribute [Reflect=char] DOMString ch;
-        attribute [Reflect=charoff] DOMString chOff;
-        attribute long colSpan;
-        attribute [Reflect] DOMString headers;
-        attribute [Reflect] DOMString height;
-        attribute [Reflect] boolean noWrap;
-        attribute long rowSpan;
-        attribute [Reflect] DOMString scope;
-        attribute [Reflect] DOMString vAlign;
-        attribute [Reflect] DOMString width;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableColElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableColElement.idl
deleted file mode 100644
index a6e6654..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableColElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTableColElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-        attribute [Reflect=char] DOMString ch;
-        attribute [Reflect=charoff] DOMString chOff;
-        attribute long span;
-        attribute [Reflect] DOMString vAlign;
-        attribute [Reflect] DOMString width;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableElement.idl
deleted file mode 100644
index 190861a..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableElement.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTableElement : HTMLElement {
-        attribute HTMLTableCaptionElement caption setter raises(DOMException);
-        attribute HTMLTableSectionElement tHead setter raises(DOMException);
-        attribute HTMLTableSectionElement tFoot setter raises(DOMException);
-
-        readonly attribute HTMLCollection rows;
-        readonly attribute HTMLCollection tBodies;
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString bgColor;
-        attribute [Reflect] DOMString border;
-        attribute [Reflect] DOMString cellPadding;
-        attribute [Reflect] DOMString cellSpacing;
-
-        attribute [Reflect] DOMString frame;
-
-        attribute [Reflect] DOMString rules;
-        attribute [Reflect] DOMString summary;
-        attribute [Reflect] DOMString width;
-
-        HTMLElement createTHead();
-        void deleteTHead();
-        HTMLElement createTFoot();
-        void deleteTFoot();
-        HTMLElement createTBody();
-        HTMLElement createCaption();
-        void deleteCaption();
-
-        HTMLElement insertRow(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-        void deleteRow(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableRowElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableRowElement.idl
deleted file mode 100644
index b16d754..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableRowElement.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. ALl rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTableRowElement : HTMLElement {
-        readonly attribute long rowIndex;
-        readonly attribute long sectionRowIndex;
-        readonly attribute HTMLCollection cells;
-        attribute [Reflect] DOMString align;
-        attribute [Reflect] DOMString bgColor;
-        attribute [Reflect=char] DOMString ch;
-        attribute [Reflect=charoff] DOMString chOff;
-        attribute [Reflect] DOMString vAlign;
-        HTMLElement insertCell(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-        void deleteCell(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTableSectionElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTableSectionElement.idl
deleted file mode 100644
index 88f5336..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTableSectionElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface [
-        JSGenerateToNativeObject
-    ] HTMLTableSectionElement : HTMLElement {
-        attribute [Reflect] DOMString align;
-        attribute [Reflect=char] DOMString ch;
-        attribute [Reflect=charoff] DOMString chOff;
-        attribute [Reflect] DOMString vAlign;
-        readonly attribute HTMLCollection rows;
-        HTMLElement insertRow(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-        void deleteRow(in [Optional=DefaultIsUndefined] long index) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTextAreaElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTextAreaElement.idl
deleted file mode 100644
index f9d80b5..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTextAreaElement.idl
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2011 Motorola Mobility, Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTextAreaElement : HTMLElement {
-        attribute [Reflect] boolean autofocus;
-        attribute long cols;
-        attribute [Reflect] DOMString dirName;
-        attribute [Reflect] boolean disabled;
-        readonly attribute HTMLFormElement form;
-        attribute long maxLength setter raises(DOMException);
-        attribute [TreatNullAs=NullString] DOMString name;
-        attribute [Reflect] DOMString placeholder;
-        attribute [Reflect] boolean readOnly;
-        attribute [Reflect] boolean required;
-        attribute long rows;
-        attribute [Reflect] DOMString wrap;
-
-        readonly attribute DOMString type;
-        attribute [TreatNullAs=NullString] DOMString defaultValue;
-        attribute [TreatNullAs=NullString] DOMString value;
-        readonly attribute unsigned long textLength;
-
-        readonly attribute boolean willValidate;
-        readonly attribute ValidityState validity;
-        readonly attribute DOMString validationMessage;
-        boolean checkValidity();
-        void setCustomValidity(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
-
-        readonly attribute NodeList labels;
-
-        void select();
-        attribute long selectionStart;
-        attribute long selectionEnd;
-        attribute DOMString selectionDirection;
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        void setSelectionRange(in long start, in long end);
-#else
-        void setSelectionRange(in [Optional=DefaultIsUndefined] long start,
-                               in [Optional=DefaultIsUndefined] long end,
-                               in [Optional] DOMString direction);
-#endif
-
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        attribute [Reflect] DOMString accessKey;
-#endif
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTitleElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTitleElement.idl
deleted file mode 100644
index e691f7b..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTitleElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLTitleElement : HTMLElement {
-        attribute  [TreatNullAs=NullString] DOMString            text;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLTrackElement.idl b/elemental/idl/third_party/WebCore/html/HTMLTrackElement.idl
deleted file mode 100644
index 0107df5..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLTrackElement.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack
-    ] HTMLTrackElement : HTMLElement {
-        attribute [Reflect, URL] DOMString src;
-        attribute DOMString kind;
-        attribute DOMString srclang;
-        attribute DOMString label;
-        attribute [Reflect] boolean default;
-
-        const unsigned short NONE = 0;
-        const unsigned short LOADING = 1;
-        const unsigned short LOADED = 2;
-        // Reflect is used for ERROR because it conflicts with a windows define.
-        [Reflect=TRACK_ERROR] const unsigned short ERROR = 3;
-        readonly attribute unsigned short readyState;
-
-        readonly attribute TextTrack track;
-};
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLUListElement.idl b/elemental/idl/third_party/WebCore/html/HTMLUListElement.idl
deleted file mode 100644
index 221dcca..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLUListElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module html {
-
-    interface HTMLUListElement : HTMLElement {
-        attribute [Reflect] boolean compact;
-        attribute [Reflect] DOMString type;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLUnknownElement.idl b/elemental/idl/third_party/WebCore/html/HTMLUnknownElement.idl
deleted file mode 100644
index 9e4f90a..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLUnknownElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2011 Code Aurora Forum. 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 Code Aurora Forum, 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 "AS IS" AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
- * 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.
- */
-
-module html {
-
-    interface HTMLUnknownElement : HTMLElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/HTMLVideoElement.idl b/elemental/idl/third_party/WebCore/html/HTMLVideoElement.idl
deleted file mode 100644
index 97a1779..0000000
--- a/elemental/idl/third_party/WebCore/html/HTMLVideoElement.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2007, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=VIDEO,
-        JSGenerateToNativeObject
-    ] HTMLVideoElement : HTMLMediaElement {
-        attribute [Reflect] unsigned long width;
-        attribute [Reflect] unsigned long height;
-        readonly attribute unsigned long videoWidth;
-        readonly attribute unsigned long videoHeight;
-        attribute [Reflect, URL] DOMString poster;
-
-        readonly attribute boolean webkitSupportsFullscreen;
-        readonly attribute boolean webkitDisplayingFullscreen;
-
-        void webkitEnterFullscreen() raises (DOMException);
-        void webkitExitFullscreen();
-
-        // Note the different capitalization of the "S" in FullScreen.
-        void webkitEnterFullScreen() raises (DOMException);
-        void webkitExitFullScreen();
-
-        // The number of frames that have been decoded and made available for
-        // playback.
-        readonly attribute [Conditional=MEDIA_STATISTICS] unsigned long webkitDecodedFrameCount;
-
-        // The number of decoded frames that have been dropped by the player
-        // for performance reasons during playback.
-        readonly attribute [Conditional=MEDIA_STATISTICS] unsigned long webkitDroppedFrameCount;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/ImageData.idl b/elemental/idl/third_party/WebCore/html/ImageData.idl
deleted file mode 100644
index f2ea0ca..0000000
--- a/elemental/idl/third_party/WebCore/html/ImageData.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module html {
-
-    interface [
-        CustomToJSObject
-    ] ImageData {
-        readonly attribute long width;
-        readonly attribute long height;
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT
-        readonly attribute Uint8ClampedArray data;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/MediaController.idl b/elemental/idl/third_party/WebCore/html/MediaController.idl
deleted file mode 100644
index d3f3348..0000000
--- a/elemental/idl/third_party/WebCore/html/MediaController.idl
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=VIDEO,
-        Constructor,
-        CallWith=ScriptExecutionContext,
-        JSGenerateToJSObject,
-        EventTarget
-    ] MediaController {
-        readonly attribute TimeRanges buffered;
-        readonly attribute TimeRanges seekable;
-
-        readonly attribute double duration;
-        attribute double currentTime
-            setter raises (DOMException);
-
-        readonly attribute boolean paused;
-        readonly attribute TimeRanges played;
-        void play();
-        void pause();
-
-        attribute double defaultPlaybackRate;
-        attribute double playbackRate;
-
-        attribute double volume
-            setter raises (DOMException);
-        attribute boolean muted;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/MediaError.idl b/elemental/idl/third_party/WebCore/html/MediaError.idl
deleted file mode 100644
index 8eb9d54..0000000
--- a/elemental/idl/third_party/WebCore/html/MediaError.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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. 
- */
-
-module html {
-    interface [
-        Conditional=VIDEO
-    ] 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
-          const unsigned short MEDIA_ERR_ENCRYPTED = 5;
-#endif
-          readonly attribute unsigned short code;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/MediaKeyError.idl b/elemental/idl/third_party/WebCore/html/MediaKeyError.idl
deleted file mode 100644
index 55b9b04..0000000
--- a/elemental/idl/third_party/WebCore/html/MediaKeyError.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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. 
- */
-
-module html {
-    interface [
-        Conditional=ENCRYPTED_MEDIA,
-        V8EnabledAtRuntime=encryptedMedia, 
-    ] MediaKeyError {
-        const unsigned short MEDIA_KEYERR_UNKNOWN = 1;
-        const unsigned short MEDIA_KEYERR_CLIENT = 2;
-        const unsigned short MEDIA_KEYERR_SERVICE = 3;
-        const unsigned short MEDIA_KEYERR_OUTPUT = 4;
-        const unsigned short MEDIA_KEYERR_HARDWARECHANGE = 5;
-        const unsigned short MEDIA_KEYERR_DOMAIN = 6;
-        readonly attribute unsigned short code;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/MediaKeyEvent.idl b/elemental/idl/third_party/WebCore/html/MediaKeyEvent.idl
deleted file mode 100644
index b1387dc..0000000
--- a/elemental/idl/third_party/WebCore/html/MediaKeyEvent.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        Conditional=ENCRYPTED_MEDIA,
-        V8EnabledAtRuntime=encryptedMedia,
-        ConstructorTemplate=Event 
-    ] MediaKeyEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString keySystem;
-        readonly attribute [InitializedByEventConstructor] DOMString sessionId;
-        readonly attribute [InitializedByEventConstructor] Uint8Array initData;
-        readonly attribute [InitializedByEventConstructor] Uint8Array message;
-        readonly attribute [InitializedByEventConstructor] DOMString defaultURL;
-        readonly attribute [InitializedByEventConstructor] MediaKeyError errorCode;
-        readonly attribute [InitializedByEventConstructor] unsigned short systemCode;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/RadioNodeList.idl b/elemental/idl/third_party/WebCore/html/RadioNodeList.idl
deleted file mode 100644
index 8ed57ba..0000000
--- a/elemental/idl/third_party/WebCore/html/RadioNodeList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2012 Motorola Mobility, Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY MOTOROLA MOBILITY, INC. AND ITS CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY, INC. OR ITS
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        JSGenerateToJSObject,
-        IndexedGetter,
-    ] RadioNodeList : NodeList {
-        attribute DOMString value;
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/TextMetrics.idl b/elemental/idl/third_party/WebCore/html/TextMetrics.idl
deleted file mode 100644
index 1a315ba..0000000
--- a/elemental/idl/third_party/WebCore/html/TextMetrics.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface TextMetrics {
-        readonly attribute float width;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/TimeRanges.idl b/elemental/idl/third_party/WebCore/html/TimeRanges.idl
deleted file mode 100644
index c37c360..0000000
--- a/elemental/idl/third_party/WebCore/html/TimeRanges.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2007, 2010 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO
-    ] TimeRanges {
-        readonly attribute unsigned long length;
-        float start(in unsigned long index)
-            raises (DOMException);
-        float end(in unsigned long index)
-            raises (DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/ValidityState.idl b/elemental/idl/third_party/WebCore/html/ValidityState.idl
deleted file mode 100644
index 601bfaf..0000000
--- a/elemental/idl/third_party/WebCore/html/ValidityState.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * This file is part of the WebKit project.
- *
- * Copyright (C) 2009 Michelangelo De Simone <micdesim@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-module html {
-
-    interface [
-        OmitConstructor
-    ] ValidityState {
-        readonly attribute boolean         valueMissing;
-        readonly attribute boolean         typeMismatch;
-        readonly attribute boolean         patternMismatch;
-        readonly attribute boolean         tooLong;
-        readonly attribute boolean         rangeUnderflow;
-        readonly attribute boolean         rangeOverflow;
-        readonly attribute boolean         stepMismatch;
-        readonly attribute boolean         customError;
-        readonly attribute boolean         valid;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/VoidCallback.idl b/elemental/idl/third_party/WebCore/html/VoidCallback.idl
deleted file mode 100644
index d0f159b..0000000
--- a/elemental/idl/third_party/WebCore/html/VoidCallback.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        JSCustomToNativeObject,
-        OmitConstructor
-    ] VoidCallback {
-        void handleEvent();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/ArrayBuffer.idl b/elemental/idl/third_party/WebCore/html/canvas/ArrayBuffer.idl
deleted file mode 100644
index 26dd341..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/ArrayBuffer.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        JSGenerateIsReachable=Impl,
-        CustomConstructor,
-        ConstructorParameters=1,
-        JSNoStaticTables
-    ] ArrayBuffer {
-        readonly attribute int byteLength;
-        ArrayBuffer slice(in long begin, in [Optional] long end);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/ArrayBufferView.idl b/elemental/idl/third_party/WebCore/html/canvas/ArrayBufferView.idl
deleted file mode 100644
index 0e934e6..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/ArrayBufferView.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        CustomToJSObject,
-        JSNoStaticTables,
-        OmitConstructor
-    ] ArrayBufferView {
-        readonly attribute ArrayBuffer buffer;
-        readonly attribute unsigned long byteOffset;
-        readonly attribute unsigned long byteLength;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/CanvasGradient.idl b/elemental/idl/third_party/WebCore/html/canvas/CanvasGradient.idl
deleted file mode 100644
index 496d4c1..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/CanvasGradient.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, 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. 
- */
-
-module html {
-
-    interface CanvasGradient {
-
-        void addColorStop(in [Optional=DefaultIsUndefined] float offset, 
-                          in [Optional=DefaultIsUndefined] DOMString color)
-            raises (DOMException);
-
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/canvas/CanvasPattern.idl b/elemental/idl/third_party/WebCore/html/canvas/CanvasPattern.idl
deleted file mode 100644
index e5aa036..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/CanvasPattern.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, 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. 
- */
-
-module html {
-
-    interface CanvasPattern {
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/canvas/CanvasPixelArray.idl b/elemental/idl/third_party/WebCore/html/canvas/CanvasPixelArray.idl
deleted file mode 100644
index 8c0836b..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/CanvasPixelArray.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module html {
-#if !defined(LANGUAGE_JAVASCRIPT) || !LANGUAGE_JAVASCRIPT || defined(V8_BINDING) && V8_BINDING
-    interface [
-        OmitConstructor,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        V8CustomToJSObject
-    ] CanvasPixelArray {
-#if !defined(V8_BINDING) || !V8_BINDING
-        readonly attribute long length;
-#endif
-    };
-#endif
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext.idl b/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext.idl
deleted file mode 100644
index b937393..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        JSCustomMarkFunction,
-        JSGenerateIsReachable,
-        JSCustomToJSObject
-    ] CanvasRenderingContext {
-
-        readonly attribute HTMLCanvasElement canvas;
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext2D.idl b/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext2D.idl
deleted file mode 100644
index d41f875..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/CanvasRenderingContext2D.idl
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, 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.
- */
-
-module html {
-
-    interface CanvasRenderingContext2D : CanvasRenderingContext {
-
-        void save();
-        void restore();
-
-        void scale(in [Optional=DefaultIsUndefined] float sx,
-                   in [Optional=DefaultIsUndefined] float sy);
-        void rotate(in [Optional=DefaultIsUndefined] float angle);
-        void translate(in [Optional=DefaultIsUndefined] float tx,
-                       in [Optional=DefaultIsUndefined] float ty);
-        void transform(in [Optional=DefaultIsUndefined] float m11,
-                       in [Optional=DefaultIsUndefined] float m12,
-                       in [Optional=DefaultIsUndefined] float m21,
-                       in [Optional=DefaultIsUndefined] float m22,
-                       in [Optional=DefaultIsUndefined] float dx,
-                       in [Optional=DefaultIsUndefined] float dy);
-        void setTransform(in [Optional=DefaultIsUndefined] float m11,
-                          in [Optional=DefaultIsUndefined] float m12,
-                          in [Optional=DefaultIsUndefined] float m21,
-                          in [Optional=DefaultIsUndefined] float m22,
-                          in [Optional=DefaultIsUndefined] float dx,
-                          in [Optional=DefaultIsUndefined] float dy);
-
-        attribute float globalAlpha;
-        attribute [TreatNullAs=NullString] DOMString globalCompositeOperation;
-
-        CanvasGradient createLinearGradient(in [Optional=DefaultIsUndefined] float x0,
-                                            in [Optional=DefaultIsUndefined] float y0,
-                                            in [Optional=DefaultIsUndefined] float x1,
-                                            in [Optional=DefaultIsUndefined] float y1)
-            raises (DOMException);
-        CanvasGradient createRadialGradient(in [Optional=DefaultIsUndefined] float x0,
-                                            in [Optional=DefaultIsUndefined] float y0,
-                                            in [Optional=DefaultIsUndefined] float r0,
-                                            in [Optional=DefaultIsUndefined] float x1,
-                                            in [Optional=DefaultIsUndefined] float y1,
-                                            in [Optional=DefaultIsUndefined] float r1)
-            raises (DOMException);
-
-        attribute float lineWidth;
-        attribute [TreatNullAs=NullString] DOMString lineCap;
-        attribute [TreatNullAs=NullString] DOMString lineJoin;
-        attribute float miterLimit;
-
-        attribute float shadowOffsetX;
-        attribute float shadowOffsetY;
-        attribute float shadowBlur;
-        attribute [TreatNullAs=NullString] DOMString shadowColor;
-
-        // FIXME: These attributes should also be implemented for V8.
-#if !(defined(V8_BINDING) && V8_BINDING)
-        attribute [Custom] Array webkitLineDash;
-        attribute float webkitLineDashOffset;
-#endif
-
-        void clearRect(in [Optional=DefaultIsUndefined] float x,
-                       in [Optional=DefaultIsUndefined] float y,
-                       in [Optional=DefaultIsUndefined] float width,
-                       in [Optional=DefaultIsUndefined] float height);
-        void fillRect(in [Optional=DefaultIsUndefined] float x,
-                      in [Optional=DefaultIsUndefined] float y,
-                      in [Optional=DefaultIsUndefined] float width,
-                      in [Optional=DefaultIsUndefined] float height);
-
-        void beginPath();
-        void closePath();
-        void moveTo(in [Optional=DefaultIsUndefined] float x,
-                    in [Optional=DefaultIsUndefined] float y);
-        void lineTo(in [Optional=DefaultIsUndefined] float x,
-                    in [Optional=DefaultIsUndefined] float y);
-        void quadraticCurveTo(in [Optional=DefaultIsUndefined] float cpx,
-                              in [Optional=DefaultIsUndefined] float cpy,
-                              in [Optional=DefaultIsUndefined] float x,
-                              in [Optional=DefaultIsUndefined] float y);
-        void bezierCurveTo(in [Optional=DefaultIsUndefined] float cp1x,
-                           in [Optional=DefaultIsUndefined] float cp1y,
-                           in [Optional=DefaultIsUndefined] float cp2x,
-                           in [Optional=DefaultIsUndefined] float cp2y,
-                           in [Optional=DefaultIsUndefined] float x,
-                           in [Optional=DefaultIsUndefined] float y);
-        void arcTo(in [Optional=DefaultIsUndefined] float x1,
-                   in [Optional=DefaultIsUndefined] float y1,
-                   in [Optional=DefaultIsUndefined] float x2,
-                   in [Optional=DefaultIsUndefined] float y2,
-                   in [Optional=DefaultIsUndefined] float radius)
-            raises (DOMException);
-        void rect(in [Optional=DefaultIsUndefined] float x,
-                  in [Optional=DefaultIsUndefined] float y,
-                  in [Optional=DefaultIsUndefined] float width,
-                  in [Optional=DefaultIsUndefined] float height);
-        void arc(in [Optional=DefaultIsUndefined] float x,
-                 in [Optional=DefaultIsUndefined] float y,
-                 in [Optional=DefaultIsUndefined] float radius,
-                 in [Optional=DefaultIsUndefined] float startAngle,
-                 in [Optional=DefaultIsUndefined] float endAngle,
-                 in [Optional=DefaultIsUndefined] boolean anticlockwise)
-            raises (DOMException);
-        void fill();
-        void stroke();
-        void clip();
-        boolean isPointInPath(in [Optional=DefaultIsUndefined] float x,
-                              in [Optional=DefaultIsUndefined] float y);
-
-        // text
-        attribute DOMString font;
-        attribute DOMString textAlign;
-        attribute DOMString textBaseline;
-
-        TextMetrics measureText(in [Optional=DefaultIsUndefined] DOMString text);
-
-        // other
-
-        void setAlpha(in [Optional=DefaultIsUndefined] float alpha);
-        void setCompositeOperation(in [Optional=DefaultIsUndefined] DOMString compositeOperation);
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        void setLineWidth(in [Optional=DefaultIsUndefined] float width);
-        void setLineCap(in [Optional=DefaultIsUndefined] DOMString cap);
-        void setLineJoin(in [Optional=DefaultIsUndefined] DOMString join);
-        void setMiterLimit(in [Optional=DefaultIsUndefined] float limit);
-#endif
-
-        void clearShadow();
-
-        void fillText(in DOMString text, in float x, in float y, in [Optional] float maxWidth);
-        void strokeText(in DOMString text, in float x, in float y, in [Optional] float maxWidth);
-
-        void setStrokeColor(in DOMString color, in [Optional] float alpha);
-        void setStrokeColor(in float grayLevel, in [Optional] float alpha);
-        void setStrokeColor(in float r, in float g, in float b, in float a);
-        void setStrokeColor(in float c, in float m, in float y, in float k, in float a);
-
-        void setFillColor(in DOMString color, in [Optional] float alpha);
-        void setFillColor(in float grayLevel, in [Optional] float alpha);
-        void setFillColor(in float r, in float g, in float b, in float a);
-        void setFillColor(in float c, in float m, in float y, in float k, in float a);
-
-        void strokeRect(in [Optional=DefaultIsUndefined] float x,
-                        in [Optional=DefaultIsUndefined] float y,
-                        in [Optional=DefaultIsUndefined] float width,
-                        in [Optional=DefaultIsUndefined] float height,
-                        in [Optional] float lineWidth);
-
-        void drawImage(in HTMLImageElement image, in float x, in float y)
-            raises (DOMException);
-        void drawImage(in HTMLImageElement image, in float x, in float y, in float width, in float height)
-            raises (DOMException);
-        void drawImage(in HTMLImageElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
-            raises (DOMException);
-        void drawImage(in HTMLCanvasElement canvas, in float x, in float y)
-            raises (DOMException);
-        void drawImage(in HTMLCanvasElement canvas, in float x, in float y, in float width, in float height)
-            raises (DOMException);
-        void drawImage(in HTMLCanvasElement canvas, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
-            raises (DOMException);
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-        void drawImage(in HTMLVideoElement video, in float x, in float y)
-            raises (DOMException);
-        void drawImage(in HTMLVideoElement video, in float x, in float y, in float width, in float height)
-            raises (DOMException);
-        void drawImage(in HTMLVideoElement video, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
-            raises (DOMException);
-#endif
-
-        void drawImageFromRect(in HTMLImageElement image,
-                               in [Optional] float sx, in [Optional] float sy, in [Optional] float sw, in [Optional] float sh,
-                               in [Optional] float dx, in [Optional] float dy, in [Optional] float dw, in [Optional] float dh,
-                               in [Optional] DOMString compositeOperation);
-
-        void setShadow(in float width, in float height, in float blur, in [Optional] DOMString color, in [Optional] float alpha);
-        void setShadow(in float width, in float height, in float blur, in float grayLevel, in [Optional] float alpha);
-        void setShadow(in float width, in float height, in float blur, in float r, in float g, in float b, in float a);
-        void setShadow(in float width, in float height, in float blur, in float c, in float m, in float y, in float k, in float a);
-
-        void putImageData(in ImageData imagedata, in float dx, in float dy)
-            raises(DOMException);
-        void putImageData(in ImageData imagedata, in float dx, in float dy, in float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight)
-            raises(DOMException);
-
-        void webkitPutImageDataHD(in ImageData imagedata, in float dx, in float dy)
-            raises(DOMException);
-        void webkitPutImageDataHD(in ImageData imagedata, in float dx, in float dy, in float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight)
-            raises(DOMException);
-
-        CanvasPattern createPattern(in HTMLCanvasElement canvas, in [TreatNullAs=NullString] DOMString repetitionType)
-            raises (DOMException);
-        CanvasPattern createPattern(in HTMLImageElement image, in [TreatNullAs=NullString] DOMString repetitionType)
-            raises (DOMException);
-        ImageData createImageData(in ImageData imagedata)
-            raises (DOMException);
-        ImageData createImageData(in float sw, in float sh)
-            raises (DOMException);
-
-        attribute [Custom] custom strokeStyle;
-        attribute [Custom] custom fillStyle;
-
-        // pixel manipulation
-        ImageData getImageData(in [Optional=DefaultIsUndefined] float sx, in [Optional=DefaultIsUndefined] float sy,
-                               in [Optional=DefaultIsUndefined] float sw, in [Optional=DefaultIsUndefined] float sh)
-            raises(DOMException);
-
-        ImageData webkitGetImageDataHD(in [Optional=DefaultIsUndefined] float sx, in [Optional=DefaultIsUndefined] float sy,
-                                       in [Optional=DefaultIsUndefined] float sw, in [Optional=DefaultIsUndefined] float sh)
-            raises(DOMException);
-
-        readonly attribute float webkitBackingStorePixelRatio;
-
-        attribute boolean webkitImageSmoothingEnabled;
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/canvas/DataView.idl b/elemental/idl/third_party/WebCore/html/canvas/DataView.idl
deleted file mode 100755
index 3f4dcdf..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/DataView.idl
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        CustomConstructor,
-        ConstructorParameters=3,
-        CustomToJSObject,
-        JSNoStaticTables
-    ] DataView : ArrayBufferView {
-        // All these methods raise an exception if they would read or write beyond the end of the view.
-
-        // We have to use custom code because our code generator does not support int8_t type.
-        // int8_t getInt8(in unsigned long byteOffset);
-        // uint8_t getUint8(in unsigned long byteOffset);
-        [Custom] DOMObject getInt8()
-            raises (DOMException);
-        [Custom] DOMObject getUint8()
-            raises (DOMException);
-
-        [StrictTypeChecking] short getInt16(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] unsigned short getUint16(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] long getInt32(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] unsigned long getUint32(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-
-        // Use custom code to handle NaN case for JSC.
-        [JSCustom, StrictTypeChecking] float getFloat32(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [JSCustom, StrictTypeChecking] double getFloat64(in unsigned long byteOffset, in [Optional] boolean littleEndian)
-            raises (DOMException);
-
-        // We have to use custom code because our code generator does not support uint8_t type.
-        // void setInt8(in unsigned long byteOffset, in int8_t value);
-        // void setUint8(in unsigned long byteOffset, in uint8_t value);
-        [Custom] void setInt8()
-            raises (DOMException);
-        [Custom] void setUint8()
-            raises (DOMException);
-
-        [StrictTypeChecking] void setInt16(in unsigned long byteOffset, in short value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] void setUint16(in unsigned long byteOffset, in unsigned short value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] void setInt32(in unsigned long byteOffset, in long value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] void setUint32(in unsigned long byteOffset, in unsigned long value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] void setFloat32(in unsigned long byteOffset, in float value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-        [StrictTypeChecking] void setFloat64(in unsigned long byteOffset, in double value, in [Optional] boolean littleEndian)
-            raises (DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/EXTTextureFilterAnisotropic.idl b/elemental/idl/third_party/WebCore/html/canvas/EXTTextureFilterAnisotropic.idl
deleted file mode 100644
index 568aa9a..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/EXTTextureFilterAnisotropic.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor,
-        DoNotCheckConstants
-    ] EXTTextureFilterAnisotropic {
-        const unsigned int TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
-        const unsigned int MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Float32Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Float32Array.idl
deleted file mode 100644
index 8eaebe4..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Float32Array.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Computer, Inc. All rights reserved.
- * 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:
- * 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.
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Float32Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 4;
-
-        readonly attribute unsigned long length;
-        Float32Array subarray(in [Optional=DefaultIsUndefined] long start, 
-                              in [Optional] long end);
-
-        // void set(in Float32Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Float64Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Float64Array.idl
deleted file mode 100644
index abfeb21..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Float64Array.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Float64Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 8;
-
-        readonly attribute unsigned long length;
-        Float64Array subarray(in [Optional=DefaultIsUndefined] long start, 
-                              in [Optional] long end);
-
-        // void set(in Float64Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Int16Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Int16Array.idl
deleted file mode 100644
index f6d089e..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Int16Array.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006, 2010 Apple Computer, 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.
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Int16Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 2;
-
-        readonly attribute unsigned long length;
-        Int16Array subarray(in [Optional=DefaultIsUndefined] long start, 
-                            in [Optional] long end);
-
-        // void set(in Int16Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Int32Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Int32Array.idl
deleted file mode 100644
index f98835a..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Int32Array.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Int32Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 4;
-
-        readonly attribute unsigned long length;
-        Int32Array subarray(in [Optional=DefaultIsUndefined] long start, 
-                            in [Optional] long end);
-
-        // void set(in Int32Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Int8Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Int8Array.idl
deleted file mode 100644
index 00faa4f..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Int8Array.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Int8Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 1;
-
-        readonly attribute unsigned long length;
-        Int8Array subarray(in [Optional=DefaultIsUndefined] long start, 
-                           in [Optional] long end);
-
-        // void set(in Int8Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/OESStandardDerivatives.idl b/elemental/idl/third_party/WebCore/html/canvas/OESStandardDerivatives.idl
deleted file mode 100644
index 93f0a01..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/OESStandardDerivatives.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor,
-        DoNotCheckConstants
-    ] OESStandardDerivatives {
-        const unsigned int FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/OESTextureFloat.idl b/elemental/idl/third_party/WebCore/html/canvas/OESTextureFloat.idl
deleted file mode 100644
index 6537f47..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/OESTextureFloat.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor
-    ] OESTextureFloat {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/OESVertexArrayObject.idl b/elemental/idl/third_party/WebCore/html/canvas/OESVertexArrayObject.idl
deleted file mode 100644
index c3d3666..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/OESVertexArrayObject.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL, 
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor, 
-        DoNotCheckConstants
-    ] OESVertexArrayObject {
-        const unsigned int VERTEX_ARRAY_BINDING_OES = 0x85B5;
-        
-        [StrictTypeChecking] WebGLVertexArrayObjectOES createVertexArrayOES();
-        [StrictTypeChecking] void         deleteVertexArrayOES(in [Optional=DefaultIsUndefined] WebGLVertexArrayObjectOES arrayObject);
-        [StrictTypeChecking] boolean      isVertexArrayOES(in [Optional=DefaultIsUndefined] WebGLVertexArrayObjectOES arrayObject);
-        [StrictTypeChecking] void         bindVertexArrayOES(in [Optional=DefaultIsUndefined] WebGLVertexArrayObjectOES arrayObject) raises(DOMException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Uint16Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Uint16Array.idl
deleted file mode 100644
index 79e05ef..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Uint16Array.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Uint16Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 2;
-
-        readonly attribute unsigned long length;
-        Uint16Array subarray(in [Optional=DefaultIsUndefined] long start, in [Optional] long end);
-
-        // void set(in Uint16Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Uint32Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Uint32Array.idl
deleted file mode 100644
index 67e61b2..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Uint32Array.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Uint32Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 4;
-
-        readonly attribute unsigned long length;
-        Uint32Array subarray(in [Optional=DefaultIsUndefined] long start, in [Optional] long end);
-
-        // void set(in Uint32Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Uint8Array.idl b/elemental/idl/third_party/WebCore/html/canvas/Uint8Array.idl
deleted file mode 100644
index 260a327..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Uint8Array.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Uint8Array : ArrayBufferView {
-        const unsigned long BYTES_PER_ELEMENT = 1;
-
-        readonly attribute unsigned long length;
-        Uint8Array subarray(in [Optional=DefaultIsUndefined] long start, in [Optional] long end);
-
-        // void set(in Uint8Array array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/Uint8ClampedArray.idl b/elemental/idl/third_party/WebCore/html/canvas/Uint8ClampedArray.idl
deleted file mode 100644
index cadd663..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/Uint8ClampedArray.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * 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:
- * 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.
- */
-
-module html {
-    interface [
-        CustomConstructor,
-        ConstructorParameters=1,
-        NumericIndexedGetter,
-        CustomIndexedSetter,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        CustomToJSObject,
-        DoNotCheckConstants
-    ] Uint8ClampedArray : Uint8Array {
-        const unsigned long BYTES_PER_ELEMENT = 1;
-
-        readonly attribute unsigned long length;
-        Uint8ClampedArray subarray(in [Optional=DefaultIsUndefined] long start, in [Optional] long end);
-
-        // FIXME: Missing other setters!
-        // void set(in Uint8ClampedArray array, [Optional] in unsigned long offset);
-        // void set(in sequence<long> array, [Optional] in unsigned long offset);
-        [Custom] void set();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLActiveInfo.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLActiveInfo.idl
deleted file mode 100644
index 20ab8af..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLActiveInfo.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-
-    interface [
-        Conditional=WEBGL,
-    ] WebGLActiveInfo {
-        readonly attribute int size;
-        readonly attribute unsigned int type;
-        readonly attribute DOMString name;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLBuffer.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLBuffer.idl
deleted file mode 100644
index 312b009..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLBuffer.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-    ] WebGLBuffer {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLCompressedTextureS3TC.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLCompressedTextureS3TC.idl
deleted file mode 100644
index 7fde5bb..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLCompressedTextureS3TC.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor,
-        DoNotCheckConstants
-    ] WebGLCompressedTextureS3TC {
-        /* Compressed Texture Formats */
-        const unsigned int COMPRESSED_RGB_S3TC_DXT1_EXT        = 0x83F0;
-        const unsigned int COMPRESSED_RGBA_S3TC_DXT1_EXT       = 0x83F1;
-        const unsigned int COMPRESSED_RGBA_S3TC_DXT3_EXT       = 0x83F2;
-        const unsigned int COMPRESSED_RGBA_S3TC_DXT5_EXT       = 0x83F3;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLContextAttributes.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLContextAttributes.idl
deleted file mode 100644
index 56da1c6..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLContextAttributes.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2010, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        OmitConstructor
-    ] WebGLContextAttributes {
-        attribute boolean alpha;
-        attribute boolean depth;
-        attribute boolean stencil;
-        attribute boolean antialias;
-        attribute boolean premultipliedAlpha;
-        attribute boolean preserveDrawingBuffer;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLContextEvent.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLContextEvent.idl
deleted file mode 100644
index 3735f12..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLContextEvent.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-
-    interface [
-        Conditional=WEBGL,
-        ConstructorTemplate=Event
-    ] WebGLContextEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString statusMessage;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugRendererInfo.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugRendererInfo.idl
deleted file mode 100644
index b307a14..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugRendererInfo.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor,
-        DoNotCheckConstants
-    ] WebGLDebugRendererInfo {
-        const unsigned int UNMASKED_VENDOR_WEBGL = 0x9245;
-        const unsigned int UNMASKED_RENDERER_WEBGL = 0x9246;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugShaders.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugShaders.idl
deleted file mode 100644
index ee330b6..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLDebugShaders.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor
-    ] WebGLDebugShaders {
-        [StrictTypeChecking, TreatReturnedNullStringAs=Null] DOMString getTranslatedShaderSource(in WebGLShader shader) raises(DOMException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLFramebuffer.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLFramebuffer.idl
deleted file mode 100644
index d0caa91..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLFramebuffer.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLFramebuffer {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLLoseContext.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLLoseContext.idl
deleted file mode 100644
index 390da26..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLLoseContext.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=WEBGL,
-        JSGenerateIsReachable=ImplContext,
-        OmitConstructor
-    ] WebGLLoseContext {
-        [StrictTypeChecking] void loseContext();
-        [StrictTypeChecking] void restoreContext();
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLProgram.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLProgram.idl
deleted file mode 100644
index 326f1c3..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLProgram.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLProgram {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderbuffer.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderbuffer.idl
deleted file mode 100644
index a6518ea..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderbuffer.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLRenderbuffer {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderingContext.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderingContext.idl
deleted file mode 100644
index e6d10a7..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLRenderingContext.idl
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        Conditional=WEBGL,
-        JSCustomMarkFunction,
-        DoNotCheckConstants
-    ] WebGLRenderingContext : CanvasRenderingContext {
-
-        /* ClearBufferMask */
-        const unsigned int DEPTH_BUFFER_BIT               = 0x00000100;
-        const unsigned int STENCIL_BUFFER_BIT             = 0x00000400;
-        const unsigned int COLOR_BUFFER_BIT               = 0x00004000;
-
-        /* BeginMode */
-        const unsigned int POINTS                         = 0x0000;
-        const unsigned int LINES                          = 0x0001;
-        const unsigned int LINE_LOOP                      = 0x0002;
-        const unsigned int LINE_STRIP                     = 0x0003;
-        const unsigned int TRIANGLES                      = 0x0004;
-        const unsigned int TRIANGLE_STRIP                 = 0x0005;
-        const unsigned int TRIANGLE_FAN                   = 0x0006;
-
-        /* AlphaFunction (not supported in ES20) */
-        /*      NEVER */
-        /*      LESS */
-        /*      EQUAL */
-        /*      LEQUAL */
-        /*      GREATER */
-        /*      NOTEQUAL */
-        /*      GEQUAL */
-        /*      ALWAYS */
-
-        /* BlendingFactorDest */
-        const unsigned int ZERO                           = 0;
-        const unsigned int ONE                            = 1;
-        const unsigned int SRC_COLOR                      = 0x0300;
-        const unsigned int ONE_MINUS_SRC_COLOR            = 0x0301;
-        const unsigned int SRC_ALPHA                      = 0x0302;
-        const unsigned int ONE_MINUS_SRC_ALPHA            = 0x0303;
-        const unsigned int DST_ALPHA                      = 0x0304;
-        const unsigned int ONE_MINUS_DST_ALPHA            = 0x0305;
-
-        /* BlendingFactorSrc */
-        /*      ZERO */
-        /*      ONE */
-        const unsigned int DST_COLOR                      = 0x0306;
-        const unsigned int ONE_MINUS_DST_COLOR            = 0x0307;
-        const unsigned int SRC_ALPHA_SATURATE             = 0x0308;
-        /*      SRC_ALPHA */
-        /*      ONE_MINUS_SRC_ALPHA */
-        /*      DST_ALPHA */
-        /*      ONE_MINUS_DST_ALPHA */
-
-        /* BlendEquationSeparate */
-        const unsigned int FUNC_ADD                       = 0x8006;
-        const unsigned int BLEND_EQUATION                 = 0x8009;
-        const unsigned int BLEND_EQUATION_RGB             = 0x8009;   /* same as BLEND_EQUATION */
-        const unsigned int BLEND_EQUATION_ALPHA           = 0x883D;
-
-        /* BlendSubtract */
-        const unsigned int FUNC_SUBTRACT                  = 0x800A;
-        const unsigned int FUNC_REVERSE_SUBTRACT          = 0x800B;
-
-        /* Separate Blend Functions */
-        const unsigned int BLEND_DST_RGB                  = 0x80C8;
-        const unsigned int BLEND_SRC_RGB                  = 0x80C9;
-        const unsigned int BLEND_DST_ALPHA                = 0x80CA;
-        const unsigned int BLEND_SRC_ALPHA                = 0x80CB;
-        const unsigned int CONSTANT_COLOR                 = 0x8001;
-        const unsigned int ONE_MINUS_CONSTANT_COLOR       = 0x8002;
-        const unsigned int CONSTANT_ALPHA                 = 0x8003;
-        const unsigned int ONE_MINUS_CONSTANT_ALPHA       = 0x8004;
-        const unsigned int BLEND_COLOR                    = 0x8005;
-
-        /* Buffer Objects */
-        const unsigned int ARRAY_BUFFER                   = 0x8892;
-        const unsigned int ELEMENT_ARRAY_BUFFER           = 0x8893;
-        const unsigned int ARRAY_BUFFER_BINDING           = 0x8894;
-        const unsigned int ELEMENT_ARRAY_BUFFER_BINDING   = 0x8895;
-
-        const unsigned int STREAM_DRAW                    = 0x88E0;
-        const unsigned int STATIC_DRAW                    = 0x88E4;
-        const unsigned int DYNAMIC_DRAW                   = 0x88E8;
-
-        const unsigned int BUFFER_SIZE                    = 0x8764;
-        const unsigned int BUFFER_USAGE                   = 0x8765;
-
-        const unsigned int CURRENT_VERTEX_ATTRIB          = 0x8626;
-
-        /* CullFaceMode */
-        const unsigned int FRONT                          = 0x0404;
-        const unsigned int BACK                           = 0x0405;
-        const unsigned int FRONT_AND_BACK                 = 0x0408;
-
-        /* DepthFunction */
-        /*      NEVER */
-        /*      LESS */
-        /*      EQUAL */
-        /*      LEQUAL */
-        /*      GREATER */
-        /*      NOTEQUAL */
-        /*      GEQUAL */
-        /*      ALWAYS */
-
-        /* EnableCap */
-        const unsigned int TEXTURE_2D                     = 0x0DE1;
-        const unsigned int CULL_FACE                      = 0x0B44;
-        const unsigned int BLEND                          = 0x0BE2;
-        const unsigned int DITHER                         = 0x0BD0;
-        const unsigned int STENCIL_TEST                   = 0x0B90;
-        const unsigned int DEPTH_TEST                     = 0x0B71;
-        const unsigned int SCISSOR_TEST                   = 0x0C11;
-        const unsigned int POLYGON_OFFSET_FILL            = 0x8037;
-        const unsigned int SAMPLE_ALPHA_TO_COVERAGE       = 0x809E;
-        const unsigned int SAMPLE_COVERAGE                = 0x80A0;
-
-        /* ErrorCode */
-        const unsigned int NO_ERROR                       = 0;
-        const unsigned int INVALID_ENUM                   = 0x0500;
-        const unsigned int INVALID_VALUE                  = 0x0501;
-        const unsigned int INVALID_OPERATION              = 0x0502;
-        const unsigned int OUT_OF_MEMORY                  = 0x0505;
-
-        /* FrontFaceDirection */
-        const unsigned int CW                             = 0x0900;
-        const unsigned int CCW                            = 0x0901;
-
-        /* GetPName */
-        const unsigned int LINE_WIDTH                     = 0x0B21;
-        const unsigned int ALIASED_POINT_SIZE_RANGE       = 0x846D;
-        const unsigned int ALIASED_LINE_WIDTH_RANGE       = 0x846E;
-        const unsigned int CULL_FACE_MODE                 = 0x0B45;
-        const unsigned int FRONT_FACE                     = 0x0B46;
-        const unsigned int DEPTH_RANGE                    = 0x0B70;
-        const unsigned int DEPTH_WRITEMASK                = 0x0B72;
-        const unsigned int DEPTH_CLEAR_VALUE              = 0x0B73;
-        const unsigned int DEPTH_FUNC                     = 0x0B74;
-        const unsigned int STENCIL_CLEAR_VALUE            = 0x0B91;
-        const unsigned int STENCIL_FUNC                   = 0x0B92;
-        const unsigned int STENCIL_FAIL                   = 0x0B94;
-        const unsigned int STENCIL_PASS_DEPTH_FAIL        = 0x0B95;
-        const unsigned int STENCIL_PASS_DEPTH_PASS        = 0x0B96;
-        const unsigned int STENCIL_REF                    = 0x0B97;
-        const unsigned int STENCIL_VALUE_MASK             = 0x0B93;
-        const unsigned int STENCIL_WRITEMASK              = 0x0B98;
-        const unsigned int STENCIL_BACK_FUNC              = 0x8800;
-        const unsigned int STENCIL_BACK_FAIL              = 0x8801;
-        const unsigned int STENCIL_BACK_PASS_DEPTH_FAIL   = 0x8802;
-        const unsigned int STENCIL_BACK_PASS_DEPTH_PASS   = 0x8803;
-        const unsigned int STENCIL_BACK_REF               = 0x8CA3;
-        const unsigned int STENCIL_BACK_VALUE_MASK        = 0x8CA4;
-        const unsigned int STENCIL_BACK_WRITEMASK         = 0x8CA5;
-        const unsigned int VIEWPORT                       = 0x0BA2;
-        const unsigned int SCISSOR_BOX                    = 0x0C10;
-        /*      SCISSOR_TEST */
-        const unsigned int COLOR_CLEAR_VALUE              = 0x0C22;
-        const unsigned int COLOR_WRITEMASK                = 0x0C23;
-        const unsigned int UNPACK_ALIGNMENT               = 0x0CF5;
-        const unsigned int PACK_ALIGNMENT                 = 0x0D05;
-        const unsigned int MAX_TEXTURE_SIZE               = 0x0D33;
-        const unsigned int MAX_VIEWPORT_DIMS              = 0x0D3A;
-        const unsigned int SUBPIXEL_BITS                  = 0x0D50;
-        const unsigned int RED_BITS                       = 0x0D52;
-        const unsigned int GREEN_BITS                     = 0x0D53;
-        const unsigned int BLUE_BITS                      = 0x0D54;
-        const unsigned int ALPHA_BITS                     = 0x0D55;
-        const unsigned int DEPTH_BITS                     = 0x0D56;
-        const unsigned int STENCIL_BITS                   = 0x0D57;
-        const unsigned int POLYGON_OFFSET_UNITS           = 0x2A00;
-        /*      POLYGON_OFFSET_FILL */
-        const unsigned int POLYGON_OFFSET_FACTOR          = 0x8038;
-        const unsigned int TEXTURE_BINDING_2D             = 0x8069;
-        const unsigned int SAMPLE_BUFFERS                 = 0x80A8;
-        const unsigned int SAMPLES                        = 0x80A9;
-        const unsigned int SAMPLE_COVERAGE_VALUE          = 0x80AA;
-        const unsigned int SAMPLE_COVERAGE_INVERT         = 0x80AB;
-
-        /* GetTextureParameter */
-        /*      TEXTURE_MAG_FILTER */
-        /*      TEXTURE_MIN_FILTER */
-        /*      TEXTURE_WRAP_S */
-        /*      TEXTURE_WRAP_T */
-
-        const unsigned int COMPRESSED_TEXTURE_FORMATS     = 0x86A3;
-
-        /* HintMode */
-        const unsigned int DONT_CARE                      = 0x1100;
-        const unsigned int FASTEST                        = 0x1101;
-        const unsigned int NICEST                         = 0x1102;
-
-        /* HintTarget */
-        const unsigned int GENERATE_MIPMAP_HINT            = 0x8192;
-
-        /* DataType */
-        const unsigned int BYTE                           = 0x1400;
-        const unsigned int UNSIGNED_BYTE                  = 0x1401;
-        const unsigned int SHORT                          = 0x1402;
-        const unsigned int UNSIGNED_SHORT                 = 0x1403;
-        const unsigned int INT                            = 0x1404;
-        const unsigned int UNSIGNED_INT                   = 0x1405;
-        const unsigned int FLOAT                          = 0x1406;
-
-        /* PixelFormat */
-        const unsigned int DEPTH_COMPONENT                = 0x1902;
-        const unsigned int ALPHA                          = 0x1906;
-        const unsigned int RGB                            = 0x1907;
-        const unsigned int RGBA                           = 0x1908;
-        const unsigned int LUMINANCE                      = 0x1909;
-        const unsigned int LUMINANCE_ALPHA                = 0x190A;
-
-        /* PixelType */
-        /*      UNSIGNED_BYTE */
-        const unsigned int UNSIGNED_SHORT_4_4_4_4         = 0x8033;
-        const unsigned int UNSIGNED_SHORT_5_5_5_1         = 0x8034;
-        const unsigned int UNSIGNED_SHORT_5_6_5           = 0x8363;
-
-        /* Shaders */
-        const unsigned int FRAGMENT_SHADER                  = 0x8B30;
-        const unsigned int VERTEX_SHADER                    = 0x8B31;
-        const unsigned int MAX_VERTEX_ATTRIBS               = 0x8869;
-        const unsigned int MAX_VERTEX_UNIFORM_VECTORS       = 0x8DFB;
-        const unsigned int MAX_VARYING_VECTORS              = 0x8DFC;
-        const unsigned int MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
-        const unsigned int MAX_VERTEX_TEXTURE_IMAGE_UNITS   = 0x8B4C;
-        const unsigned int MAX_TEXTURE_IMAGE_UNITS          = 0x8872;
-        const unsigned int MAX_FRAGMENT_UNIFORM_VECTORS     = 0x8DFD;
-        const unsigned int SHADER_TYPE                      = 0x8B4F;
-        const unsigned int DELETE_STATUS                    = 0x8B80;
-        const unsigned int LINK_STATUS                      = 0x8B82;
-        const unsigned int VALIDATE_STATUS                  = 0x8B83;
-        const unsigned int ATTACHED_SHADERS                 = 0x8B85;
-        const unsigned int ACTIVE_UNIFORMS                  = 0x8B86;
-        const unsigned int ACTIVE_ATTRIBUTES                = 0x8B89;
-        const unsigned int SHADING_LANGUAGE_VERSION         = 0x8B8C;
-        const unsigned int CURRENT_PROGRAM                  = 0x8B8D;
-
-        /* StencilFunction */
-        const unsigned int NEVER                          = 0x0200;
-        const unsigned int LESS                           = 0x0201;
-        const unsigned int EQUAL                          = 0x0202;
-        const unsigned int LEQUAL                         = 0x0203;
-        const unsigned int GREATER                        = 0x0204;
-        const unsigned int NOTEQUAL                       = 0x0205;
-        const unsigned int GEQUAL                         = 0x0206;
-        const unsigned int ALWAYS                         = 0x0207;
-
-        /* StencilOp */
-        /*      ZERO */
-        const unsigned int KEEP                           = 0x1E00;
-        const unsigned int REPLACE                        = 0x1E01;
-        const unsigned int INCR                           = 0x1E02;
-        const unsigned int DECR                           = 0x1E03;
-        const unsigned int INVERT                         = 0x150A;
-        const unsigned int INCR_WRAP                      = 0x8507;
-        const unsigned int DECR_WRAP                      = 0x8508;
-
-        /* StringName */
-        const unsigned int VENDOR                         = 0x1F00;
-        const unsigned int RENDERER                       = 0x1F01;
-        const unsigned int VERSION                        = 0x1F02;
-
-        /* TextureMagFilter */
-        const unsigned int NEAREST                        = 0x2600;
-        const unsigned int LINEAR                         = 0x2601;
-
-        /* TextureMinFilter */
-        /*      NEAREST */
-        /*      LINEAR */
-        const unsigned int NEAREST_MIPMAP_NEAREST         = 0x2700;
-        const unsigned int LINEAR_MIPMAP_NEAREST          = 0x2701;
-        const unsigned int NEAREST_MIPMAP_LINEAR          = 0x2702;
-        const unsigned int LINEAR_MIPMAP_LINEAR           = 0x2703;
-
-        /* TextureParameterName */
-        const unsigned int TEXTURE_MAG_FILTER             = 0x2800;
-        const unsigned int TEXTURE_MIN_FILTER             = 0x2801;
-        const unsigned int TEXTURE_WRAP_S                 = 0x2802;
-        const unsigned int TEXTURE_WRAP_T                 = 0x2803;
-
-        /* TextureTarget */
-        /*      TEXTURE_2D */
-        const unsigned int TEXTURE                        = 0x1702;
-
-        const unsigned int TEXTURE_CUBE_MAP               = 0x8513;
-        const unsigned int TEXTURE_BINDING_CUBE_MAP       = 0x8514;
-        const unsigned int TEXTURE_CUBE_MAP_POSITIVE_X    = 0x8515;
-        const unsigned int TEXTURE_CUBE_MAP_NEGATIVE_X    = 0x8516;
-        const unsigned int TEXTURE_CUBE_MAP_POSITIVE_Y    = 0x8517;
-        const unsigned int TEXTURE_CUBE_MAP_NEGATIVE_Y    = 0x8518;
-        const unsigned int TEXTURE_CUBE_MAP_POSITIVE_Z    = 0x8519;
-        const unsigned int TEXTURE_CUBE_MAP_NEGATIVE_Z    = 0x851A;
-        const unsigned int MAX_CUBE_MAP_TEXTURE_SIZE      = 0x851C;
-
-        /* TextureUnit */
-        const unsigned int TEXTURE0                       = 0x84C0;
-        const unsigned int TEXTURE1                       = 0x84C1;
-        const unsigned int TEXTURE2                       = 0x84C2;
-        const unsigned int TEXTURE3                       = 0x84C3;
-        const unsigned int TEXTURE4                       = 0x84C4;
-        const unsigned int TEXTURE5                       = 0x84C5;
-        const unsigned int TEXTURE6                       = 0x84C6;
-        const unsigned int TEXTURE7                       = 0x84C7;
-        const unsigned int TEXTURE8                       = 0x84C8;
-        const unsigned int TEXTURE9                       = 0x84C9;
-        const unsigned int TEXTURE10                      = 0x84CA;
-        const unsigned int TEXTURE11                      = 0x84CB;
-        const unsigned int TEXTURE12                      = 0x84CC;
-        const unsigned int TEXTURE13                      = 0x84CD;
-        const unsigned int TEXTURE14                      = 0x84CE;
-        const unsigned int TEXTURE15                      = 0x84CF;
-        const unsigned int TEXTURE16                      = 0x84D0;
-        const unsigned int TEXTURE17                      = 0x84D1;
-        const unsigned int TEXTURE18                      = 0x84D2;
-        const unsigned int TEXTURE19                      = 0x84D3;
-        const unsigned int TEXTURE20                      = 0x84D4;
-        const unsigned int TEXTURE21                      = 0x84D5;
-        const unsigned int TEXTURE22                      = 0x84D6;
-        const unsigned int TEXTURE23                      = 0x84D7;
-        const unsigned int TEXTURE24                      = 0x84D8;
-        const unsigned int TEXTURE25                      = 0x84D9;
-        const unsigned int TEXTURE26                      = 0x84DA;
-        const unsigned int TEXTURE27                      = 0x84DB;
-        const unsigned int TEXTURE28                      = 0x84DC;
-        const unsigned int TEXTURE29                      = 0x84DD;
-        const unsigned int TEXTURE30                      = 0x84DE;
-        const unsigned int TEXTURE31                      = 0x84DF;
-        const unsigned int ACTIVE_TEXTURE                 = 0x84E0;
-
-        /* TextureWrapMode */
-        const unsigned int REPEAT                         = 0x2901;
-        const unsigned int CLAMP_TO_EDGE                  = 0x812F;
-        const unsigned int MIRRORED_REPEAT                = 0x8370;
-
-        /* Uniform Types */
-        const unsigned int FLOAT_VEC2                     = 0x8B50;
-        const unsigned int FLOAT_VEC3                     = 0x8B51;
-        const unsigned int FLOAT_VEC4                     = 0x8B52;
-        const unsigned int INT_VEC2                       = 0x8B53;
-        const unsigned int INT_VEC3                       = 0x8B54;
-        const unsigned int INT_VEC4                       = 0x8B55;
-        const unsigned int BOOL                           = 0x8B56;
-        const unsigned int BOOL_VEC2                      = 0x8B57;
-        const unsigned int BOOL_VEC3                      = 0x8B58;
-        const unsigned int BOOL_VEC4                      = 0x8B59;
-        const unsigned int FLOAT_MAT2                     = 0x8B5A;
-        const unsigned int FLOAT_MAT3                     = 0x8B5B;
-        const unsigned int FLOAT_MAT4                     = 0x8B5C;
-        const unsigned int SAMPLER_2D                     = 0x8B5E;
-        const unsigned int SAMPLER_CUBE                   = 0x8B60;
-
-        /* Vertex Arrays */
-        const unsigned int VERTEX_ATTRIB_ARRAY_ENABLED        = 0x8622;
-        const unsigned int VERTEX_ATTRIB_ARRAY_SIZE           = 0x8623;
-        const unsigned int VERTEX_ATTRIB_ARRAY_STRIDE         = 0x8624;
-        const unsigned int VERTEX_ATTRIB_ARRAY_TYPE           = 0x8625;
-        const unsigned int VERTEX_ATTRIB_ARRAY_NORMALIZED     = 0x886A;
-        const unsigned int VERTEX_ATTRIB_ARRAY_POINTER        = 0x8645;
-        const unsigned int VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
-
-        /* Shader Source */
-        const unsigned int COMPILE_STATUS                 = 0x8B81;
-
-        /* Shader Precision-Specified Types */
-        const unsigned int LOW_FLOAT                      = 0x8DF0;
-        const unsigned int MEDIUM_FLOAT                   = 0x8DF1;
-        const unsigned int HIGH_FLOAT                     = 0x8DF2;
-        const unsigned int LOW_INT                        = 0x8DF3;
-        const unsigned int MEDIUM_INT                     = 0x8DF4;
-        const unsigned int HIGH_INT                       = 0x8DF5;
-
-        /* Framebuffer Object. */
-        const unsigned int FRAMEBUFFER                    = 0x8D40;
-        const unsigned int RENDERBUFFER                   = 0x8D41;
-
-        const unsigned int RGBA4                          = 0x8056;
-        const unsigned int RGB5_A1                        = 0x8057;
-        const unsigned int RGB565                         = 0x8D62;
-        const unsigned int DEPTH_COMPONENT16              = 0x81A5;
-        const unsigned int STENCIL_INDEX                  = 0x1901;
-        const unsigned int STENCIL_INDEX8                 = 0x8D48;
-        const unsigned int DEPTH_STENCIL                  = 0x84F9;
-
-        const unsigned int RENDERBUFFER_WIDTH             = 0x8D42;
-        const unsigned int RENDERBUFFER_HEIGHT            = 0x8D43;
-        const unsigned int RENDERBUFFER_INTERNAL_FORMAT   = 0x8D44;
-        const unsigned int RENDERBUFFER_RED_SIZE          = 0x8D50;
-        const unsigned int RENDERBUFFER_GREEN_SIZE        = 0x8D51;
-        const unsigned int RENDERBUFFER_BLUE_SIZE         = 0x8D52;
-        const unsigned int RENDERBUFFER_ALPHA_SIZE        = 0x8D53;
-        const unsigned int RENDERBUFFER_DEPTH_SIZE        = 0x8D54;
-        const unsigned int RENDERBUFFER_STENCIL_SIZE      = 0x8D55;
-
-        const unsigned int FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE           = 0x8CD0;
-        const unsigned int FRAMEBUFFER_ATTACHMENT_OBJECT_NAME           = 0x8CD1;
-        const unsigned int FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL         = 0x8CD2;
-        const unsigned int FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
-
-        const unsigned int COLOR_ATTACHMENT0              = 0x8CE0;
-        const unsigned int DEPTH_ATTACHMENT               = 0x8D00;
-        const unsigned int STENCIL_ATTACHMENT             = 0x8D20;
-        const unsigned int DEPTH_STENCIL_ATTACHMENT       = 0x821A;
-
-        const unsigned int NONE                           = 0;
-
-        const unsigned int FRAMEBUFFER_COMPLETE                      = 0x8CD5;
-        const unsigned int FRAMEBUFFER_INCOMPLETE_ATTACHMENT         = 0x8CD6;
-        const unsigned int FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
-        const unsigned int FRAMEBUFFER_INCOMPLETE_DIMENSIONS         = 0x8CD9;
-        const unsigned int FRAMEBUFFER_UNSUPPORTED                   = 0x8CDD;
-
-        const unsigned int FRAMEBUFFER_BINDING            = 0x8CA6;
-        const unsigned int RENDERBUFFER_BINDING           = 0x8CA7;
-        const unsigned int MAX_RENDERBUFFER_SIZE          = 0x84E8;
-
-        const unsigned int INVALID_FRAMEBUFFER_OPERATION  = 0x0506;
-
-        /* WebGL-specific enums */
-        const unsigned int UNPACK_FLIP_Y_WEBGL                = 0x9240;
-        const unsigned int UNPACK_PREMULTIPLY_ALPHA_WEBGL     = 0x9241;
-        const unsigned int CONTEXT_LOST_WEBGL                 = 0x9242;
-        const unsigned int UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
-        const unsigned int BROWSER_DEFAULT_WEBGL              = 0x9244;
-
-        readonly attribute long drawingBufferWidth;
-        readonly attribute long drawingBufferHeight;
-
-        [StrictTypeChecking] void         activeTexture(in unsigned long texture) raises(DOMException);
-        [StrictTypeChecking] void         attachShader(in WebGLProgram program, in WebGLShader shader) raises(DOMException);
-        [StrictTypeChecking] void         bindAttribLocation(in WebGLProgram program, in unsigned long index, in DOMString name) raises(DOMException);
-        [StrictTypeChecking] void         bindBuffer(in unsigned long target, in WebGLBuffer buffer) raises(DOMException);
-        [StrictTypeChecking] void         bindFramebuffer(in unsigned long target, in WebGLFramebuffer framebuffer) raises(DOMException);
-        [StrictTypeChecking] void         bindRenderbuffer(in unsigned long target, in WebGLRenderbuffer renderbuffer) raises(DOMException);
-        [StrictTypeChecking] void         bindTexture(in unsigned long target, in WebGLTexture texture) raises(DOMException);
-        [StrictTypeChecking] void         blendColor(in float red, in float green, in float blue, in float alpha);
-        [StrictTypeChecking] void         blendEquation( in unsigned long mode );
-        [StrictTypeChecking] void         blendEquationSeparate(in unsigned long modeRGB, in unsigned long modeAlpha);
-        [StrictTypeChecking] void         blendFunc(in unsigned long sfactor, in unsigned long dfactor);
-        [StrictTypeChecking] void         blendFuncSeparate(in unsigned long srcRGB, in unsigned long dstRGB, in unsigned long srcAlpha, in unsigned long dstAlpha);
-        [StrictTypeChecking] void         bufferData(in unsigned long target, in ArrayBuffer data, in unsigned long usage) raises (DOMException);
-        [StrictTypeChecking] void         bufferData(in unsigned long target, in ArrayBufferView data, in unsigned long usage) raises (DOMException);
-        [StrictTypeChecking] void         bufferData(in unsigned long target, in long long size, in unsigned long usage) raises (DOMException);
-        [StrictTypeChecking] void         bufferSubData(in unsigned long target, in long long offset, in ArrayBuffer data) raises (DOMException);
-        [StrictTypeChecking] void         bufferSubData(in unsigned long target, in long long offset, in ArrayBufferView data) raises (DOMException);
-
-        [StrictTypeChecking] unsigned long checkFramebufferStatus(in unsigned long target);
-        [StrictTypeChecking] void         clear(in unsigned long mask);
-        [StrictTypeChecking] void         clearColor(in float red, in float green, in float blue, in float alpha);
-        [StrictTypeChecking] void         clearDepth(in float depth);
-        [StrictTypeChecking] void         clearStencil(in long s);
-        [StrictTypeChecking] void         colorMask(in boolean red, in boolean green, in boolean blue, in boolean alpha);
-        [StrictTypeChecking] void         compileShader(in WebGLShader shader) raises(DOMException);
-
-        [StrictTypeChecking] void         compressedTexImage2D(in unsigned long target, in long level, in unsigned long internalformat,
-                                                               in long width, in long height, in long border, in ArrayBufferView data);
-        [StrictTypeChecking] void         compressedTexSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
-                                                                  in long width, in long height, in unsigned long format, in ArrayBufferView data);
-        
-        [StrictTypeChecking] void         copyTexImage2D(in unsigned long target, in long level, in unsigned long internalformat, in long x, in long y, in long width, in long height, in long border);
-        [StrictTypeChecking] void         copyTexSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset, in long x, in long y, in long width, in long height);
-
-        [StrictTypeChecking] WebGLBuffer createBuffer();
-        [StrictTypeChecking] WebGLFramebuffer createFramebuffer();
-        [StrictTypeChecking] WebGLProgram createProgram();
-        [StrictTypeChecking] WebGLRenderbuffer createRenderbuffer();
-        [StrictTypeChecking] WebGLShader createShader(in unsigned long type) raises(DOMException);
-        [StrictTypeChecking] WebGLTexture createTexture();
-
-        [StrictTypeChecking] void         cullFace(in unsigned long mode);
-
-        [StrictTypeChecking] void         deleteBuffer(in WebGLBuffer buffer);
-        [StrictTypeChecking] void         deleteFramebuffer(in WebGLFramebuffer framebuffer);
-        [StrictTypeChecking] void         deleteProgram(in WebGLProgram program);
-        [StrictTypeChecking] void         deleteRenderbuffer(in WebGLRenderbuffer renderbuffer);
-        [StrictTypeChecking] void         deleteShader(in WebGLShader shader);
-        [StrictTypeChecking] void         deleteTexture(in WebGLTexture texture);
-
-        [StrictTypeChecking] void         depthFunc(in unsigned long func);
-        [StrictTypeChecking] void         depthMask(in boolean flag);
-        // FIXME: this differs from the current WebGL spec (depthRangef)
-        [StrictTypeChecking] void         depthRange(in float zNear, in float zFar);
-        [StrictTypeChecking] void         detachShader(in WebGLProgram program, in WebGLShader shader) raises(DOMException);
-        [StrictTypeChecking] void         disable(in unsigned long cap);
-        [StrictTypeChecking] void         disableVertexAttribArray(in unsigned long index) raises(DOMException);
-        [StrictTypeChecking] void         drawArrays(in unsigned long mode, in long first, in long count) raises(DOMException);
-        [StrictTypeChecking] void         drawElements(in unsigned long mode, in long count, in unsigned long type, in long long offset) raises(DOMException);
-
-        [StrictTypeChecking] void         enable(in unsigned long cap);
-        [StrictTypeChecking] void         enableVertexAttribArray(in unsigned long index) raises(DOMException);
-        [StrictTypeChecking] void         finish();
-        [StrictTypeChecking] void         flush();
-        [StrictTypeChecking] void         framebufferRenderbuffer(in unsigned long target, in unsigned long attachment, in unsigned long renderbuffertarget, in WebGLRenderbuffer renderbuffer) raises(DOMException);
-        [StrictTypeChecking] void         framebufferTexture2D(in unsigned long target, in unsigned long attachment, in unsigned long textarget, in WebGLTexture texture, in long level) raises(DOMException);
-        [StrictTypeChecking] void         frontFace(in unsigned long mode);
-        [StrictTypeChecking] void         generateMipmap(in unsigned long target);
-        
-        [StrictTypeChecking] WebGLActiveInfo getActiveAttrib(in WebGLProgram program, in unsigned long index) raises (DOMException);
-        [StrictTypeChecking] WebGLActiveInfo getActiveUniform(in WebGLProgram program, in unsigned long index) raises (DOMException);
-
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] any[] getAttachedShaders(in WebGLProgram program) raises (DOMException);
-#else
-        [StrictTypeChecking, Custom] void getAttachedShaders(in WebGLProgram program) raises (DOMException);
-#endif
-
-        [StrictTypeChecking] int          getAttribLocation(in WebGLProgram program, in DOMString name);
-
-        // any getBufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] any getBufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-#else
-        [StrictTypeChecking, Custom] void getBufferParameter();
-#endif
-
-        [StrictTypeChecking] WebGLContextAttributes getContextAttributes();
-
-        [StrictTypeChecking] unsigned long getError();
-
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] any getExtension(in DOMString name);
-        [StrictTypeChecking, Custom] any getParameter(in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] any getFramebufferAttachmentParameter(in unsigned long target, in unsigned long attachment, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] any getProgramParameter(in WebGLProgram program, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, TreatReturnedNullStringAs=Null] DOMString getProgramInfoLog(in WebGLProgram program) raises(DOMException);
-#else
-        // object getExtension(in DOMString name);
-        [StrictTypeChecking, Custom] void getExtension(in DOMString name);
-
-        // any getFramebufferAttachmentParameter(in unsigned long target, in unsigned long attachment, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getFramebufferAttachmentParameter();
-        // any getParameter(in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getParameter();
-        // any getProgramParameter(in WebGLProgram program, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getProgramParameter();
-        [StrictTypeChecking, TreatReturnedNullStringAs=Null] DOMString getProgramInfoLog(in WebGLProgram program) raises(DOMException);
-#endif
-
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] any getRenderbufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] any getShaderParameter(in WebGLShader shader, in unsigned long pname) raises(DOMException);
-#else
-        // any getRenderbufferParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getRenderbufferParameter();
-        // any getShaderParameter(in WebGLShader shader, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getShaderParameter() raises(DOMException);
-#endif
-
-        [StrictTypeChecking, TreatReturnedNullStringAs=Null] DOMString    getShaderInfoLog(in WebGLShader shader) raises(DOMException);
-
-        [StrictTypeChecking] WebGLShaderPrecisionFormat getShaderPrecisionFormat(in unsigned long shadertype, in unsigned long precisiontype) raises(DOMException);
-
-        [StrictTypeChecking, TreatReturnedNullStringAs=Null] DOMString    getShaderSource(in WebGLShader shader) raises(DOMException);
-
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] DOMString[] getSupportedExtensions();
-        [StrictTypeChecking, Custom] any getTexParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] any getUniform(in WebGLProgram program, in WebGLUniformLocation location) raises(DOMException);
-#else
-        // DOMString[] getSupportedExtensions()
-        [StrictTypeChecking, Custom] void getSupportedExtensions();
-
-        // any getTexParameter(in unsigned long target, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getTexParameter();
-
-        // any getUniform(in WebGLProgram program, in WebGLUniformLocation location) raises(DOMException);
-        [StrictTypeChecking, Custom] void getUniform();
-#endif
-
-        [StrictTypeChecking] WebGLUniformLocation getUniformLocation(in WebGLProgram program, in DOMString name) raises(DOMException);
-
-#if (defined(LANGUAGE_DART) && LANGUAGE_DART)
-        [StrictTypeChecking, Custom] any getVertexAttrib(in unsigned long index, in unsigned long pname) raises(DOMException);
-#else
-        // any getVertexAttrib(in unsigned long index, in unsigned long pname) raises(DOMException);
-        [StrictTypeChecking, Custom] void getVertexAttrib();
-#endif
-
-        [StrictTypeChecking] long long getVertexAttribOffset(in unsigned long index, in unsigned long pname);
-
-        [StrictTypeChecking] void         hint(in unsigned long target, in unsigned long mode);
-        [StrictTypeChecking] boolean      isBuffer(in WebGLBuffer buffer);
-        [StrictTypeChecking] boolean      isContextLost();
-        [StrictTypeChecking] boolean      isEnabled(in unsigned long cap);
-        [StrictTypeChecking] boolean      isFramebuffer(in WebGLFramebuffer framebuffer);
-        [StrictTypeChecking] boolean      isProgram(in WebGLProgram program);
-        [StrictTypeChecking] boolean      isRenderbuffer(in WebGLRenderbuffer renderbuffer);
-        [StrictTypeChecking] boolean      isShader(in WebGLShader shader);
-        [StrictTypeChecking] boolean      isTexture(in WebGLTexture texture);
-        [StrictTypeChecking] void         lineWidth(in float width);
-        [StrictTypeChecking] void         linkProgram(in WebGLProgram program) raises(DOMException);
-        [StrictTypeChecking] void         pixelStorei(in unsigned long pname, in long param);
-        [StrictTypeChecking] void         polygonOffset(in float factor, in float units);
-
-        [StrictTypeChecking] void         readPixels(in long x, in long y, in long width, in long height, in unsigned long format, in unsigned long type, in ArrayBufferView pixels) raises(DOMException);
-        
-        [StrictTypeChecking] void         releaseShaderCompiler();
-        [StrictTypeChecking] void         renderbufferStorage(in unsigned long target, in unsigned long internalformat, in long width, in long height);
-        [StrictTypeChecking] void         sampleCoverage(in float value, in boolean invert);
-        [StrictTypeChecking] void         scissor(in long x, in long y, in long width, in long height);
-        [StrictTypeChecking] void         shaderSource(in WebGLShader shader, in DOMString string) raises(DOMException);
-        [StrictTypeChecking] void         stencilFunc(in unsigned long func, in long ref, in unsigned long mask);
-        [StrictTypeChecking] void         stencilFuncSeparate(in unsigned long face, in unsigned long func, in long ref, in unsigned long mask);
-        [StrictTypeChecking] void         stencilMask(in unsigned long mask);
-        [StrictTypeChecking] void         stencilMaskSeparate(in unsigned long face, in unsigned long mask);
-        [StrictTypeChecking] void         stencilOp(in unsigned long fail, in unsigned long zfail, in unsigned long zpass);
-        [StrictTypeChecking] void         stencilOpSeparate(in unsigned long face, in unsigned long fail, in unsigned long zfail, in unsigned long zpass);
-
-        [StrictTypeChecking] void         texParameterf(in unsigned long target, in unsigned long pname, in float param);
-        [StrictTypeChecking] void         texParameteri(in unsigned long target, in unsigned long pname, in long param);
-
-        // Supported forms:
-        [StrictTypeChecking] void         texImage2D(in unsigned long target, in long level, in unsigned long internalformat, in long width, in long height, 
-                                                     in long border, in unsigned long format, in unsigned long type, in ArrayBufferView pixels) raises (DOMException);
-        [StrictTypeChecking] void         texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
-                                                     in unsigned long format, in unsigned long type, in ImageData pixels) raises (DOMException);
-        [StrictTypeChecking] void         texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
-                                                     in unsigned long format, in unsigned long type, in HTMLImageElement image) raises (DOMException);
-        [StrictTypeChecking] void         texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
-                                                     in unsigned long format, in unsigned long type, in HTMLCanvasElement canvas) raises (DOMException);
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-        [StrictTypeChecking] void         texImage2D(in unsigned long target, in long level, in unsigned long internalformat,
-                                                     in unsigned long format, in unsigned long type, in HTMLVideoElement video) raises (DOMException);
-#endif
-
-        [StrictTypeChecking] void         texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset, 
-                                                        in long width, in long height, 
-                                                        in unsigned long format, in unsigned long type, in ArrayBufferView pixels) raises (DOMException);
-        [StrictTypeChecking] void         texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
-                                                        in unsigned long format, in unsigned long type, in ImageData pixels) raises (DOMException);
-        [StrictTypeChecking] void         texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
-                                                        in unsigned long format, in unsigned long type, in HTMLImageElement image) raises (DOMException);
-        [StrictTypeChecking] void         texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
-                                                        in unsigned long format, in unsigned long type, in HTMLCanvasElement canvas) raises (DOMException);
-#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
-        [StrictTypeChecking] void         texSubImage2D(in unsigned long target, in long level, in long xoffset, in long yoffset,
-                                                        in unsigned long format, in unsigned long type, in HTMLVideoElement video) raises (DOMException);
-#endif
-
-        [StrictTypeChecking] void uniform1f(in WebGLUniformLocation location, in float x) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform1fv(in WebGLUniformLocation location, in Float32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform1i(in WebGLUniformLocation location, in long x) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform1iv(in WebGLUniformLocation location, in Int32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform2f(in WebGLUniformLocation location, in float x, in float y) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform2fv(in WebGLUniformLocation location, in Float32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform2i(in WebGLUniformLocation location, in long x, in long y) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform2iv(in WebGLUniformLocation location, in Int32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform3f(in WebGLUniformLocation location, in float x, in float y, in float z) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform3fv(in WebGLUniformLocation location, in Float32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform3i(in WebGLUniformLocation location, in long x, in long y, in long z) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform3iv(in WebGLUniformLocation location, in Int32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform4f(in WebGLUniformLocation location, in float x, in float y, in float z, in float w) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform4fv(in WebGLUniformLocation location, in Float32Array v) raises(DOMException);
-        [StrictTypeChecking] void uniform4i(in WebGLUniformLocation location, in long x, in long y, in long z, in long w) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniform4iv(in WebGLUniformLocation location, in Int32Array v) raises(DOMException);
-
-        [StrictTypeChecking, Custom] void uniformMatrix2fv(in WebGLUniformLocation location, in boolean transpose, in Float32Array array) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniformMatrix3fv(in WebGLUniformLocation location, in boolean transpose, in Float32Array array) raises(DOMException);
-        [StrictTypeChecking, Custom] void uniformMatrix4fv(in WebGLUniformLocation location, in boolean transpose, in Float32Array array) raises(DOMException);
-
-        [StrictTypeChecking] void         useProgram(in WebGLProgram program) raises(DOMException);
-        [StrictTypeChecking] void         validateProgram(in WebGLProgram program) raises(DOMException);
-
-        [StrictTypeChecking] void         vertexAttrib1f(in unsigned long indx, in float x);
-        [StrictTypeChecking, Custom] void         vertexAttrib1fv(in unsigned long indx, in Float32Array values);
-        [StrictTypeChecking] void         vertexAttrib2f(in unsigned long indx, in float x, in float y);
-        [StrictTypeChecking, Custom] void         vertexAttrib2fv(in unsigned long indx, in Float32Array values);
-        [StrictTypeChecking] void         vertexAttrib3f(in unsigned long indx, in float x, in float y, in float z);
-        [StrictTypeChecking, Custom] void         vertexAttrib3fv(in unsigned long indx, in Float32Array values);
-        [StrictTypeChecking] void         vertexAttrib4f(in unsigned long indx, in float x, in float y, in float z, in float w);
-        [StrictTypeChecking, Custom] void         vertexAttrib4fv(in unsigned long indx, in Float32Array values);
-        [StrictTypeChecking] void         vertexAttribPointer(in unsigned long indx, in long size, in unsigned long type, in boolean normalized, 
-                                                              in long stride, in long long offset) raises(DOMException);
-
-        [StrictTypeChecking] void         viewport(in long x, in long y, in long width, in long height);
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLShader.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLShader.idl
deleted file mode 100644
index 2aeb704..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLShader.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLShader {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLShaderPrecisionFormat.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLShaderPrecisionFormat.idl
deleted file mode 100644
index 7cfb80e..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLShaderPrecisionFormat.idl
+++ /dev/null
@@ -1,37 +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 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.
- */
-
-module html {
-
-    interface [
-        Conditional=WEBGL,
-    ] WebGLShaderPrecisionFormat {
-        readonly attribute int rangeMin;
-        readonly attribute int rangeMax;
-        readonly attribute int precision;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLTexture.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLTexture.idl
deleted file mode 100644
index 8e72dd3..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLTexture.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLTexture {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLUniformLocation.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLUniformLocation.idl
deleted file mode 100644
index eb3167c..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLUniformLocation.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- * 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:
- * 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. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLUniformLocation {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/canvas/WebGLVertexArrayObjectOES.idl b/elemental/idl/third_party/WebCore/html/canvas/WebGLVertexArrayObjectOES.idl
deleted file mode 100644
index 0abbe07..0000000
--- a/elemental/idl/third_party/WebCore/html/canvas/WebGLVertexArrayObjectOES.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-    interface [
-        Conditional=WEBGL
-    ] WebGLVertexArrayObjectOES {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/shadow/HTMLContentElement.idl b/elemental/idl/third_party/WebCore/html/shadow/HTMLContentElement.idl
deleted file mode 100644
index c928d44..0000000
--- a/elemental/idl/third_party/WebCore/html/shadow/HTMLContentElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module html {
-    interface [
-        Conditional=SHADOW_DOM,
-        V8EnabledAtRuntime=shadowDOM
-    ] HTMLContentElement : HTMLElement {
-        attribute [Reflect] DOMString select;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/shadow/HTMLShadowElement.idl b/elemental/idl/third_party/WebCore/html/shadow/HTMLShadowElement.idl
deleted file mode 100644
index 94facb7..0000000
--- a/elemental/idl/third_party/WebCore/html/shadow/HTMLShadowElement.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * 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.
- */
-
-module html {
-
-    interface [
-        Conditional=SHADOW_DOM,
-        V8EnabledAtRuntime=shadowDOM
-    ] HTMLShadowElement : HTMLElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/track/TextTrack.idl b/elemental/idl/third_party/WebCore/html/track/TextTrack.idl
deleted file mode 100644
index 845a80c..0000000
--- a/elemental/idl/third_party/WebCore/html/track/TextTrack.idl
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack,
-        EventTarget,
-        JSCustomMarkFunction,
-        JSCustomIsReachable
-    ] TextTrack {
-        readonly attribute DOMString kind;
-        readonly attribute DOMString label;
-        readonly attribute DOMString language;
-
-        const unsigned short DISABLED = 0;
-        const unsigned short HIDDEN = 1;
-        const unsigned short SHOWING = 2;
-        attribute unsigned short mode
-            setter raises (DOMException);
-
-        readonly attribute TextTrackCueList cues;
-        readonly attribute TextTrackCueList activeCues;
-                 attribute EventListener oncuechange;
-
-        void addCue(in TextTrackCue cue)
-            raises (DOMException);
-        void removeCue(in TextTrackCue cue)
-            raises (DOMException);
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/html/track/TextTrackCue.idl b/elemental/idl/third_party/WebCore/html/track/TextTrackCue.idl
deleted file mode 100644
index d552525..0000000
--- a/elemental/idl/third_party/WebCore/html/track/TextTrackCue.idl
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack,
-        JSGenerateToNativeObject,
-        Constructor(in DOMString id, in double startTime, in double endTime, in DOMString text, in [Optional=DefaultIsUndefined] DOMString settings, in [Optional=DefaultIsUndefined] boolean pauseOnExit),
-        CallWith=ScriptExecutionContext,
-        EventTarget,
-        JSCustomMarkFunction,
-        JSCustomIsReachable
-    ] TextTrackCue {
-        readonly attribute TextTrack track;
-
-        attribute DOMString id;
-        attribute double startTime;
-        attribute double endTime;
-        attribute boolean pauseOnExit;
-
-        attribute DOMString vertical
-            setter raises (DOMException);
-        attribute boolean snapToLines;
-        attribute long line
-            setter raises (DOMException);
-        attribute long position
-            setter raises (DOMException);
-        attribute long size
-            setter raises (DOMException);
-        attribute DOMString align
-            setter raises (DOMException);
-
-        attribute DOMString text;
-        DocumentFragment getCueAsHTML();
-        
-        attribute EventListener onenter;
-        attribute EventListener onexit;
-        
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/track/TextTrackCueList.idl b/elemental/idl/third_party/WebCore/html/track/TextTrackCueList.idl
deleted file mode 100644
index 380e59a..0000000
--- a/elemental/idl/third_party/WebCore/html/track/TextTrackCueList.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack,
-        IndexedGetter
-    ] TextTrackCueList {
-        readonly attribute unsigned long length;
-        TextTrackCue item(in unsigned long index);
-        TextTrackCue getCueById(in DOMString id);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/track/TextTrackList.idl b/elemental/idl/third_party/WebCore/html/track/TextTrackList.idl
deleted file mode 100644
index aedda2e..0000000
--- a/elemental/idl/third_party/WebCore/html/track/TextTrackList.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack,
-        IndexedGetter,
-        EventTarget,
-        JSCustomMarkFunction,
-        JSCustomIsReachable
-    ] TextTrackList {
-        readonly attribute unsigned long length;
-        TextTrack item(in unsigned long index);
-
-        attribute EventListener onaddtrack;
-
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/html/track/TrackEvent.idl b/elemental/idl/third_party/WebCore/html/track/TrackEvent.idl
deleted file mode 100644
index b475ad4..0000000
--- a/elemental/idl/third_party/WebCore/html/track/TrackEvent.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        Conditional=VIDEO_TRACK,
-        V8EnabledAtRuntime=webkitVideoTrack,
-        ConstructorTemplate=Event
-    ] TrackEvent : Event {
-        readonly attribute [InitializedByEventConstructor, CustomGetter] object track;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/inspector/InjectedScriptHost.idl b/elemental/idl/third_party/WebCore/inspector/InjectedScriptHost.idl
deleted file mode 100644
index 54f080f..0000000
--- a/elemental/idl/third_party/WebCore/inspector/InjectedScriptHost.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-    interface [
-        Conditional=INSPECTOR
-    ] InjectedScriptHost {
-        void clearConsoleMessages();
-
-        void copyText(in DOMString text);
-        [Custom] void inspect(in DOMObject objectId, in DOMObject hints);
-        [Custom] DOMObject inspectedObject(in int num);
-        [Custom] DOMObject internalConstructorName(in DOMObject object);
-        [Custom] boolean isHTMLAllCollection(in DOMObject object);
-        [Custom] DOMString type(in DOMObject object);
-        [Custom] DOMObject functionDetails(in DOMObject object);
-        [Custom] Array getEventListeners(in Node node);
-
-        [Custom] DOMString databaseId(in DOMObject database);
-        [Custom] DOMString storageId(in DOMObject storage);
-
-#if defined(ENABLE_WORKERS) && ENABLE_WORKERS
-        void didCreateWorker(in long id, in DOMString url, in boolean isFakeWorker);
-        void didDestroyWorker(in long id);
-        long nextWorkerId();
-#endif
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/inspector/InspectorFrontendHost.idl b/elemental/idl/third_party/WebCore/inspector/InspectorFrontendHost.idl
deleted file mode 100644
index 2a20370..0000000
--- a/elemental/idl/third_party/WebCore/inspector/InspectorFrontendHost.idl
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
- * 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.
- */
-
-module core {
-    interface [
-        Conditional=INSPECTOR
-    ] InspectorFrontendHost {
-        void loaded();
-        void closeWindow();
-        void bringToFront();
-        void setZoomFactor(in float zoom);
-        void inspectedURLChanged(in DOMString newURL);
-
-        void requestAttachWindow();
-        void requestDetachWindow();
-        void requestSetDockSide(in DOMString side);
-        void setAttachedWindowHeight(in unsigned long height);
-        void moveWindowBy(in float x, in float y);
-        void setInjectedScriptForOrigin(in DOMString origin, in DOMString script);
-
-        DOMString localizedStringsURL();
-        DOMString hiddenPanels();
-
-        void copyText(in DOMString text);
-        void openInNewTab(in DOMString url);
-        boolean canSave();
-        void save(in DOMString url, in DOMString content, in boolean forceSaveAs);
-        void append(in DOMString url, in DOMString content);
-
-        [Custom] DOMString platform();
-        [Custom] DOMString port();
-        [Custom] void showContextMenu(in MouseEvent event, in DOMObject items);
-        void sendMessageToBackend(in DOMString message);
-
-        [Custom] void recordActionTaken(in unsigned long actionCode);
-        [Custom] void recordPanelShown(in unsigned long panelCode);
-        [Custom] void recordSettingChanged(in unsigned long settingChanged);
-        
-        DOMString loadResourceSynchronously(in DOMString url);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/inspector/JavaScriptCallFrame.idl b/elemental/idl/third_party/WebCore/inspector/JavaScriptCallFrame.idl
deleted file mode 100644
index 47ca5d1..0000000
--- a/elemental/idl/third_party/WebCore/inspector/JavaScriptCallFrame.idl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module inspector {
-
-    interface [
-        Conditional=JAVASCRIPT_DEBUGGER,
-        OmitConstructor,
-        DoNotCheckConstants
-    ] JavaScriptCallFrame {
-
-        // Scope type
-        const unsigned short GLOBAL_SCOPE = 0;
-        const unsigned short LOCAL_SCOPE = 1;
-        const unsigned short WITH_SCOPE = 2;
-        const unsigned short CLOSURE_SCOPE = 3;
-        const unsigned short CATCH_SCOPE = 4;
-
-        [Custom] void evaluate(in DOMString script);
-
-        readonly attribute JavaScriptCallFrame caller;
-        readonly attribute long sourceID;
-        readonly attribute long line;
-        readonly attribute long column;
-        readonly attribute [CustomGetter] Array scopeChain;
-        [Custom] unsigned short scopeType(in int scopeIndex);
-        readonly attribute [CustomGetter] Object thisObject;
-        readonly attribute DOMString functionName;
-        readonly attribute [CustomGetter] DOMString type;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/inspector/ScriptProfile.idl b/elemental/idl/third_party/WebCore/inspector/ScriptProfile.idl
deleted file mode 100644
index ebbee2e..0000000
--- a/elemental/idl/third_party/WebCore/inspector/ScriptProfile.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.
- */
-
-module core {
-
-    interface [
-        Conditional=JAVASCRIPT_DEBUGGER,
-        OmitConstructor,
-        V8CustomToJSObject
-    ] ScriptProfile {
-        readonly attribute DOMString title;
-        readonly attribute unsigned long uid;
-        readonly attribute ScriptProfileNode head;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/inspector/ScriptProfileNode.idl b/elemental/idl/third_party/WebCore/inspector/ScriptProfileNode.idl
deleted file mode 100644
index 43f795f..0000000
--- a/elemental/idl/third_party/WebCore/inspector/ScriptProfileNode.idl
+++ /dev/null
@@ -1,45 +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.
- */
-
-module core {
-
-    interface [
-        Conditional=JAVASCRIPT_DEBUGGER,
-        OmitConstructor,
-        V8CustomToJSObject
-    ] 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;
-        readonly attribute sequence<ScriptProfileNode> children;
-        readonly attribute boolean visible;
-        readonly attribute [CustomGetter] unsigned long callUID;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/loader/appcache/DOMApplicationCache.idl b/elemental/idl/third_party/WebCore/loader/appcache/DOMApplicationCache.idl
deleted file mode 100644
index a35fa47..0000000
--- a/elemental/idl/third_party/WebCore/loader/appcache/DOMApplicationCache.idl
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
- 
-module offline {
- 
-    interface [
-        EventTarget,
-        OmitConstructor,
-        DoNotCheckConstants,
-        JSGenerateIsReachable=ImplFrame
-    ] DOMApplicationCache {
-        // update status
-        const unsigned short UNCACHED = 0;
-        const unsigned short IDLE = 1;
-        const unsigned short CHECKING = 2;
-        const unsigned short DOWNLOADING = 3;
-        const unsigned short UPDATEREADY = 4;
-        const unsigned short OBSOLETE = 5;
-        readonly attribute unsigned short status;
-
-        void update()
-            raises(DOMException);
-        void swapCache()
-            raises(DOMException);
-        void abort();
-
-        // events
-        attribute EventListener onchecking;
-        attribute EventListener onerror;
-        attribute EventListener onnoupdate;
-        attribute EventListener ondownloading;
-        attribute EventListener onprogress;
-        attribute EventListener onupdateready;
-        attribute EventListener oncached;
-        attribute EventListener onobsolete;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/notifications/DOMWindowNotifications.idl b/elemental/idl/third_party/WebCore/notifications/DOMWindowNotifications.idl
deleted file mode 100644
index ea8a129..0000000
--- a/elemental/idl/third_party/WebCore/notifications/DOMWindowNotifications.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009, 2012 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.
- */
-
-module window {
-
-    interface [
-        Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS,
-        Supplemental=DOMWindow
-    ] DOMWindowNotifications {
-#if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-        readonly attribute [V8EnabledAtRuntime] NotificationCenter webkitNotifications;
-#endif
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-        attribute NotificationConstructor Notification;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/notifications/Notification.idl b/elemental/idl/third_party/WebCore/notifications/Notification.idl
deleted file mode 100644
index da2eb7f..0000000
--- a/elemental/idl/third_party/WebCore/notifications/Notification.idl
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * Copyright (C) 2011, 2012 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:
- *
- *     * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS,
-        ActiveDOMObject,
-        EventTarget,
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-        Constructor(in DOMString title, in [Optional=DefaultIsUndefined] Dictionary options),
-        CallWith=ScriptExecutionContext,
-#else
-        OmitConstructor
-#endif
-    ] Notification {
-        void show();
-#if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-        void cancel();
-#endif
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-        void close();
-#endif
-
-
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-        [CallWith=ScriptExecutionContext] static DOMString permissionLevel();
-        [Custom] static void requestPermission(in NotificationPermissionCallback callback);
-#endif
-
-        attribute EventListener onshow;
-#if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-        attribute EventListener ondisplay;
-#endif
-        attribute EventListener onerror;
-        attribute EventListener onclose;
-        attribute EventListener onclick;
-
-        attribute DOMString dir;
-#if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-        attribute DOMString replaceId;
-#endif
-#if defined(ENABLE_NOTIFICATIONS) && ENABLE_NOTIFICATIONS
-        attribute DOMString tag;
-#endif
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/notifications/NotificationCenter.idl b/elemental/idl/third_party/WebCore/notifications/NotificationCenter.idl
deleted file mode 100644
index da99ba9..0000000
--- a/elemental/idl/third_party/WebCore/notifications/NotificationCenter.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * Copyright (C) 2011, 2012 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:
- *
- *     * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=LEGACY_NOTIFICATIONS,
-        ActiveDOMObject,
-        OmitConstructor
-    ] NotificationCenter {
-#if !defined(ENABLE_TEXT_NOTIFICATIONS_ONLY) || !ENABLE_TEXT_NOTIFICATIONS_ONLY
-       [V8Custom] Notification createHTMLNotification(in DOMString url) raises(DOMException);
-#endif
-       [V8Custom] Notification createNotification(in DOMString iconUrl, in DOMString title, in DOMString body) raises(DOMException);
-
-       int checkPermission();
-       [Custom] void requestPermission(in VoidCallback callback);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/notifications/NotificationPermissionCallback.idl b/elemental/idl/third_party/WebCore/notifications/NotificationPermissionCallback.idl
deleted file mode 100644
index 1f11161..0000000
--- a/elemental/idl/third_party/WebCore/notifications/NotificationPermissionCallback.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=NOTIFICATIONS,
-        Callback
-    ] NotificationPermissionCallback {
-        boolean handleEvent(in DOMString permission);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/notifications/WorkerContextNotifications.idl b/elemental/idl/third_party/WebCore/notifications/WorkerContextNotifications.idl
deleted file mode 100644
index 3c93bc2..0000000
--- a/elemental/idl/third_party/WebCore/notifications/WorkerContextNotifications.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module threads {
-
-    interface [
-        Conditional=NOTIFICATIONS|LEGACY_NOTIFICATIONS,
-        Supplemental=WorkerContext
-    ] WorkerContextNotifications {
-#if defined(ENABLE_LEGACY_NOTIFICATIONS) && ENABLE_LEGACY_NOTIFICATIONS
-        readonly attribute [V8EnabledAtRuntime] NotificationCenter webkitNotifications;
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/AbstractView.idl b/elemental/idl/third_party/WebCore/page/AbstractView.idl
deleted file mode 100644
index 6d8232b..0000000
--- a/elemental/idl/third_party/WebCore/page/AbstractView.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module views {
-
-    // Introduced in DOM Level 2:
-    interface [
-        ObjCCustomImplementation,
-        OmitConstructor
-    ] AbstractView {
-        readonly attribute Document document;
-        readonly attribute StyleMedia styleMedia;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/BarInfo.idl b/elemental/idl/third_party/WebCore/page/BarInfo.idl
deleted file mode 100644
index 11a97c7..0000000
--- a/elemental/idl/third_party/WebCore/page/BarInfo.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        OmitConstructor
-    ] BarInfo {
-        readonly attribute boolean visible;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/Console.idl b/elemental/idl/third_party/WebCore/page/Console.idl
deleted file mode 100644
index 5f215e8..0000000
--- a/elemental/idl/third_party/WebCore/page/Console.idl
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2007, 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.
- */
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        OmitConstructor
-    ] Console {
-
-        [CallWith=ScriptArguments|CallStack] void debug();
-        [CallWith=ScriptArguments|CallStack] void error();
-        [CallWith=ScriptArguments|CallStack] void info();
-        [CallWith=ScriptArguments|CallStack] void log();
-        [CallWith=ScriptArguments|CallStack] void warn();
-        [CallWith=ScriptArguments|CallStack] void dir();
-        [CallWith=ScriptArguments|CallStack] void dirxml();
-        [V8Custom, CallWith=ScriptArguments|CallStack] void trace();
-        [V8Custom, CallWith=ScriptArguments|CallStack, ImplementedAs=assertCondition] void assert(in boolean condition);
-        [CallWith=ScriptArguments|CallStack] void count();
-        [CallWith=ScriptArguments|CallStack] void markTimeline();
-
-#if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER
-        readonly attribute sequence<ScriptProfile> profiles;
-        [Custom] void profile(in DOMString title);
-        [Custom] void profileEnd(in DOMString title);
-#endif
-
-        void time(in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString title);
-        [CallWith=ScriptArguments|CallStack] void timeEnd(in [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString title);
-        [CallWith=ScriptArguments|CallStack] void timeStamp();
-        [CallWith=ScriptArguments|CallStack] void group();
-        [CallWith=ScriptArguments|CallStack] void groupCollapsed();
-        void groupEnd();
-
-        readonly attribute [V8CustomGetter] MemoryInfo memory;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/Coordinates.idl b/elemental/idl/third_party/WebCore/page/Coordinates.idl
deleted file mode 100644
index f83d87e..0000000
--- a/elemental/idl/third_party/WebCore/page/Coordinates.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module core {
-
-    interface [
-        OmitConstructor
-    ] Coordinates {
-        readonly attribute double latitude;
-        readonly attribute double longitude;
-        readonly attribute [Custom] double altitude;
-        readonly attribute double accuracy;
-        readonly attribute [Custom] double altitudeAccuracy;
-        readonly attribute [Custom] double heading;
-        readonly attribute [Custom] double speed;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/page/Crypto.idl b/elemental/idl/third_party/WebCore/page/Crypto.idl
deleted file mode 100644
index 807b63f..0000000
--- a/elemental/idl/third_party/WebCore/page/Crypto.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 3.  Neither the name of Googl, Inc. ("Google") 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 GOOGLE 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.
- */
-
-module window {
-
-    interface [
-        OmitConstructor
-    ] Crypto {
-        void getRandomValues(in ArrayBufferView array) raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/DOMSelection.idl b/elemental/idl/third_party/WebCore/page/DOMSelection.idl
deleted file mode 100644
index 1f7d3da..0000000
--- a/elemental/idl/third_party/WebCore/page/DOMSelection.idl
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- * 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:
- *
- * 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.
- */
-
-module window {
-
-    // This is based off of Mozilla's Selection interface
-    // https://developer.mozilla.org/En/DOM/Selection
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        InterfaceName=Selection
-    ] DOMSelection {
-        readonly attribute Node anchorNode;
-        readonly attribute long anchorOffset;
-        readonly attribute Node focusNode;
-        readonly attribute long focusOffset;
-
-        readonly attribute boolean isCollapsed;
-        readonly attribute long rangeCount;
-
-        void collapse(in [Optional=DefaultIsUndefined] Node node, 
-                      in [Optional=DefaultIsUndefined] long index)
-            raises(DOMException);
-        void collapseToEnd()
-            raises(DOMException);
-        void collapseToStart()
-            raises(DOMException);
-
-        void deleteFromDocument();
-        boolean containsNode(in [Optional=DefaultIsUndefined] Node node, 
-                             in [Optional=DefaultIsUndefined] boolean allowPartial);
-        void selectAllChildren(in [Optional=DefaultIsUndefined] Node node)
-            raises(DOMException);
-
-        void extend(in [Optional=DefaultIsUndefined] Node node, 
-                    in [Optional=DefaultIsUndefined] long offset)
-            raises(DOMException);
-
-        Range getRangeAt(in [Optional=DefaultIsUndefined] long index)
-            raises(DOMException);
-        void removeAllRanges();
-        void addRange(in [Optional=DefaultIsUndefined] Range range);
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // WebKit extensions
-        readonly attribute Node baseNode;
-        readonly attribute long baseOffset;
-        readonly attribute Node extentNode;
-        readonly attribute long extentOffset;
-
-        // WebKit's "type" accessor returns "None", "Range" and "Caret"
-        // IE's type accessor returns "none", "text" and "control"
-        readonly attribute DOMString type;
-
-        void modify(in [Optional=DefaultIsUndefined] DOMString alter, 
-                    in [Optional=DefaultIsUndefined] DOMString direction, 
-                    in [Optional=DefaultIsUndefined] DOMString granularity);
-        void setBaseAndExtent(in [Optional=DefaultIsUndefined] Node baseNode, 
-                              in [Optional=DefaultIsUndefined] long baseOffset, 
-                              in [Optional=DefaultIsUndefined] Node extentNode, 
-                              in [Optional=DefaultIsUndefined] long extentOffset)
-            raises(DOMException);
-        void setPosition(in [Optional=DefaultIsUndefined] Node node, 
-                         in [Optional=DefaultIsUndefined] long offset)
-            raises(DOMException);
-
-        // IE extentions
-        // http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx
-        void empty();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/DOMWindow.idl b/elemental/idl/third_party/WebCore/page/DOMWindow.idl
deleted file mode 100644
index f0656d8..0000000
--- a/elemental/idl/third_party/WebCore/page/DOMWindow.idl
+++ /dev/null
@@ -1,796 +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.
- */
-
-module window {
-
-    interface [
-        CheckSecurity,
-        JSCustomDefineOwnProperty,
-        CustomDeleteProperty,
-        CustomGetOwnPropertySlot,
-        CustomEnumerateProperty,
-        JSCustomMarkFunction,
-        JSCustomToNativeObject,
-        CustomPutFunction,
-        EventTarget,
-        ExtendsDOMGlobalObject,
-        JSGenerateToNativeObject,
-        ReplaceableConstructor,
-        JSLegacyParent=JSDOMWindowBase,
-        V8CustomToJSObject,
-        InterfaceName=Window
-    ] DOMWindow {
-        // DOM Level 0
-        attribute [Replaceable] Screen screen;
-        attribute [Replaceable, DoNotCheckSecurityOnGetter] History history;
-        attribute [Replaceable] BarInfo locationbar;
-        attribute [Replaceable] BarInfo menubar;
-        attribute [Replaceable] BarInfo personalbar;
-        attribute [Replaceable] BarInfo scrollbars;
-        attribute [Replaceable] BarInfo statusbar;
-        attribute [Replaceable] BarInfo toolbar;
-        attribute [Replaceable] Navigator navigator;
-        attribute [Replaceable] Navigator clientInformation;
-        readonly attribute Crypto crypto;
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        attribute [DoNotCheckSecurity, CustomSetter, V8Unforgeable] Location location;
-#endif
-        attribute [Replaceable, CustomGetter, V8CustomSetter] Event event;
-
-        DOMSelection getSelection();
-
-        readonly attribute [CheckSecurityForNode] Element frameElement;
-
-        [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void focus();
-        [DoNotCheckSecurity] void blur();
-        [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void close();
-
-        void print();
-        void stop();
-
-        [Custom] DOMWindow open(in DOMString url,
-                                in DOMString name,
-                                in [Optional] DOMString options);
-
-        [Custom] DOMObject showModalDialog(in DOMString url,
-                                           in [Optional] DOMObject dialogArgs,
-                                           in [Optional] DOMString featureArgs);
-
-        void alert(in [Optional=DefaultIsUndefined] DOMString message);
-        boolean confirm(in [Optional=DefaultIsUndefined] DOMString message);
-        [TreatReturnedNullStringAs=Null] DOMString prompt(in [Optional=DefaultIsUndefined] DOMString message,
-                                                    in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString defaultValue);
-
-        boolean find(in [Optional=DefaultIsUndefined] DOMString string,
-                     in [Optional=DefaultIsUndefined] boolean caseSensitive,
-                     in [Optional=DefaultIsUndefined] boolean backwards,
-                     in [Optional=DefaultIsUndefined] boolean wrap,
-                     in [Optional=DefaultIsUndefined] boolean wholeWord,
-                     in [Optional=DefaultIsUndefined] boolean searchInFrames,
-                     in [Optional=DefaultIsUndefined] boolean showDialog);
-
-        attribute [Replaceable] boolean offscreenBuffering;
-
-        attribute [Replaceable] long outerHeight;
-        attribute [Replaceable] long outerWidth;
-        attribute [Replaceable] long innerHeight;
-        attribute [Replaceable] long innerWidth;
-        attribute [Replaceable] long screenX;
-        attribute [Replaceable] long screenY;
-        attribute [Replaceable] long screenLeft;
-        attribute [Replaceable] long screenTop;
-        attribute [Replaceable] long scrollX;
-        attribute [Replaceable] long scrollY;
-        readonly attribute long pageXOffset;
-        readonly attribute long pageYOffset;
-
-        void scrollBy(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
-        void scrollTo(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
-        void scroll(in [Optional=DefaultIsUndefined] long x, in [Optional=DefaultIsUndefined] long y);
-        void moveBy(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
-        void moveTo(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
-        void resizeBy(in [Optional=DefaultIsUndefined] float x, in [Optional=DefaultIsUndefined] float y); // FIXME: this should take longs not floats.
-        void resizeTo(in [Optional=DefaultIsUndefined] float width, in [Optional=DefaultIsUndefined] float height); // FIXME: this should take longs not floats.
-
-        readonly attribute [DoNotCheckSecurity] boolean closed;
-
-        attribute [Replaceable, DoNotCheckSecurityOnGetter] unsigned long length;
-
-        attribute DOMString name;
-
-        attribute DOMString status;
-        attribute DOMString defaultStatus;
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // This attribute is an alias of defaultStatus and is necessary for legacy uses.
-        attribute DOMString defaultstatus;
-#endif
-
-        // Self referential attributes
-        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow self;
-        readonly attribute [DoNotCheckSecurity, V8Unforgeable] DOMWindow window;
-        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow frames;
-
-        attribute [Replaceable, DoNotCheckSecurityOnGetter, V8CustomSetter] DOMWindow opener;
-        attribute [Replaceable, DoNotCheckSecurityOnGetter] DOMWindow parent;
-        attribute [Replaceable, DoNotCheckSecurityOnGetter, V8Unforgeable, V8ReadOnly] DOMWindow top;
-
-        // DOM Level 2 AbstractView Interface
-        readonly attribute Document document;
-
-        // CSSOM View Module
-        MediaQueryList matchMedia(in DOMString query);
-
-        // styleMedia has been removed from the CSSOM View specification.
-        readonly attribute StyleMedia styleMedia;
-
-        // DOM Level 2 Style Interface
-        CSSStyleDeclaration getComputedStyle(in [Optional=DefaultIsUndefined] Element element,
-                                             in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString pseudoElement);
-
-        // WebKit extensions
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        CSSRuleList getMatchedCSSRules(in [Optional=DefaultIsUndefined] Element element,
-                                       in [TreatNullAs=NullString, TreatUndefinedAs=NullString,Optional=DefaultIsUndefined] DOMString pseudoElement);
-#endif
-
-        attribute [Replaceable] double devicePixelRatio;
-        
-        WebKitPoint webkitConvertPointFromPageToNode(in [Optional=DefaultIsUndefined] Node node, 
-                                                     in [Optional=DefaultIsUndefined] WebKitPoint p);
-        WebKitPoint webkitConvertPointFromNodeToPage(in [Optional=DefaultIsUndefined] Node node, 
-                                                     in [Optional=DefaultIsUndefined] WebKitPoint p);
-
-        readonly attribute [V8EnabledAtRuntime] DOMApplicationCache applicationCache;
-
-        readonly attribute [V8EnabledAtRuntime] Storage sessionStorage
-            getter raises(DOMException);
-        readonly attribute [V8EnabledAtRuntime] Storage localStorage
-            getter raises(DOMException);
-
-#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
-        // This is the interface orientation in degrees. Some examples are:
-        //  0 is straight up; -90 is when the device is rotated 90 clockwise;
-        //  90 is when rotated counter clockwise.
-        readonly attribute long orientation;
-#endif
-
-                 attribute [Replaceable] Console console;
-
-        // cross-document messaging
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in DOMString targetOrigin)
-            raises(DOMException);
-        [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in DOMString targetOrigin, in Array messagePorts)
-            raises(DOMException);
-
-        [DoNotCheckSecurity, Custom] void webkitPostMessage(in SerializedScriptValue message, in DOMString targetOrigin)
-            raises(DOMException);
-        [DoNotCheckSecurity, Custom] void webkitPostMessage(in SerializedScriptValue message, in DOMString targetOrigin, in Array transferList)
-            raises(DOMException);
-#else
-        // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
-        [DoNotCheckSecurity, Custom] void postMessage(in SerializedScriptValue message, in [Optional] MessagePort messagePort, in DOMString targetOrigin)
-            raises(DOMException);
-#endif
-
-#if defined(ENABLE_WEB_TIMING) && ENABLE_WEB_TIMING
-        attribute [Replaceable] Performance performance;
-#endif
-
-        // Timers
-        [Custom] long setTimeout(in [Optional=DefaultIsUndefined] TimeoutHandler handler, 
-                                 in [Optional=DefaultIsUndefined] long timeout);
-        // [Custom] long setTimeout(in TimeoutHandler handler, in long timeout, arguments...);
-        // [Custom] long setTimeout(in DOMString code, in long timeout);
-        void clearTimeout(in [Optional=DefaultIsUndefined] long handle);
-        [Custom] long setInterval(in TimeoutHandler handler, in long timeout);
-        // [Custom] long setInterval(in TimeoutHandler handler, in long timeout, arguments...);
-        // [Custom] long setInterval(in DOMString code, in long timeout);
-        void clearInterval(in [Optional=DefaultIsUndefined] long handle);
-
-#if defined(ENABLE_REQUEST_ANIMATION_FRAME)
-        // WebKit animation extensions, being standardized in the WebPerf WG
-        long webkitRequestAnimationFrame(in [Callback] RequestAnimationFrameCallback callback);
-        void webkitCancelAnimationFrame(in long id);
-        void webkitCancelRequestAnimationFrame(in long id); // This is a deprecated alias for webkitCancelAnimationFrame(). Remove this when removing vendor prefix.
-#endif
-
-        // Base64
-        DOMString atob(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString string)
-            raises(DOMException);
-        DOMString btoa(in [TreatNullAs=NullString,Optional=DefaultIsUndefined] DOMString string)
-            raises(DOMException);
-
-        // Events
-        attribute EventListener onabort;
-        attribute EventListener onbeforeunload;
-        attribute EventListener onblur;
-        attribute EventListener oncanplay;
-        attribute EventListener oncanplaythrough;
-        attribute EventListener onchange;
-        attribute EventListener onclick;
-        attribute EventListener oncontextmenu;
-        attribute EventListener ondblclick;
-        attribute EventListener ondrag;
-        attribute EventListener ondragend;
-        attribute EventListener ondragenter;
-        attribute EventListener ondragleave;
-        attribute EventListener ondragover;
-        attribute EventListener ondragstart;
-        attribute EventListener ondrop;
-        attribute EventListener ondurationchange;
-        attribute EventListener onemptied;
-        attribute EventListener onended;
-        attribute EventListener onerror;
-        attribute EventListener onfocus;
-        attribute EventListener onhashchange;
-        attribute EventListener oninput;
-        attribute EventListener oninvalid;
-        attribute EventListener onkeydown;
-        attribute EventListener onkeypress;
-        attribute EventListener onkeyup;
-        attribute EventListener onload;
-        attribute EventListener onloadeddata;
-        attribute EventListener onloadedmetadata;
-        attribute EventListener onloadstart;
-        attribute EventListener onmessage;
-        attribute EventListener onmousedown;
-        attribute EventListener onmousemove;
-        attribute EventListener onmouseout;
-        attribute EventListener onmouseover;
-        attribute EventListener onmouseup;
-        attribute EventListener onmousewheel;
-        attribute EventListener onoffline;
-        attribute EventListener ononline;
-        attribute EventListener onpagehide;
-        attribute EventListener onpageshow;
-        attribute EventListener onpause;
-        attribute EventListener onplay;
-        attribute EventListener onplaying;
-        attribute EventListener onpopstate;
-        attribute EventListener onprogress;
-        attribute EventListener onratechange;
-        attribute EventListener onresize;
-        attribute EventListener onscroll;
-        attribute EventListener onseeked;
-        attribute EventListener onseeking;
-        attribute EventListener onselect;
-        attribute EventListener onstalled;
-        attribute EventListener onstorage;
-        attribute EventListener onsubmit;
-        attribute EventListener onsuspend;
-        attribute EventListener ontimeupdate;
-        attribute EventListener onunload;
-        attribute EventListener onvolumechange;
-        attribute EventListener onwaiting;
-
-        // Not implemented yet.
-        // attribute EventListener onafterprint;
-        // attribute EventListener onbeforeprint;
-        // attribute EventListener onreadystatechange;
-        // attribute EventListener onredo;
-        // attribute EventListener onshow;
-        // attribute EventListener onundo;
-
-        // Webkit extensions
-        attribute EventListener onreset;
-        attribute EventListener onsearch;
-        attribute EventListener onwebkitanimationend;
-        attribute EventListener onwebkitanimationiteration;
-        attribute EventListener onwebkitanimationstart;
-        attribute EventListener onwebkittransitionend;
-#if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
-        attribute EventListener onorientationchange;
-#endif
-        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchstart;
-        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchmove;
-        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchend;
-        attribute [Conditional=TOUCH_EVENTS,V8EnabledAtRuntime] EventListener ontouchcancel;
-
-        attribute [Conditional=DEVICE_ORIENTATION,V8EnabledAtRuntime] EventListener ondevicemotion;
-        attribute [Conditional=DEVICE_ORIENTATION,V8EnabledAtRuntime] EventListener ondeviceorientation;
-
-        // EventTarget interface
-        [Custom] void addEventListener(in DOMString type,
-                                      in EventListener listener,
-                                      in [Optional] boolean useCapture);
-        [Custom] void removeEventListener(in DOMString type,
-                                          in EventListener listener,
-                                          in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-
-        [V8Custom] void captureEvents(/*in long eventFlags*/);
-        [V8Custom] void releaseEvents(/*in long eventFlags*/);
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Global constructors
-        attribute StyleSheetConstructor StyleSheet;
-        attribute CSSStyleSheetConstructor CSSStyleSheet;
-
-        attribute CSSValueConstructor CSSValue;
-        attribute CSSPrimitiveValueConstructor CSSPrimitiveValue;
-        attribute CSSValueListConstructor CSSValueList;
-        attribute WebKitCSSTransformValueConstructor WebKitCSSTransformValue;
-
-#if defined(ENABLE_CSS_FILTERS) && ENABLE_CSS_FILTERS
-        attribute WebKitCSSFilterValueConstructor WebKitCSSFilterValue;
-#endif
-
-        attribute CSSRuleConstructor CSSRule;
-        attribute CSSCharsetRuleConstructor CSSCharsetRule;
-        attribute CSSFontFaceRuleConstructor CSSFontFaceRule;
-        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;
-        attribute ProcessingInstructionConstructor ProcessingInstruction;
-        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] ShadowRootConstructor WebKitShadowRoot;
-        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] HTMLContentElementConstructor HTMLContentElement;
-        attribute [Conditional=SHADOW_DOM, V8EnabledPerContext=shadowDOM] 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 HTMLBaseFontElementConstructor HTMLBaseFontElement;
-        attribute HTMLBodyElementConstructor HTMLBodyElement;
-        attribute HTMLButtonElementConstructor HTMLButtonElement;
-        attribute HTMLCanvasElementConstructor HTMLCanvasElement;
-        attribute HTMLDListElementConstructor HTMLDListElement;
-        attribute [Conditional=DATALIST] HTMLDataListElementConstructor HTMLDataListElement;
-        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;
-#if defined(ENABLE_METER_TAG) && ENABLE_METER_TAG
-        attribute HTMLMeterElementConstructor HTMLMeterElement;
-#endif
-        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;
-#if defined(ENABLE_PROGRESS_TAG) && ENABLE_PROGRESS_TAG
-        attribute HTMLProgressElementConstructor HTMLProgressElement;
-#endif
-        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 HTMLTextAreaElementConstructor HTMLTextAreaElement;
-        attribute HTMLTitleElementConstructor HTMLTitleElement;
-        attribute HTMLUListElementConstructor HTMLUListElement;
-
-        attribute HTMLCollectionConstructor HTMLCollection;
-        attribute HTMLAllCollectionConstructor HTMLAllCollection;
-        attribute [Conditional=MICRODATA] HTMLPropertiesCollectionConstructor HTMLPropertiesCollection;
-        attribute HTMLUnknownElementConstructor HTMLUnknownElement;
-
-        attribute [JSCustomGetter, CustomConstructor] HTMLImageElementConstructorConstructor Image; // Usable with new operator
-        attribute [JSCustomGetter] HTMLOptionElementConstructorConstructor Option; // Usable with new operator
-
-        attribute [Conditional=ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] MediaKeyErrorConstructor MediaKeyError;
-        attribute [Conditional=ENCRYPTED_MEDIA, V8EnabledAtRuntime=encryptedMedia] MediaKeyEventConstructor MediaKeyEvent;
-
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] HTMLTrackElementConstructor HTMLTrackElement;
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] TextTrackConstructor TextTrack;
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] TextTrackCueConstructor TextTrackCue; // Usable with the new operator
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] TextTrackCueListConstructor TextTrackCueList;
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] TextTrackListConstructor TextTrackList;
-        attribute [Conditional=VIDEO_TRACK, V8EnabledAtRuntime=webkitVideoTrack] TrackEventConstructor TrackEvent;
-
-        attribute [JSCustomGetter, Conditional=VIDEO, V8EnabledAtRuntime] HTMLAudioElementConstructorConstructor Audio; // Usable with the new operator
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] HTMLAudioElementConstructor HTMLAudioElement;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] HTMLMediaElementConstructor HTMLMediaElement;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] HTMLVideoElementConstructor HTMLVideoElement;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] MediaErrorConstructor MediaError;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] TimeRangesConstructor TimeRanges;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] HTMLSourceElementConstructor HTMLSourceElement;
-        attribute [Conditional=VIDEO, V8EnabledAtRuntime] MediaControllerConstructor MediaController;
-
-        attribute [Conditional=WEB_INTENTS_TAG] HTMLIntentElementConstructor HTMLIntentElement;
-
-        attribute CanvasPatternConstructor CanvasPattern;
-        attribute CanvasGradientConstructor CanvasGradient;
-        attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;
-
-        attribute ImageDataConstructor ImageData;
-        attribute TextMetricsConstructor TextMetrics;
-
-        attribute [Conditional=WEBGL] WebGLActiveInfoConstructor WebGLActiveInfo;
-        attribute [Conditional=WEBGL] WebGLBufferConstructor WebGLBuffer;
-        attribute [Conditional=WEBGL] WebGLFramebufferConstructor WebGLFramebuffer;
-        attribute [Conditional=WEBGL] WebGLProgramConstructor WebGLProgram;
-        attribute [Conditional=WEBGL] WebGLRenderbufferConstructor WebGLRenderbuffer;
-        attribute [Conditional=WEBGL] WebGLRenderingContextConstructor WebGLRenderingContext;
-        attribute [Conditional=WEBGL] WebGLShaderConstructor WebGLShader;
-        attribute [Conditional=WEBGL] WebGLShaderPrecisionFormatConstructor WebGLShaderPrecisionFormat;
-        attribute [Conditional=WEBGL] WebGLTextureConstructor WebGLTexture;
-        attribute [Conditional=WEBGL] WebGLUniformLocationConstructor WebGLUniformLocation;
-
-        attribute DOMStringMapConstructor DOMStringMap;
-
-        attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
-        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 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 UIEventConstructor UIEvent;
-        attribute WebKitAnimationEventConstructor WebKitAnimationEvent;
-        attribute WebKitTransitionEventConstructor WebKitTransitionEvent;
-        attribute WheelEventConstructor WheelEvent;
-        attribute XMLHttpRequestProgressEventConstructor XMLHttpRequestProgressEvent;
-        attribute [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] DeviceMotionEventConstructor DeviceMotionEvent;
-        attribute [Conditional=DEVICE_ORIENTATION, V8EnabledAtRuntime] DeviceOrientationEventConstructor DeviceOrientationEvent;
-        attribute [Conditional=TOUCH_EVENTS] TouchEventConstructor TouchEvent;
-        attribute StorageEventConstructor StorageEvent;
-        attribute [Conditional=INPUT_SPEECH] SpeechInputEventConstructor SpeechInputEvent;
-        attribute [Conditional=WEBGL] WebGLContextEventConstructor WebGLContextEvent;
-
-        attribute EventExceptionConstructor EventException;
-
-        attribute WebKitCSSKeyframeRuleConstructor WebKitCSSKeyframeRule;
-        attribute WebKitCSSKeyframesRuleConstructor WebKitCSSKeyframesRule;
-        attribute [Conditional=CSS_REGIONS] WebKitCSSRegionRuleConstructor WebKitCSSRegionRule;
-
-        attribute WebKitCSSMatrixConstructor WebKitCSSMatrix; // Usable with the new operator
-
-        attribute WebKitPointConstructor WebKitPoint; // Usable with new the operator
-
-        attribute ClipboardConstructor Clipboard;
-
-        attribute [Conditional=WORKERS] WorkerConstructor Worker; // Usable with the new operator
-        attribute [Conditional=SHARED_WORKERS, JSCustomGetter, V8EnabledAtRuntime] SharedWorkerConstructor SharedWorker; // Usable with the new operator
-
-        attribute FileConstructor File;
-        attribute FileListConstructor FileList;
-        attribute BlobConstructor Blob;
-
-        attribute NodeFilterConstructor NodeFilter;
-        attribute RangeConstructor Range;
-        attribute RangeExceptionConstructor RangeException;
-
-        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 XMLHttpRequestExceptionConstructor XMLHttpRequestException;
-        attribute [Conditional=XSLT] XSLTProcessorConstructor XSLTProcessor; // Usable with the new operator
-
-#if defined(ENABLE_CHANNEL_MESSAGING) && ENABLE_CHANNEL_MESSAGING
-        attribute MessagePortConstructor MessagePort;
-        attribute MessageChannelConstructor MessageChannel; // Usable with the new operator
-#endif
-
-        attribute DOMPluginConstructor Plugin;
-        attribute DOMPluginArrayConstructor PluginArray;
-
-        attribute DOMMimeTypeConstructor MimeType;
-        attribute DOMMimeTypeArrayConstructor MimeTypeArray;
-
-        attribute ClientRectConstructor ClientRect;
-        attribute ClientRectListConstructor ClientRectList;
-
-        attribute StorageConstructor Storage;
-
-#if defined(ENABLE_ANIMATION_API) && ENABLE_ANIMATION_API
-        attribute WebKitAnimationConstructor WebKitAnimation;
-        attribute WebKitAnimationListConstructor WebKitAnimationList;
-#endif
-
-        attribute XPathEvaluatorConstructor XPathEvaluator;
-        attribute XPathResultConstructor XPathResult;
-        attribute XPathExceptionConstructor XPathException;
-
-        attribute [Conditional=SVG] 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
-        // SVGStylable, 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
-
-#if defined(ENABLE_FILTERS) && ENABLE_FILTERS
-        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
-#endif
-
-        attribute DOMFormDataConstructor FormData;
-
-        attribute [Conditional=BLOB|FILE_SYSTEM] FileErrorConstructor FileError;
-        attribute [Conditional=BLOB] FileReaderConstructor FileReader;
-
-        attribute [Conditional=BLOB&LEGACY_WEBKIT_BLOB_BUILDER] WebKitBlobBuilderConstructor WebKitBlobBuilder;
-
-        attribute [Conditional=BLOB] DOMURLConstructor webkitURL;
-
-#if defined(ENABLE_QUOTA) && ENABLE_QUOTA
-        readonly attribute [V8EnabledAtRuntime=Quota] StorageInfo webkitStorageInfo;
-#endif
-
-        attribute [Conditional=MUTATION_OBSERVERS] WebKitMutationObserverConstructor WebKitMutationObserver;
-
-#endif // defined(LANGUAGE_JAVASCRIPT)
-
-#if defined(V8_BINDING) && V8_BINDING
-        // window.toString() requires special handling in V8
-        [V8DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] DOMString toString();
-#endif // defined(V8_BINDING)
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/page/DOMWindowPagePopup.idl b/elemental/idl/third_party/WebCore/page/DOMWindowPagePopup.idl
deleted file mode 100644
index aa477a1..0000000
--- a/elemental/idl/third_party/WebCore/page/DOMWindowPagePopup.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * 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.
- */
-
-module window {
-    interface [
-        Conditional=PAGE_POPUP,
-        Supplemental=DOMWindow
-    ] DOMWindowPagePopup {
-        readonly attribute [V8EnabledPerContext=pagePopup] PagePopupController pagePopupController;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/page/EventSource.idl b/elemental/idl/third_party/WebCore/page/EventSource.idl
deleted file mode 100644
index 48df3eb..0000000
--- a/elemental/idl/third_party/WebCore/page/EventSource.idl
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009 Ericsson AB. All rights reserved.
- * Copyright (C) 2010, 2011 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer
- *    in the documentation and/or other materials provided with the
- *    distribution.
- * 3. Neither the name of Ericsson nor the names of its contributors
- *    may be used to endorse or promote products derived from this
- *    software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    interface [
-        ActiveDOMObject,
-        Constructor(in DOMString scriptUrl),
-        CallWith=ScriptExecutionContext,
-        ConstructorRaisesException,
-        EventTarget,
-        JSNoStaticTables
-    ] EventSource {
-
-        readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
-        readonly attribute DOMString url;
-
-        // ready state
-        const unsigned short CONNECTING = 0;
-        const unsigned short OPEN = 1;
-        const unsigned short CLOSED = 2;
-        readonly attribute unsigned short readyState;
-
-        // networking
-        attribute EventListener onopen;
-        attribute EventListener onmessage;
-        attribute EventListener onerror;
-        void close();
-
-        // EventTarget interface
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/page/History.idl b/elemental/idl/third_party/WebCore/page/History.idl
deleted file mode 100644
index 6e8f6ab..0000000
--- a/elemental/idl/third_party/WebCore/page/History.idl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- */
-
-module window {
-
-    interface [
-#if defined(V8_BINDING) && V8_BINDING
-        CheckSecurity,
-#endif
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomNamedSetter,
-        JSGenerateIsReachable=ImplFrame,
-        CustomDeleteProperty,
-        CustomEnumerateProperty,
-        OmitConstructor
-    ] History {
-        readonly attribute unsigned long length;
-        readonly attribute [CachedAttribute, Custom] SerializedScriptValue state;
-
-        [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void back();
-        [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void forward();
-        [DoNotCheckSecurity, CallWith=ScriptExecutionContext] void go(in [Optional=DefaultIsUndefined] long distance);
-        
-        [Custom, V8EnabledAtRuntime] void pushState(in any data, in DOMString title, in [Optional] DOMString url)
-            raises(DOMException);
-        [Custom, V8EnabledAtRuntime] void replaceState(in any data, in DOMString title, in [Optional] DOMString url)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/Location.idl b/elemental/idl/third_party/WebCore/page/Location.idl
deleted file mode 100644
index 1f1703a..0000000
--- a/elemental/idl/third_party/WebCore/page/Location.idl
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 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.
- */
-
-module window {
-
-    interface [
-#if defined(V8_BINDING) && V8_BINDING
-        CheckSecurity,
-#endif
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        CustomNamedSetter,
-        JSGenerateIsReachable=ImplFrame,
-        CustomDeleteProperty,
-        CustomEnumerateProperty,
-        JSCustomDefineOwnProperty,
-        JSCustomNamedGetterOnPrototype,
-        JSCustomDefineOwnPropertyOnPrototype,
-        OmitConstructor,
-        V8CustomToJSObject
-    ] Location {
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-                 attribute [DoNotCheckSecurityOnSetter, CustomSetter, V8Unforgeable] DOMString href;
-#endif
-
-        [Custom, V8Unforgeable] void assign(in [Optional=DefaultIsUndefined] DOMString url);
-        [Custom, V8Unforgeable] void replace(in [Optional=DefaultIsUndefined] DOMString url);
-        [Custom, V8Unforgeable] void reload();
-
-        // URI decomposition attributes
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-                 attribute [CustomSetter] DOMString protocol;
-                 attribute [CustomSetter] DOMString host;
-                 attribute [CustomSetter] DOMString hostname;
-                 attribute [CustomSetter] DOMString port;
-                 attribute [CustomSetter] DOMString pathname;
-                 attribute [CustomSetter] DOMString search;
-                 attribute [CustomSetter] DOMString hash;
-
-                 readonly attribute DOMString origin;
-#endif
-
-        readonly attribute DOMStringList ancestorOrigins;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [NotEnumerable, Custom, V8Unforgeable, V8ReadOnly, ImplementedAs=toStringFunction] DOMString toString();
-#endif
-#if defined(V8_BINDING) && V8_BINDING
-        [NotEnumerable, Custom, V8Unforgeable, V8ReadOnly] DOMObject valueOf();
-#endif
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/MemoryInfo.idl b/elemental/idl/third_party/WebCore/page/MemoryInfo.idl
deleted file mode 100644
index b9149d5..0000000
--- a/elemental/idl/third_party/WebCore/page/MemoryInfo.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    interface [
-        OmitConstructor
-    ] MemoryInfo {
-
-        readonly attribute unsigned long totalJSHeapSize;
-        readonly attribute unsigned long usedJSHeapSize;
-        readonly attribute [JSCustomGetter] unsigned long jsHeapSizeLimit;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/Navigator.idl b/elemental/idl/third_party/WebCore/page/Navigator.idl
deleted file mode 100644
index 400d8e0..0000000
--- a/elemental/idl/third_party/WebCore/page/Navigator.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-
-    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.
-*/
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        OmitConstructor
-    ] 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 DOMString product;
-        readonly attribute DOMString productSub;
-        readonly attribute DOMString vendor;
-        readonly attribute DOMString vendorSub;
-        readonly attribute boolean cookieEnabled;
-        boolean javaEnabled();
-
-        readonly attribute boolean onLine;
-
-#if defined(ENABLE_POINTER_LOCK) && ENABLE_POINTER_LOCK
-        readonly attribute [V8EnabledAtRuntime] PointerLock webkitPointer;
-#endif
-
-        void getStorageUpdates(); // FIXME: Remove this method or rename to yieldForStorageUpdates.
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/NavigatorRegisterProtocolHandler.idl b/elemental/idl/third_party/WebCore/page/NavigatorRegisterProtocolHandler.idl
deleted file mode 100644
index 174d063..0000000
--- a/elemental/idl/third_party/WebCore/page/NavigatorRegisterProtocolHandler.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-
-    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.
-*/
-
-module window {
-
-    interface [
-        Conditional=REGISTER_PROTOCOL_HANDLER,
-        Supplemental=Navigator
-    ] NavigatorRegisterProtocolHandler {
-        void registerProtocolHandler(in DOMString scheme, in DOMString url, in DOMString title)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/PagePopupController.idl b/elemental/idl/third_party/WebCore/page/PagePopupController.idl
deleted file mode 100644
index 6e0a49d..0000000
--- a/elemental/idl/third_party/WebCore/page/PagePopupController.idl
+++ /dev/null
@@ -1,37 +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.
- *     * 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.
- */
-
-module window {
-    interface [
-        Conditional=PAGE_POPUP
-    ] PagePopupController {
-        void setValueAndClosePopup(in long numberValue, in DOMString stringValue);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/page/Performance.idl b/elemental/idl/third_party/WebCore/page/Performance.idl
deleted file mode 100644
index 663b742..0000000
--- a/elemental/idl/third_party/WebCore/page/Performance.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    // See: http://dev.w3.org/2006/webapi/WebTiming/
-    interface [
-        Conditional=WEB_TIMING,
-        OmitConstructor
-    ] Performance {
-        readonly attribute PerformanceNavigation navigation;
-        readonly attribute PerformanceTiming timing;
-        readonly attribute [V8CustomGetter] MemoryInfo memory;
-
-#if defined(ENABLE_PERFORMANCE_TIMELINE) && ENABLE_PERFORMANCE_TIMELINE
-        PerformanceEntryList webkitGetEntries();
-        PerformanceEntryList webkitGetEntriesByType(in DOMString entryType);
-        PerformanceEntryList webkitGetEntriesByName(in DOMString name, in [Optional=DefaultIsNullString] DOMString entryType);
-#endif
-        // See http://www.w3.org/TR/hr-time/ for details.
-        double webkitNow();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/PerformanceEntry.idl b/elemental/idl/third_party/WebCore/page/PerformanceEntry.idl
deleted file mode 100644
index a788bd9..0000000
--- a/elemental/idl/third_party/WebCore/page/PerformanceEntry.idl
+++ /dev/null
@@ -1,44 +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.
- *     * 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.
- */
-
-module window {
-
-    // See: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html
-    interface [
-        Conditional=WEB_TIMING,
-        Conditional=PERFORMANCE_TIMELINE,
-        OmitConstructor
-    ] PerformanceEntry {
-        readonly attribute DOMString name;
-        readonly attribute DOMString entryType;
-        readonly attribute double startTime;
-        readonly attribute double duration;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/page/PerformanceEntryList.idl b/elemental/idl/third_party/WebCore/page/PerformanceEntryList.idl
deleted file mode 100644
index 8be43d5..0000000
--- a/elemental/idl/third_party/WebCore/page/PerformanceEntryList.idl
+++ /dev/null
@@ -1,44 +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.
- *     * 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.
- */
-
-module window {
-
-    // See: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html
-    interface [
-        Conditional=WEB_TIMING,
-        Conditional=PERFORMANCE_TIMELINE,
-        OmitConstructor,
-        IndexedGetter
-    ] PerformanceEntryList {
-        readonly attribute unsigned long length;
-        PerformanceEntry item(in unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/PerformanceNavigation.idl b/elemental/idl/third_party/WebCore/page/PerformanceNavigation.idl
deleted file mode 100644
index 4c6b612..0000000
--- a/elemental/idl/third_party/WebCore/page/PerformanceNavigation.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    // See: http://www.w3.org/TR/navigation-timing/
-    interface [
-        Conditional=WEB_TIMING,
-        OmitConstructor
-    ] PerformanceNavigation {
-        const unsigned short TYPE_NAVIGATE = 0;
-        const unsigned short TYPE_RELOAD = 1;
-        const unsigned short TYPE_BACK_FORWARD = 2;
-        const unsigned short TYPE_RESERVED = 255;
-        readonly attribute unsigned short type;
-
-        readonly attribute unsigned short redirectCount;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/PerformanceTiming.idl b/elemental/idl/third_party/WebCore/page/PerformanceTiming.idl
deleted file mode 100644
index 3e14f7c..0000000
--- a/elemental/idl/third_party/WebCore/page/PerformanceTiming.idl
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module window {
-
-    // See: http://dev.w3.org/2006/webapi/WebTiming/
-    interface [
-        Conditional=WEB_TIMING,
-        OmitConstructor
-    ] PerformanceTiming {
-        readonly attribute unsigned long long navigationStart;
-        readonly attribute unsigned long long unloadEventStart;
-        readonly attribute unsigned long long unloadEventEnd;
-        readonly attribute unsigned long long redirectStart;
-        readonly attribute unsigned long long redirectEnd;
-        readonly attribute unsigned long long fetchStart;
-        readonly attribute unsigned long long domainLookupStart;
-        readonly attribute unsigned long long domainLookupEnd;
-        readonly attribute unsigned long long connectStart;
-        readonly attribute unsigned long long connectEnd;
-        readonly attribute unsigned long long secureConnectionStart;
-        readonly attribute unsigned long long requestStart;
-        readonly attribute unsigned long long responseStart;
-        readonly attribute unsigned long long responseEnd;
-        readonly attribute unsigned long long domLoading;
-        readonly attribute unsigned long long domInteractive;
-        readonly attribute unsigned long long domContentLoadedEventStart;
-        readonly attribute unsigned long long domContentLoadedEventEnd;
-        readonly attribute unsigned long long domComplete;
-        readonly attribute unsigned long long loadEventStart;
-        readonly attribute unsigned long long loadEventEnd;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/PointerLock.idl b/elemental/idl/third_party/WebCore/page/PointerLock.idl
deleted file mode 100644
index 3054bcf..0000000
--- a/elemental/idl/third_party/WebCore/page/PointerLock.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module core {
-
-    interface [
-        Conditional=POINTER_LOCK,
-        OmitConstructor
-    ] PointerLock {
-        void lock(in Element target, in [Callback, Optional] VoidCallback successCallback, in [Callback, Optional] VoidCallback failureCallback);
-        void unlock();
-        readonly attribute boolean isLocked;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/Screen.idl b/elemental/idl/third_party/WebCore/page/Screen.idl
deleted file mode 100644
index 5880609..0000000
--- a/elemental/idl/third_party/WebCore/page/Screen.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        OmitConstructor
-    ] Screen {
-        readonly attribute unsigned long height;
-        readonly attribute unsigned long width;
-        readonly attribute unsigned long colorDepth;
-        readonly attribute unsigned long pixelDepth;
-        readonly attribute long availLeft;
-        readonly attribute long availTop;
-        readonly attribute unsigned long availHeight;
-        readonly attribute unsigned long availWidth;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/SpeechInputEvent.idl b/elemental/idl/third_party/WebCore/page/SpeechInputEvent.idl
deleted file mode 100644
index 03846af..0000000
--- a/elemental/idl/third_party/WebCore/page/SpeechInputEvent.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module core {
-
-    interface [
-        Conditional=INPUT_SPEECH,
-    ] SpeechInputEvent : Event {
-        readonly attribute SpeechInputResultList results;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/SpeechInputResult.idl b/elemental/idl/third_party/WebCore/page/SpeechInputResult.idl
deleted file mode 100644
index 3542c60..0000000
--- a/elemental/idl/third_party/WebCore/page/SpeechInputResult.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module core {
-
-    interface [
-        Conditional=INPUT_SPEECH,
-    ] SpeechInputResult {
-        readonly attribute DOMString utterance;
-        readonly attribute float confidence;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/SpeechInputResultList.idl b/elemental/idl/third_party/WebCore/page/SpeechInputResultList.idl
deleted file mode 100644
index b9213d0..0000000
--- a/elemental/idl/third_party/WebCore/page/SpeechInputResultList.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 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.
- */
-
-module core {
-
-    interface [
-        IndexedGetter,
-        Conditional=INPUT_SPEECH
-    ] SpeechInputResultList {
-        readonly attribute unsigned long length;
-        SpeechInputResult item(in [IsIndex] unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/WebKitAnimation.idl b/elemental/idl/third_party/WebCore/page/WebKitAnimation.idl
deleted file mode 100644
index 4fba2e8..0000000
--- a/elemental/idl/third_party/WebCore/page/WebKitAnimation.idl
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module html {
-
-    interface WebKitAnimation {
-
-        readonly attribute DOMString name;
-
-        readonly attribute double duration;
-        attribute double elapsedTime;
-
-        readonly attribute double delay;
-        readonly attribute [Custom] int iterationCount;
-
-        readonly attribute boolean paused;
-        readonly attribute boolean ended;
-
-        const unsigned short DIRECTION_NORMAL = 0;
-        const unsigned short DIRECTION_ALTERNATE = 1;
-        readonly attribute unsigned short direction;
-
-        const unsigned short FILL_NONE = 0;
-        const unsigned short FILL_BACKWARDS = 1;
-        const unsigned short FILL_FORWARDS = 2;
-        const unsigned short FILL_BOTH = 3;
-        readonly attribute unsigned short fillMode;
-
-        void play();
-        void pause();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/WebKitAnimationList.idl b/elemental/idl/third_party/WebCore/page/WebKitAnimationList.idl
deleted file mode 100644
index ed305f7..0000000
--- a/elemental/idl/third_party/WebCore/page/WebKitAnimationList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module html {
-
-    interface [
-        IndexedGetter
-    ] WebKitAnimationList {
-        readonly attribute unsigned long length;
-        WebKitAnimation item(in unsigned long index);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/WebKitPoint.idl b/elemental/idl/third_party/WebCore/page/WebKitPoint.idl
deleted file mode 100644
index e44fd21..0000000
--- a/elemental/idl/third_party/WebCore/page/WebKitPoint.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module window {
-
-    interface [
-        CustomConstructor,
-        ConstructorParameters=2
-    ] WebKitPoint {
-        attribute float x;
-        attribute float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/page/WorkerNavigator.idl b/elemental/idl/third_party/WebCore/page/WorkerNavigator.idl
deleted file mode 100644
index 819de09..0000000
--- a/elemental/idl/third_party/WebCore/page/WorkerNavigator.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        JSGenerateIsReachable=Impl,
-        JSNoStaticTables,
-        OmitConstructor
-    ] WorkerNavigator {
-        readonly attribute DOMString appName;
-        readonly attribute DOMString appVersion;
-        readonly attribute DOMString platform;
-        readonly attribute DOMString userAgent;
-
-        readonly attribute boolean onLine;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/plugins/DOMMimeType.idl b/elemental/idl/third_party/WebCore/plugins/DOMMimeType.idl
deleted file mode 100644
index 942060f..0000000
--- a/elemental/idl/third_party/WebCore/plugins/DOMMimeType.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-    Copyright (C) 2008 Apple Inc. All rights reserved.
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-module window {
-
-    interface [
-        InterfaceName=MimeType
-    ] DOMMimeType {
-        readonly attribute DOMString type;
-        readonly attribute DOMString suffixes;
-        readonly attribute DOMString description;
-        readonly attribute DOMPlugin enabledPlugin;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/plugins/DOMMimeTypeArray.idl b/elemental/idl/third_party/WebCore/plugins/DOMMimeTypeArray.idl
deleted file mode 100644
index 3de7f8d..0000000
--- a/elemental/idl/third_party/WebCore/plugins/DOMMimeTypeArray.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-    Copyright (C) 2008 Apple Inc. All rights reserved.
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        NamedGetter,
-        IndexedGetter,
-        InterfaceName=MimeTypeArray
-    ] DOMMimeTypeArray {
-        readonly attribute unsigned long length;
-        DOMMimeType item(in [Optional=DefaultIsUndefined] unsigned long index);
-        DOMMimeType namedItem(in [Optional=DefaultIsUndefined] DOMString name);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/plugins/DOMPlugin.idl b/elemental/idl/third_party/WebCore/plugins/DOMPlugin.idl
deleted file mode 100644
index f645a0b..0000000
--- a/elemental/idl/third_party/WebCore/plugins/DOMPlugin.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-    Copyright (C) 2008 Apple Inc. All rights reserved.
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-module window {
-
-    interface [
-        NamedGetter,
-        IndexedGetter,
-        InterfaceName=Plugin
-    ] DOMPlugin {
-        readonly attribute DOMString name;
-        readonly attribute DOMString filename;
-        readonly attribute DOMString description;
-        readonly attribute unsigned long length;
-        DOMMimeType item(in [Optional=DefaultIsUndefined] unsigned long index);
-        DOMMimeType namedItem(in [Optional=DefaultIsUndefined] DOMString name);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/plugins/DOMPluginArray.idl b/elemental/idl/third_party/WebCore/plugins/DOMPluginArray.idl
deleted file mode 100644
index f042f92..0000000
--- a/elemental/idl/third_party/WebCore/plugins/DOMPluginArray.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-    Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
-    Copyright (C) 2008 Apple Inc. All rights reserved.
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-module window {
-
-    interface [
-        JSGenerateIsReachable=ImplFrame,
-        NamedGetter,
-        IndexedGetter,
-        InterfaceName=PluginArray
-    ] DOMPluginArray {
-        readonly attribute unsigned long length;
-        DOMPlugin item(in [Optional=DefaultIsUndefined] unsigned long index);
-        DOMPlugin namedItem(in [Optional=DefaultIsUndefined] DOMString name);
-        void refresh(in [Optional=DefaultIsUndefined] boolean reload);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/storage/Storage.idl b/elemental/idl/third_party/WebCore/storage/Storage.idl
deleted file mode 100644
index 1d5b327..0000000
--- a/elemental/idl/third_party/WebCore/storage/Storage.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module storage {
-
-    interface [
-        NamedGetter,
-        JSGenerateIsReachable=ImplFrame,
-        CustomDeleteProperty,
-        CustomEnumerateProperty,
-        CustomNamedSetter,
-    ] Storage {
-        readonly attribute [NotEnumerable] unsigned long length;
-        [NotEnumerable, TreatReturnedNullStringAs=Null] DOMString key(in unsigned long index);
-        [NotEnumerable, TreatReturnedNullStringAs=Null] DOMString getItem(in DOMString key);
-        [NotEnumerable] void setItem(in DOMString key, in DOMString data) 
-            raises(DOMException);
-        [NotEnumerable] void removeItem(in DOMString key);
-        [NotEnumerable] void clear();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/storage/StorageEvent.idl b/elemental/idl/third_party/WebCore/storage/StorageEvent.idl
deleted file mode 100644
index 6e4770a..0000000
--- a/elemental/idl/third_party/WebCore/storage/StorageEvent.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module storage {
-
-    interface [
-        ConstructorTemplate=Event
-    ] StorageEvent : Event {
-        readonly attribute [InitializedByEventConstructor] DOMString key;
-        readonly attribute [InitializedByEventConstructor, TreatReturnedNullStringAs=Null] DOMString oldValue;
-        readonly attribute [InitializedByEventConstructor, TreatReturnedNullStringAs=Null] DOMString newValue;
-        readonly attribute [InitializedByEventConstructor] DOMString url;
-        readonly attribute [InitializedByEventConstructor] Storage storageArea;
-
-        void initStorageEvent(in [Optional=DefaultIsUndefined] DOMString typeArg, 
-                              in [Optional=DefaultIsUndefined] boolean canBubbleArg, 
-                              in [Optional=DefaultIsUndefined] boolean cancelableArg, 
-                              in [Optional=DefaultIsUndefined] DOMString keyArg, 
-                              in [Optional=DefaultIsUndefined,TreatNullAs=NullString] DOMString oldValueArg, 
-                              in [Optional=DefaultIsUndefined,TreatNullAs=NullString] DOMString newValueArg, 
-                              in [Optional=DefaultIsUndefined] DOMString urlArg, 
-                              in [Optional=DefaultIsUndefined] Storage storageAreaArg);
-
-        // Needed once we support init<blank>EventNS
-        // void initStorageEventNS(in DOMString namespaceURI, in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in DOMString keyArg, in DOMString oldValueArg, in DOMString newValueArg, in DOMString urlArg, in Storage storageAreaArg);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/storage/StorageInfo.idl b/elemental/idl/third_party/WebCore/storage/StorageInfo.idl
deleted file mode 100644
index eb8b9a1..0000000
--- a/elemental/idl/third_party/WebCore/storage/StorageInfo.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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. 
- */
-
-module storage {
-    interface [
-        Conditional=QUOTA,
-        OmitConstructor,
-        JSGenerateToNativeObject
-    ] StorageInfo {
-        const unsigned short TEMPORARY = 0;
-        const unsigned short PERSISTENT = 1;
-
-        [CallWith=ScriptExecutionContext] void queryUsageAndQuota(in unsigned short storageType, in [Callback, Optional] StorageInfoUsageCallback usageCallback, in [Callback, Optional] StorageInfoErrorCallback errorCallback);
-        [CallWith=ScriptExecutionContext] void requestQuota(in unsigned short storageType, in unsigned long long newQuotaInBytes, in [Callback, Optional] StorageInfoQuotaCallback quotaCallback, in [Callback, Optional] StorageInfoErrorCallback errorCallback);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/storage/StorageInfoErrorCallback.idl b/elemental/idl/third_party/WebCore/storage/StorageInfoErrorCallback.idl
deleted file mode 100644
index 66c3316..0000000
--- a/elemental/idl/third_party/WebCore/storage/StorageInfoErrorCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=QUOTA,
-        Callback
-    ] StorageInfoErrorCallback {
-        boolean handleEvent(in DOMCoreException error);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/storage/StorageInfoQuotaCallback.idl b/elemental/idl/third_party/WebCore/storage/StorageInfoQuotaCallback.idl
deleted file mode 100644
index 1c8e11c..0000000
--- a/elemental/idl/third_party/WebCore/storage/StorageInfoQuotaCallback.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=QUOTA,
-        Callback
-    ] StorageInfoQuotaCallback {
-        boolean handleEvent(in unsigned long long grantedQuotaInBytes);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/storage/StorageInfoUsageCallback.idl b/elemental/idl/third_party/WebCore/storage/StorageInfoUsageCallback.idl
deleted file mode 100644
index dfa58e6..0000000
--- a/elemental/idl/third_party/WebCore/storage/StorageInfoUsageCallback.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module storage {
-    interface [
-        Conditional=QUOTA,
-        Callback
-    ] StorageInfoUsageCallback {
-        boolean handleEvent(in unsigned long long currentUsageInBytes, in unsigned long long currentQuotaInBytes);
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/svg/ElementTimeControl.idl b/elemental/idl/third_party/WebCore/svg/ElementTimeControl.idl
deleted file mode 100644
index 9c748c9..0000000
--- a/elemental/idl/third_party/WebCore/svg/ElementTimeControl.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au>
- *
- * 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. 
- */
- 
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        OmitConstructor
-    ] ElementTimeControl { 
-        void beginElement();
-        void beginElementAt(in [Optional=DefaultIsUndefined] float offset);
-        void endElement();
-        void endElementAt(in [Optional=DefaultIsUndefined] float offset);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAElement.idl
deleted file mode 100644
index 686503b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAElement.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAElement : SVGElement,
-                                              SVGURIReference,
-                                              SVGTests,
-                                              SVGLangSpace,
-                                              SVGExternalResourcesRequired,
-                                              SVGStylable,
-                                              SVGTransformable {
-        readonly attribute SVGAnimatedString target;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphDefElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAltGlyphDefElement.idl
deleted file mode 100644
index b4b44d2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphDefElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2011 Leo Yang <leoyang@webkit.org>
- *
- * 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.
- */
-
-module svg {
-
-    interface [Conditional=SVG&SVG_FONTS] SVGAltGlyphDefElement : SVGElement {
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAltGlyphElement.idl
deleted file mode 100644
index 865dbdd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS,
-    ] SVGAltGlyphElement : SVGTextPositioningElement, SVGURIReference {
-        attribute DOMString glyphRef
-            setter raises(DOMException);
-        attribute DOMString format
-            setter raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphItemElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAltGlyphItemElement.idl
deleted file mode 100644
index a98443c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAltGlyphItemElement.idl
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2011 Leo Yang <leoyang@webkit.org>
- *
- * 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.
- */
-
-module svg {
-
-    interface [Conditional=SVG&SVG_FONTS] SVGAltGlyphItemElement : SVGElement {
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAngle.idl b/elemental/idl/third_party/WebCore/svg/SVGAngle.idl
deleted file mode 100644
index 24ab62f..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAngle.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAngle { 
-        // Angle Unit Types
-        const unsigned short SVG_ANGLETYPE_UNKNOWN = 0;
-        const unsigned short SVG_ANGLETYPE_UNSPECIFIED = 1;
-        const unsigned short SVG_ANGLETYPE_DEG = 2;
-        const unsigned short SVG_ANGLETYPE_RAD = 3;
-        const unsigned short SVG_ANGLETYPE_GRAD = 4;
-
-        readonly attribute unsigned short unitType;
-        attribute [StrictTypeChecking] float value;
-        attribute [StrictTypeChecking] float valueInSpecifiedUnits;
-
-        attribute [TreatNullAs=NullString] DOMString valueAsString
-            setter raises(DOMException);
-
-        [StrictTypeChecking] void newValueSpecifiedUnits(in unsigned short unitType, in float valueInSpecifiedUnits)
-            raises(DOMException);
-
-        [StrictTypeChecking] void convertToSpecifiedUnits(in unsigned short unitType)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimateColorElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimateColorElement.idl
deleted file mode 100644
index 2240fc1..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimateColorElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimateColorElement : SVGAnimationElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimateElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimateElement.idl
deleted file mode 100644
index 013615a..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimateElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimateElement : SVGAnimationElement {
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimateMotionElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimateMotionElement.idl
deleted file mode 100644
index bd09b3c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimateMotionElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) Research In Motion Limited 2011. 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. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimateMotionElement : SVGAnimationElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimateTransformElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimateTransformElement.idl
deleted file mode 100644
index 76053ac..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimateTransformElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimateTransformElement : SVGAnimationElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedAngle.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedAngle.idl
deleted file mode 100644
index bdeff62..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedAngle.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedAngle {
-        readonly attribute SVGAngle baseVal;
-        readonly attribute SVGAngle animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedBoolean.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedBoolean.idl
deleted file mode 100644
index a7252d6..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedBoolean.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedBoolean {
-        attribute [StrictTypeChecking] boolean baseVal
-            setter raises(DOMException);
-        readonly attribute boolean animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedEnumeration.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedEnumeration.idl
deleted file mode 100644
index 0d43abd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedEnumeration.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedEnumeration {
-        attribute [StrictTypeChecking] unsigned short baseVal
-            setter raises(DOMException);
-        readonly attribute unsigned short animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedInteger.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedInteger.idl
deleted file mode 100644
index a8c07ea..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedInteger.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedInteger {
-        attribute [StrictTypeChecking] long baseVal
-            setter raises(DOMException);
-        readonly attribute long animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedLength.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedLength.idl
deleted file mode 100644
index 1bb7317..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedLength.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedLength {
-        readonly attribute SVGLength baseVal;
-        readonly attribute SVGLength animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedLengthList.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedLengthList.idl
deleted file mode 100644
index d02c998..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedLengthList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedLengthList {
-        readonly attribute SVGLengthList baseVal;
-        readonly attribute SVGLengthList animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumber.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumber.idl
deleted file mode 100644
index ed0c395..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumber.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedNumber {
-        attribute [StrictTypeChecking] float baseVal
-            setter raises(DOMException);
-        readonly attribute float animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumberList.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumberList.idl
deleted file mode 100644
index b644938..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedNumberList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedNumberList {
-        readonly attribute SVGNumberList baseVal;
-        readonly attribute SVGNumberList animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedPreserveAspectRatio.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedPreserveAspectRatio.idl
deleted file mode 100644
index e5b1e8b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedPreserveAspectRatio.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedPreserveAspectRatio {
-        readonly attribute SVGPreserveAspectRatio baseVal;
-        readonly attribute SVGPreserveAspectRatio animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedRect.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedRect.idl
deleted file mode 100644
index d589738..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedRect.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedRect {
-        readonly attribute SVGRect baseVal;
-        readonly attribute SVGRect animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedString.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedString.idl
deleted file mode 100644
index 7804dfa..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedString.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedString {
-        attribute DOMString baseVal
-            setter raises(DOMException);
-        readonly attribute DOMString animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimatedTransformList.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimatedTransformList.idl
deleted file mode 100644
index b6aa84e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimatedTransformList.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGAnimatedTransformList {
-        readonly attribute SVGTransformList baseVal;
-        readonly attribute SVGTransformList animVal;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGAnimationElement.idl b/elemental/idl/third_party/WebCore/svg/SVGAnimationElement.idl
deleted file mode 100644
index 532603c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGAnimationElement.idl
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        OmitConstructor
-    ] SVGAnimationElement : SVGElement,
-                                                      SVGTests,
-                                                      SVGExternalResourcesRequired,
-                                                      ElementTimeControl {
-        readonly attribute SVGElement targetElement;
-
-        float getStartTime();
-        float getCurrentTime();
-        float getSimpleDuration()
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGCircleElement.idl b/elemental/idl/third_party/WebCore/svg/SVGCircleElement.idl
deleted file mode 100644
index 50b84bd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGCircleElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGCircleElement : SVGElement,
-                                                   SVGTests,
-                                                   SVGLangSpace,
-                                                   SVGExternalResourcesRequired,
-                                                   SVGStylable,
-                                                   SVGTransformable {
-        readonly attribute SVGAnimatedLength cx;
-        readonly attribute SVGAnimatedLength cy;
-        readonly attribute SVGAnimatedLength r;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGClipPathElement.idl b/elemental/idl/third_party/WebCore/svg/SVGClipPathElement.idl
deleted file mode 100644
index 5d346f4..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGClipPathElement.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGClipPathElement : SVGElement,
-                                                     SVGTests,
-                                                     SVGLangSpace,
-                                                     SVGExternalResourcesRequired,
-                                                     SVGStylable,
-                                                     SVGTransformable
-                                                  /* SVGUnitTypes */ { 
-        readonly attribute SVGAnimatedEnumeration clipPathUnits;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGColor.idl b/elemental/idl/third_party/WebCore/svg/SVGColor.idl
deleted file mode 100644
index 887ad84..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGColor.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGColor : CSSValue {
-        const unsigned short SVG_COLORTYPE_UNKNOWN = 0;
-        const unsigned short SVG_COLORTYPE_RGBCOLOR = 1;
-        const unsigned short SVG_COLORTYPE_RGBCOLOR_ICCCOLOR = 2;
-        const unsigned short SVG_COLORTYPE_CURRENTCOLOR = 3;
-
-        readonly attribute unsigned short colorType;
-        readonly attribute RGBColor rgbColor;
-        // FIXME: readonly attribute SVGICCColor iccColor;
-
-        [StrictTypeChecking] void setRGBColor(in DOMString rgbColor)
-            raises(DOMException, SVGException);
-
-        [StrictTypeChecking] void setRGBColorICCColor(in DOMString rgbColor, in DOMString iccColor)
-            raises(DOMException, SVGException);
-
-        [StrictTypeChecking] void setColor(in unsigned short colorType, in DOMString rgbColor, in DOMString iccColor)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGComponentTransferFunctionElement.idl b/elemental/idl/third_party/WebCore/svg/SVGComponentTransferFunctionElement.idl
deleted file mode 100644
index 1edd5cf..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGComponentTransferFunctionElement.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGComponentTransferFunctionElement : SVGElement {
-        // Component Transfer Types
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN  = 0;
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY = 1;
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_TABLE    = 2;
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE = 3;
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_LINEAR   = 4;
-        const unsigned short SVG_FECOMPONENTTRANSFER_TYPE_GAMMA    = 5;
-
-        readonly attribute SVGAnimatedEnumeration type;
-        readonly attribute SVGAnimatedNumberList  tableValues;
-        readonly attribute SVGAnimatedNumber      slope;
-        readonly attribute SVGAnimatedNumber      intercept;
-        readonly attribute SVGAnimatedNumber      amplitude;
-        readonly attribute SVGAnimatedNumber      exponent;
-        readonly attribute SVGAnimatedNumber      offset;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGCursorElement.idl b/elemental/idl/third_party/WebCore/svg/SVGCursorElement.idl
deleted file mode 100644
index 2c8b5f5..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGCursorElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGCursorElement : SVGElement,
-                                                   SVGURIReference,
-                                                   SVGTests,
-                                                   SVGExternalResourcesRequired {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGDefsElement.idl b/elemental/idl/third_party/WebCore/svg/SVGDefsElement.idl
deleted file mode 100644
index 8cb2b08..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGDefsElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGDefsElement : SVGElement,
-                                                 SVGTests,
-                                                 SVGLangSpace,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGStylable,
-                                                 SVGTransformable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGDescElement.idl b/elemental/idl/third_party/WebCore/svg/SVGDescElement.idl
deleted file mode 100644
index b7b33c2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGDescElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGDescElement : SVGElement,
-                                                 SVGLangSpace,
-                                                 SVGStylable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGDocument.idl b/elemental/idl/third_party/WebCore/svg/SVGDocument.idl
deleted file mode 100644
index 2f9abfc..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGDocument.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        V8CustomToJSObject
-    ] SVGDocument : Document {
-        readonly attribute SVGSVGElement        rootElement;
-
-        // Overwrite the one in events::DocumentEvent
-        Event createEvent(in [Optional=DefaultIsUndefined] DOMString eventType)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGElement.idl b/elemental/idl/third_party/WebCore/svg/SVGElement.idl
deleted file mode 100644
index 41ae9c2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGElement.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        JSGenerateToNativeObject,
-        Conditional=SVG,
-        V8CustomToJSObject
-    ] SVGElement : Element {
-        attribute [Reflect] DOMString id;
-        attribute [TreatNullAs=NullString] DOMString xmlbase setter raises(DOMException);
-        readonly attribute SVGSVGElement ownerSVGElement;
-        readonly attribute SVGElement viewportElement;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGElementInstance.idl b/elemental/idl/third_party/WebCore/svg/SVGElementInstance.idl
deleted file mode 100644
index 9c7175c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGElementInstance.idl
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        JSCustomMarkFunction,
-        JSGenerateToNativeObject
-    ] SVGElementInstance
-#if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
-        : Object, EventTarget
-#endif /* defined(LANGUAGE_OBJECTIVE_C) */
-    {
-        readonly attribute SVGElement correspondingElement;
-        readonly attribute SVGUseElement correspondingUseElement;
-        readonly attribute SVGElementInstance parentNode;
-        readonly attribute SVGElementInstanceList childNodes;
-        readonly attribute SVGElementInstance firstChild;
-        readonly attribute SVGElementInstance lastChild;
-        readonly attribute SVGElementInstance previousSibling;
-        readonly attribute SVGElementInstance nextSibling;
-
-        // EventTarget
-#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-        attribute [NotEnumerable] EventListener onabort;
-        attribute [NotEnumerable] EventListener onblur;
-        attribute [NotEnumerable] EventListener onchange;
-        attribute [NotEnumerable] EventListener onclick;
-        attribute [NotEnumerable] EventListener oncontextmenu;
-        attribute [NotEnumerable] EventListener ondblclick;
-        attribute [NotEnumerable] EventListener onerror;
-        attribute [NotEnumerable] EventListener onfocus;
-        attribute [NotEnumerable] EventListener oninput;
-        attribute [NotEnumerable] EventListener onkeydown;
-        attribute [NotEnumerable] EventListener onkeypress;
-        attribute [NotEnumerable] EventListener onkeyup;
-        attribute [NotEnumerable] EventListener onload;
-        attribute [NotEnumerable] EventListener onmousedown;
-        attribute [NotEnumerable] EventListener onmousemove;
-        attribute [NotEnumerable] EventListener onmouseout;
-        attribute [NotEnumerable] EventListener onmouseover;
-        attribute [NotEnumerable] EventListener onmouseup;
-        attribute [NotEnumerable] EventListener onmousewheel;
-        attribute [NotEnumerable] EventListener onbeforecut;
-        attribute [NotEnumerable] EventListener oncut;
-        attribute [NotEnumerable] EventListener onbeforecopy;
-        attribute [NotEnumerable] EventListener oncopy;
-        attribute [NotEnumerable] EventListener onbeforepaste;
-        attribute [NotEnumerable] EventListener onpaste;
-        attribute [NotEnumerable] EventListener ondragenter;
-        attribute [NotEnumerable] EventListener ondragover;
-        attribute [NotEnumerable] EventListener ondragleave;
-        attribute [NotEnumerable] EventListener ondrop;
-        attribute [NotEnumerable] EventListener ondragstart;
-        attribute [NotEnumerable] EventListener ondrag;
-        attribute [NotEnumerable] EventListener ondragend;
-        attribute [NotEnumerable] EventListener onreset;
-        attribute [NotEnumerable] EventListener onresize;
-        attribute [NotEnumerable] EventListener onscroll;
-        attribute [NotEnumerable] EventListener onsearch;
-        attribute [NotEnumerable] EventListener onselect;
-        attribute [NotEnumerable] EventListener onselectstart;
-        attribute [NotEnumerable] EventListener onsubmit;
-        attribute [NotEnumerable] EventListener onunload;
-
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event event)
-            raises(EventException);
-#endif /* defined(LANGUAGE_OBJECTIVE_C) */
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGElementInstanceList.idl b/elemental/idl/third_party/WebCore/svg/SVGElementInstanceList.idl
deleted file mode 100644
index 9429da7..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGElementInstanceList.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-    interface [
-        Conditional=SVG
-    ] SVGElementInstanceList {
-        readonly attribute unsigned long length;
-
-        SVGElementInstance item(in [Optional=DefaultIsUndefined] unsigned long index);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGEllipseElement.idl b/elemental/idl/third_party/WebCore/svg/SVGEllipseElement.idl
deleted file mode 100644
index 7c291dd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGEllipseElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGEllipseElement : SVGElement,
-                                                    SVGTests,
-                                                    SVGLangSpace,
-                                                    SVGExternalResourcesRequired,
-                                                    SVGStylable,
-                                                    SVGTransformable {
-        readonly attribute SVGAnimatedLength cx;
-        readonly attribute SVGAnimatedLength cy;
-        readonly attribute SVGAnimatedLength rx;
-        readonly attribute SVGAnimatedLength ry;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGException.idl b/elemental/idl/third_party/WebCore/svg/SVGException.idl
deleted file mode 100644
index 57255c3..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGException.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2007 Rob Buis <buis@kde.org>
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    exception [
-        Conditional=SVG,
-        DoNotCheckConstants
-    ] SVGException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // SVGExceptionCode
-        const unsigned short SVG_WRONG_TYPE_ERR = 0;
-        const unsigned short SVG_INVALID_VALUE_ERR = 1;
-        const unsigned short SVG_MATRIX_NOT_INVERTABLE = 2;
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGExternalResourcesRequired.idl b/elemental/idl/third_party/WebCore/svg/SVGExternalResourcesRequired.idl
deleted file mode 100644
index a650c8f..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGExternalResourcesRequired.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGExternalResourcesRequired { 
-        readonly attribute SVGAnimatedBoolean externalResourcesRequired;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEBlendElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEBlendElement.idl
deleted file mode 100644
index 288059c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEBlendElement.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFEBlendElement : SVGElement,
-                          SVGFilterPrimitiveStandardAttributes {
-        // Blend Mode Types
-        const unsigned short SVG_FEBLEND_MODE_UNKNOWN  = 0;
-        const unsigned short SVG_FEBLEND_MODE_NORMAL   = 1;
-        const unsigned short SVG_FEBLEND_MODE_MULTIPLY = 2;
-        const unsigned short SVG_FEBLEND_MODE_SCREEN   = 3;
-        const unsigned short SVG_FEBLEND_MODE_DARKEN   = 4;
-        const unsigned short SVG_FEBLEND_MODE_LIGHTEN  = 5;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedString      in2;
-        readonly attribute SVGAnimatedEnumeration mode;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEColorMatrixElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEColorMatrixElement.idl
deleted file mode 100644
index 6b18061..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEColorMatrixElement.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFEColorMatrixElement : SVGElement,
-                                SVGFilterPrimitiveStandardAttributes {
-        // Color Matrix Types
-        const unsigned short SVG_FECOLORMATRIX_TYPE_UNKNOWN          = 0;
-        const unsigned short SVG_FECOLORMATRIX_TYPE_MATRIX           = 1;
-        const unsigned short SVG_FECOLORMATRIX_TYPE_SATURATE         = 2;
-        const unsigned short SVG_FECOLORMATRIX_TYPE_HUEROTATE        = 3;
-        const unsigned short SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA = 4;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedEnumeration type;
-        readonly attribute SVGAnimatedNumberList  values;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEComponentTransferElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEComponentTransferElement.idl
deleted file mode 100644
index bf69915..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEComponentTransferElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEComponentTransferElement : SVGElement,
-                                                                SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedString in1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFECompositeElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFECompositeElement.idl
deleted file mode 100644
index 76840e5..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFECompositeElement.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFECompositeElement : SVGElement,
-                              SVGFilterPrimitiveStandardAttributes {
-        // Composite Operators
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_UNKNOWN    = 0;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_OVER       = 1;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_IN         = 2;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_OUT        = 3;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_ATOP       = 4;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_XOR        = 5;
-        const unsigned short SVG_FECOMPOSITE_OPERATOR_ARITHMETIC = 6;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedString      in2;
-        readonly attribute SVGAnimatedEnumeration operator;
-        readonly attribute SVGAnimatedNumber      k1;
-        readonly attribute SVGAnimatedNumber      k2;
-        readonly attribute SVGAnimatedNumber      k3;
-        readonly attribute SVGAnimatedNumber      k4;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEConvolveMatrixElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEConvolveMatrixElement.idl
deleted file mode 100644
index e78219d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEConvolveMatrixElement.idl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFEConvolveMatrixElement : SVGElement,
-                                   SVGFilterPrimitiveStandardAttributes {
-        // Edge Mode Values
-        const unsigned short SVG_EDGEMODE_UNKNOWN   = 0;
-        const unsigned short SVG_EDGEMODE_DUPLICATE = 1;
-        const unsigned short SVG_EDGEMODE_WRAP      = 2;
-        const unsigned short SVG_EDGEMODE_NONE      = 3;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedInteger     orderX;
-        readonly attribute SVGAnimatedInteger     orderY;
-        readonly attribute SVGAnimatedNumberList  kernelMatrix;
-        readonly attribute SVGAnimatedNumber      divisor;
-        readonly attribute SVGAnimatedNumber      bias;
-        readonly attribute SVGAnimatedInteger     targetX;
-        readonly attribute SVGAnimatedInteger     targetY;
-        readonly attribute SVGAnimatedEnumeration edgeMode;
-        readonly attribute SVGAnimatedNumber      kernelUnitLengthX;
-        readonly attribute SVGAnimatedNumber      kernelUnitLengthY;
-        readonly attribute SVGAnimatedBoolean     preserveAlpha;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEDiffuseLightingElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEDiffuseLightingElement.idl
deleted file mode 100644
index f9fac19..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEDiffuseLightingElement.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEDiffuseLightingElement : SVGElement,
-                                                              SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedString in1;
-        readonly attribute SVGAnimatedNumber surfaceScale;
-        readonly attribute SVGAnimatedNumber diffuseConstant;
-        readonly attribute SVGAnimatedNumber kernelUnitLengthX;
-        readonly attribute SVGAnimatedNumber kernelUnitLengthY;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEDisplacementMapElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEDisplacementMapElement.idl
deleted file mode 100644
index 0729586..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEDisplacementMapElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFEDisplacementMapElement : SVGElement,
-                                    SVGFilterPrimitiveStandardAttributes {
-        // Channel Selectors
-        const unsigned short SVG_CHANNEL_UNKNOWN = 0;
-        const unsigned short SVG_CHANNEL_R       = 1;
-        const unsigned short SVG_CHANNEL_G       = 2;
-        const unsigned short SVG_CHANNEL_B       = 3;
-        const unsigned short SVG_CHANNEL_A       = 4;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedString      in2;
-        readonly attribute SVGAnimatedNumber      scale;
-        readonly attribute SVGAnimatedEnumeration xChannelSelector;
-        readonly attribute SVGAnimatedEnumeration yChannelSelector;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEDistantLightElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEDistantLightElement.idl
deleted file mode 100644
index d8ff6fe..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEDistantLightElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEDistantLightElement : SVGElement {
-        readonly attribute SVGAnimatedNumber azimuth;
-        readonly attribute SVGAnimatedNumber elevation;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEDropShadowElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEDropShadowElement.idl
deleted file mode 100644
index 3c7d7ce..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEDropShadowElement.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) Research In Motion Limited 2011. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEDropShadowElement : SVGElement,
-                                                           SVGFilterPrimitiveStandardAttributes { 
-        readonly attribute SVGAnimatedString in1;
-        readonly attribute SVGAnimatedNumber dx;
-        readonly attribute SVGAnimatedNumber dy;
-        readonly attribute SVGAnimatedNumber stdDeviationX;
-        readonly attribute SVGAnimatedNumber stdDeviationY;
-
-        void setStdDeviation(in [Optional=DefaultIsUndefined] float stdDeviationX, 
-                             in [Optional=DefaultIsUndefined] float stdDeviationY);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEFloodElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEFloodElement.idl
deleted file mode 100644
index 53ce047..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEFloodElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEFloodElement : SVGElement,
-                                                    SVGFilterPrimitiveStandardAttributes {
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEFuncAElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEFuncAElement.idl
deleted file mode 100644
index ca3fa11..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEFuncAElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEFuncAElement : SVGComponentTransferFunctionElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEFuncBElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEFuncBElement.idl
deleted file mode 100644
index 0581b39..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEFuncBElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEFuncBElement : SVGComponentTransferFunctionElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEFuncGElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEFuncGElement.idl
deleted file mode 100644
index ab09161..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEFuncGElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEFuncGElement : SVGComponentTransferFunctionElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEFuncRElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEFuncRElement.idl
deleted file mode 100644
index 5678f99..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEFuncRElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEFuncRElement : SVGComponentTransferFunctionElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEGaussianBlurElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEGaussianBlurElement.idl
deleted file mode 100644
index 25858f8..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEGaussianBlurElement.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEGaussianBlurElement : SVGElement,
-                                                           SVGFilterPrimitiveStandardAttributes { 
-        readonly attribute SVGAnimatedString in1;
-        readonly attribute SVGAnimatedNumber stdDeviationX;
-        readonly attribute SVGAnimatedNumber stdDeviationY;
-
-        void setStdDeviation(in [Optional=DefaultIsUndefined] float stdDeviationX, 
-                             in [Optional=DefaultIsUndefined] float stdDeviationY);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEImageElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEImageElement.idl
deleted file mode 100644
index 9a6c0e8..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEImageElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEImageElement : SVGElement,
-                                                            SVGURIReference,
-                                                            SVGLangSpace,
-                                                            SVGExternalResourcesRequired,
-                                                            SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEMergeElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEMergeElement.idl
deleted file mode 100644
index 18cf92c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEMergeElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEMergeElement : SVGElement,
-                                                    SVGFilterPrimitiveStandardAttributes {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEMergeNodeElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEMergeNodeElement.idl
deleted file mode 100644
index f6b1d27..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEMergeNodeElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEMergeNodeElement : SVGElement {
-        readonly attribute SVGAnimatedString in1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEMorphologyElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEMorphologyElement.idl
deleted file mode 100644
index 24c0a47..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEMorphologyElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFEMorphologyElement : SVGElement,
-                               SVGFilterPrimitiveStandardAttributes {
-        // Morphology Operators
-        const unsigned short SVG_MORPHOLOGY_OPERATOR_UNKNOWN  = 0;
-        const unsigned short SVG_MORPHOLOGY_OPERATOR_ERODE    = 1;
-        const unsigned short SVG_MORPHOLOGY_OPERATOR_DILATE   = 2;
-
-        readonly attribute SVGAnimatedString      in1;
-        readonly attribute SVGAnimatedEnumeration operator;
-        readonly attribute SVGAnimatedNumber      radiusX;
-        readonly attribute SVGAnimatedNumber      radiusY;
-
-        void setRadius(in [Optional=DefaultIsUndefined] float radiusX, 
-                       in [Optional=DefaultIsUndefined] float radiusY);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEOffsetElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEOffsetElement.idl
deleted file mode 100644
index 95f9565..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEOffsetElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEOffsetElement : SVGElement,
-                                                     SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedString in1;
-        readonly attribute SVGAnimatedNumber dx;
-        readonly attribute SVGAnimatedNumber dy;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFEPointLightElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFEPointLightElement.idl
deleted file mode 100644
index b6dd0fa..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFEPointLightElement.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFEPointLightElement : SVGElement {
-        readonly attribute SVGAnimatedNumber x;
-        readonly attribute SVGAnimatedNumber y;
-        readonly attribute SVGAnimatedNumber z;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFESpecularLightingElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFESpecularLightingElement.idl
deleted file mode 100644
index 3dc4e34..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFESpecularLightingElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFESpecularLightingElement : SVGElement,
-                                                               SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedString in1;
-        readonly attribute SVGAnimatedNumber surfaceScale;
-        readonly attribute SVGAnimatedNumber specularConstant;
-        readonly attribute SVGAnimatedNumber specularExponent;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFESpotLightElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFESpotLightElement.idl
deleted file mode 100644
index 36c12eb..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFESpotLightElement.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFESpotLightElement : SVGElement {
-        readonly attribute SVGAnimatedNumber x;
-        readonly attribute SVGAnimatedNumber y;
-        readonly attribute SVGAnimatedNumber z;
-        readonly attribute SVGAnimatedNumber pointsAtX;
-        readonly attribute SVGAnimatedNumber pointsAtY;
-        readonly attribute SVGAnimatedNumber pointsAtZ;
-        readonly attribute SVGAnimatedNumber specularExponent;
-        readonly attribute SVGAnimatedNumber limitingConeAngle;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFETileElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFETileElement.idl
deleted file mode 100644
index 6b853e5..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFETileElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFETileElement : SVGElement,
-                                                   SVGFilterPrimitiveStandardAttributes {
-        readonly attribute SVGAnimatedString in1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFETurbulenceElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFETurbulenceElement.idl
deleted file mode 100644
index 0060fbf..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFETurbulenceElement.idl
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS,
-        DoNotCheckConstants
-    ] SVGFETurbulenceElement : SVGElement,
-                               SVGFilterPrimitiveStandardAttributes {
-        // Turbulence Types
-        const unsigned short SVG_TURBULENCE_TYPE_UNKNOWN      = 0;
-        const unsigned short SVG_TURBULENCE_TYPE_FRACTALNOISE = 1;
-        const unsigned short SVG_TURBULENCE_TYPE_TURBULENCE   = 2;
-
-        // Stitch Options
-        const unsigned short SVG_STITCHTYPE_UNKNOWN  = 0;
-        const unsigned short SVG_STITCHTYPE_STITCH   = 1;
-        const unsigned short SVG_STITCHTYPE_NOSTITCH = 2;
-
-        readonly attribute SVGAnimatedNumber      baseFrequencyX;
-        readonly attribute SVGAnimatedNumber      baseFrequencyY;
-        readonly attribute SVGAnimatedInteger     numOctaves;
-        readonly attribute SVGAnimatedNumber      seed;
-        readonly attribute SVGAnimatedEnumeration stitchTiles;
-        readonly attribute SVGAnimatedEnumeration type;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFilterElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFilterElement.idl
deleted file mode 100644
index ff2f496..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFilterElement.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&FILTERS
-    ] SVGFilterElement : SVGElement,
-                                                   SVGURIReference,
-                                                   SVGLangSpace,
-                                                   SVGExternalResourcesRequired,
-                                                   SVGStylable
-                                                /* SVGUnitTypes */ {  
-        readonly attribute SVGAnimatedEnumeration filterUnits;
-        readonly attribute SVGAnimatedEnumeration primitiveUnits;
-        readonly attribute SVGAnimatedLength      x;
-        readonly attribute SVGAnimatedLength      y;
-        readonly attribute SVGAnimatedLength      width;
-        readonly attribute SVGAnimatedLength      height;
-        readonly attribute SVGAnimatedInteger     filterResX;
-        readonly attribute SVGAnimatedInteger     filterResY;
-
-        void setFilterRes(in [Optional=DefaultIsUndefined] unsigned long filterResX, 
-                          in [Optional=DefaultIsUndefined] unsigned long filterResY);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFilterPrimitiveStandardAttributes.idl b/elemental/idl/third_party/WebCore/svg/SVGFilterPrimitiveStandardAttributes.idl
deleted file mode 100644
index 4b1d3fb..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFilterPrimitiveStandardAttributes.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol
-    ] SVGFilterPrimitiveStandardAttributes : SVGStylable {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-        readonly attribute SVGAnimatedString result;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFitToViewBox.idl b/elemental/idl/third_party/WebCore/svg/SVGFitToViewBox.idl
deleted file mode 100644
index a57a8dd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFitToViewBox.idl
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGFitToViewBox {
-        readonly attribute SVGAnimatedRect                viewBox;
-        readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontElement.idl
deleted file mode 100644
index 0b95d0f..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontFaceElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontFaceElement.idl
deleted file mode 100644
index 1eed0e2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontFaceElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontFaceElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontFaceFormatElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontFaceFormatElement.idl
deleted file mode 100644
index a0848b9..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontFaceFormatElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontFaceFormatElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontFaceNameElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontFaceNameElement.idl
deleted file mode 100644
index 8407ccf..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontFaceNameElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontFaceNameElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontFaceSrcElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontFaceSrcElement.idl
deleted file mode 100644
index 77af8cd..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontFaceSrcElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontFaceSrcElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGFontFaceUriElement.idl b/elemental/idl/third_party/WebCore/svg/SVGFontFaceUriElement.idl
deleted file mode 100644
index b4f626a..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGFontFaceUriElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGFontFaceUriElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGForeignObjectElement.idl b/elemental/idl/third_party/WebCore/svg/SVGForeignObjectElement.idl
deleted file mode 100644
index a1b3882..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGForeignObjectElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGForeignObjectElement : SVGElement,
-                                                          SVGTests,
-                                                          SVGLangSpace,
-                                                          SVGExternalResourcesRequired,
-                                                          SVGStylable,
-                                                          SVGTransformable {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGGElement.idl b/elemental/idl/third_party/WebCore/svg/SVGGElement.idl
deleted file mode 100644
index b6377a6..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGGElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGGElement : SVGElement,
-                                              SVGTests,
-                                              SVGLangSpace,
-                                              SVGExternalResourcesRequired,
-                                              SVGStylable,
-                                              SVGTransformable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGGlyphElement.idl b/elemental/idl/third_party/WebCore/svg/SVGGlyphElement.idl
deleted file mode 100644
index d00309c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGGlyphElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGGlyphElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGGlyphRefElement.idl b/elemental/idl/third_party/WebCore/svg/SVGGlyphRefElement.idl
deleted file mode 100644
index 8a1cdb1..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGGlyphRefElement.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2011 Leo Yang <leoyang@webkit.org>
- *
- * 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.
- */
-
-module svg {
-
-    interface [Conditional=SVG&SVG_FONTS] SVGGlyphRefElement : SVGElement,
-                                                               SVGURIReference,
-                                                               SVGStylable {
-        // FIXME: Use [Reflect] after https://bugs.webkit.org/show_bug.cgi?id=64843 is fixed.
-        attribute DOMString glyphRef
-            setter raises(DOMException);
-        attribute [Reflect] DOMString format;
-        attribute float x
-            setter raises(DOMException);
-        attribute float y
-            setter raises(DOMException);
-        attribute float dx
-            setter raises(DOMException);
-        attribute float dy
-            setter raises(DOMException);
-    };
-
-}
-
diff --git a/elemental/idl/third_party/WebCore/svg/SVGGradientElement.idl b/elemental/idl/third_party/WebCore/svg/SVGGradientElement.idl
deleted file mode 100644
index 6db27fb..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGGradientElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        DoNotCheckConstants
-    ] SVGGradientElement : SVGElement,
-                           SVGURIReference,
-                           SVGExternalResourcesRequired,
-                           SVGStylable
-                           /* SVGUnitTypes */ {
-        // Spread Method Types
-        const unsigned short SVG_SPREADMETHOD_UNKNOWN = 0;
-        const unsigned short SVG_SPREADMETHOD_PAD     = 1;
-        const unsigned short SVG_SPREADMETHOD_REFLECT = 2;
-        const unsigned short SVG_SPREADMETHOD_REPEAT  = 3;
-
-        readonly attribute SVGAnimatedEnumeration   gradientUnits;
-        readonly attribute SVGAnimatedTransformList gradientTransform;
-        readonly attribute SVGAnimatedEnumeration   spreadMethod;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGHKernElement.idl b/elemental/idl/third_party/WebCore/svg/SVGHKernElement.idl
deleted file mode 100644
index 4087749..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGHKernElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGHKernElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGImageElement.idl b/elemental/idl/third_party/WebCore/svg/SVGImageElement.idl
deleted file mode 100644
index 6f716e1..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGImageElement.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGImageElement : SVGElement,
-                                                  SVGURIReference,
-                                                  SVGTests,
-                                                  SVGLangSpace,
-                                                  SVGExternalResourcesRequired,
-                                                  SVGStylable,
-                                                  SVGTransformable {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-        readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLangSpace.idl b/elemental/idl/third_party/WebCore/svg/SVGLangSpace.idl
deleted file mode 100644
index 212c85a..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLangSpace.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGLangSpace {
-                 attribute DOMString xmllang
-                     /*setter raises(DOMException)*/;
-                 attribute DOMString xmlspace
-                     /*setter raises(DOMException)*/;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLength.idl b/elemental/idl/third_party/WebCore/svg/SVGLength.idl
deleted file mode 100644
index a5c952d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLength.idl
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGLength { 
-        // Length Unit Types
-        const unsigned short SVG_LENGTHTYPE_UNKNOWN    = 0;
-        const unsigned short SVG_LENGTHTYPE_NUMBER     = 1;
-        const unsigned short SVG_LENGTHTYPE_PERCENTAGE = 2;
-        const unsigned short SVG_LENGTHTYPE_EMS        = 3;
-        const unsigned short SVG_LENGTHTYPE_EXS        = 4;
-        const unsigned short SVG_LENGTHTYPE_PX         = 5;
-        const unsigned short SVG_LENGTHTYPE_CM         = 6;
-        const unsigned short SVG_LENGTHTYPE_MM         = 7;
-        const unsigned short SVG_LENGTHTYPE_IN         = 8;
-        const unsigned short SVG_LENGTHTYPE_PT         = 9;
-        const unsigned short SVG_LENGTHTYPE_PC         = 10;
-
-        readonly attribute unsigned short unitType;
-        attribute [Custom, StrictTypeChecking] float value
-            setter raises(DOMException),
-            getter raises(DOMException);
-
-        attribute [StrictTypeChecking] float valueInSpecifiedUnits;
-        attribute [TreatNullAs=NullString, StrictTypeChecking] DOMString valueAsString
-            setter raises(DOMException);
-
-        [StrictTypeChecking] void newValueSpecifiedUnits(in unsigned short unitType, 
-                                                         in float valueInSpecifiedUnits)
-            raises(DOMException);
-
-        [Custom, StrictTypeChecking] void convertToSpecifiedUnits(in unsigned short unitType)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLengthList.idl b/elemental/idl/third_party/WebCore/svg/SVGLengthList.idl
deleted file mode 100644
index a90c9e2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLengthList.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGLengthList { 
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] SVGLength initialize(in SVGLength item)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGLength getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGLength insertItemBefore(in SVGLength item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGLength replaceItem(in SVGLength item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGLength removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGLength appendItem(in SVGLength item)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLineElement.idl b/elemental/idl/third_party/WebCore/svg/SVGLineElement.idl
deleted file mode 100644
index 1655861..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLineElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGLineElement : SVGElement,
-                                                 SVGTests,
-                                                 SVGLangSpace,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGStylable,
-                                                 SVGTransformable {
-        readonly attribute SVGAnimatedLength x1;
-        readonly attribute SVGAnimatedLength y1;
-        readonly attribute SVGAnimatedLength x2;
-        readonly attribute SVGAnimatedLength y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLinearGradientElement.idl b/elemental/idl/third_party/WebCore/svg/SVGLinearGradientElement.idl
deleted file mode 100644
index 385bcfb..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLinearGradientElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGLinearGradientElement : SVGGradientElement {
-        readonly attribute SVGAnimatedLength x1;
-        readonly attribute SVGAnimatedLength y1;
-        readonly attribute SVGAnimatedLength x2;
-        readonly attribute SVGAnimatedLength y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGLocatable.idl b/elemental/idl/third_party/WebCore/svg/SVGLocatable.idl
deleted file mode 100644
index 3b38a39..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGLocatable.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGLocatable {
-        readonly attribute SVGElement nearestViewportElement;
-        readonly attribute SVGElement farthestViewportElement;
-
-        SVGRect   getBBox();
-        SVGMatrix getCTM();
-        SVGMatrix getScreenCTM();
-        SVGMatrix getTransformToElement(in [Optional=DefaultIsUndefined] SVGElement element)
-            raises(SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMPathElement.idl b/elemental/idl/third_party/WebCore/svg/SVGMPathElement.idl
deleted file mode 100644
index da52f3d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMPathElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) Research In Motion Limited 2011. 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. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGMPathElement : SVGElement,
-                                                                SVGURIReference,
-                                                                SVGExternalResourcesRequired {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMarkerElement.idl b/elemental/idl/third_party/WebCore/svg/SVGMarkerElement.idl
deleted file mode 100644
index dd351e3..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMarkerElement.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGMarkerElement : SVGElement,
-                                                   SVGLangSpace,
-                                                   SVGExternalResourcesRequired,
-                                                   SVGStylable,
-                                                   SVGFitToViewBox { 
-        // Marker Unit Types
-        const unsigned short SVG_MARKERUNITS_UNKNOWN        = 0;
-        const unsigned short SVG_MARKERUNITS_USERSPACEONUSE = 1;
-        const unsigned short SVG_MARKERUNITS_STROKEWIDTH    = 2;
-
-        // Marker Orientation Types
-        const unsigned short SVG_MARKER_ORIENT_UNKNOWN      = 0;
-        const unsigned short SVG_MARKER_ORIENT_AUTO         = 1;
-        const unsigned short SVG_MARKER_ORIENT_ANGLE        = 2;
-
-        readonly attribute SVGAnimatedLength      refX;
-        readonly attribute SVGAnimatedLength      refY;
-        readonly attribute SVGAnimatedEnumeration markerUnits;
-        readonly attribute SVGAnimatedLength      markerWidth;
-        readonly attribute SVGAnimatedLength      markerHeight;
-        readonly attribute SVGAnimatedEnumeration orientType;
-        readonly attribute SVGAnimatedAngle       orientAngle;
-
-        void setOrientToAuto();
-        void setOrientToAngle(in [Optional=DefaultIsUndefined] SVGAngle angle);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMaskElement.idl b/elemental/idl/third_party/WebCore/svg/SVGMaskElement.idl
deleted file mode 100644
index 6106ed3..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMaskElement.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGMaskElement : SVGElement,
-                                                 SVGTests,
-                                                 SVGLangSpace,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGStylable {
-        readonly attribute SVGAnimatedEnumeration maskUnits;
-        readonly attribute SVGAnimatedEnumeration maskContentUnits;
-
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMatrix.idl b/elemental/idl/third_party/WebCore/svg/SVGMatrix.idl
deleted file mode 100644
index 0cfe547..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMatrix.idl
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGMatrix {
-        // FIXME: these attributes should all be floats but since we implement
-        // AffineTransform with doubles setting these as doubles makes more sense.
-        attribute [StrictTypeChecking] double a;
-        attribute [StrictTypeChecking] double b;
-        attribute [StrictTypeChecking] double c;
-        attribute [StrictTypeChecking] double d;
-        attribute [StrictTypeChecking] double e;
-        attribute [StrictTypeChecking] double f;
-
-        [StrictTypeChecking] SVGMatrix multiply(in SVGMatrix secondMatrix);
-        SVGMatrix inverse()
-            raises(SVGException);
-        [Immutable, StrictTypeChecking] SVGMatrix translate(in float x, in float y);
-        [Immutable, StrictTypeChecking] SVGMatrix scale(in float scaleFactor);
-        [Immutable, StrictTypeChecking] SVGMatrix scaleNonUniform(in float scaleFactorX, in float scaleFactorY);
-        [Immutable, StrictTypeChecking] SVGMatrix rotate(in float angle);
-        [StrictTypeChecking] SVGMatrix rotateFromVector(in float x, in float y)
-            raises(SVGException);
-        [Immutable] SVGMatrix flipX();
-        [Immutable] SVGMatrix flipY();
-        [Immutable, StrictTypeChecking] SVGMatrix skewX(in float angle);
-        [Immutable, StrictTypeChecking] SVGMatrix skewY(in float angle);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMetadataElement.idl b/elemental/idl/third_party/WebCore/svg/SVGMetadataElement.idl
deleted file mode 100644
index 878e5d9..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMetadataElement.idl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGMetadataElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGMissingGlyphElement.idl b/elemental/idl/third_party/WebCore/svg/SVGMissingGlyphElement.idl
deleted file mode 100644
index 5e3074b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGMissingGlyphElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGMissingGlyphElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGNumber.idl b/elemental/idl/third_party/WebCore/svg/SVGNumber.idl
deleted file mode 100644
index ebd212b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGNumber.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGNumber {
-        attribute [StrictTypeChecking] float value;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGNumberList.idl b/elemental/idl/third_party/WebCore/svg/SVGNumberList.idl
deleted file mode 100644
index 43e5117..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGNumberList.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGNumberList {
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] SVGNumber initialize(in SVGNumber item)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGNumber getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGNumber insertItemBefore(in SVGNumber item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGNumber replaceItem(in SVGNumber item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGNumber removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGNumber appendItem(in SVGNumber item)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPaint.idl b/elemental/idl/third_party/WebCore/svg/SVGPaint.idl
deleted file mode 100644
index 8711655..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPaint.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPaint : SVGColor {
-        const unsigned short SVG_PAINTTYPE_UNKNOWN = 0;
-        const unsigned short SVG_PAINTTYPE_RGBCOLOR = 1;
-        const unsigned short SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR = 2;
-        const unsigned short SVG_PAINTTYPE_NONE = 101;
-        const unsigned short SVG_PAINTTYPE_CURRENTCOLOR = 102;
-        const unsigned short SVG_PAINTTYPE_URI_NONE = 103;
-        const unsigned short SVG_PAINTTYPE_URI_CURRENTCOLOR = 104;
-        const unsigned short SVG_PAINTTYPE_URI_RGBCOLOR = 105;
-        const unsigned short SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR = 106;
-        const unsigned short SVG_PAINTTYPE_URI = 107;
-
-        readonly attribute unsigned short paintType;
-        readonly attribute DOMString uri;
-
-        [StrictTypeChecking] void setUri(in DOMString uri);
-        [StrictTypeChecking] void setPaint(in unsigned short paintType, in DOMString uri, in DOMString rgbColor, in DOMString iccColor)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathElement.idl b/elemental/idl/third_party/WebCore/svg/SVGPathElement.idl
deleted file mode 100644
index 5f4f6ca..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathElement.idl
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathElement : SVGElement,
-                                                 SVGTests,
-                                                 SVGLangSpace,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGStylable,
-                                                 SVGTransformable {
-        readonly attribute SVGAnimatedNumber pathLength;
-
-        float getTotalLength();
-        SVGPoint getPointAtLength(in [Optional=DefaultIsUndefined] float distance);
-        unsigned long getPathSegAtLength(in [Optional=DefaultIsUndefined] float distance);
-
-        SVGPathSegClosePath createSVGPathSegClosePath();
-
-        SVGPathSegMovetoAbs createSVGPathSegMovetoAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                      in [Optional=DefaultIsUndefined] float y);
-        SVGPathSegMovetoRel createSVGPathSegMovetoRel(in [Optional=DefaultIsUndefined] float x, 
-                                                      in [Optional=DefaultIsUndefined] float y);
-
-        SVGPathSegLinetoAbs createSVGPathSegLinetoAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                      in [Optional=DefaultIsUndefined] float y);
-        SVGPathSegLinetoRel createSVGPathSegLinetoRel(in [Optional=DefaultIsUndefined] float x, 
-                                                      in [Optional=DefaultIsUndefined] float y);
-
-        SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                                  in [Optional=DefaultIsUndefined] float y, 
-                                                                  in [Optional=DefaultIsUndefined] float x1, 
-                                                                  in [Optional=DefaultIsUndefined] float y1, 
-                                                                  in [Optional=DefaultIsUndefined] float x2, 
-                                                                  in [Optional=DefaultIsUndefined] float y2);
-        SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(in [Optional=DefaultIsUndefined] float x, 
-                                                                  in [Optional=DefaultIsUndefined] float y, 
-                                                                  in [Optional=DefaultIsUndefined] float x1, 
-                                                                  in [Optional=DefaultIsUndefined] float y1, 
-                                                                  in [Optional=DefaultIsUndefined] float x2, 
-                                                                  in [Optional=DefaultIsUndefined] float y2);
-
-        SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                                          in [Optional=DefaultIsUndefined] float y, 
-                                                                          in [Optional=DefaultIsUndefined] float x1, 
-                                                                          in [Optional=DefaultIsUndefined] float y1);
-        SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(in [Optional=DefaultIsUndefined] float x, 
-                                                                          in [Optional=DefaultIsUndefined] float y, 
-                                                                          in [Optional=DefaultIsUndefined] float x1, 
-                                                                          in [Optional=DefaultIsUndefined] float y1);
-
-        SVGPathSegArcAbs createSVGPathSegArcAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                in [Optional=DefaultIsUndefined] float y, 
-                                                in [Optional=DefaultIsUndefined] float r1, 
-                                                in [Optional=DefaultIsUndefined] float r2, 
-                                                in [Optional=DefaultIsUndefined] float angle, 
-                                                in [Optional=DefaultIsUndefined] boolean largeArcFlag, 
-                                                in [Optional=DefaultIsUndefined] boolean sweepFlag);
-        SVGPathSegArcRel createSVGPathSegArcRel(in [Optional=DefaultIsUndefined] float x, 
-                                                in [Optional=DefaultIsUndefined] float y, 
-                                                in [Optional=DefaultIsUndefined] float r1, 
-                                                in [Optional=DefaultIsUndefined] float r2, 
-                                                in [Optional=DefaultIsUndefined] float angle, 
-                                                in [Optional=DefaultIsUndefined] boolean largeArcFlag, 
-                                                in [Optional=DefaultIsUndefined] boolean sweepFlag);
-
-        SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(in [Optional=DefaultIsUndefined] float x);
-        SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(in [Optional=DefaultIsUndefined] float x);
-
-        SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(in [Optional=DefaultIsUndefined] float y);
-        SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(in [Optional=DefaultIsUndefined] float y);
-
-        SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                                              in [Optional=DefaultIsUndefined] float y, 
-                                                                              in [Optional=DefaultIsUndefined] float x2, 
-                                                                              in [Optional=DefaultIsUndefined] float y2);
-        SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(in [Optional=DefaultIsUndefined] float x, 
-                                                                              in [Optional=DefaultIsUndefined] float y, 
-                                                                              in [Optional=DefaultIsUndefined] float x2, 
-                                                                              in [Optional=DefaultIsUndefined] float y2);
-
-        SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(in [Optional=DefaultIsUndefined] float x, 
-                                                                                      in [Optional=DefaultIsUndefined] float y);
-        SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(in [Optional=DefaultIsUndefined] float x, 
-                                                                                      in [Optional=DefaultIsUndefined] float y);
-
-        readonly attribute SVGPathSegList pathSegList;
-        readonly attribute SVGPathSegList normalizedPathSegList;
-        readonly attribute SVGPathSegList animatedPathSegList;
-        readonly attribute SVGPathSegList animatedNormalizedPathSegList;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSeg.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSeg.idl
deleted file mode 100644
index e7ad75a..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSeg.idl
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006, 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        CustomToJSObject,
-        ObjCPolymorphic
-    ] SVGPathSeg {
-        // Path Segment Types
-        const unsigned short PATHSEG_UNKNOWN = 0;
-        const unsigned short PATHSEG_CLOSEPATH = 1;
-        const unsigned short PATHSEG_MOVETO_ABS = 2;
-        const unsigned short PATHSEG_MOVETO_REL = 3;
-        const unsigned short PATHSEG_LINETO_ABS = 4;
-        const unsigned short PATHSEG_LINETO_REL = 5;
-        const unsigned short PATHSEG_CURVETO_CUBIC_ABS = 6;
-        const unsigned short PATHSEG_CURVETO_CUBIC_REL = 7;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_ABS = 8;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_REL = 9;
-        const unsigned short PATHSEG_ARC_ABS = 10;
-        const unsigned short PATHSEG_ARC_REL = 11;
-        const unsigned short PATHSEG_LINETO_HORIZONTAL_ABS = 12;
-        const unsigned short PATHSEG_LINETO_HORIZONTAL_REL = 13;
-        const unsigned short PATHSEG_LINETO_VERTICAL_ABS = 14;
-        const unsigned short PATHSEG_LINETO_VERTICAL_REL = 15;
-        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
-        const unsigned short PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
-        const unsigned short PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
-
-        readonly attribute unsigned short pathSegType;
-        readonly attribute DOMString pathSegTypeAsLetter;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegArcAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegArcAbs.idl
deleted file mode 100644
index 4805e8b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegArcAbs.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegArcAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float r1;
-        attribute [StrictTypeChecking] float r2;
-        attribute [StrictTypeChecking] float angle;
-        attribute [StrictTypeChecking] boolean largeArcFlag;
-        attribute [StrictTypeChecking] boolean sweepFlag;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegArcRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegArcRel.idl
deleted file mode 100644
index a22c61e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegArcRel.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegArcRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float r1;
-        attribute [StrictTypeChecking] float r2;
-        attribute [StrictTypeChecking] float angle;
-        attribute [StrictTypeChecking] boolean largeArcFlag;
-        attribute [StrictTypeChecking] boolean sweepFlag;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegClosePath.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegClosePath.idl
deleted file mode 100644
index 8c57d86..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegClosePath.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegClosePath : SVGPathSeg {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl
deleted file mode 100644
index 4311c8d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicAbs.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */ 
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoCubicAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x1;
-        attribute [StrictTypeChecking] float y1;
-        attribute [StrictTypeChecking] float x2;
-        attribute [StrictTypeChecking] float y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicRel.idl
deleted file mode 100644
index f279f6e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicRel.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */ 
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoCubicRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x1;
-        attribute [StrictTypeChecking] float y1;
-        attribute [StrictTypeChecking] float x2;
-        attribute [StrictTypeChecking] float y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
deleted file mode 100644
index fbfde0d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */ 
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoCubicSmoothAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x2;
-        attribute [StrictTypeChecking] float y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl
deleted file mode 100644
index 1b9de2a..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */ 
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoCubicSmoothRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x2;
-        attribute [StrictTypeChecking] float y2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl
deleted file mode 100644
index 69a9930..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoQuadraticAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x1;
-        attribute [StrictTypeChecking] float y1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl
deleted file mode 100644
index 0679280..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticRel.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoQuadraticRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float x1;
-        attribute [StrictTypeChecking] float y1;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
deleted file mode 100644
index 8834c03..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoQuadraticSmoothAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
deleted file mode 100644
index 3d042c8..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegCurvetoQuadraticSmoothRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoAbs.idl
deleted file mode 100644
index 714fa10..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl
deleted file mode 100644
index 2948297..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalAbs.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoHorizontalAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl
deleted file mode 100644
index 1e46dd0..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoHorizontalRel.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoHorizontalRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoRel.idl
deleted file mode 100644
index 62ea231..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl
deleted file mode 100644
index 95c9d27..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalAbs.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoVerticalAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalRel.idl
deleted file mode 100644
index 4a359a5..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegLinetoVerticalRel.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegLinetoVerticalRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegList.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegList.idl
deleted file mode 100644
index ea9e515..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegList.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegList {
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] SVGPathSeg initialize(in SVGPathSeg newItem)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPathSeg getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGPathSeg insertItemBefore(in SVGPathSeg newItem, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPathSeg replaceItem(in SVGPathSeg newItem, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPathSeg removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGPathSeg appendItem(in SVGPathSeg newItem)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoAbs.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoAbs.idl
deleted file mode 100644
index 3a4f806..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoAbs.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegMovetoAbs : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoRel.idl b/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoRel.idl
deleted file mode 100644
index a64b351..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPathSegMovetoRel.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPathSegMovetoRel : SVGPathSeg {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPatternElement.idl b/elemental/idl/third_party/WebCore/svg/SVGPatternElement.idl
deleted file mode 100644
index 2dd89c2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPatternElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPatternElement : SVGElement,
-                                                    SVGURIReference,
-                                                    SVGTests,
-                                                    SVGLangSpace,
-                                                    SVGExternalResourcesRequired,
-                                                    SVGStylable,
-                                                    SVGFitToViewBox
-                                                 /* SVGUnitTypes */ {
-        readonly attribute SVGAnimatedEnumeration   patternUnits;
-        readonly attribute SVGAnimatedEnumeration   patternContentUnits;
-        readonly attribute SVGAnimatedTransformList patternTransform;
-        readonly attribute SVGAnimatedLength        x;
-        readonly attribute SVGAnimatedLength        y;
-        readonly attribute SVGAnimatedLength        width;
-        readonly attribute SVGAnimatedLength        height;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPoint.idl b/elemental/idl/third_party/WebCore/svg/SVGPoint.idl
deleted file mode 100644
index ce2d51d..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPoint.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPoint {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-
-        [StrictTypeChecking] SVGPoint matrixTransform(in SVGMatrix matrix);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPointList.idl b/elemental/idl/third_party/WebCore/svg/SVGPointList.idl
deleted file mode 100644
index 9713ca2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPointList.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPointList {
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] SVGPoint initialize(in SVGPoint item)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPoint getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGPoint insertItemBefore(in SVGPoint item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPoint replaceItem(in SVGPoint item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGPoint removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGPoint appendItem(in SVGPoint item)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPolygonElement.idl b/elemental/idl/third_party/WebCore/svg/SVGPolygonElement.idl
deleted file mode 100644
index bc9f966..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPolygonElement.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPolygonElement : SVGElement,
-                                                    SVGTests,
-                                                    SVGLangSpace,
-                                                    SVGExternalResourcesRequired,
-                                                    SVGStylable,
-                                                    SVGTransformable {
-        readonly attribute SVGPointList points;
-        readonly attribute SVGPointList animatedPoints;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPolylineElement.idl b/elemental/idl/third_party/WebCore/svg/SVGPolylineElement.idl
deleted file mode 100644
index 93bdaf1..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPolylineElement.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPolylineElement : SVGElement,
-                                                     SVGTests,
-                                                     SVGLangSpace,
-                                                     SVGExternalResourcesRequired,
-                                                     SVGStylable,
-                                                     SVGTransformable {
-        readonly attribute SVGPointList points;
-        readonly attribute SVGPointList animatedPoints;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGPreserveAspectRatio.idl b/elemental/idl/third_party/WebCore/svg/SVGPreserveAspectRatio.idl
deleted file mode 100644
index 975bfc7..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGPreserveAspectRatio.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGPreserveAspectRatio {
-        // Alignment Types
-        const unsigned short SVG_PRESERVEASPECTRATIO_UNKNOWN = 0;
-        const unsigned short SVG_PRESERVEASPECTRATIO_NONE = 1;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMINYMIN = 2;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMIN = 3;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMIN = 4;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMINYMID = 5;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMID = 6;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMID = 7;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMINYMAX = 8;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMIDYMAX = 9;
-        const unsigned short SVG_PRESERVEASPECTRATIO_XMAXYMAX = 10;
-
-        // Meet-or-slice Types
-        const unsigned short SVG_MEETORSLICE_UNKNOWN = 0;
-        const unsigned short SVG_MEETORSLICE_MEET = 1;
-        const unsigned short SVG_MEETORSLICE_SLICE = 2;
-
-        attribute [StrictTypeChecking] unsigned short align
-            setter raises(DOMException);
-
-        attribute [StrictTypeChecking] unsigned short meetOrSlice
-            setter raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGRadialGradientElement.idl b/elemental/idl/third_party/WebCore/svg/SVGRadialGradientElement.idl
deleted file mode 100644
index 000f6b4..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGRadialGradientElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGRadialGradientElement : SVGGradientElement {
-        readonly attribute SVGAnimatedLength cx;
-        readonly attribute SVGAnimatedLength cy;
-        readonly attribute SVGAnimatedLength r;
-        readonly attribute SVGAnimatedLength fx;
-        readonly attribute SVGAnimatedLength fy;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGRect.idl b/elemental/idl/third_party/WebCore/svg/SVGRect.idl
deleted file mode 100644
index 4bfce0e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGRect.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGRect {
-        attribute [StrictTypeChecking] float x;
-        attribute [StrictTypeChecking] float y;
-        attribute [StrictTypeChecking] float width;
-        attribute [StrictTypeChecking] float height;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGRectElement.idl b/elemental/idl/third_party/WebCore/svg/SVGRectElement.idl
deleted file mode 100644
index d93f5d7..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGRectElement.idl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGRectElement : SVGElement,
-                                                 SVGTests,
-                                                 SVGLangSpace,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGStylable,
-                                                 SVGTransformable {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-        readonly attribute SVGAnimatedLength rx;
-        readonly attribute SVGAnimatedLength ry;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGRenderingIntent.idl b/elemental/idl/third_party/WebCore/svg/SVGRenderingIntent.idl
deleted file mode 100644
index c66d648..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGRenderingIntent.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        SuppressToJSObject
-    ] SVGRenderingIntent {
-        // Rendering Intent Types
-        const unsigned short RENDERING_INTENT_UNKNOWN               = 0;
-        const unsigned short RENDERING_INTENT_AUTO                  = 1;
-        const unsigned short RENDERING_INTENT_PERCEPTUAL            = 2;
-        const unsigned short RENDERING_INTENT_RELATIVE_COLORIMETRIC = 3;
-        const unsigned short RENDERING_INTENT_SATURATION            = 4;
-        const unsigned short RENDERING_INTENT_ABSOLUTE_COLORIMETRIC = 5;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGSVGElement.idl b/elemental/idl/third_party/WebCore/svg/SVGSVGElement.idl
deleted file mode 100644
index 54f4c61..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGSVGElement.idl
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005, 2010 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    // TODO: no css::ViewCSS available!
-    // TODO: Fix SVGSVGElement inheritance (css::DocumentCSS)! 
-    // TODO: no events::DocumentEvent available!
-    interface [
-        Conditional=SVG
-    ] SVGSVGElement : SVGElement,
-                                                SVGTests,
-                                                SVGLangSpace,
-                                                SVGExternalResourcesRequired,
-                                                SVGStylable,
-                                                SVGLocatable,
-                                                SVGFitToViewBox,
-                                                SVGZoomAndPan {
-        readonly attribute SVGAnimatedLength x;
-        readonly attribute SVGAnimatedLength y;
-        readonly attribute SVGAnimatedLength width;
-        readonly attribute SVGAnimatedLength height;
-                 attribute DOMString contentScriptType
-                     /*setter raises(DOMException)*/;
-                 attribute DOMString contentStyleType
-                     /*setter raises(DOMException)*/;
-        readonly attribute SVGRect viewport;
-        readonly attribute float pixelUnitToMillimeterX;
-        readonly attribute float pixelUnitToMillimeterY;
-        readonly attribute float screenPixelToMillimeterX;
-        readonly attribute float screenPixelToMillimeterY;
-        readonly attribute boolean useCurrentView;
-        readonly attribute SVGViewSpec currentView;
-                 attribute float currentScale
-                     /*setter raises(DOMException)*/;
-        readonly attribute SVGPoint currentTranslate;
-
-        unsigned long suspendRedraw(in [Optional=DefaultIsUndefined] unsigned long maxWaitMilliseconds);
-        void unsuspendRedraw(in [Optional=DefaultIsUndefined] unsigned long suspendHandleId);
-        void unsuspendRedrawAll();
-        void forceRedraw();
-        void pauseAnimations();
-        void unpauseAnimations();
-        boolean animationsPaused();
-        float getCurrentTime();
-        void setCurrentTime(in [Optional=DefaultIsUndefined] float seconds);
-        NodeList getIntersectionList(in [Optional=DefaultIsUndefined] SVGRect rect, 
-                                     in [Optional=DefaultIsUndefined] SVGElement referenceElement);
-        NodeList getEnclosureList(in [Optional=DefaultIsUndefined] SVGRect rect, 
-                                  in [Optional=DefaultIsUndefined] SVGElement referenceElement);
-        boolean checkIntersection(in [Optional=DefaultIsUndefined] SVGElement element, 
-                                  in [Optional=DefaultIsUndefined] SVGRect rect);
-        boolean checkEnclosure(in [Optional=DefaultIsUndefined] SVGElement element, 
-                               in [Optional=DefaultIsUndefined] SVGRect rect);
-        void deselectAll();
-
-        SVGNumber createSVGNumber();
-        SVGLength createSVGLength();
-        SVGAngle createSVGAngle();
-        SVGPoint createSVGPoint();
-        SVGMatrix createSVGMatrix();
-        SVGRect createSVGRect();
-        SVGTransform createSVGTransform();
-        SVGTransform createSVGTransformFromMatrix(in [Optional=DefaultIsUndefined] SVGMatrix matrix);
-        Element getElementById(in [Optional=DefaultIsUndefined] DOMString elementId);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGScriptElement.idl b/elemental/idl/third_party/WebCore/svg/SVGScriptElement.idl
deleted file mode 100644
index 111ee59..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGScriptElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGScriptElement : SVGElement,
-                                                   SVGURIReference,
-                                                   SVGExternalResourcesRequired {
-                 attribute [TreatNullAs=NullString] DOMString type
-                     /*setter raises(DOMException)*/;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGSetElement.idl b/elemental/idl/third_party/WebCore/svg/SVGSetElement.idl
deleted file mode 100644
index a285789..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGSetElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGSetElement : SVGAnimationElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGStopElement.idl b/elemental/idl/third_party/WebCore/svg/SVGStopElement.idl
deleted file mode 100644
index 14a2ba3..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGStopElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGStopElement : SVGElement,
-                                                 SVGStylable {
-        readonly attribute SVGAnimatedNumber offset;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGStringList.idl b/elemental/idl/third_party/WebCore/svg/SVGStringList.idl
deleted file mode 100644
index 9d94e71..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGStringList.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGStringList {
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] DOMString initialize(in DOMString item)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] DOMString getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] DOMString insertItemBefore(in DOMString item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] DOMString replaceItem(in DOMString item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] DOMString removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] DOMString appendItem(in DOMString item)
-            raises(DOMException, SVGException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGStylable.idl b/elemental/idl/third_party/WebCore/svg/SVGStylable.idl
deleted file mode 100644
index 53269c9..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGStylable.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2007 Rob Buis <rwlbuis@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGStylable {
-        readonly attribute SVGAnimatedString className;
-        readonly attribute CSSStyleDeclaration style;
-
-        CSSValue getPresentationAttribute(in [Optional=DefaultIsUndefined] DOMString name);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGStyleElement.idl b/elemental/idl/third_party/WebCore/svg/SVGStyleElement.idl
deleted file mode 100644
index 7fbe999..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGStyleElement.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGStyleElement : SVGElement,
-                                                  SVGLangSpace {
-                 attribute boolean disabled;
-                 attribute DOMString type
-                     setter raises(DOMException);
-                 attribute DOMString media
-                     setter raises(DOMException);
-                 attribute DOMString title
-                     setter raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGSwitchElement.idl b/elemental/idl/third_party/WebCore/svg/SVGSwitchElement.idl
deleted file mode 100644
index 10f8332..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGSwitchElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGSwitchElement : SVGElement,
-                                                   SVGTests,
-                                                   SVGLangSpace,
-                                                   SVGExternalResourcesRequired,
-                                                   SVGStylable,
-                                                   SVGTransformable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGSymbolElement.idl b/elemental/idl/third_party/WebCore/svg/SVGSymbolElement.idl
deleted file mode 100644
index f214116..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGSymbolElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGSymbolElement : SVGElement,
-                                                   SVGLangSpace,
-                                                   SVGExternalResourcesRequired,
-                                                   SVGStylable,
-                                                   SVGFitToViewBox {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTRefElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTRefElement.idl
deleted file mode 100644
index 08637f4..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTRefElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTRefElement : SVGTextPositioningElement,
-                                                 SVGURIReference {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTSpanElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTSpanElement.idl
deleted file mode 100644
index 5aec3a8..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTSpanElement.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTSpanElement : SVGTextPositioningElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTests.idl b/elemental/idl/third_party/WebCore/svg/SVGTests.idl
deleted file mode 100644
index d9f79cc..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTests.idl
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGTests {
-        readonly attribute SVGStringList requiredFeatures;
-        readonly attribute SVGStringList requiredExtensions;
-        readonly attribute SVGStringList systemLanguage;
-
-        boolean hasExtension(in [Optional=DefaultIsUndefined] DOMString extension);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTextContentElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTextContentElement.idl
deleted file mode 100644
index 6ce8a53..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTextContentElement.idl
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTextContentElement : SVGElement,
-                                                        SVGTests,
-                                                        SVGLangSpace,
-                                                        SVGExternalResourcesRequired,
-                                                        SVGStylable {
-        // lengthAdjust Types
-        const unsigned short LENGTHADJUST_UNKNOWN          = 0;
-        const unsigned short LENGTHADJUST_SPACING          = 1;
-        const unsigned short LENGTHADJUST_SPACINGANDGLYPHS = 2;
-
-        readonly attribute SVGAnimatedLength      textLength;
-        readonly attribute SVGAnimatedEnumeration lengthAdjust;
-
-        long getNumberOfChars();
-        float getComputedTextLength();
-        float getSubStringLength(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset, 
-                                 in [Optional=DefaultIsUndefined,IsIndex] unsigned long length)
-            raises(DOMException);
-        SVGPoint getStartPositionOfChar(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset)
-            raises(DOMException);
-        SVGPoint getEndPositionOfChar(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset)
-            raises(DOMException);
-        SVGRect getExtentOfChar(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset)
-            raises(DOMException);
-        float getRotationOfChar(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset)
-            raises(DOMException);
-        long getCharNumAtPosition(in [Optional=DefaultIsUndefined] SVGPoint point);
-        void selectSubString(in [Optional=DefaultIsUndefined,IsIndex] unsigned long offset, 
-                             in [Optional=DefaultIsUndefined,IsIndex] unsigned long length)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTextElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTextElement.idl
deleted file mode 100644
index a381dd2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTextElement.idl
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTextElement : SVGTextPositioningElement,
-                                                 SVGTransformable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTextPathElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTextPathElement.idl
deleted file mode 100644
index 0904a0c..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTextPathElement.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTextPathElement : SVGTextContentElement,
-                                                     SVGURIReference {    
-        // textPath Method Types
-        const unsigned short TEXTPATH_METHODTYPE_UNKNOWN   = 0;
-        const unsigned short TEXTPATH_METHODTYPE_ALIGN     = 1;
-        const unsigned short TEXTPATH_METHODTYPE_STRETCH   = 2;
-
-        // textPath Spacing Types
-        const unsigned short TEXTPATH_SPACINGTYPE_UNKNOWN  = 0;
-        const unsigned short TEXTPATH_SPACINGTYPE_AUTO     = 1;
-        const unsigned short TEXTPATH_SPACINGTYPE_EXACT    = 2;
-
-        readonly attribute SVGAnimatedLength startOffset;
-        readonly attribute SVGAnimatedEnumeration method;
-        readonly attribute SVGAnimatedEnumeration spacing;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTextPositioningElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTextPositioningElement.idl
deleted file mode 100644
index 0410f77..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTextPositioningElement.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTextPositioningElement : SVGTextContentElement {
-        readonly attribute SVGAnimatedLengthList x;
-        readonly attribute SVGAnimatedLengthList y;
-        readonly attribute SVGAnimatedLengthList dx;
-        readonly attribute SVGAnimatedLengthList dy;
-        readonly attribute SVGAnimatedNumberList rotate;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTitleElement.idl b/elemental/idl/third_party/WebCore/svg/SVGTitleElement.idl
deleted file mode 100644
index 2cf241b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTitleElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTitleElement : SVGElement,
-                                                  SVGLangSpace,
-                                                  SVGStylable {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTransform.idl b/elemental/idl/third_party/WebCore/svg/SVGTransform.idl
deleted file mode 100644
index e3e9f5e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTransform.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org>
- * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTransform { 
-        // Transform Types
-        const unsigned short SVG_TRANSFORM_UNKNOWN = 0;
-        const unsigned short SVG_TRANSFORM_MATRIX = 1;
-        const unsigned short SVG_TRANSFORM_TRANSLATE = 2;
-        const unsigned short SVG_TRANSFORM_SCALE = 3;
-        const unsigned short SVG_TRANSFORM_ROTATE = 4;
-        const unsigned short SVG_TRANSFORM_SKEWX = 5;
-        const unsigned short SVG_TRANSFORM_SKEWY = 6;
-
-        readonly attribute unsigned short type;
-        readonly attribute SVGMatrix matrix;
-        readonly attribute float angle;
-
-        [StrictTypeChecking] void setMatrix(in SVGMatrix matrix);
-        [StrictTypeChecking] void setTranslate(in float tx, in float ty);
-        [StrictTypeChecking] void setScale(in float sx, in float sy);
-        [StrictTypeChecking] void setRotate(in float angle, in float cx, in float cy);
-        [StrictTypeChecking] void setSkewX(in float angle);
-        [StrictTypeChecking] void setSkewY(in float angle);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTransformList.idl b/elemental/idl/third_party/WebCore/svg/SVGTransformList.idl
deleted file mode 100644
index 590fe65..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTransformList.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGTransformList {
-        readonly attribute unsigned long numberOfItems;
-
-        void clear()
-            raises(DOMException);
-        [StrictTypeChecking] SVGTransform initialize(in SVGTransform item)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGTransform getItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGTransform insertItemBefore(in SVGTransform item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGTransform replaceItem(in SVGTransform item, in unsigned long index)
-            raises(DOMException, SVGException);
-        [StrictTypeChecking] SVGTransform removeItem(in unsigned long index)
-            raises(DOMException);
-        [StrictTypeChecking] SVGTransform appendItem(in SVGTransform item)
-            raises(DOMException, SVGException);
-
-        [StrictTypeChecking] SVGTransform createSVGTransformFromMatrix(in SVGMatrix matrix)
-            raises(DOMException);
-
-        SVGTransform consolidate()
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGTransformable.idl b/elemental/idl/third_party/WebCore/svg/SVGTransformable.idl
deleted file mode 100644
index 1af3895..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGTransformable.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        OmitConstructor
-    ] SVGTransformable : SVGLocatable {
-        readonly attribute SVGAnimatedTransformList transform;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGURIReference.idl b/elemental/idl/third_party/WebCore/svg/SVGURIReference.idl
deleted file mode 100644
index 960873e..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGURIReference.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject,
-        OmitConstructor
-    ] SVGURIReference {
-        readonly attribute SVGAnimatedString href;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGUnitTypes.idl b/elemental/idl/third_party/WebCore/svg/SVGUnitTypes.idl
deleted file mode 100644
index 7ed8b0b..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGUnitTypes.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        SuppressToJSObject
-    ] SVGUnitTypes {
-        // Unit Types
-        const unsigned short SVG_UNIT_TYPE_UNKNOWN           = 0;
-        const unsigned short SVG_UNIT_TYPE_USERSPACEONUSE    = 1;
-        const unsigned short SVG_UNIT_TYPE_OBJECTBOUNDINGBOX = 2;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGUseElement.idl b/elemental/idl/third_party/WebCore/svg/SVGUseElement.idl
deleted file mode 100644
index 032f453..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGUseElement.idl
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGUseElement : SVGElement,
-                                                SVGURIReference,
-                                                SVGTests,
-                                                SVGLangSpace,
-                                                SVGExternalResourcesRequired,
-                                                SVGStylable,
-                                                SVGTransformable {
-        readonly attribute SVGAnimatedLength   x;
-        readonly attribute SVGAnimatedLength   y;
-        readonly attribute SVGAnimatedLength   width;
-        readonly attribute SVGAnimatedLength   height;
-
-        readonly attribute SVGElementInstance instanceRoot;
-        readonly attribute SVGElementInstance animatedInstanceRoot;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGVKernElement.idl b/elemental/idl/third_party/WebCore/svg/SVGVKernElement.idl
deleted file mode 100644
index 7fe8dc2..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGVKernElement.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) Research In Motion Limited 2010. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG&SVG_FONTS
-    ] SVGVKernElement : SVGElement {
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGViewElement.idl b/elemental/idl/third_party/WebCore/svg/SVGViewElement.idl
deleted file mode 100644
index 04b2457..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGViewElement.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGViewElement : SVGElement,
-                                                 SVGExternalResourcesRequired,
-                                                 SVGFitToViewBox,
-                                                 SVGZoomAndPan {
-        readonly attribute SVGStringList viewTarget;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGViewSpec.idl b/elemental/idl/third_party/WebCore/svg/SVGViewSpec.idl
deleted file mode 100644
index ec545d1..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGViewSpec.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    // SVGViewSpec intentionally doesn't inherit from SVGZoomAndPan & SVGFitToViewBox on the IDLs.
-    // It would require that any of those classes would be RefCounted, and we want to avoid that.
-    interface [
-        Conditional=SVG,
-        JSGenerateToJSObject
-    ] SVGViewSpec {
-          readonly attribute SVGTransformList transform;
-          readonly attribute SVGElement viewTarget;
-          readonly attribute DOMString viewBoxString;
-          readonly attribute DOMString preserveAspectRatioString;
-          readonly attribute DOMString transformString;
-          readonly attribute DOMString viewTargetString;
-
-          // SVGZoomAndPan
-          attribute unsigned short zoomAndPan
-              setter raises(DOMException);
-
-          // SVGFitToViewBox
-          readonly attribute SVGAnimatedRect viewBox;
-          readonly attribute SVGAnimatedPreserveAspectRatio preserveAspectRatio;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGZoomAndPan.idl b/elemental/idl/third_party/WebCore/svg/SVGZoomAndPan.idl
deleted file mode 100644
index 37621bb..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGZoomAndPan.idl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG,
-        ObjCProtocol,
-        SuppressToJSObject
-    ] SVGZoomAndPan {
-        const unsigned short SVG_ZOOMANDPAN_UNKNOWN = 0;
-        const unsigned short SVG_ZOOMANDPAN_DISABLE = 1;
-        const unsigned short SVG_ZOOMANDPAN_MAGNIFY = 2;
-
-        attribute unsigned short zoomAndPan;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/svg/SVGZoomEvent.idl b/elemental/idl/third_party/WebCore/svg/SVGZoomEvent.idl
deleted file mode 100644
index a288237..0000000
--- a/elemental/idl/third_party/WebCore/svg/SVGZoomEvent.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-module svg {
-
-    interface [
-        Conditional=SVG
-    ] SVGZoomEvent : UIEvent { 
-        readonly attribute SVGRect zoomRectScreen;
-        readonly attribute float previousScale;
-        readonly attribute [Immutable] SVGPoint previousTranslate;
-        readonly attribute float newScale;
-        readonly attribute [Immutable] SVGPoint newTranslate;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/testing/InternalSettings.idl b/elemental/idl/third_party/WebCore/testing/InternalSettings.idl
deleted file mode 100644
index 53c5176..0000000
--- a/elemental/idl/third_party/WebCore/testing/InternalSettings.idl
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module window {
-    interface [
-        OmitConstructor
-    ] InternalSettings {
-        void setInspectorResourcesDataSizeLimits(in long maximumResourcesContentSize, in long maximumSingleResourceContentSize) raises(DOMException);
-        void setForceCompositingMode(in boolean enabled) raises(DOMException);
-        void setEnableCompositingForFixedPosition(in boolean enabled) raises(DOMException);
-        void setEnableCompositingForScrollableFrames(in boolean enabled) raises(DOMException);
-        void setAcceleratedDrawingEnabled(in boolean enabled) raises(DOMException);
-        void setAcceleratedFiltersEnabled(in boolean enabled) raises(DOMException);
-        void setMockScrollbarsEnabled(in boolean enabled) raises(DOMException);
-        void setPasswordEchoEnabled(in boolean enabled) raises(DOMException);
-        void setPasswordEchoDurationInSeconds(in double durationInSeconds) raises(DOMException);
-        void setFixedElementsLayoutRelativeToFrame(in boolean enabled) raises(DOMException);
-        void setUnifiedTextCheckingEnabled(in boolean enabled) raises (DOMException);
-        boolean unifiedTextCheckingEnabled() raises (DOMException);
-        void setPageScaleFactor(in float scaleFactor, in long x, in long y) raises(DOMException);
-        void setTouchEventEmulationEnabled(in boolean enabled) raises(DOMException);
-        void setDeviceSupportsTouch(in boolean enabled) raises(DOMException);
-        void setShadowDOMEnabled(in boolean enabled) raises(DOMException);
-        void setStandardFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setSerifFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setSansSerifFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setFixedFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setCursiveFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setFantasyFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setPictographFontFamily(in DOMString family, in DOMString script) raises(DOMException);
-        void setEnableScrollAnimator(in boolean enabled) raises(DOMException);
-        boolean scrollAnimatorEnabled() raises(DOMException);
-        void setCSSExclusionsEnabled(in boolean enabled) raises(DOMException);
-        void setMediaPlaybackRequiresUserGesture(in boolean enabled) raises(DOMException);
-        void setEditingBehavior(in DOMString behavior) raises(DOMException);
-        void setFixedPositionCreatesStackingContext(in boolean creates) raises(DOMException);
-        void setSyncXHRInDocumentsEnabled(in boolean enabled) raises(DOMException);
-        void setJavaScriptProfilingEnabled(in boolean creates) raises(DOMException);
-        void setWindowFocusRestricted(in boolean restricted) raises(DOMException);
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/testing/Internals.idl b/elemental/idl/third_party/WebCore/testing/Internals.idl
deleted file mode 100644
index aa10858..0000000
--- a/elemental/idl/third_party/WebCore/testing/Internals.idl
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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.
- */
-
-module window {
-    interface [
-        OmitConstructor
-    ] Internals {
-        DOMString address(in Node node);
-
-        DOMString elementRenderTreeAsText(in Element element) raises(DOMException);
-        boolean isPreloaded(in Document document, in DOMString url);
-
-        unsigned long numberOfScopedHTMLStyleChildren(in Node scope) raises(DOMException);
-
-#if defined(ENABLE_SHADOW_DOM)
-        ShadowRoot ensureShadowRoot(in Element host) raises (DOMException);
-        ShadowRoot shadowRoot(in Element host) raises (DOMException);
-        ShadowRoot youngestShadowRoot(in Element host) raises (DOMException);
-        ShadowRoot oldestShadowRoot(in Element host) raises (DOMException);
-        ShadowRoot youngerShadowRoot(in Node root) raises (DOMException);
-        ShadowRoot olderShadowRoot(in Node root) raises (DOMException);
-#else
-        Node ensureShadowRoot(in Element host) raises (DOMException);
-        Node shadowRoot(in Element host) raises (DOMException);
-        Node youngestShadowRoot(in Element host) raises (DOMException);
-        Node oldestShadowRoot(in Element host) raises (DOMException);
-        Node youngerShadowRoot(in Node root) raises (DOMException);
-#endif
-        Element includerFor(in Node node) raises (DOMException);
-        DOMString shadowPseudoId(in Element element) raises (DOMException);
-        Element createContentElement(in Document document) raises(DOMException);
-        Element getElementByIdInShadowRoot(in Node shadowRoot, in DOMString id) raises(DOMException);
-        boolean isValidContentSelect(in Element contentElement) raises(DOMException);
-        Node treeScopeRootNode(in Node node) raises (DOMException);
-
-        Node nextSiblingByWalker(in Node node) raises(DOMException);
-        Node firstChildByWalker(in Node node) raises(DOMException);
-        Node lastChildByWalker(in Node node) raises(DOMException);
-        Node nextNodeByWalker(in Node node) raises(DOMException);
-        Node previousNodeByWalker(in Node node) raises(DOMException);
-
-        boolean attached(in Node node) raises(DOMException);
-
-        DOMString visiblePlaceholder(in Element element);
-#if defined(ENABLE_INPUT_TYPE_COLOR) && ENABLE_INPUT_TYPE_COLOR
-        void selectColorInColorChooser(in Element element, in DOMString colorValue);
-#endif
-
-        ClientRect absoluteCaretBounds(in Document document) raises(DOMException);
-
-        ClientRect boundingBox(in Element element) raises(DOMException);
-
-        ClientRectList inspectorHighlightRects(in Document document) raises (DOMException);
-
-        void setBackgroundBlurOnNode(in Node node, in long blurLength) raises(DOMException);
-
-        unsigned long markerCountForNode(in Node node, in DOMString markerType) raises(DOMException);
-        Range markerRangeForNode(in Node node, in DOMString markerType, in unsigned long index) raises(DOMException);
-        DOMString markerDescriptionForNode(in Node node, in DOMString markerType, in unsigned long index) raises(DOMException);
-
-        void setScrollViewPosition(in Document document, in long x, in long y) raises(DOMException);
-
-        void setPagination(in Document document, in DOMString mode, in long gap) raises(DOMException);
-
-        boolean wasLastChangeUserEdit(in Element textField) raises (DOMException);
-        DOMString suggestedValue(in Element inputElement) raises (DOMException);
-        void setSuggestedValue(in Element inputElement, in DOMString value) raises (DOMException);
-        void setEditingValue(in Element inputElement, in DOMString value) raises (DOMException);
-
-        void paintControlTints(in Document document) raises (DOMException);
-
-        void scrollElementToRect(in Element element, in long x, in long y, in long w, in long h) raises (DOMException);
-
-        Range rangeFromLocationAndLength(in Element scope, in long rangeLocation, in long rangeLength) raises (DOMException);
-        unsigned long locationFromRange(in Element scope, in Range range) raises (DOMException);
-        unsigned long lengthFromRange(in Element scope, in Range range) raises (DOMException);
-        DOMString rangeAsText(in Range range) raises (DOMException);
-
-        void setDelegatesScrolling(in boolean enabled, in Document document) raises (DOMException);
-#if defined(ENABLE_TOUCH_ADJUSTMENT) && ENABLE_TOUCH_ADJUSTMENT
-        WebKitPoint touchPositionAdjustedToBestClickableNode(in long x, in long y, in long width, in long height, in Document document) raises (DOMException);
-        Node touchNodeAdjustedToBestClickableNode(in long x, in long y, in long width, in long height, in Document document) raises (DOMException);
-        ClientRect bestZoomableAreaForTouchPoint(in long x, in long y, in long width, in long height, in Document document) raises (DOMException);
-#endif
-
-        long lastSpellCheckRequestSequence(in Document document) raises (DOMException);
-        long lastSpellCheckProcessedSequence(in Document document) raises (DOMException);
-
-#if defined(ENABLE_VIDEO_TRACK) && ENABLE_VIDEO_TRACK
-        void setShouldDisplayTrackKind(in Document document, in DOMString kind, in boolean enabled) raises (DOMException);
-        boolean shouldDisplayTrackKind(in Document document, in DOMString trackKind) raises (DOMException);
-#endif
-
-        attribute sequence<String> userPreferredLanguages;
-
-        unsigned long wheelEventHandlerCount(in Document document) raises (DOMException);
-        unsigned long touchEventHandlerCount(in Document document) raises (DOMException);
-
-        NodeList nodesFromRect(in Document document, in long x, in long y,
-            in unsigned long topPadding, in unsigned long rightPadding, in unsigned long bottomPadding, in unsigned long leftPadding,
-            in boolean ignoreClipping, in boolean allowShadowContent) raises (DOMException);
-
-        void emitInspectorDidBeginFrame();
-        void emitInspectorDidCancelFrame();
-
-        boolean hasSpellingMarker(in Document document, in long from, in long length) raises (DOMException);
-        boolean hasGrammarMarker(in Document document, in long from, in long length) raises (DOMException);
-
-        unsigned long numberOfScrollableAreas(in Document document) raises (DOMException);
-
-        boolean isPageBoxVisible(in Document document, in long pageNumber) raises (DOMException);
-
-        readonly attribute InternalSettings settings;
-
-        void suspendAnimations(in Document document) raises (DOMException);
-        void resumeAnimations(in Document document) raises (DOMException);
-
-        void allowRoundingHacks();
-
-#if defined(ENABLE_BATTERY_STATUS) && ENABLE_BATTERY_STATUS
-        void setBatteryStatus(in Document document, in DOMString eventType, in boolean charging, in double chargingTime, in double dischargingTime, in double level) raises (DOMException);
-#endif
-
-#if defined(ENABLE_NETWORK_INFO) && ENABLE_NETWORK_INFO
-        void setNetworkInformation(in Document document, in DOMString eventType, in long bandwidth, in boolean metered) raises (DOMException);
-#endif
-
-        [Conditional=INSPECTOR] unsigned long numberOfLiveNodes();
-        [Conditional=INSPECTOR] unsigned long numberOfLiveDocuments();
-        [Conditional=INSPECTOR] sequence<String> consoleMessageArgumentCounts(in Document document);
-
-#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
-        void webkitWillEnterFullScreenForElement(in Document document, in Element element);
-        void webkitDidEnterFullScreenForElement(in Document document, in Element element);
-        void webkitWillExitFullScreenForElement(in Document document, in Element element);
-        void webkitDidExitFullScreenForElement(in Document document, in Element element);
-#endif
-    };
-}
-
diff --git a/elemental/idl/third_party/WebCore/workers/AbstractWorker.idl b/elemental/idl/third_party/WebCore/workers/AbstractWorker.idl
deleted file mode 100644
index 3c90d1e..0000000
--- a/elemental/idl/third_party/WebCore/workers/AbstractWorker.idl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * 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:
- *
- *     * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        ActiveDOMObject,
-        JSCustomToJSObject,
-        EventTarget
-    ] AbstractWorker {
-
-        attribute EventListener onerror;
-
-        void addEventListener(in DOMString type,
-                              in EventListener listener,
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type,
-                                 in EventListener listener,
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/DedicatedWorkerContext.idl b/elemental/idl/third_party/WebCore/workers/DedicatedWorkerContext.idl
deleted file mode 100644
index 48ecfdc..0000000
--- a/elemental/idl/third_party/WebCore/workers/DedicatedWorkerContext.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        ExtendsDOMGlobalObject,
-        IsWorkerContext,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        OmitConstructor
-    ] DedicatedWorkerContext : WorkerContext {
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [Custom] void postMessage(in any message, in [Optional] Array messagePorts)
-            raises(DOMException);
-        [Custom] void webkitPostMessage(in any message, in [Optional] Array transferList)
-            raises(DOMException);
-#else
-        // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
-        void postMessage(in DOMString message, in [Optional] MessagePort messagePort)
-            raises(DOMException);
-#endif
-#endif
-
-                 attribute EventListener onmessage;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/SharedWorker.idl b/elemental/idl/third_party/WebCore/workers/SharedWorker.idl
deleted file mode 100644
index 40ccdd4..0000000
--- a/elemental/idl/third_party/WebCore/workers/SharedWorker.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
- * Copyright (C) 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:
- *
- *     * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=SHARED_WORKERS,
-        ActiveDOMObject,
-        JSCustomConstructor,
-        Constructor(in DOMString scriptURL, in [Optional=DefaultIsNullString] DOMString name),
-        CallWith=ScriptExecutionContext,
-        ConstructorRaisesException,
-        JSCustomMarkFunction,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject
-    ] SharedWorker : AbstractWorker {
-        readonly attribute MessagePort port;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/SharedWorkerContext.idl b/elemental/idl/third_party/WebCore/workers/SharedWorkerContext.idl
deleted file mode 100644
index 6769811..0000000
--- a/elemental/idl/third_party/WebCore/workers/SharedWorkerContext.idl
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=SHARED_WORKERS,
-        ExtendsDOMGlobalObject,
-        IsWorkerContext,
-        JSGenerateToNativeObject,
-        JSNoStaticTables,
-        OmitConstructor
-    ] SharedWorkerContext : WorkerContext {
-
-        readonly attribute DOMString name;
-                 attribute EventListener onconnect;
-
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/Worker.idl b/elemental/idl/third_party/WebCore/workers/Worker.idl
deleted file mode 100644
index 083353c..0000000
--- a/elemental/idl/third_party/WebCore/workers/Worker.idl
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008, 2010 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. 
- *
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        ActiveDOMObject,
-        JSCustomConstructor,
-        Constructor(in DOMString scriptUrl),
-        CallWith=ScriptExecutionContext,
-        ConstructorRaisesException,
-        JSGenerateToNativeObject,
-        JSGenerateToJSObject
-    ] Worker : AbstractWorker {
-
-        attribute EventListener onmessage;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        [Custom] void postMessage(in SerializedScriptValue message, in [Optional] Array messagePorts)
-            raises(DOMException);
-        [Custom] void webkitPostMessage(in SerializedScriptValue message, in [Optional] Array messagePorts)
-            raises(DOMException);
-#else
-        // There's no good way to expose an array via the ObjC bindings, so for now just allow passing in a single port.
-        void postMessage(in SerializedScriptValue message, in [Optional] MessagePort messagePort)
-            raises(DOMException);
-#endif
-
-        void terminate();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/WorkerContext.idl b/elemental/idl/third_party/WebCore/workers/WorkerContext.idl
deleted file mode 100644
index 65a64fd..0000000
--- a/elemental/idl/third_party/WebCore/workers/WorkerContext.idl
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE 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. 
- *
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        JSCustomMarkFunction,
-        JSCustomGetOwnPropertySlotAndDescriptor,
-        EventTarget,
-        ExtendsDOMGlobalObject,
-        IsWorkerContext,
-        JSLegacyParent=JSWorkerContextBase,
-        JSNoStaticTables,
-        OmitConstructor,
-        V8CustomToJSObject
-    ] WorkerContext {
-
-        // WorkerGlobalScope
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-                 attribute [Replaceable] WorkerContext self;
-#endif
-                 attribute [Replaceable] WorkerLocation location;
-        void close();
-                 attribute EventListener onerror;
-
-        // WorkerUtils
-        [Custom] void importScripts(/*[Variadic] in DOMString urls */);
-                 attribute [Replaceable] WorkerNavigator navigator;
-
-        // Timers
-        [Custom] long setTimeout(in TimeoutHandler handler, in long timeout);
-        // [Custom] long setTimeout(in DOMString code, in long timeout);
-        void clearTimeout(in [Optional=DefaultIsUndefined] long handle);
-        [Custom] long setInterval(in TimeoutHandler handler, in long timeout);
-        // [Custom] long setInterval(in DOMString code, in long timeout);
-        void clearInterval(in [Optional=DefaultIsUndefined] long handle);
-
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-
-#if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-        // Constructors
-        attribute MessageEventConstructor MessageEvent;
-        attribute WorkerLocationConstructor WorkerLocation;
-
-#if ENABLE_CHANNEL_MESSAGING
-        attribute [JSCustomGetter] MessageChannelConstructor MessageChannel;
-#endif
-        attribute [JSCustomGetter] EventSourceConstructor EventSource;
-        attribute [JSCustomGetter] XMLHttpRequestConstructor XMLHttpRequest;
-#endif
-
-#if defined(ENABLE_BLOB) && ENABLE_BLOB
-        attribute [Conditional=LEGACY_WEBKIT_BLOB_BUILDER] WebKitBlobBuilderConstructor WebKitBlobBuilder;
-        attribute BlobConstructor Blob;
-        attribute FileReaderConstructor FileReader;
-        attribute FileReaderSyncConstructor FileReaderSync;
-#endif
-
-        attribute [Conditional=BLOB] DOMURLConstructor webkitURL;
-
-        attribute ArrayBufferConstructor ArrayBuffer; // Usable with new operator
-        attribute Int8ArrayConstructor Int8Array; // Usable with new operator
-        attribute Uint8ArrayConstructor Uint8Array; // Usable with new operator
-        attribute Uint8ArrayConstructor 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
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/workers/WorkerLocation.idl b/elemental/idl/third_party/WebCore/workers/WorkerLocation.idl
deleted file mode 100644
index 3b302c4..0000000
--- a/elemental/idl/third_party/WebCore/workers/WorkerLocation.idl
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 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.
- */
-
-module threads {
-
-    interface [
-        Conditional=WORKERS,
-        JSGenerateIsReachable=Impl,
-        JSNoStaticTables
-    ] WorkerLocation {
-        readonly attribute DOMString href;
-        readonly attribute DOMString protocol;
-        readonly attribute DOMString host;
-        readonly attribute DOMString hostname;
-        readonly attribute DOMString port;
-        readonly attribute DOMString pathname;
-        readonly attribute DOMString search;
-        readonly attribute DOMString hash;
-
-        [NotEnumerable] DOMString toString();
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/DOMParser.idl b/elemental/idl/third_party/WebCore/xml/DOMParser.idl
deleted file mode 100644
index 5e51bc1..0000000
--- a/elemental/idl/third_party/WebCore/xml/DOMParser.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module xpath {
-    interface [
-        Constructor
-    ] DOMParser {
-        Document parseFromString(in [Optional=DefaultIsUndefined] DOMString str, 
-                                 in [Optional=DefaultIsUndefined] DOMString contentType);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XMLHttpRequest.idl b/elemental/idl/third_party/WebCore/xml/XMLHttpRequest.idl
deleted file mode 100644
index 0dcedfe..0000000
--- a/elemental/idl/third_party/WebCore/xml/XMLHttpRequest.idl
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2008, 2011 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of 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.
- */
-
-module xml {
-
-    interface [
-        ActiveDOMObject,
-        Constructor,
-        CallWith=ScriptExecutionContext,
-        V8CustomConstructor,
-        JSCustomMarkFunction,
-        EventTarget,
-        JSNoStaticTables
-    ] XMLHttpRequest {
-        // From XMLHttpRequestEventTarget
-        // event handler attributes
-        attribute EventListener onabort;
-        attribute EventListener onerror;
-        attribute EventListener onload;
-        attribute EventListener onloadend;
-        attribute EventListener onloadstart;
-        attribute EventListener onprogress;
-
-        // event handler attributes
-        attribute EventListener onreadystatechange;
-
-        // state
-        const unsigned short UNSENT = 0;
-        const unsigned short OPENED = 1;
-        const unsigned short HEADERS_RECEIVED = 2;
-        const unsigned short LOADING = 3;
-        const unsigned short DONE = 4;
-
-        readonly attribute unsigned short readyState;
-
-        // request
-        attribute [Conditional=XHR_RESPONSE_BLOB, V8EnabledAtRuntime] boolean asBlob
-            setter raises(DOMException);
-
-        attribute boolean withCredentials
-            setter raises(DOMException);
-
-        [Custom] void open(in DOMString method, in DOMString url, in [Optional] boolean async, in [Optional] DOMString user, in [Optional] DOMString password)
-            raises(DOMException);
-
-        void setRequestHeader(in DOMString header, in DOMString value)
-            raises(DOMException);
-
-        [Custom] void send()
-            raises(DOMException);
-        [Custom] void send(in ArrayBuffer data)
-            raises(DOMException);
-        [Conditional=BLOB, Custom] void send(in Blob data)
-            raises(DOMException);
-        [Custom] void send(in Document data)
-            raises(DOMException);
-        [Custom] void send(in DOMString data)
-            raises(DOMException);
-        [Custom] void send(in DOMFormData data)
-            raises(DOMException);
-
-        void abort();
-
-        readonly attribute XMLHttpRequestUpload upload;
-
-        // response
-        [TreatReturnedNullStringAs=Undefined] DOMString getAllResponseHeaders()
-            raises(DOMException);
-        [TreatReturnedNullStringAs=Null] DOMString getResponseHeader(in DOMString header)
-            raises(DOMException);
-        readonly attribute [CustomGetter] DOMString responseText // The custom getter implements TreatReturnedNullStringAs=Null
-            getter raises(DOMException);
-        readonly attribute Document responseXML
-            getter raises(DOMException);
-        readonly attribute [Conditional=XHR_RESPONSE_BLOB, V8EnabledAtRuntime] Blob responseBlob
-            getter raises(DOMException);
-
-        attribute DOMString responseType
-            setter raises(DOMException);
-        readonly attribute [CustomGetter] Object response
-            getter raises(DOMException);
-
-        readonly attribute unsigned short status
-            getter raises(DOMException);
-        readonly attribute DOMString statusText
-            getter raises(DOMException);
-
-        // Extension
-        void overrideMimeType(in DOMString override);
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestException.idl b/elemental/idl/third_party/WebCore/xml/XMLHttpRequestException.idl
deleted file mode 100644
index a0be458..0000000
--- a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestException.idl
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module xml {
-
-    exception [
-        JSNoStaticTables,
-        DoNotCheckConstants
-    ] XMLHttpRequestException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // XMLHttpRequestExceptionCode
-        const unsigned short NETWORK_ERR = 101;
-        const unsigned short ABORT_ERR = 102;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestProgressEvent.idl b/elemental/idl/third_party/WebCore/xml/XMLHttpRequestProgressEvent.idl
deleted file mode 100644
index b1ca355..0000000
--- a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestProgressEvent.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2008, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module events {
-
-    interface [
-        JSNoStaticTables
-    // We should also inherit from LSProgressEvent when the idl is added.
-    ] XMLHttpRequestProgressEvent : ProgressEvent {
-         readonly attribute unsigned long long position;
-         readonly attribute unsigned long long totalSize;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestUpload.idl b/elemental/idl/third_party/WebCore/xml/XMLHttpRequestUpload.idl
deleted file mode 100644
index 584c293..0000000
--- a/elemental/idl/third_party/WebCore/xml/XMLHttpRequestUpload.idl
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2008 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module xml {
-
-    interface [
-        JSGenerateIsReachable=Impl,
-        EventTarget,
-        JSNoStaticTables
-    ] XMLHttpRequestUpload {
-        // From XMLHttpRequestEventTarget
-        // event handler attributes
-        attribute EventListener onabort;
-        attribute EventListener onerror;
-        attribute EventListener onload;
-        attribute EventListener onloadend;
-        attribute EventListener onloadstart;
-        attribute EventListener onprogress;
-
-        // EventTarget interface
-        void addEventListener(in DOMString type, 
-                              in EventListener listener, 
-                              in [Optional] boolean useCapture);
-        void removeEventListener(in DOMString type, 
-                                 in EventListener listener, 
-                                 in [Optional] boolean useCapture);
-        boolean dispatchEvent(in Event evt)
-            raises(EventException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XMLSerializer.idl b/elemental/idl/third_party/WebCore/xml/XMLSerializer.idl
deleted file mode 100644
index 58327cc..0000000
--- a/elemental/idl/third_party/WebCore/xml/XMLSerializer.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig (sam@webkit.org)
- *
- * 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.
- */
-
-module xpath {
-
-    interface [
-        Constructor
-    ] XMLSerializer {
-        DOMString serializeToString(in [Optional=DefaultIsUndefined] Node node)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XPathEvaluator.idl b/elemental/idl/third_party/WebCore/xml/XPathEvaluator.idl
deleted file mode 100644
index cb9950c..0000000
--- a/elemental/idl/third_party/WebCore/xml/XPathEvaluator.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module xpath {
-    interface [
-        Constructor
-    ] XPathEvaluator {
-        XPathExpression createExpression(in [Optional=DefaultIsUndefined] DOMString expression,
-                                         in [Optional=DefaultIsUndefined] XPathNSResolver resolver)
-            raises(DOMException);
-
-        XPathNSResolver createNSResolver(in [Optional=DefaultIsUndefined] Node nodeResolver);
-
-        XPathResult evaluate(in [Optional=DefaultIsUndefined] DOMString expression,
-                             in [Optional=DefaultIsUndefined] Node contextNode, 
-                             in [Optional=DefaultIsUndefined] XPathNSResolver resolver,
-                             in [Optional=DefaultIsUndefined] unsigned short type,
-                             in [Optional=DefaultIsUndefined] XPathResult inResult)
-            raises(DOMException);
-    };
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XPathException.idl b/elemental/idl/third_party/WebCore/xml/XPathException.idl
deleted file mode 100644
index cec0c54..0000000
--- a/elemental/idl/third_party/WebCore/xml/XPathException.idl
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-module xpath {
-
-    exception [
-        DoNotCheckConstants
-    ] XPathException {
-
-        readonly attribute unsigned short   code;
-        readonly attribute DOMString        name;
-        readonly attribute DOMString        message;
-
-#if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-        // Override in a Mozilla compatible format
-        [NotEnumerable] DOMString toString();
-#endif
-
-        // XPathExceptionCode
-        const unsigned short INVALID_EXPRESSION_ERR = 51;
-        const unsigned short TYPE_ERR = 52;
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XPathExpression.idl b/elemental/idl/third_party/WebCore/xml/XPathExpression.idl
deleted file mode 100644
index 5e60840..0000000
--- a/elemental/idl/third_party/WebCore/xml/XPathExpression.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module xpath {
-
-    interface XPathExpression {
-        [ObjCLegacyUnnamedParameters] XPathResult evaluate(in [Optional=DefaultIsUndefined] Node contextNode, 
-                                            in [Optional=DefaultIsUndefined] unsigned short type, 
-                                            in [Optional=DefaultIsUndefined] XPathResult inResult)
-            raises(DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XPathNSResolver.idl b/elemental/idl/third_party/WebCore/xml/XPathNSResolver.idl
deleted file mode 100644
index e9fa41b..0000000
--- a/elemental/idl/third_party/WebCore/xml/XPathNSResolver.idl
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module xpath {
-
-    interface [
-        ObjCProtocol,
-        OmitConstructor
-    ] XPathNSResolver {
-        [TreatReturnedNullStringAs=Null] DOMString lookupNamespaceURI(in [Optional=DefaultIsUndefined] DOMString prefix);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XPathResult.idl b/elemental/idl/third_party/WebCore/xml/XPathResult.idl
deleted file mode 100644
index 77c5b8e..0000000
--- a/elemental/idl/third_party/WebCore/xml/XPathResult.idl
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB.  If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-module xpath {
-
-    interface [
-        JSCustomMarkFunction
-    ] XPathResult {
-        const unsigned short ANY_TYPE                       = 0;
-        const unsigned short NUMBER_TYPE                    = 1;
-        const unsigned short STRING_TYPE                    = 2;
-        const unsigned short BOOLEAN_TYPE                   = 3;
-        const unsigned short UNORDERED_NODE_ITERATOR_TYPE   = 4;
-        const unsigned short ORDERED_NODE_ITERATOR_TYPE     = 5;
-        const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE   = 6;
-        const unsigned short ORDERED_NODE_SNAPSHOT_TYPE     = 7;
-        const unsigned short ANY_UNORDERED_NODE_TYPE        = 8;
-        const unsigned short FIRST_ORDERED_NODE_TYPE        = 9;
-
-        readonly attribute unsigned short  resultType;
-        readonly attribute double          numberValue
-            getter raises (DOMException);
-            
-        readonly attribute DOMString       stringValue
-            getter raises (DOMException);
-
-        readonly attribute boolean         booleanValue
-            getter raises (DOMException);
-
-        readonly attribute Node            singleNodeValue
-            getter raises (DOMException);
-
-        readonly attribute boolean         invalidIteratorState;
-        readonly attribute unsigned long   snapshotLength
-            getter raises (DOMException);
-            
-        Node iterateNext()
-            raises (DOMException);
-        Node snapshotItem(in [Optional=DefaultIsUndefined] unsigned long index)
-            raises (DOMException);
-    };
-
-}
diff --git a/elemental/idl/third_party/WebCore/xml/XSLTProcessor.idl b/elemental/idl/third_party/WebCore/xml/XSLTProcessor.idl
deleted file mode 100644
index 48ec6c2..0000000
--- a/elemental/idl/third_party/WebCore/xml/XSLTProcessor.idl
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2008, 2010 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 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.
- */
-
-module xml {
-
-    // Eventually we should implement XSLTException:
-    // http://lxr.mozilla.org/seamonkey/source/content/xsl/public/nsIXSLTException.idl
-    // http://bugs.webkit.org/show_bug.cgi?id=5446
-
-    interface [
-        Conditional=XSLT,
-        Constructor
-    ] XSLTProcessor {
-        
-        [Custom] void importStylesheet(in Node stylesheet);
-        [Custom] DocumentFragment transformToFragment(in Node source, in Document docVal);
-        [Custom] Document transformToDocument(in Node source);
-
-        [Custom] void setParameter(in DOMString namespaceURI, in DOMString localName, in DOMString value);
-        [Custom, TreatReturnedNullStringAs=Undefined] DOMString getParameter(in DOMString namespaceURI, in DOMString localName);
-        [Custom] void removeParameter(in DOMString namespaceURI, in DOMString localName);
-        void clearParameters();
-
-        void reset();
-
-    };
-
-}
diff --git a/elemental/src/elemental/Collections.gwt.xml b/elemental/src/elemental/Collections.gwt.xml
deleted file mode 100644
index 01fb3f6..0000000
--- a/elemental/src/elemental/Collections.gwt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module>
-  <inherits name="com.google.gwt.core.Core" />
-
-  <source path="js/util" includes="JsIndexable.java,JsArray*,JsMap*,JsElementalBase.java" />
-  <source path="util" skips="Timer.java"/>
-  <super-source path="super" includes="elemental/util/**/*"/>
-</module>
-
diff --git a/elemental/src/elemental/Elemental.gwt.xml b/elemental/src/elemental/Elemental.gwt.xml
deleted file mode 100644
index 4b009de..0000000
--- a/elemental/src/elemental/Elemental.gwt.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module>
-  <inherits name="com.google.gwt.core.Core" />
-  <inherits name="elemental.Json" />
-  <inherits name="elemental.Collections" />
-
-  <!-- Enables use of ClientBundle -->
-  <inherits name="com.google.gwt.resources.Resources" />
-  <set-configuration-property name="user.agent.runtimeWarning" value="false" />
-  <set-property name="user.agent" value="safari" />
-  <source path="client" />
-  <source path="js" />
-  <!--  Bypass js/util filter in Collections -->
-  <source path="js/util" />
-  <source path='canvas'/>
-  <source path='css'/>
-  <source path='dom'/>
-  <source path='events'/>
-  <source path='html'/>
-  <source path='ranges'/>
-  <source path='stylesheets'/>
-  <source path='svg'/>
-  <source path='traversal'/>
-  <source path='xpath'/>
-  <source path='xml'/>
-  <source path='util'/>
-  <super-source path="super"/>
-</module>
diff --git a/elemental/src/elemental/Json.gwt.xml b/elemental/src/elemental/Json.gwt.xml
deleted file mode 100644
index e1dc44d..0000000
--- a/elemental/src/elemental/Json.gwt.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<module>
-  <inherits name="com.google.gwt.core.Core" />
-  <inherits name="elemental.Collections" />
-
-  <source path="js/json" />
-  <source path='json'/>
-  <super-source path="super" includes="elemental/json/**/*"/>
-</module>
-
diff --git a/elemental/src/elemental/client/Browser.java b/elemental/src/elemental/client/Browser.java
deleted file mode 100644
index 0f86577..0000000
--- a/elemental/src/elemental/client/Browser.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.client;
-
-import elemental.dom.Document;
-import elemental.html.Window;
-import elemental.js.JsBrowser;
-
-/**
- * Entry-point for getting the access to browser globals.
- */
-@Deprecated
-public class Browser {
-
-  /**
-   * Provides limited user agent information for the current browser. The API is
-   * structured such that info can either be determined at runtime or
-   * constrained at compile time through GWT permutations.
-   * 
-   * TODO(knorton): Add the gwt.xml file that enables permutations.
-   */
-  @Deprecated
-  public interface Info {
-    
-    /**
-     * Indicates whether the browser is a supported version of Gecko.
-     */
-    boolean isGecko();
-
-    /**
-     * Indicates whether the platform is Linux.
-     */
-    boolean isLinux();
-
-    /**
-     * Indicates whether the platform is Macintosh.
-     */
-    boolean isMac();
-    
-    /**
-     * Indicates whether the browser is one of the supported browsers.
-     */
-    boolean isSupported();
-    
-    /**
-     * Indicates whether the browser is a supported version of WebKit.
-     */
-    boolean isWebKit();
-    
-    /**
-     * Indicates whether the platform is Windows.
-     */
-    boolean isWindows();
-  }
-
-  /**
-   * Decodes a URI as specified in the ECMA-262, 5th edition specification,
-   * section 15.1.3.1.
-   * 
-   * @see "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf"
-   */
-  public static native String decodeURI(String encodedURI) /*-{
-    return decodeURI(encodedURI);
-  }-*/;
-
-  /**
-   * Encodes a URI compoment as specified in the ECMA-262, 5th edition specification,
-   * section 15.1.3.1.
-   * 
-   * @see "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf"
-   */
-  public static native String decodeURIComponent(String encodedUriComponent) /*-{
-    return decodeURIComponent(encodedUriComponent);
-  }-*/;
-
-  /**
-   * Encodes a URI as specified in the ECMA-262, 5th edition specification,
-   * section 15.1.3.1.
-   * 
-   * @see "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf"
-   */
-  public static native String encodeURI(String uri) /*-{
-    return encodeURI(uri);
-  }-*/;
-
-  /**
-   * Encodes a URI component as specified in the ECMA-262, 5th edition specification,
-   * section 15.1.3.1.
-   * 
-   * @see "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf"
-   */
-  public static native String encodeURIComponent(String uriComponent) /*-{
-    return encodeURIComponent(uriComponent);
-  }-*/;
-
-  /**
-   * Gets the document within which this script is running.
-   */
-  public static Document getDocument() {
-    return JsBrowser.getDocument();
-  }
-
-  /**
-   * Gets information about the current browser.
-   */
-  public static Info getInfo() {
-    return JsBrowser.getInfo();
-  }
-
-  /**
-   * Gets the window within which this script is running.
-   */
-  public static Window getWindow() {
-    return JsBrowser.getWindow();
-  }
-
-  // Non-instantiable.
-  private Browser() {
-  }
-}
diff --git a/elemental/src/elemental/events/EventRemover.java b/elemental/src/elemental/events/EventRemover.java
deleted file mode 100644
index 4d61a79..0000000
--- a/elemental/src/elemental/events/EventRemover.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package elemental.events;
-
-@Deprecated
-public interface EventRemover {
-  void remove();
-}
diff --git a/elemental/src/elemental/js/JsBrowser.java b/elemental/src/elemental/js/JsBrowser.java
deleted file mode 100755
index e643ebf..0000000
--- a/elemental/src/elemental/js/JsBrowser.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js;
-
-import com.google.gwt.core.client.GWT;
-
-import elemental.client.Browser;
-import elemental.html.Navigator;
-import elemental.js.dom.JsDocument;
-import elemental.js.html.JsWindow;
-
-/**
- * JavaScript native implementation of {@link elemental.client.Browser}.
- */
-@Deprecated
-public class JsBrowser {
-  /**
-   * A {@link Browser.Info} implementation for when the browser is known to be
-   * Gecko at compile time.
-   */
-  @SuppressWarnings("unused")
-  private static class InfoWhenKnownGecko extends InfoWhenUnknown {
-    @Override
-    public boolean isGecko() {
-      return true;
-    }
-
-    @Override
-    public boolean isSupported() {
-      return true;
-    }
-
-    @Override
-    public boolean isWebKit() {
-      return false;
-    }
-  }
-
-  /**
-   * A {@link Browser.Info} implementation for when the browser is known to be
-   * Unsupported at compile time.
-   */
-  @SuppressWarnings("unused")
-  private static class InfoWhenKnownUnsupported extends InfoWhenUnknown {
-    @Override
-    public boolean isGecko() {
-      return false;
-    }
-
-    @Override
-    public boolean isSupported() {
-      return false;
-    }
-
-    @Override
-    public boolean isWebKit() {
-      return false;
-    }
-  }
-
-  /**
-   * A {@link Browser.Info} implementation for when the browser is known to be
-   * WebKit at compile time.
-   */
-  @Deprecated
-  @SuppressWarnings("unused")
-  private static class InfoWhenKnownWebKit extends InfoWhenUnknown {
-    @Override
-    public boolean isGecko() {
-      return false;
-    }
-
-    @Override
-    public boolean isSupported() {
-      return true;
-    }
-
-    @Override
-    public boolean isWebKit() {
-      return true;
-    }
-  }
-
-  /**
-   * A {@link Browser.Info} implementation for when the browser is not known
-   * until runtime.
-   *
-   * <p>
-   * Careful Captain! All those static fields are intentional. In order to
-   * ensure good dead stripping of the entire InfoWhen class hierarchy, the
-   * instance returned by {@link JsBrowser#getInfo()} must not be aliased, so it
-   * instead returns a fly-weight instance referencing static fields.
-   * </p>
-   */
-  private static class InfoWhenUnknown implements Browser.Info {
-    private native static double getGeckoVersion(String userAgent) /*-{
-      var r = / rv\:(\d+\.\d+)/.exec(userAgent);
-      return r ? parseFloat(r[1]) : 0.0;
-    }-*/;
-
-    private native static String getProduct(Navigator nav) /*-{
-      return nav.product;
-    }-*/;
-
-    private native static double getWebKitVersion(String userAgent) /*-{
-      var r = /WebKit\/(\d+\.\d+)/.exec(userAgent);
-      return r ? parseFloat(r[1]) : 0.0;
-    }-*/;
-
-    private static boolean browserDetected;
-
-    private static boolean platformDetected;
-
-    private static boolean isWebKit;
-
-    private static boolean isGecko;
-
-    private static boolean isMac;
-
-    private static boolean isWindows;
-
-    private static boolean isLinux;
-
-    private void ensurePlatformDetected() {
-      if (!platformDetected) {
-        platformDetected = true;
-        final String userAgent = getWindow().getNavigator().getUserAgent();
-        isWindows = userAgent.indexOf("Win") >= 0;
-        if (isWindows) {
-          return;
-        }
-
-        isMac = userAgent.indexOf("Mac") >= 0;
-        if (isMac) {
-          return;
-        }
-
-        isLinux = userAgent.indexOf("Linux") >= 0;
-      }
-    }
-
-    private void ensureBrowserDetected() {
-      if (!browserDetected) {
-        browserDetected = true;
-        final Navigator nav = getWindow().getNavigator();
-        final String ua = nav.getUserAgent();
-        boolean isWebKitBased = ua.indexOf("WebKit") >= 0;
-        if (isWebKitBased) {
-          isWebKit = getWebKitVersion(ua) >= SUPPORTED_WEBKIT_VERSION;
-          return;
-        }
-
-        assert !isWebKitBased;
-        isGecko = getProduct(nav).equals("Gecko") && getGeckoVersion(ua) >= SUPPORTED_GECKO_VERSION;
-      }
-    }
-
-    @Override
-    public boolean isGecko() {
-      ensureBrowserDetected();
-      return isGecko;
-    }
-
-    @Override
-    public boolean isSupported() {
-      ensureBrowserDetected();
-      return isGecko || isWebKit;
-    }
-
-    @Override
-    public boolean isWebKit() {
-      ensureBrowserDetected();
-      return isWebKit;
-    }
-
-    @Override
-    public boolean isLinux() {
-      ensurePlatformDetected();
-      return isLinux;
-    }
-
-    @Override
-    public boolean isMac() {
-      ensurePlatformDetected();
-      return isMac;
-    }
-
-    public boolean isWindows() {
-      ensurePlatformDetected();
-      return isWindows;
-    }
-  }
-
-  /**
-   * The minimum version of WebKit that is supported.
-   *
-   * This equates to >= Safari 5.0.2
-   */
-  private static final double SUPPORTED_WEBKIT_VERSION = 533.18;
-
-  /**
-   * The minimum version of Gecko that is supported.
-   *
-   * This equates to >= Firefox 4.0
-   */
-  private static final double SUPPORTED_GECKO_VERSION = 2.0;
-
-  /**
-   * Gets the document within which this script is running.
-   */
-  public static native JsDocument getDocument() /*-{
-    return $doc;
-  }-*/;
-
-  public static Browser.Info getInfo() {
-    return GWT.create(InfoWhenUnknown.class);
-  }
-
-  /**
-   * Gets the window within which this script is running.
-   */
-  public static native JsWindow getWindow() /*-{
-    return $wnd;
-  }-*/;
-
-  // Non-instantiable.
-  private JsBrowser() {
-  }
-}
diff --git a/elemental/src/elemental/js/json/JsJsonArray.java b/elemental/src/elemental/js/json/JsJsonArray.java
deleted file mode 100644
index e12dce0..0000000
--- a/elemental/src/elemental/js/json/JsJsonArray.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.js.util.JsArrayOf;
-import elemental.json.JsonArray;
-import elemental.json.JsonBoolean;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonValue;
-
-/**
- * Client-side implementation of JsonArray.
- */
-@Deprecated
-final public class JsJsonArray extends JsJsonValue
-    implements JsonArray {
-
-  public static JsonArray create() {
-    return (JsJsonArray) JavaScriptObject.createArray();
-  }
-
-  protected JsJsonArray() {
-  }
-
-  public final native JsonValue get(int index) /*-{
-    var value = this[index];
-    // box for DevMode, not ProdMode
-    return @com.google.gwt.core.client.GWT::isScript()() || value == null ? value : Object(value);
-  }-*/;
-
-  public JsonArray getArray(int index) {
-    return (JsonArray) get(index);
-  }
-
-  public boolean getBoolean(int index) {
-    return ((JsonBoolean) get(index)).getBoolean();
-  }
-
-  public double getNumber(int index) {
-    return ((JsonNumber) get(index)).getNumber();
-  }
-
-  public JsonObject getObject(int index) {
-    return (JsonObject) get(index);
-  }
-
-  public String getString(int index) {
-    return ((JsonString) get(index)).getString();
-  }
-
-  @Override
-  public native int length() /*-{
-    return this.length;
-  }-*/;
-
-  @Override
-  public void remove(int index) {
-    this.<JsArrayOf>cast().removeByIndex(index);
-  }
-
-  public native void set(int index, JsonValue value) /*-{
-    this[index] = value;
-  }-*/;
-  
-  public void set(int index, String string) {
-    set(index, JsJsonString.create(string));
-  }
-
-  public void set(int index, double number) {
-    set(index, JsJsonNumber.create(number));
-  }
-
-  public void set(int index, boolean bool) {
-    set(index, JsJsonBoolean.create(bool));
-  }
-}
diff --git a/elemental/src/elemental/js/json/JsJsonBoolean.java b/elemental/src/elemental/js/json/JsJsonBoolean.java
deleted file mode 100644
index 0c83c41..0000000
--- a/elemental/src/elemental/js/json/JsJsonBoolean.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import elemental.json.JsonBoolean;
-
-/**
- * Client-side 'low overhead' JSO implementation using extension method
- * technique.
- */
-@Deprecated
-final public class JsJsonBoolean extends JsJsonValue
-    implements JsonBoolean {
-
-  public static JsonBoolean create(boolean bool) {
-    return createProd(bool);
-  }
-
-  /*
-   * MAGIC: primitive boolean cast to object interface.
-   */
-  private static native JsJsonBoolean createProd(boolean bool) /*-{
-    return Object(bool);
-  }-*/;
-
-  protected JsJsonBoolean() {
-  }
-
-  public boolean getBoolean() {
-    return valueProd();
-  }
-
-  private native boolean valueProd() /*-{
-    return this && this.valueOf();
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/json/JsJsonFactory.java b/elemental/src/elemental/js/json/JsJsonFactory.java
deleted file mode 100644
index a9801ad..0000000
--- a/elemental/src/elemental/js/json/JsJsonFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import elemental.json.JsonException;
-import elemental.json.JsonFactory;
-import elemental.json.JsonNull;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonValue;
-
-/**
- * JSNI based implementation of JsonFactory.
- */
-@Deprecated
-public class JsJsonFactory implements JsonFactory {
-
-  private static native <T extends JsonValue> T parse0(String jsonString) /*-{
-    // assume Chrome, safe and non-broken JSON.parse impl
-    var value = $wnd.JSON.parse(jsonString);
-    // box for DevMode, not ProdMode
-    return @com.google.gwt.core.client.GWT::isScript()() || value == null ? value : Object(value);
-  }-*/;
-
-  public JsonString create(String string) {
-    return JsJsonString.create(string);
-  }
-
-  public JsonNumber create(double number) {
-    return JsJsonNumber.create(number);
-  }
-
-  public elemental.json.JsonBoolean create(boolean bool) {
-    return JsJsonBoolean.create(bool);
-  }
-
-  public elemental.json.JsonArray createArray() {
-    return JsJsonArray.create();
-  }
-
-  public JsonNull createNull() {
-    return JsJsonNull.create();
-  }
-
-  public JsonObject createObject() {
-    return JsJsonObject.create();
-  }
-
-  public <T extends JsonValue> T parse(String jsonString) throws JsonException {
-    try {
-      return parse0(jsonString);
-    } catch (Exception e) {
-      throw new JsonException("Can't parse " + jsonString);
-    }
-  }
-}
diff --git a/elemental/src/elemental/js/json/JsJsonNull.java b/elemental/src/elemental/js/json/JsJsonNull.java
deleted file mode 100644
index deff463..0000000
--- a/elemental/src/elemental/js/json/JsJsonNull.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import elemental.json.JsonNull;
-
-/**
- * Client-side implementation of JsonNull as "extension methods" on an actual
- * null.
- */
-@Deprecated
-final public class JsJsonNull extends JsJsonValue
-    implements JsonNull {
-
-  public static JsonNull create() {
-    return createProd();
-  }
-
-  /*
-   * MAGIC: If the implementation of JSOs ever changes, this could cause
-   * errors.
-   */
-  private static native JsJsonNull createProd() /*-{
-    return null;
-  }-*/;
-
-  protected JsJsonNull() {
-  }
-}
diff --git a/elemental/src/elemental/js/json/JsJsonNumber.java b/elemental/src/elemental/js/json/JsJsonNumber.java
deleted file mode 100644
index c9115b2..0000000
--- a/elemental/src/elemental/js/json/JsJsonNumber.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import elemental.json.JsonNumber;
-
-/**
- * Client-side 'low overhead' JSO implementation using extension method
- * technique.
- */
-@Deprecated
-final public class JsJsonNumber extends JsJsonValue
-    implements JsonNumber {
-
-  public static JsonNumber create(double number) {
-    return createProd(number);
-  }
-
-  /*
-   * MAGIC: primitive number cast to object interface.
-   */
-  private static native JsJsonNumber createProd(double number) /*-{
-    return Object(number);
-  }-*/;
-
-  protected JsJsonNumber() {
-  }
-
-  public double getNumber() {
-    return valueProd();
-  }
-
-  private native double valueProd() /*-{
-    return this && this.valueOf();
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/json/JsJsonObject.java b/elemental/src/elemental/js/json/JsJsonObject.java
deleted file mode 100644
index 823fa3c..0000000
--- a/elemental/src/elemental/js/json/JsJsonObject.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayString;
-
-import elemental.json.JsonArray;
-import elemental.json.JsonBoolean;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonValue;
-
-/**
- * Client-side implementation of JsonObject interface.
- */
-@Deprecated
-final public class JsJsonObject extends JsJsonValue
-    implements JsonObject {
-
-  public static JsJsonObject create() {
-    return JavaScriptObject.createObject().cast();
-  }
-
-  protected JsJsonObject() {
-  }
-
-  public final native JsonValue get(String key) /*-{
-    var value = this[key];
-    // box for DevMode, not ProdMode
-    return @com.google.gwt.core.client.GWT::isScript()() || value == null ? value : Object(value);
-  }-*/;
-
-  public JsonArray getArray(String key) {
-    return (JsonArray) get(key);
-  }
-
-  public boolean getBoolean(String key) {
-    return ((JsonBoolean) get(key)).getBoolean();
-  }
-
-  public double getNumber(String key) {
-    return ((JsonNumber) get(key)).getNumber();
-  }
-
-  public JsonObject getObject(String key) {
-    return (JsonObject) get(key);
-  }
-
-  public String getString(String key) {
-    return ((JsonString) get(key)).getString();
-  }
-
-  public native boolean hasKey(String key) /*-{
-    return key in this;
-  }-*/;
-
-  public String[] keys() {
-    JsArrayString str = keys0();
-    return reinterpretCast(str);
-  }
-
-  public native JsArrayString keys0() /*-{
-    var keys = [];
-    for(var key in this) {
-      if (Object.prototype.hasOwnProperty.call(this, key) && key != '$H') {
-        keys.push(key);
-      }
-    }
-    return keys;
-  }-*/;
-
-  public native void put(String key, JsonValue value) /*-{
-    this[key] = value;
-  }-*/;
-
-  public void put(String key, String value) {
-    put(key, JsJsonString.create(value));
-  }
-
-  public void put(String key, double value) {
-    put(key, JsJsonNumber.create(value));
-  }
-
-  public void put(String key, boolean value) {
-    put(key, JsJsonBoolean.create(value));
-  }
-
-  /**
-   * @deprecated use {@link #put(String, elemental.json.JsonValue)} instead.
-   */
-  @Deprecated
-  public void put0(String key, JsonValue value) {
-      put(key, value);
-  }
-
-  public native void remove(String key) /*-{
-    delete this[key];
-  }-*/;
-
-  private native String[] reinterpretCast(JsArrayString arrayString) /*-{
-    return arrayString;
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/json/JsJsonString.java b/elemental/src/elemental/js/json/JsJsonString.java
deleted file mode 100644
index d6b4c1f..0000000
--- a/elemental/src/elemental/js/json/JsJsonString.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import elemental.json.JsonString;
-
-/**
- * Client-side 'zero overhead' JSO implementation using extension method
- * technique.
- */
-@Deprecated
-final public class JsJsonString extends JsJsonValue
-    implements JsonString {
-  
-  public static JsonString create(String string) {
-    return createProd(string);
-  }
-
-  /*
-   * MAGIC: String cast to object interface.
-   */
-  private static native JsJsonString createProd(String string) /*-{
-    // no need to box String for ProdMode and DevMode
-    return string;
-  }-*/;
-
-  protected JsJsonString() {
-  }
-
-  public String getString() {
-    return valueProd();
-  }
-
-  private native String valueProd() /*-{
-    return @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this);
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/json/JsJsonValue.java b/elemental/src/elemental/js/json/JsJsonValue.java
deleted file mode 100644
index 5a8b696..0000000
--- a/elemental/src/elemental/js/json/JsJsonValue.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.json;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * JSO backed implementation of JsonValue.
- */
-@Deprecated
-public class JsJsonValue extends JavaScriptObject implements JsonValue {
-
-  static native JsonValue box(JsonValue value) /*-{
-    // box for DevMode, not ProdMode
-    return @com.google.gwt.core.client.GWT::isScript()() || value == null ? value : Object(value);
-  }-*/;
-
-  static native JsonValue debox(JsonValue value) /*-{
-    // we don't debox (currently), because ProdMode is now unboxed, and DevMode should stay boxed
-    return value;
-  }-*/;
-
-  static native String getJsType(Object obj) /*-{
-    return typeof @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(obj);
-  }-*/;
-
-  static native boolean isArray(Object obj) /*-{
-     // ensure that array detection works cross-frame
-    return Object.prototype.toString.apply(@elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(obj)) === '[object Array]';
-  }-*/;
-
-  private static native boolean isNull(JsJsonValue jsJsonValue) /*-{
-    // TODO(cromwellian): if this moves to GWT, we may have to support more leniency
-    return jsJsonValue === null;
-  }-*/;
-
-  protected JsJsonValue() {
-  }
-
-  @Override
-  final public native boolean asBoolean() /*-{
-     return @com.google.gwt.core.client.GWT::isScript()() || this == null ?
-        !!@elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this) :
-        (!!@elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this)).valueOf();
-  }-*/;
-
-  @Override
-  final public native double asNumber() /*-{
-    if (this == null) {
-      return 0;
-    }
-    return @com.google.gwt.core.client.GWT::isScript()() ?
-        +@elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this) :
-        (+@elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this)).valueOf();
-  }-*/;
-
-  @Override
-  // avoid casts, as compiler will throw CCE trying to cast a raw JS String to an interface
-  final public native String asString() /*-{
-    return this == null ? null :
-        ("" + @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this));
-  }-*/;
-
-  final public JsonType getType() {
-    if (isNull(this)) {
-      return JsonType.NULL;
-    }
-    String jsType = getJsType(this);
-    if ("string".equals(jsType)) {
-      return JsonType.STRING;
-    }
-    else if ("number".equals(jsType)) {
-      return JsonType.NUMBER;
-    }
-    else if ("boolean".equals(jsType)) {
-      return JsonType.BOOLEAN;
-    }
-    else if ("object".equals(jsType)) {
-      return isArray(this) ? JsonType.ARRAY : JsonType.OBJECT;
-    }
-    assert false : "Unknown Json Type";
-    return null;
-  }
-
-  @Override
-  final public native boolean jsEquals(JsonValue value) /*-{
-    return @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this)
-    === @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(value);
-  }-*/;
-
-  final public native String toJson() /*-{
-    // skip hashCode field
-    return $wnd.JSON.stringify(this, function(keyName, value) {
-        if (keyName == "$H") {
-          return undefined; // skip hashCode property
-        }
-        return value;
-      }, 0);
-  }-*/;
-
-  final public native Object toNative() /*-{
-    return @elemental.js.json.JsJsonValue::debox(Lelemental/json/JsonValue;)(this);
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/util/JsArrayOf.java b/elemental/src/elemental/js/util/JsArrayOf.java
deleted file mode 100644
index 8b2100c..0000000
--- a/elemental/src/elemental/js/util/JsArrayOf.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.ArrayOf;
-import elemental.util.CanCompare;
-
-/**
- * JavaScript native implementation of {@link ArrayOf}.
- */
-@Deprecated
-public final class JsArrayOf<T> extends JavaScriptObject implements ArrayOf<T> {
-  
-  /**
-   * Create a new empty Array instance.
-   */
-  public static <T> JsArrayOf<T> create() {
-    return JavaScriptObject.createArray().cast();
-  }
-  
-  static native boolean isEmpty(JavaScriptObject array) /*-{
-    return !array.length;
-  }-*/;
-
-  static native <T extends JavaScriptObject> T splice(JavaScriptObject array, int index, int count) /*-{
-    return array.splice(index, count);
-  }-*/;
-
-  protected JsArrayOf() {
-  }
-  
-  public native JsArrayOf<T> concat(ArrayOf<T> values) /*-{
-    return this.concat(values);
-  }-*/;
-  
-  public boolean contains(T value) {
-    return indexOf(value) != -1;
-  }
-
-  public native T get(int index) /*-{
-      return this[index];
-  }-*/;
-
-  public native int indexOf(T value) /*-{
-    return this.indexOf(value);
-  }-*/;
-
-  public native void insert(int index, T value) /*-{
-    this.splice(index, 0, value);
-  }-*/;
-
-  public boolean isEmpty() {
-    return isEmpty(this);
-  }
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  public String join() {
-    // As per JS spec
-    return join(",");
-  }
-
-  public native String join(String separator) /*-{
-    return this.join(separator);
-  }-*/;
-
-  public native int length() /*-{
-      return this.length;
-  }-*/;
-
-  public native T peek() /*-{
-    return this[this.length - 1];
-  }-*/;
-
-  public native T pop() /*-{
-    return this.pop();
-  }-*/;
-  
-  /**
-   * Pushes the given value onto the end of the array.
-   */
-  public native void push(T value) /*-{
-    this[this.length] = value;
-  }-*/;
-  
-  public void remove(T value) {
-    final int index = indexOf(value);
-    if (index != -1) {
-      splice(index, 1);
-    }
-  }
-  
-  public void removeByIndex(int index) {
-    splice(index, 1);
-  }
-
-  public native void set(int index, T value) /*-{
-      this[index] = value;
-  }-*/;
-
-  public native void setLength(int newLength) /*-{
-    this.length = newLength;
-  }-*/;
-
-  public native T shift() /*-{
-    return this.shift();
-  }-*/;
-
-  public native void sort(CanCompare<T> comparator) /*-{
-    this.sort(function(a, b) {
-      return comparator.@elemental.util.CanCompare::compare(Ljava/lang/Object;Ljava/lang/Object;)(a, b);
-    });
-  }-*/;
-
-  public JsArrayOf<T> splice(int index, int count) {
-    return splice(this, index, count);
-  }
-
-  public native void unshift(T value) /*-{
-    this.unshift(value);
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/util/JsArrayOfBoolean.java b/elemental/src/elemental/js/util/JsArrayOfBoolean.java
deleted file mode 100644
index 08fe572..0000000
--- a/elemental/src/elemental/js/util/JsArrayOfBoolean.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayBoolean;
-
-import elemental.util.ArrayOfBoolean;
-
-/**
- * JavaScript native implementation of {@link ArrayOfBoolean}.
- */
-@Deprecated
-public final class JsArrayOfBoolean extends JsArrayBoolean implements ArrayOfBoolean {
-
-  /**
-   * Create a new empty instance.
-   */
-  public static JsArrayOfBoolean create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsArrayOfBoolean() {
-  }
-
-  public native JsArrayOfBoolean concat(ArrayOfBoolean values) /*-{
-    return this.concat(values);
-  }-*/;
-
-  public boolean contains(boolean value) {
-    return indexOf(value) != -1;
-  }
-
-  public native int indexOf(boolean value) /*-{
-    return this.indexOf(value);
-  }-*/;
-
-  public native void insert(int index, boolean value) /*-{
-    this.splice(index, 0, value);
-  }-*/;
-
-  public boolean isEmpty() {
-    return JsArrayOf.isEmpty(this);
-  }
-
-  public native boolean isSet(int index) /*-{
-    return this[index] !== undefined;
-  }-*/;
-
-  public native boolean peek() /*-{
-    return this[this.length - 1];
-  }-*/;
-
-  public native boolean pop() /*-{
-    return this.pop();
-  }-*/;
-
-  public void remove(boolean value) {
-    final int index = indexOf(value);
-    if (index != -1) {
-      splice(index, 1);
-    }
-  }
-
-  public void removeByIndex(int index) {
-    splice(index, 1);
-  }
-
-  public JsArrayOfBoolean splice(int index, int count) {
-    return JsArrayOf.splice(this, index, count);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsArrayOfInt.java b/elemental/src/elemental/js/util/JsArrayOfInt.java
deleted file mode 100644
index c294dc5..0000000
--- a/elemental/src/elemental/js/util/JsArrayOfInt.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayInteger;
-
-import elemental.util.ArrayOfInt;
-import elemental.util.CanCompareInt;
-
-/**
- * JavaScript implementation of {@link ArrayOfInt}.
- */
-@Deprecated
-public final class JsArrayOfInt extends JsArrayInteger implements ArrayOfInt {
-
-  /**
-   * Create a new empty instance.
-   */
-  public static JsArrayOfInt create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsArrayOfInt() {
-  }
-
-  public native JsArrayOfInt concat(ArrayOfInt values) /*-{
-    return this.concat(values);
-  }-*/;
-
-  public boolean contains(int value) {
-    return indexOf(value) != -1;
-  }
-
-  public native int indexOf(int value) /*-{
-    return this.indexOf(value);
-  }-*/;
-
-  public native void insert(int index, int value) /*-{
-    this.splice(index, 0, value);
-  }-*/;
-
-  public boolean isEmpty() {
-    return JsArrayOf.isEmpty(this);
-  }
-
-  public native boolean isSet(int index) /*-{
-    return this[index] !== undefined;
-  }-*/;
-
-  public native int peek() /*-{
-    return this[this.length - 1];
-  }-*/;
-
-  public native int pop() /*-{
-    return this.pop();
-  }-*/;
-
-  public void remove(int value) {
-    final int index = indexOf(value);
-    if (index != -1) {
-      splice(index, 1);
-    }
-  }
-
-  public void removeByIndex(int index) {
-    splice(index, 1);
-  }
-
-  public native void sort() /*-{
-    this.sort();
-  }-*/;
-
-  public native void sort(CanCompareInt comparator) /*-{
-    this.sort(function(a, b) {
-      return comparator.@elemental.util.CanCompareInt::compare(II)(a, b);
-    });
-  }-*/;
-
-  public JsArrayOfInt splice(int index, int count) {
-    return JsArrayOf.splice(this, index, count);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsArrayOfNumber.java b/elemental/src/elemental/js/util/JsArrayOfNumber.java
deleted file mode 100644
index 54d30c2..0000000
--- a/elemental/src/elemental/js/util/JsArrayOfNumber.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayNumber;
-
-import elemental.util.ArrayOfNumber;
-import elemental.util.CanCompareNumber;
-
-/**
- * JavaScript native implementation of {@link ArrayOfNumber}.
- */
-@Deprecated
-public final class JsArrayOfNumber extends JsArrayNumber implements ArrayOfNumber {
-
-  /**
-   * Create a new empty instance.
-   */
-  public static JsArrayOfNumber create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsArrayOfNumber() {
-  }
-
-  public native JsArrayOfNumber concat(ArrayOfNumber values) /*-{
-    return this.concat(values);
-  }-*/;
-
-  public native void insert(int index, double value) /*-{
-    this.splice(index, 0, value);
-  }-*/;
-
-  public boolean isEmpty() {
-    return JsArrayOf.isEmpty(this);
-  }
-
-  public native boolean isSet(int index) /*-{
-    return this[index] !== undefined;
-  }-*/;
-
-  public native double peek() /*-{
-    return this[this.length - 1];
-  }-*/;
-
-  public native double pop() /*-{
-    return this.pop();
-  }-*/;
-
-  public void removeByIndex(int index) {
-    splice(index, 1);
-  }
-
-  public native void sort() /*-{
-    this.sort();
-  }-*/;
-
-  public native void sort(CanCompareNumber comparator) /*-{
-    this.sort(function(a, b) {
-      return comparator.@elemental.util.CanCompareNumber::compare(DD)(a, b);
-    });
-  }-*/;
-
-  public JsArrayOfNumber splice(int index, int count) {
-    return JsArrayOf.splice(this, index, count);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsArrayOfString.java b/elemental/src/elemental/js/util/JsArrayOfString.java
deleted file mode 100644
index 9ce884a..0000000
--- a/elemental/src/elemental/js/util/JsArrayOfString.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.core.client.JsArrayString;
-
-import elemental.util.ArrayOfString;
-import elemental.util.CanCompareString;
-
-/**
- * JavaScript native implementation of {@link ArrayOfString}.
- */
-@Deprecated
-public final class JsArrayOfString extends JsArrayString implements ArrayOfString {
-  
-  /**
-   * Create a new empty instance.
-   */
-  public static JsArrayOfString create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsArrayOfString() {
-  }
-
-  public native JsArrayOfString concat(ArrayOfString values) /*-{
-    return this.concat(values);
-  }-*/;
-
-  public boolean contains(String value) {
-    return indexOf(value) != -1;
-  }
-
-  public native int indexOf(String value) /*-{
-    return this.indexOf(value);
-  }-*/;
-
-  public native void insert(int index, String value) /*-{
-    this.splice(index, 0, value);
-  }-*/;
-
-  public boolean isEmpty() {
-    return JsArrayOf.isEmpty(this);
-  }
-
-  public native String peek() /*-{
-    return this[this.length - 1];
-  }-*/;
-
-  public native String pop() /*-{
-    return this.pop();
-  }-*/;
-
-  public void remove(String value) {
-    final int index = indexOf(value);
-    if (index != -1) {
-      splice(index, 1);
-    }
-  }
-
-  public void removeByIndex(int index) {
-    splice(index, 1);
-  }
-
-  public native void sort() /*-{
-    this.sort();
-  }-*/;
-
-  public native void sort(CanCompareString comparator) /*-{
-    this.sort(function(a, b) {
-      return comparator.@elemental.util.CanCompareString::compare(Ljava/lang/String;Ljava/lang/String;)(a, b);
-    });
-  }-*/;
-
-  public JsArrayOfString splice(int index, int count) {
-    return JsArrayOf.splice(this, index, count);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsElementalBase.java b/elemental/src/elemental/js/util/JsElementalBase.java
deleted file mode 100644
index 2aad045..0000000
--- a/elemental/src/elemental/js/util/JsElementalBase.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import elemental.util.*;
-
-/**
- * All Elemental classes must extend this base class, mixes in support for
- * Indexable, Settable, Mappable.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public class JsElementalBase extends JavaScriptObject implements Mappable, 
-    Indexable, IndexableInt, IndexableNumber, Settable, SettableInt, SettableNumber {
-
-  protected JsElementalBase() {}
-
-  public final native Object /* T */ at(int index) /*-{
-    return this[index];
-  }-*/;
-
-  public final native double numberAt(int index) /*-{
-    return this[index];
-  }-*/;
-
-  public final native int intAt(int index) /*-{
-    return this[index];
-  }-*/;
-
-  public final native int length() /*-{
-    return this.length;
-  }-*/;
-
-  public final native void setAt(int index, Object /* T */ value) /*-{
-    this[index] = value;
-  }-*/;
-
-  public final native void setAt(int index, double value) /*-{
-    this[index] = value;
-  }-*/;
-
-  public final native void setAt(int index, int value) /*-{
-    this[index] = value;
-  }-*/;
-
-  public final native Object /* T */ at(String key) /*-{
-    return this[key];
-  }-*/;
-
-  public final native int intAt(String key) /*-{
-    return this[key];
-  }-*/;
-
-  public final native double numberAt(String key) /*-{
-    return this[key];
-  }-*/;
-
-  public final native void setAt(String key, Object /* T */ value) /*-{
-    this[key] = value;
-  }-*/;
-
-  public final native void setAt(String key, int value) /*-{
-    this[key] = value;
-  }-*/;
-
-  public final native void setAt(String key, double value) /*-{
-    this[key] = value;
-  }-*/;
-}
diff --git a/elemental/src/elemental/js/util/JsGlobals.java b/elemental/src/elemental/js/util/JsGlobals.java
deleted file mode 100644
index b47caa1..0000000
--- a/elemental/src/elemental/js/util/JsGlobals.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package elemental.js.util;
-
-
-/**
- * A utility class for accessing global functions and values in an ECMAScript
- * context.
- */
-@Deprecated
-public class JsGlobals {
-  /**
-   * Decodes an encoded URI to a URI string.
-   */
-  public native static String decodeURI(String encodedURI) /*-{
-    return decodeURI(encodedURI);
-  }-*/;
-
-  /**
-   * Decodes an encoded URI component to a URI component string.
-   */
-  public native static String decodeURIComponent(String encodedURIComponent) /*-{
-    return decodeURIComponent(encodedURIComponent);
-  }-*/;
-
-  /**
-   * Encodes a URI string by escaping all characters not allowed in URIs.
-   */
-  public native static String encodeURI(String uri) /*-{
-    return encodeURI(uri);
-  }-*/;
-
-  /**
-   * Encodes a URI component string by escaping all characters not allowed in
-   * URIs.
-   */
-  public static native String encodeURIComponent(String uriComponent) /*-{
-    return encodeURIComponent(uriComponent);
-  }-*/;
-
-  /**
-   * Indicates if <code>value</code> is a finite number.
-   */
-  public native static boolean isFinite(double value) /*-{
-    return isFinite(value);
-  }-*/;
-
-  /**
-   * Indicates if <code>value</code> is <code>NaN</code>.
-   */
-  public native static boolean isNaN(double value) /*-{
-    return isNaN(value);
-  }-*/;
-
-  /**
-   * Produces a <code>double</code> value by interpreting the contents of
-   * <code>value</code> as a decimal literal.
-   */
-  public native static double parseFloat(String value) /*-{
-    return parseFloat(value);
-  }-*/;
-
-  /**
-   * Produces a <code>double</code> value by interpreting the contents of
-   * <code>value</code> as a decimal literal.
-   */
-  public native static double parseFloat(String value, int radix) /*-{
-    return parseFloat(value, radix);
-  }-*/;
-
-  /**
-   * Produces a integral value by interpreting the contents of
-   * <code>value</code> as a integer literal. The value returned by this method
-   * will be an integral value or <code>NaN</code>, so the return value is a
-   * <code>double</code>.
-   * 
-   * <pre>
-   * Example use:
-   * // Will yield zero if s is not a valid integer.
-   * int value = (int)parseInt(s);
-   * 
-   * // To check if the value is valid.
-   * double value = parseInt(s);
-   * if (isNaN(value))
-   *   //Invalid value.
-   * </pre>
-   */
-  public native static double parseInt(String value) /*-{
-    return parseInt(value);
-  }-*/;
-
-  /**
-   * Produces a integral value by interpreting the contents of
-   * <code>value</code> as a integer literal. The value returned by this method
-   * will be an integral value or <code>NaN</code>, so the return value is a
-   * <code>double</code>.
-   * 
-   * <pre>
-   * Example use:
-   * // Will yield zero if s is not a valid integer.
-   * int value = (int)parseInt(s);
-   * 
-   * // To check if the value is valid.
-   * double value = parseInt(s);
-   * if (isNaN(value))
-   *   //Invalid value.
-   * </pre>
-   */
-  public native static double parseInt(String value, int radix) /*-{
-    return parseInt(value, radix);
-  }-*/;
-
-  private JsGlobals() {
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsIndexable.java b/elemental/src/elemental/js/util/JsIndexable.java
deleted file mode 100644
index 159b5b4..0000000
--- a/elemental/src/elemental/js/util/JsIndexable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import elemental.util.*;
-
-/**
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public class JsIndexable extends JsElementalBase implements Indexable {
-  protected JsIndexable() {}
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromIntTo.java b/elemental/src/elemental/js/util/JsMapFromIntTo.java
deleted file mode 100644
index 06f3859..0000000
--- a/elemental/src/elemental/js/util/JsMapFromIntTo.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromIntTo;
-
-/**
- * JavaScript native implementation of {@link MapFromIntTo}.
- */
-@Deprecated
-public final class JsMapFromIntTo<V> extends JavaScriptObject implements MapFromIntTo<V> {
-  
-  /**
-   * Create a new empty map instance.
-   */
-  public static <T> JsMapFromIntTo<T> create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsMapFromIntTo() {
-  }
-
-  public native V get(int key) /*-{
-      return this[key];
-  }-*/;
-
-  final static native boolean hasKey(JavaScriptObject map, int key) /*-{
-    return map[key] !== undefined;
-  }-*/;
-
-  final static native void remove(JavaScriptObject map, int key) /*-{
-    delete map[key];
-  }-*/;
-
-  final static native JsArrayOfInt keys(JavaScriptObject map) /*-{
-    var data = [];
-    for (var p in map) {
-      var key = parseInt(p);
-      if (!isNaN(key)) {
-        data.push(key);
-      }
-    }
-    return data;
-  }-*/;
-
-  final public boolean hasKey(int key) {
-    return hasKey(this, key);
-  }
-
-  final public JsArrayOfInt keys() {
-    return keys(this);
-  }
-
-  public native void put(int key, V value) /*-{
-      this[key] = value;
-  }-*/;
-
-  final public void remove(int key) {
-    remove(this, key);
-  }
-
-  final public JsArrayOf<V> values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromIntToString.java b/elemental/src/elemental/js/util/JsMapFromIntToString.java
deleted file mode 100644
index fe5442d..0000000
--- a/elemental/src/elemental/js/util/JsMapFromIntToString.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromIntToString;
-
-/**
- * JavaScript native implementation of {@link MapFromIntToString}.
- */
-@Deprecated
-public final class JsMapFromIntToString extends JavaScriptObject implements MapFromIntToString {
-  /**
-   * Create a new empty map instance.
-   */
-  public static JsMapFromIntToString create() {
-    return JavaScriptObject.createArray().cast();
-  }
-
-  protected JsMapFromIntToString() {
-  }
-
-  public native String get(int key) /*-{
-    return this[key];
-  }-*/;
-
-  public boolean hasKey(int key) {
-    return JsMapFromIntTo.hasKey(this, key);
-  }
-
-  public JsArrayOfInt keys() {
-    return JsMapFromIntTo.keys(this);
-  }
-
-  public native void put(int key, String value) /*-{
-    this[key] = value;
-  }-*/;
-
-  public void remove(int key) {
-    JsMapFromIntTo.remove(this, key);
-  }
-
-  public native void set(int key, String value) /*-{
-    this[key] = value;
-  }-*/;
-
-  public JsArrayOfString values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromStringTo.java b/elemental/src/elemental/js/util/JsMapFromStringTo.java
deleted file mode 100644
index 0fd98e3..0000000
--- a/elemental/src/elemental/js/util/JsMapFromStringTo.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromStringTo;
-
-/**
- * JavaScript native implementation of {@link MapFromStringTo}.
- */
-@Deprecated
-public final class JsMapFromStringTo<V> extends JavaScriptObject implements MapFromStringTo<V> {
-
-  /**
-   * Create a new empty map instance.
-   */
-  public static native <T> JsMapFromStringTo<T> create() /*-{
-    return Object.create(null);
-  }-*/;
-
-  static native boolean hasKey(JavaScriptObject map, String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return map[p] !== undefined;
-  }-*/;
-
-  static native <T extends JavaScriptObject> T keys(JavaScriptObject object) /*-{
-    var data = [];
-    for (var item in object) {
-      if (Object.prototype.hasOwnProperty.call(object, item)) {
-        var key = @elemental.js.util.JsMapFromStringTo::keyForProperty(Ljava/lang/String;)(item);
-        data.push(key);
-      }
-    }
-    return data;
-  }-*/;
-
-  static native void remove(JavaScriptObject map, String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    delete map[p];
-  }-*/;
-
-  static native <T extends JavaScriptObject> T values(JavaScriptObject object) /*-{
-    var data = [];
-    for (var item in object) {
-      if (Object.prototype.hasOwnProperty.call(object, item)) {
-        data.push(object[item]);
-      }
-    }
-    return data;
-  }-*/;
-
-  @SuppressWarnings("unused") // Called from JSNI.
-  private static String keyForProperty(String property) {
-    return property;
-  }
-
-  @SuppressWarnings("unused") // Called from JSNI.
-  private static String propertyForKey(String key) {
-    assert key != null : "native maps do not allow null key values.";
-    return key;
-  }
-
-  protected JsMapFromStringTo() {
-  }
-
-  public native V get(String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return this[p];
-  }-*/;
-
-  public boolean hasKey(String key) {
-    return hasKey(this, key);
-  }
-
-  public JsArrayOfString keys() {
-    return keys(this);
-  }
-
-  public native void put(String key, V value) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    this[p] = value;
-  }-*/;
-
-  public void remove(String key) {
-    remove(this, key);
-  }
-
-  public JsArrayOf<V> values() {
-    return values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromStringToBoolean.java b/elemental/src/elemental/js/util/JsMapFromStringToBoolean.java
deleted file mode 100644
index 7d7fa6e..0000000
--- a/elemental/src/elemental/js/util/JsMapFromStringToBoolean.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromStringToBoolean;
-
-/**
- * A JavaScript native implementation of {@link MapFromStringToBoolean}.
- */
-@Deprecated
-public final class JsMapFromStringToBoolean extends JavaScriptObject
-    implements MapFromStringToBoolean {
-
-  /**
-   * Create a new empty map instance.
-   */
-  public static native <T> JsMapFromStringToBoolean create() /*-{
-    return Object.create(null);
-  }-*/;
-
-  protected JsMapFromStringToBoolean() {
-  }
-
-  public native boolean get(String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return this[p];
-  }-*/;
-
-  public boolean hasKey(String key) {
-    return JsMapFromStringTo.hasKey(this, key);
-  }
-
-  public JsArrayOfString keys() {
-    return JsMapFromStringTo.keys(this);
-  }
-
-  public native void put(String key, boolean value) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    this[p] = value;
-  }-*/;
-
-  public void remove(String key) {
-    JsMapFromStringTo.remove(this, key);
-  }
-
-  public JsArrayOfBoolean values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromStringToInt.java b/elemental/src/elemental/js/util/JsMapFromStringToInt.java
deleted file mode 100644
index d185a4e..0000000
--- a/elemental/src/elemental/js/util/JsMapFromStringToInt.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromStringToInt;
-
-/**
- * JavaScript native implementation of {@link MapFromStringToInt}.
- */
-@Deprecated
-public final class JsMapFromStringToInt extends JavaScriptObject implements MapFromStringToInt {
-
-  /**
-   * Create a new empty map instance.
-   */
-  public static native <T> JsMapFromStringToInt create() /*-{
-    return Object.create(null);
-  }-*/;
-
-  protected JsMapFromStringToInt() {
-  }
-
-  public native int get(String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return this[p];
-  }-*/;
-
-  public boolean hasKey(String key) {
-    return JsMapFromStringTo.hasKey(this, key);
-  }
-
-  public JsArrayOfString keys() {
-    return JsMapFromStringTo.keys(this);
-  }
-
-  public native void put(String key, int value) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    this[p] = value;
-  }-*/;
-
-  public void remove(String key) {
-    JsMapFromStringTo.remove(this, key);
-  }
-
-  public JsArrayOfInt values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromStringToNumber.java b/elemental/src/elemental/js/util/JsMapFromStringToNumber.java
deleted file mode 100644
index 0e6ce5e..0000000
--- a/elemental/src/elemental/js/util/JsMapFromStringToNumber.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromStringToNumber;
-
-/**
- * A JavaScript native implementation of {@link MapFromStringToNumber}.
- */
-@Deprecated
-public final class JsMapFromStringToNumber extends JavaScriptObject
-    implements MapFromStringToNumber {
-
-  /**
-   * Create a new empty map instance.
-   */
-  public static native <T> JsMapFromStringToNumber create() /*-{
-    return Object.create(null);
-  }-*/;
-
-  protected JsMapFromStringToNumber() {
-  }
-
-  public native double get(String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return this[p];
-  }-*/;
-
-  public boolean hasKey(String key) {
-    return JsMapFromStringTo.hasKey(this, key);
-  }
-
-  public JsArrayOfString keys() {
-    return JsMapFromStringTo.keys(this);
-  }
-
-  public native void put(String key, double value) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    this[p] = value;
-  }-*/;
-
-  public void remove(String key) {
-    JsMapFromStringTo.remove(this, key);
-  }
-
-  public JsArrayOfNumber values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMapFromStringToString.java b/elemental/src/elemental/js/util/JsMapFromStringToString.java
deleted file mode 100644
index 9a8cb05..0000000
--- a/elemental/src/elemental/js/util/JsMapFromStringToString.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-import elemental.util.MapFromStringToString;
-
-/**
- * A JavaScript native implementation of {@link MapFromStringToString}.
- */
-@Deprecated
-public final class JsMapFromStringToString extends JavaScriptObject
-    implements MapFromStringToString {
-
-  /**
-   * Create a new empty map instance.
-   */
-  public static native <T> JsMapFromStringToString create() /*-{
-    return Object.create(null);
-  }-*/;
-
-  protected JsMapFromStringToString() {
-  }
-
-  public native String get(String key) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    return this[p];
-  }-*/;
-
-  public boolean hasKey(String key) {
-    return JsMapFromStringTo.hasKey(this, key);
-  }
-
-  public JsArrayOfString keys() {
-    return JsMapFromStringTo.keys(this);
-  }
-
-  public native void put(String key, String value) /*-{
-    var p = @elemental.js.util.JsMapFromStringTo::propertyForKey(Ljava/lang/String;)(key);
-    this[p] = value;
-  }-*/;
-
-  public void remove(String key) {
-    JsMapFromStringTo.remove(this, key);
-  }
-
-  public JsArrayOfString values() {
-    return JsMapFromStringTo.values(this);
-  }
-}
diff --git a/elemental/src/elemental/js/util/JsMappable.java b/elemental/src/elemental/js/util/JsMappable.java
deleted file mode 100644
index ba4567a..0000000
--- a/elemental/src/elemental/js/util/JsMappable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2012 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-import elemental.util.*;
-
-/**
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public class JsMappable extends JsElementalBase implements Mappable {
-  protected JsMappable() {}
-}
diff --git a/elemental/src/elemental/js/util/Json.java b/elemental/src/elemental/js/util/Json.java
deleted file mode 100644
index 9910a21..0000000
--- a/elemental/src/elemental/js/util/Json.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptObject;
-
-/**
- * A static API to the browser's JSON object.
- * TODO(knorton) : Remove this when generated DOM bindings are submitted. 
- */
-@Deprecated
-public class Json {
-  /**
-   * Parse a string containing JSON into a {@link JavaScriptObject}.
-   *
-   * @param <T> the overlay type to expect from the parse
-   * @param jsonAsString
-   * @return a JavaScript object constructed from the parse
-   */
-  public native static <T extends JavaScriptObject> T parse(String jsonAsString) /*-{
-    return JSON.parse(jsonAsString);
-  }-*/;
-
-  /**
-   * Convert a {@link JavaScriptObject} into a string representation.
-   *
-   * @param json a JavaScript object to be converted to a string
-   * @return JSON in string representation
-   */
-  public native static String stringify(JavaScriptObject json) /*-{
-    return JSON.stringify(json);
-  }-*/;
-
-  private Json() {
-  }
-}
diff --git a/elemental/src/elemental/js/util/Numbers.java b/elemental/src/elemental/js/util/Numbers.java
deleted file mode 100644
index ab22fdb..0000000
--- a/elemental/src/elemental/js/util/Numbers.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-/**
- * Utility class for miscellaneous numeric stuff.
- */
-@Deprecated
-public class Numbers {
-  /**
-   * Converts a <code>double</code> to a {@link String} with a specified number
-   * of decimal points.
-   * 
-   * @param number the number to be convert to a string
-   * @param n number of decimal points
-   * @return string representation of the number
-   */
-  public static native String toFixed(double number, int n) /*-{
-    return number.toFixed(n);
-  }-*/;
-
-  /**
-   * Converts a <code>double</code> to a {@link String} representing the integer
-   * floor value.
-   * 
-   * @param number the number to convert to a string
-   * @return string representation of the number
-   */
-  public static String toInt(double number) {
-    return toFixed(number, 0);
-  }
-
-  private Numbers() {
-    // You cannot have one of these, they're like Swedish Fish in the mini kitchens.
-  }
-}
diff --git a/elemental/src/elemental/js/util/StringUtil.java b/elemental/src/elemental/js/util/StringUtil.java
deleted file mode 100644
index 0c0697c..0000000
--- a/elemental/src/elemental/js/util/StringUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import elemental.util.ArrayOfString;
-
-/**
- * Miscellaneous {@link String} utilities. Some methods overlap with what is
- * supported directly in {@link String} in order to use the proper elemental
- * types.
- */
-@Deprecated
-public class StringUtil {
-  
-  /**
-   * Splits a {@link String} into an array of substrings.
-   */
-  public native static ArrayOfString split(String s, String regexp) /*-{
-    return s.split(regexp);
-  }-*/;
-
-  /**
-   *  Splits a {@link String} into an array of substrings.
-   */
-  public native static ArrayOfString split(String s, String regexp, int limit) /*-{
-    return s.split(regexp, limit);
-  }-*/;
-
-  private StringUtil() {
-  }
-}
diff --git a/elemental/src/elemental/js/util/Xhr.java b/elemental/src/elemental/js/util/Xhr.java
deleted file mode 100644
index 050cc61..0000000
--- a/elemental/src/elemental/js/util/Xhr.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.core.client.JavaScriptException;
-import com.google.gwt.xhr.client.ReadyStateChangeHandler;
-import com.google.gwt.xhr.client.XMLHttpRequest;
-
-
-import elemental.client.Browser;
-import elemental.html.Window;
-
-/**
- * A Simpler way to use {@link XMLHttpRequest}.
- */
-@Deprecated
-public class Xhr {
-  /**
-   * Interface for getting notified when an XHR successfully completes, or
-   * errors out.
-   */
-  @Deprecated
-  public interface Callback {
-    void onFail(XMLHttpRequest xhr);
-
-    void onSuccess(XMLHttpRequest xhr);
-  }
-
-  private static class Handler implements ReadyStateChangeHandler {
-    private final Callback callback;
-
-    private Handler(Callback callback) {
-      this.callback = callback;
-    }
-
-    public void onReadyStateChange(XMLHttpRequest xhr) {
-      if (xhr.getReadyState() == XMLHttpRequest.DONE) {
-        if (xhr.getStatus() == 200) {
-          callback.onSuccess(xhr);
-          xhr.clearOnReadyStateChange();
-          return;
-        }
-        callback.onFail(xhr);
-        xhr.clearOnReadyStateChange();
-      }
-    }
-  }
-
-  /**
-   * Send a GET request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param url
-   * @param callback
-   */
-  public static void get(String url, Callback callback) {
-    request(create(), "GET", url, callback);
-  }
-
-  /**
-   * Send a GET request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param window the window object used to access the XMLHttpRequest
-   *        constructor
-   * @param url
-   * @param callback
-   */
-  public static void get(Window window, String url, Callback callback) {
-    request(create(window), "GET", url, callback);
-  }
-
-  /**
-   * Send a HEAD request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param url
-   * @param callback
-   */
-  public static void head(String url, Callback callback) {
-    request(create(), "HEAD", url, callback);
-  }
-
-  /**
-   * Send a HEAD request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param window the window object used to access the XMLHttpRequest
-   *        constructor
-   * @param url
-   * @param callback
-   */
-  public static void head(Window window, String url, Callback callback) {
-    request(create(window), "HEAD", url, callback);
-  }
-
-  /**
-   * Send a POST request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param url
-   * @param requestData the data to be passed to XMLHttpRequest.send
-   * @param contentType a value for the Content-Type HTTP header
-   * @param callback
-   */
-  public static void post(String url, String requestData, String contentType, Callback callback) {
-    request(create(), "POST", url, requestData, contentType, callback);
-  }
-
-  /**
-   * Send a POST request to the <code>url</code> and dispatch updates to the
-   * <code>callback</code>.
-   *
-   * @param window the window object used to access the XMLHttpRequest
-   *        constructor
-   * @param url
-   * @param requestData the data to be passed to XMLHttpRequest.send
-   * @param contentType a value for the Content-Type HTTP header
-   * @param callback
-   */
-  public static void post(
-      Window window, String url, String requestData, String contentType, Callback callback) {
-    request(create(window), "POST", url, requestData, contentType, callback);
-  }
-
-  private static XMLHttpRequest create() {
-    return create(Browser.getWindow());
-  }
-
-  /**
-   * Replacement for {@link XMLHttpRequest#create()} that allows better control
-   * of which window object is used to access the XMLHttpRequest constructor.
-   */
-  private static native XMLHttpRequest create(Window window) /*-{
-    return new window.XMLHttpRequest();
-  }-*/;
-
-  private static void request(XMLHttpRequest xhr,
-      String method,
-      String url,
-      String requestData,
-      String contentType,
-      Callback callback) {
-    try {
-      xhr.setOnReadyStateChange(new Handler(callback));
-      xhr.open(method, url);
-      xhr.setRequestHeader("Content-type", contentType);
-      xhr.send(requestData);
-    } catch (JavaScriptException e) {
-      // Just fail.
-      callback.onFail(xhr);
-      xhr.clearOnReadyStateChange();
-    }
-  }
-
-  private static void request(XMLHttpRequest xhr,
-      String method,
-      String url,
-      final Callback callback) {
-    try {
-      xhr.setOnReadyStateChange(new Handler(callback));
-      xhr.open(method, url);
-      xhr.send();
-    } catch (JavaScriptException e) {
-      // Just fail.
-      callback.onFail(xhr);
-      xhr.clearOnReadyStateChange();
-    }
-  }
-}
diff --git a/elemental/src/elemental/json/Json.java b/elemental/src/elemental/json/Json.java
deleted file mode 100644
index 6b57d60..0000000
--- a/elemental/src/elemental/json/Json.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-import elemental.json.impl.JreJsonFactory;
-
-/**
- * Vends out implementation of JsonFactory.
- */
-@Deprecated
-public class Json {
-
-  public static JsonString create(String string) {
-    return instance().create(string);
-  }
-
-  public static JsonBoolean create(boolean bool) {
-    return instance().create(bool);
-  }
-
-  public static JsonArray createArray() {
-    return instance().createArray();
-  }
-
-  public static JsonNull createNull() {
-    return instance().createNull();
-  }
-
-  public static JsonNumber create(double number) {
-    return instance().create(number);
-  }
-
-  public static JsonObject createObject() {
-    return instance().createObject();
-  }
-  public static JsonFactory instance() {
-    return new JreJsonFactory();
-  }
-
-  public static JsonObject parse(String jsonString) {
-    return instance().parse(jsonString);
-  }
-}
diff --git a/elemental/src/elemental/json/JsonArray.java b/elemental/src/elemental/json/JsonArray.java
deleted file mode 100644
index 0464ff2..0000000
--- a/elemental/src/elemental/json/JsonArray.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents a Json array.
- */
-@Deprecated
-public interface JsonArray extends JsonValue {
-
-  /**
-   * Return the ith element of the array.
-   */
-  <T extends JsonValue> T get(int index);
-
-  /**
-   * Return the ith element of the array (uncoerced) as a JsonArray. If the type is not an array,
-   * this can result in runtime errors.
-   */
-  JsonArray getArray(int index);
-
-  /**
-   * Return the ith element of the array (uncoerced) as a boolean. If the type is not a boolean,
-   * this can result in runtime errors.
-   */
-  boolean getBoolean(int index);
-
-  /**
-   * Return the ith element of the array (uncoerced) as a number. If the type is not a number, this
-   * can result in runtime errors.
-   */
-  double getNumber(int index);
-
-  /**
-   * Return the ith element of the array (uncoerced) as a JsonObject If the type is not an object,,
-   * this can result in runtime errors.
-   */
-  JsonObject getObject(int index);
-
-  /**
-   * Return the ith element of the array (uncoerced) as a String. If the type is not a String, this
-   * can result in runtime errors.
-   */
-  String getString(int index);
-
-  /**
-   * Length of the array.
-   */
-  int length();
-
-  /**
-   * Remove an element of the array at a particular index.
-   */
-  void remove(int index);
-
-  /**
-   * Set the value at index to be a given value.
-   */
-  void set(int index, JsonValue value);
-
-  /**
-   * Set the value at index to be a String value.
-   */
-  void set(int index, String string);
-
-  /**
-   * Set the value at index to be a number value.
-   */
-  void set(int index, double number);
-
-  /**
-   * Set the value at index to be a boolean value.
-   */
-  void set(int index, boolean bool);
-}
diff --git a/elemental/src/elemental/json/JsonBoolean.java b/elemental/src/elemental/json/JsonBoolean.java
deleted file mode 100644
index fe8ccc6..0000000
--- a/elemental/src/elemental/json/JsonBoolean.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents a Json boolean.
- */
-@Deprecated
-public interface JsonBoolean extends JsonValue {
-  boolean getBoolean();
-}
diff --git a/elemental/src/elemental/json/JsonException.java b/elemental/src/elemental/json/JsonException.java
deleted file mode 100644
index d4008f2..0000000
--- a/elemental/src/elemental/json/JsonException.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * A exception representing an error in parsing or serializing Json.
- */
-@Deprecated
-public class JsonException extends RuntimeException {
-
-  public JsonException(String s) {
-    super(s);
-  }
-}
diff --git a/elemental/src/elemental/json/JsonFactory.java b/elemental/src/elemental/json/JsonFactory.java
deleted file mode 100644
index 97a387d..0000000
--- a/elemental/src/elemental/json/JsonFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Factory interface for parsing and creating JSON objects.
- */
-@Deprecated
-public interface JsonFactory {
-
-  /**
-   * Create a JsonString from a Java String.
-   *
-   * @param string a Java String
-   * @return the parsed JsonString
-   */
-  JsonString create(String string);
-
-  /**
-   * Create a JsonNumber from a Java double.
-   *
-   * @param number a Java double
-   * @return the parsed JsonNumber
-   */
-  JsonNumber create(double number);
-
-  /**
-   * Create a JsonBoolean from a Java boolean.
-   *
-   * @param bool a Java boolean
-   * @return the parsed JsonBoolean
-   */
-  JsonBoolean create(boolean bool);
-
-  /**
-   * Create an empty JsonArray.
-   *
-   * @return a new JsonArray
-   */
-  elemental.json.JsonArray createArray();
-
-  /**
-   * Create a JsonNull.
-   *
-   * @return a JsonNull instance
-   */
-  JsonNull createNull();
-
-  /**
-   * Create an empty JsonObject.
-   *
-   * @return a new JsonObject
-   */
-  JsonObject createObject();
-
-  /**
-   * Parse a String in JSON format and return a JsonValue of the appropriate
-   * type.
-   *
-   * @param jsonString a String in JSON format
-   * @return a parsed JsonValue
-   */
-  <T extends JsonValue> T parse(String jsonString) throws elemental.json.JsonException;
-}
diff --git a/elemental/src/elemental/json/JsonNull.java b/elemental/src/elemental/json/JsonNull.java
deleted file mode 100644
index 95fa8e3..0000000
--- a/elemental/src/elemental/json/JsonNull.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents the Json null value.
- */
-@Deprecated
-public interface JsonNull extends JsonValue {
-}
diff --git a/elemental/src/elemental/json/JsonNumber.java b/elemental/src/elemental/json/JsonNumber.java
deleted file mode 100644
index 8614e4a..0000000
--- a/elemental/src/elemental/json/JsonNumber.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents a Json number value.
- */
-@Deprecated
-public interface JsonNumber extends JsonValue {
-  double getNumber();
-}
diff --git a/elemental/src/elemental/json/JsonObject.java b/elemental/src/elemental/json/JsonObject.java
deleted file mode 100644
index e0a1c69..0000000
--- a/elemental/src/elemental/json/JsonObject.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents a Json object.
- */
-@Deprecated
-public interface JsonObject extends JsonValue {
-
-  /**
-   * Return the element (uncoerced) as a JsonValue.
-   */
-  <T extends JsonValue> T get(String key);
-
-  /**
-   * Return the element (uncoerced) as a JsonArray. If the type is not an array,
-   * this can result in runtime errors.
-   */
-  JsonArray getArray(String key);
-
-  /**
-   * Return the element (uncoerced) as a boolean. If the type is not a boolean,
-   * this can result in runtime errors.
-   */
-  boolean getBoolean(String key);
-
-  /**
-   * Return the element (uncoerced) as a number. If the type is not a number, this
-   * can result in runtime errors.
-   */
-  double getNumber(String key);
-
-  /**
-   * Return the element (uncoerced) as a JsonObject If the type is not an object,,
-   * this can result in runtime errors.
-   */
-  JsonObject getObject(String key);
-
-  /**
-   * Return the element (uncoerced) as a String. If the type is not a String, this
-   * can result in runtime errors.
-   */
-  String getString(String key);
-
-  /**
-   * All keys of the object.
-   */
-  String[] keys();
-
-  /**
-   * Set a given key to the given value.
-   */
-  void put(String key, JsonValue value);
-
-  /**
-   * Set a given key to the given String value.
-   */
-  void put(String key, String value);
-
-  /**
-   * Set a given key to the given double value.
-   */
-  void put(String key, double value);
-
-  /**
-   * Set a given key to the given boolean value.
-   */
-  void put(String key, boolean bool);
-
-  /**
-   * Test whether a given key has present.
-   */
-  boolean hasKey(String key);
-
-  /**
-   * Remove a given key and associated value from the object.
-   * @param key
-   */
-  void remove(String key);
-}
diff --git a/elemental/src/elemental/json/JsonString.java b/elemental/src/elemental/json/JsonString.java
deleted file mode 100644
index de35df7..0000000
--- a/elemental/src/elemental/json/JsonString.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents a Json String value.
- */
-@Deprecated
-public interface JsonString extends JsonValue {
-  String getString();
-}
diff --git a/elemental/src/elemental/json/JsonType.java b/elemental/src/elemental/json/JsonType.java
deleted file mode 100644
index 8bf8e1d..0000000
--- a/elemental/src/elemental/json/JsonType.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Represents the type of the underlying JsonValue.
- */
-@Deprecated
-public enum JsonType {
-  OBJECT, ARRAY, STRING, NUMBER, BOOLEAN, NULL;
-}
diff --git a/elemental/src/elemental/json/JsonValue.java b/elemental/src/elemental/json/JsonValue.java
deleted file mode 100644
index d9319c4..0000000
--- a/elemental/src/elemental/json/JsonValue.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-import java.io.Serializable;
-
-/**
- * Base interface for all Json values.
- */
-@Deprecated
-public interface JsonValue extends Serializable {
-
-  /**
-   * Coerces underlying value to boolean according to the rules of Javascript coercion.
-   */
-  boolean asBoolean();
-
-  /**
-   * Coerces the underlying value to a number according to the rules of Javascript coercion.
-   */
-  double asNumber();
-
-  /**
-   * Coerces the underlying value to a String according to the rules of JavaScript coercion.
-   */
-  String asString();
-
-  /**
-   * Returns an enumeration representing the fundamental JSON type.
-   */
-  JsonType getType();
-
-  /**
-   * Returns a serialized JSON string representing this value.
-   * @return
-   */
-  String toJson();
-
-  /**
-   * Equivalent of Javascript '==' operator comparison between two values.
-   */
-  boolean jsEquals(JsonValue value);
-
-
-  /**
-   * If used in a GWT context (dev or prod mode), converts the object to a native JavaScriptObject
-   * suitable for passing to JSNI methods. Otherwise, returns the current object in other contexts,
-   * such as server-side use.
-   */
-  Object toNative();
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonArray.java b/elemental/src/elemental/json/impl/JreJsonArray.java
deleted file mode 100644
index e8ec6d7..0000000
--- a/elemental/src/elemental/json/impl/JreJsonArray.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import elemental.json.Json;
-import elemental.json.JsonArray;
-import elemental.json.JsonBoolean;
-import elemental.json.JsonFactory;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonArray.
- */
-@Deprecated
-public class JreJsonArray extends JreJsonValue implements JsonArray {
-
-  private static final long serialVersionUID = 1L;
-
-  private transient ArrayList<JsonValue> arrayValues = new ArrayList<JsonValue>();
-
-  private transient JsonFactory factory;
-
-  public JreJsonArray(JsonFactory factory) {
-    this.factory = factory;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return true;
-  }
-
-  @Override
-  public double asNumber() {
-    switch (length()) {
-      case 0:
-        return 0;
-      case 1:
-        return get(0).asNumber();
-      default:
-        return Double.NaN;
-    }
-  }
-
-  @Override
-  public String asString() {
-    StringBuilder toReturn = new StringBuilder();
-    for (int i = 0; i < length(); i++) {
-      if (i > 0) {
-        toReturn.append(", ");
-      }
-      toReturn.append(get(i).asString());
-    }
-    return toReturn.toString();
-  }
-
-  public JsonValue get(int index) {
-    return arrayValues.get(index);
-  }
-
-  public JsonArray getArray(int index) {
-    return (JsonArray) get(index);
-  }
-
-
-  public boolean getBoolean(int index) {
-    return ((JsonBoolean) get(index)).getBoolean();
-  }
-
-  public double getNumber(int index) {
-    return ((JsonNumber) get(index)).getNumber();
-  }
-
-  public JsonObject getObject(int index) {
-    return (JsonObject) get(index);
-  }
-
-  public Object getObject() {
-    List<Object> objs = new ArrayList<Object>();
-    for (JsonValue val : arrayValues) {
-      objs.add(((JreJsonValue) val).getObject());
-    }
-    return objs;
-  }
-
-  public String getString(int index) {
-    return ((JsonString) get(index)).getString();
-  }
-
-  public JsonType getType() {
-    return elemental.json.JsonType.ARRAY;
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return getObject().equals(((JreJsonValue) value).getObject());
-  }
-
-  public int length() {
-    return arrayValues.size();
-  }
-
-  @Override
-  public void remove(int index) {
-    arrayValues.remove(index);
-  }
-
-  public void set(int index, JsonValue value) {
-    if (value == null) {
-      value = factory.createNull();
-    }
-    if (index == arrayValues.size()) {
-      arrayValues.add(index, value);
-    } else {
-      arrayValues.set(index, value);
-    }
-  }
-
-  public void set(int index, String string) {
-    set(index, factory.create(string));
-  }
-
-  public void set(int index, double number) {
-    set(index, factory.create(number));
-  }
-
-  public void set(int index, boolean bool) {
-    set(index, factory.create(bool));
-  }
-
-  public String toJson() {
-    return JsonUtil.stringify(this);
-  }
-
-  @Override
-  public void traverse(elemental.json.impl.JsonVisitor visitor,
-      elemental.json.impl.JsonContext ctx) {
-    if (visitor.visit(this, ctx)) {
-      JsonArrayContext arrayCtx = new JsonArrayContext(this);
-      for (int i = 0; i < length(); i++) {
-        arrayCtx.setCurrentIndex(i);
-        if (visitor.visitIndex(arrayCtx.getCurrentIndex(), arrayCtx)) {
-          visitor.accept(get(i), arrayCtx);
-          arrayCtx.setFirst(false);
-        }
-      }
-    }
-    visitor.endVisit(this, ctx);
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void readObject(ObjectInputStream stream)
-          throws IOException, ClassNotFoundException {
-    JreJsonArray instance = parseJson(stream);
-    this.factory = Json.instance();
-    this.arrayValues = instance.arrayValues;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.writeObject(toJson());
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonBoolean.java b/elemental/src/elemental/json/impl/JreJsonBoolean.java
deleted file mode 100644
index df47f31..0000000
--- a/elemental/src/elemental/json/impl/JreJsonBoolean.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import elemental.json.JsonBoolean;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonBoolean.
- */
-@Deprecated
-public class JreJsonBoolean extends JreJsonValue implements JsonBoolean {
-
-  private static final long serialVersionUID = 1L;
-
-  private transient boolean bool;
-  public JreJsonBoolean(boolean bool) {
-    this.bool = bool;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return getBoolean();
-  }
-
-  @Override
-  public double asNumber() {
-    return getBoolean() ? 1 : 0;
-  }
-
-  @Override
-  public String asString() {
-    return Boolean.toString(getBoolean());
-  }
-
-  public boolean getBoolean() {
-    return bool;
-  }
-
-  public Object getObject() {
-    return getBoolean();
-  }
-
-  public JsonType getType() {
-    return JsonType.BOOLEAN;
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return getObject().equals(((JreJsonValue)value).getObject());
-  }
-
-  @Override
-  public void traverse(elemental.json.impl.JsonVisitor visitor, JsonContext ctx) {
-    visitor.visit(getBoolean(), ctx);
-  }
-
-  public String toJson() throws IllegalStateException {
-    return String.valueOf(bool);
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void readObject(ObjectInputStream stream)
-          throws IOException, ClassNotFoundException {
-    JreJsonBoolean instance = parseJson(stream);
-    this.bool = instance.bool;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.writeObject(toJson());
-  }
-
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonFactory.java b/elemental/src/elemental/json/impl/JreJsonFactory.java
deleted file mode 100644
index 7f5a9f3..0000000
--- a/elemental/src/elemental/json/impl/JreJsonFactory.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.JsonArray;
-import elemental.json.JsonBoolean;
-import elemental.json.JsonException;
-import elemental.json.JsonFactory;
-import elemental.json.JsonNull;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonValue;
-
-
-/**
- * Implementation of JsonFactory interface using org.json library.
- */
-@Deprecated
-public class JreJsonFactory implements JsonFactory {
-
-  public JsonString create(String string) {
-    assert string != null;
-    return new JreJsonString(string);
-  }
-
-  public JsonNumber create(double number) {
-    return new JreJsonNumber(number);
-  }
-
-  public JsonBoolean create(boolean bool) {
-    return new JreJsonBoolean(bool);
-  }
-
-  public JsonArray createArray() {
-    return new JreJsonArray(this);
-  }
-
-  public JsonNull createNull() {
-    return JreJsonNull.NULL_INSTANCE;
-  }
-
-  public JsonObject createObject() {
-    return new JreJsonObject(this);
-  }
-
-  public <T extends JsonValue> T parse(String jsonString) throws JsonException {
-    if (jsonString.startsWith("(") && jsonString.endsWith(")")) {
-       // some clients send in (json) expecting an eval is required
-       jsonString = jsonString.substring(1, jsonString.length() - 1);
-    }
-    return new JsonTokenizer(this, jsonString).nextValue();
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonNull.java b/elemental/src/elemental/json/impl/JreJsonNull.java
deleted file mode 100644
index d8d1bbb..0000000
--- a/elemental/src/elemental/json/impl/JreJsonNull.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.ObjectStreamException;
-
-import elemental.json.JsonNull;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonObject.
- */
-@Deprecated
-public class JreJsonNull extends JreJsonValue implements JsonNull {
-
-  private static final long serialVersionUID = 1L;
-
-  public static final JsonNull NULL_INSTANCE = new JreJsonNull();
-
-  @Override
-  public double asNumber() {
-    return 0;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return false;
-  }
-
-  @Override
-  public String asString() {
-    return "null";
-  }
-
-  public Object getObject() {
-    return null;
-  }
-
-  public JsonType getType() {
-    return JsonType.NULL;
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return value == null || value.getType() == JsonType.NULL;
-  }
-
-  @Override
-  public void traverse(JsonVisitor visitor, elemental.json.impl.JsonContext ctx) {
-    visitor.visitNull(ctx);
-  }
-
-  public String toJson() {
-    return null;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private Object readResolve() throws ObjectStreamException {
-    return NULL_INSTANCE;
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonNumber.java b/elemental/src/elemental/json/impl/JreJsonNumber.java
deleted file mode 100644
index d42b6dd..0000000
--- a/elemental/src/elemental/json/impl/JreJsonNumber.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import elemental.json.JsonNumber;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonNumber.
- */
-@Deprecated
-public class JreJsonNumber extends JreJsonValue implements JsonNumber {
-
-  private static final long serialVersionUID = 1L;
-
-  private transient double number;
-
-  public JreJsonNumber(double number) {
-    this.number = number;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return Double.isNaN(getNumber()) || Math.abs(getNumber()) == 0.0 ? false : true;
-  }
-
-  @Override
-  public double asNumber() {
-    return getNumber();
-  }
-
-  @Override
-  public String asString() {
-    return toJson();
-  }
-
-  public double getNumber() {
-    return number;
-  }
-
-  public Object getObject() {
-    return getNumber();
-  }
-
-  public JsonType getType() {
-    return JsonType.NUMBER;
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return getObject().equals(((JreJsonValue)value).getObject());
-  }
-
-  @Override
-  public void traverse(JsonVisitor visitor, elemental.json.impl.JsonContext ctx) {
-    visitor.visit(getNumber(), ctx);
-  }
-
-  public String toJson() {
-    if (Double.isInfinite(number) || Double.isNaN(number)) {
-      return "null";
-    }
-    String toReturn = String.valueOf(number);
-    if (toReturn.endsWith(".0")) {
-      toReturn = toReturn.substring(0, toReturn.length() - 2);
-    }
-    return toReturn;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void readObject(ObjectInputStream stream)
-          throws IOException, ClassNotFoundException {
-    JreJsonNumber instance = parseJson(stream);
-    this.number = instance.number;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.writeObject(toJson());
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonObject.java b/elemental/src/elemental/json/impl/JreJsonObject.java
deleted file mode 100644
index 6884ba0..0000000
--- a/elemental/src/elemental/json/impl/JreJsonObject.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import elemental.json.Json;
-import elemental.json.JsonArray;
-import elemental.json.JsonBoolean;
-import elemental.json.JsonFactory;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonString;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonObject.
- */
-@Deprecated
-public class JreJsonObject extends JreJsonValue implements JsonObject {
-
-  private static final long serialVersionUID = 1L;
-
-  private static List<String> stringifyOrder(String[] keys) {
-    List<String> toReturn = new ArrayList<String>();
-    List<String> nonNumeric = new ArrayList<String>();
-    for (String key : keys) {
-      if (key.matches("\\d+")) {
-        toReturn.add(key);
-      } else {
-        nonNumeric.add(key);
-      }
-    }
-    Collections.sort(toReturn);
-    toReturn.addAll(nonNumeric);
-    return toReturn;
-  }
-
-  private transient JsonFactory factory;
-  private transient Map<String, JsonValue> map = new LinkedHashMap<String, JsonValue>();
-
-  public JreJsonObject(JsonFactory factory) {
-    this.factory = factory;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return true;
-  }
-
-  @Override
-  public double asNumber() {
-    return Double.NaN;
-  }
-
-  @Override
-  public String asString() {
-    return "[object Object]";
-  }
-
-  public JsonValue get(String key) {
-    return map.get(key);
-  }
-
-  public JsonArray getArray(String key) {
-    return (JsonArray) get(key);
-  }
-
-
-  public boolean getBoolean(String key) {
-    return ((JsonBoolean) get(key)).getBoolean();
-  }
-
-  public double getNumber(String key) {
-    return ((JsonNumber) get(key)).getNumber();
-  }
-
-  public JsonObject getObject(String key) {
-    return (JsonObject) get(key);
-  }
-
-  public Object getObject() {
-    Map<String, Object> obj = new HashMap<String, Object>();
-    for (Map.Entry<String, JsonValue> e : map.entrySet()) {
-      obj.put(e.getKey(), ((JreJsonValue) e.getValue()).getObject());
-    }
-    return obj;
-  }
-
-
-  public String getString(String key) {
-    return ((JsonString) get(key)).getString();
-  }
-
-  public JsonType getType() {
-    return JsonType.OBJECT;
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.containsKey(key);
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return getObject().equals(((JreJsonValue) value).getObject());
-  }
-
-  public String[] keys() {
-    return map.keySet().toArray(new String[map.size()]);
-  }
-
-  public void put(String key, JsonValue value) {
-    if (value == null) {
-      value = factory.createNull();
-    }
-    map.put(key, value);
-  }
-
-  public void put(String key, String value) {
-    put(key, factory.create(value));
-  }
-
-  public void put(String key, double value) {
-    put(key, factory.create(value));
-  }
-
-  public void put(String key, boolean bool) {
-    put(key, factory.create(bool));
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  public void set(String key, JsonValue value) {
-      put(key, value);
-  }
-
-  public String toJson() {
-    return JsonUtil.stringify(this);
-  }
-
-  public String toString() {
-    return toJson();
-  }
-
-  @Override
-  public void traverse(JsonVisitor visitor, JsonContext ctx) {
-    if (visitor.visit(this, ctx)) {
-      JsonObjectContext objCtx = new JsonObjectContext(this);
-      for (String key : stringifyOrder(keys())) {
-        objCtx.setCurrentKey(key);
-        if (visitor.visitKey(objCtx.getCurrentKey(), objCtx)) {
-          visitor.accept(get(key), objCtx);
-          objCtx.setFirst(false);
-        }
-      }
-    }
-    visitor.endVisit(this, ctx);
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void readObject(ObjectInputStream stream)
-          throws IOException, ClassNotFoundException {
-    JreJsonObject instance = parseJson(stream);
-    this.factory = Json.instance();
-    this.map = instance.map;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.writeObject(toJson());
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonString.java b/elemental/src/elemental/json/impl/JreJsonString.java
deleted file mode 100644
index 8dbde87..0000000
--- a/elemental/src/elemental/json/impl/JreJsonString.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-
-import elemental.json.JsonString;
-import elemental.json.JsonType;
-import elemental.json.JsonValue;
-
-/**
- * Server-side implementation of JsonString.
- */
-@Deprecated
-public class JreJsonString extends JreJsonValue implements JsonString {
-
-  private static final long serialVersionUID = 1L;
-
-  private transient String string;
-
-  public JreJsonString(String string) {
-    this.string = string;
-  }
-
-  @Override
-  public boolean asBoolean() {
-    return !getString().isEmpty();
-  }
-
-  @Override
-  public double asNumber() {
-    try {
-      if (asString().isEmpty()) {
-        return 0.0;
-      } else {
-        return Double.parseDouble(asString());
-      }
-    } catch(NumberFormatException nfe) {
-      return Double.NaN;
-    }
-  }
-
-  @Override
-  public String asString() {
-    return getString();
-  }
-
-  public Object getObject() {
-    return getString();
-  }
-
-  public String getString() {
-    return string;
-  }
-
-  public JsonType getType() {
-    return JsonType.STRING;
-  }
-
-  @Override
-  public boolean jsEquals(JsonValue value) {
-    return getObject().equals(((JreJsonValue)value).getObject());
-  }
-
-  @Override
-  public void traverse(JsonVisitor visitor, JsonContext ctx) {
-    visitor.visit(getString(), ctx);
-  }
-
-  public String toJson() throws IllegalStateException {
-    return JsonUtil.quote(getString());
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void readObject(ObjectInputStream stream) throws IOException,
-      ClassNotFoundException {
-    JreJsonString instance = parseJson(stream);
-    this.string = instance.string;
-  }
-
-  @com.google.gwt.core.shared.GwtIncompatible
-  private void writeObject(ObjectOutputStream stream) throws IOException {
-    stream.writeObject(toJson());
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JreJsonValue.java b/elemental/src/elemental/json/impl/JreJsonValue.java
deleted file mode 100644
index 0e84bc5..0000000
--- a/elemental/src/elemental/json/impl/JreJsonValue.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-
-import elemental.json.Json;
-import elemental.json.JsonValue;
-
-/**
- * JRE (non-Client) implementation of JreJsonValue.
- */
-@Deprecated
-public abstract class JreJsonValue implements JsonValue {
-  public abstract Object getObject();
-  public abstract void traverse(JsonVisitor visitor, JsonContext ctx);
-
-  @Override
-  public Object toNative() {
-    return this;
-  }
-
-  protected static <T extends JsonValue> T parseJson(ObjectInputStream stream)
-    throws ClassNotFoundException, IOException {
-    String jsonString = (String) stream.readObject();
-    return Json.instance().parse(jsonString);
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonArrayContext.java b/elemental/src/elemental/json/impl/JsonArrayContext.java
deleted file mode 100644
index 3c2613c..0000000
--- a/elemental/src/elemental/json/impl/JsonArrayContext.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.*;
-
-/**
- * A {@link JsonContext} with integer based location context.
- */
-@Deprecated
-class JsonArrayContext extends JsonContext {
-
-  int currentIndex = 0;
-
-  public JsonArrayContext(JsonArray array) {
-    super(array);
-  }
-
-  public JsonArray array() {
-    return (JsonArray) getValue();
-  }
-
-  public int getCurrentIndex() {
-    return currentIndex;
-  }
-  @Override
-  public void removeMe() {
-    array().remove(getCurrentIndex());
-  }
-  
-  @Override
-  public void replaceMe(double d) {
-    array().set(getCurrentIndex(), d);
-  }
-
-  @Override
-  public void replaceMe(String d) {
-    array().set(getCurrentIndex(), d);
-  }
-
-  @Override
-  public void replaceMe(boolean d) {
-    array().set(getCurrentIndex(), d);
-  }
-  
-  @Override
-  public void replaceMe(JsonValue value) {
-    array().set(getCurrentIndex(), value);
-  }
-
-  public void setCurrentIndex(int currentIndex) {
-    this.currentIndex = currentIndex;
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonContext.java b/elemental/src/elemental/json/impl/JsonContext.java
deleted file mode 100644
index 5e3ebe1..0000000
--- a/elemental/src/elemental/json/impl/JsonContext.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.JsonValue;
-
-/**
- * Represents the current location where a value is stored, and allows
- * the value's replacement or deletion.
- */
-@Deprecated
-abstract class JsonContext {
-
-  private JsonValue value;
-
-  private boolean isFirst = true;
-
-  JsonContext(JsonValue value) {
-    this.value = value;
-  }
-
-  /**
-   * Return the underlying JsonValue (Array or Object) that backs the
-   * context.
-   */
-  public JsonValue getValue() {
-    return value;
-  }
-
-  /**
-   * Whether or not the current context location within the value is the first
-   * key or array index.
-   */
-  public boolean isFirst() {
-    return isFirst;
-  }
-
-  /**
-   * Remove the current array index or key from the underlying json.
-   */
-  public abstract void removeMe();
-
-  /**
-   * Replace the current location's value with a double.
-   */
-  public abstract void replaceMe(double d);
-
-  /**
-   * Replace the current location's value with a String.
-   */
-  public abstract void replaceMe(String d);
-
-  /**
-   * Replace the current location's value with a boolean.
-   */
-  public abstract void replaceMe(boolean d);
-
-  /**
-   * Replace the current location's value with a JsonValue.
-   */
-  public abstract void replaceMe(JsonValue value);
-
-  public void setFirst(boolean first) {
-    isFirst = first;
-  }
-
-  void setValue(JsonValue value) {
-    this.value = value;
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonObjectContext.java b/elemental/src/elemental/json/impl/JsonObjectContext.java
deleted file mode 100644
index 912feb2..0000000
--- a/elemental/src/elemental/json/impl/JsonObjectContext.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.*;
-
-/**
- * A {@link JsonContext} with String based location index.
- */
-@Deprecated
-class JsonObjectContext extends JsonContext {
-
-  String currentKey;
-
-  public JsonObjectContext(JsonObject value) {
-    super(value);
-  }
-
-  private JsonObject object() {
-    return (JsonObject) getValue();
-  }
-  public String getCurrentKey() {
-    return currentKey;
-  }
-
-  @Override
-  public void removeMe() {
-    object().remove(getCurrentKey());
-  }
-
-  @Override
-  public void replaceMe(double d) {
-    object().put(getCurrentKey(), d);
-  }
-
-  @Override
-  public void replaceMe(String d) {
-    object().put(getCurrentKey(), d);
-  }
-
-  @Override
-  public void replaceMe(boolean d) {
-    object().put(getCurrentKey(), d);
-  }
-
-  @Override
-  public void replaceMe(JsonValue value) {
-    object().put(getCurrentKey(), value);
-  }
-
-  public void setCurrentKey(String currentKey) {
-    this.currentKey = currentKey;
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonTokenizer.java b/elemental/src/elemental/json/impl/JsonTokenizer.java
deleted file mode 100644
index 2c37b61..0000000
--- a/elemental/src/elemental/json/impl/JsonTokenizer.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.JsonArray;
-import elemental.json.JsonException;
-import elemental.json.JsonFactory;
-import elemental.json.JsonNumber;
-import elemental.json.JsonObject;
-import elemental.json.JsonValue;
-
-/**
- * Implementation of parsing a JSON string into instances of {@link
- * com.google.gwt.dev.json.JsonValue}.
- */
-@Deprecated
-class JsonTokenizer {
-
-  private static final int INVALID_CHAR = -1;
-
-  private static final String STOPCHARS = ",:]}/\\\"[{;=#";
-
-  private JsonFactory jsonFactory;
-
-  private boolean lenient = true;
-
-  private int pushBackBuffer = INVALID_CHAR;
-
-  private final String json;
-  private int position = 0;
-
-  JsonTokenizer(JreJsonFactory serverJsonFactory, String json) {
-    this.jsonFactory = serverJsonFactory;
-    this.json = json;
-  }
-
-  void back(char c) {
-    assert pushBackBuffer == INVALID_CHAR;
-    pushBackBuffer = c;
-  }
-
-  void back(int c) {
-    back((char) c);
-  }
-
-  int next() {
-    if (pushBackBuffer != INVALID_CHAR) {
-      final int c = pushBackBuffer;
-      pushBackBuffer = INVALID_CHAR;
-      return c;
-    }
-
-    return position < json.length() ? json.charAt(position++) : INVALID_CHAR;
-  }
-
-  String next(int n) throws JsonException {
-    if (n == 0) {
-      return "";
-    }
-
-    char[] buffer = new char[n];
-    int pos = 0;
-
-    if (pushBackBuffer != INVALID_CHAR) {
-      buffer[0] = (char) pushBackBuffer;
-      pos = 1;
-      pushBackBuffer = INVALID_CHAR;
-    }
-
-    int len;
-    while ((pos < n) && ((len = read(buffer, pos, n - pos)) != -1)) {
-      pos += len;
-    }
-
-    if (pos < n) {
-      throw new JsonException("TODO"/* TODO(knorton): Add message. */);
-    }
-
-    return String.valueOf(buffer);
-  }
-
-  int nextNonWhitespace() {
-    while (true) {
-      final int c = next();
-      if (!Character.isSpace((char) c)) {
-        return c;
-      }
-    }
-  }
-
-  String nextString(int startChar) throws JsonException {
-    final StringBuilder buffer = new StringBuilder();
-    int c = next();
-    assert c == '"' || (lenient && c == '\'');
-    while (true) {
-      c = next();
-      switch (c) {
-        case '\r':
-        case '\n':
-          throw new JsonException("");
-        case INVALID_CHAR:
-          throw new JsonException("Invalid string: closing " + startChar + " is not found");
-        case '\\':
-          c = next();
-          switch (c) {
-            case 'b':
-              buffer.append('\b');
-              break;
-            case 't':
-              buffer.append('\t');
-              break;
-            case 'n':
-              buffer.append('\n');
-              break;
-            case 'f':
-              buffer.append('\f');
-              break;
-            case 'r':
-              buffer.append('\r');
-              break;
-            // TODO(knorton): I'm not sure I should even support this escaping
-            // mode since JSON is always UTF-8.
-            case 'u':
-              buffer.append((char) Integer.parseInt(next(4), 16));
-              break;
-            default:
-              buffer.append((char) c);
-          }
-          break;
-        default:
-          if (c == startChar) {
-            return buffer.toString();
-          }
-          buffer.append((char) c);
-      }
-    }
-  }
-
-  String nextUntilOneOf(String chars)  {
-    final StringBuilder buffer = new StringBuilder();
-    int c = next();
-    while (c != INVALID_CHAR) {
-      if (Character.isSpace((char) c) || chars.indexOf((char) c) >= 0) {
-        back(c);
-        break;
-      }
-      buffer.append((char) c);
-      c = next();
-    }
-    return buffer.toString();
-  }
-
-  <T extends JsonValue> T nextValue() throws JsonException {
-    final int c = nextNonWhitespace();
-    back(c);
-    switch (c) {
-      case '"':
-      case '\'':
-        return (T) jsonFactory.create(nextString(c));
-      case '{':
-        return (T) parseObject();
-      case '[':
-        return (T) parseArray();
-      default:
-        return (T) getValueForLiteral(nextUntilOneOf(STOPCHARS));
-    }
-  }
-
-  JsonArray parseArray() throws JsonException {
-     final JsonArray array = jsonFactory.createArray();
-     int c = nextNonWhitespace();
-     assert c == '[';
-     while (true) {
-       c = nextNonWhitespace();
-       switch (c) {
-         case ']':
-           return array;
-         default:
-           back(c);
-           array.set(array.length(), (JsonValue)nextValue());
-           final int d = nextNonWhitespace();
-           switch (d) {
-             case ']':
-               return array;
-             case ',':
-               break;
-             default:
-               throw new JsonException("Invalid array: expected , or ]");
-           }
-       }
-     }
-   }
-
-  JsonObject parseObject() throws JsonException {
-    final JsonObject object = jsonFactory.createObject();
-    int c = nextNonWhitespace();
-    if (c != '{') {
-      throw new JsonException(
-          "Payload does not begin with '{'.  Got " + c + "("
-              + Character.valueOf((char) c) + ")");
-    }
-
-    while (true) {
-      c = nextNonWhitespace();
-      switch (c) {
-        case '}':
-          // We're done.
-          return object;
-        case '"':
-        case '\'':
-          back(c);
-          // Ready to start a key.
-          final String key = nextString(c);
-          if (nextNonWhitespace() != ':') {
-            throw new JsonException(
-                "Invalid object: expecting \":\"");
-          }
-          // TODO(knorton): Make sure this key is not already set.
-          object.put(key, (JsonValue)nextValue());
-          switch (nextNonWhitespace()) {
-            case ',':
-              break;
-            case '}':
-              return object;
-            default:
-              throw new JsonException(
-                  "Invalid object: expecting } or ,");
-          }
-          break;
-        case ',':
-          break;
-        default:
-          if (lenient && (Character.isDigit((char) c) || Character.isLetterOrDigit((char) c)))
-        {
-          StringBuilder keyBuffer = new StringBuilder();
-          keyBuffer.append(c);
-          while (true) {
-            c = next();
-            if (Character.isDigit((char) c) || Character.isLetterOrDigit((char) c)) {
-              keyBuffer.append(c);
-            } else {
-              back(c);
-              break;
-            }
-          }
-          if (nextNonWhitespace() != ':') {
-            throw new JsonException(
-                "Invalid object: expecting \":\"");
-          }
-          // TODO(knorton): Make sure this key is not already set.
-          object.put(keyBuffer.toString(), (JsonValue)nextValue());
-          switch (nextNonWhitespace()) {
-            case ',':
-              break;
-            case '}':
-              return object;
-            default:
-              throw new JsonException(
-                  "Invalid object: expecting } or ,");
-          }
-
-        }else{
-          throw new JsonException("Invalid object: ");
-        }
-      }
-    }
-  }
-
-  private JsonNumber getNumberForLiteral(String literal)
-      throws JsonException {
-    try {
-      return jsonFactory.create(Double.parseDouble(literal));
-    } catch (NumberFormatException e) {
-      throw new JsonException("Invalid number literal: " + literal);
-    }
-  }
-
-  private JsonValue getValueForLiteral(String literal) throws JsonException {
-    if ("".equals(literal)) {
-      throw new JsonException("Missing value");
-    }
-
-    if ("null".equals(literal) || "undefined".equals(literal)) {
-      return jsonFactory.createNull();
-    }
-
-    if ("true".equals(literal)) {
-      return jsonFactory.create(true);
-    }
-
-    if ("false".equals(literal)) {
-      return jsonFactory.create(false);
-    }
-
-    final char c = literal.charAt(0);
-    if (c == '-' || Character.isDigit(c)) {
-      return getNumberForLiteral(literal);
-    }
-
-    throw new JsonException("Invalid literal: \"" + literal + "\"");
-  }
-
-  private int read(char[] buffer, int pos, int len) {
-    int maxLen = Math.min(json.length() - position, len);
-    String src = json.substring(position, position + maxLen);
-    char result[] = src.toCharArray();
-    System.arraycopy(result, 0, buffer, pos, maxLen);
-    position += maxLen;
-    return maxLen;
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonUtil.java b/elemental/src/elemental/json/impl/JsonUtil.java
deleted file mode 100644
index b4b4e08..0000000
--- a/elemental/src/elemental/json/impl/JsonUtil.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import elemental.json.Json;
-import elemental.json.JsonArray;
-import elemental.json.JsonException;
-import elemental.json.JsonObject;
-import elemental.json.JsonValue;
-import elemental.json.impl.JsonContext;
-
-/**
- * Direct port of json2.js at http://www.json.org/json2.js to GWT.
- */
-@Deprecated
-public class JsonUtil {
-
-  private static class StringifyJsonVisitor extends JsonVisitor {
-
-    private static final Set<String> skipKeys;
-
-    static {
-      Set<String> toSkip = new HashSet<String>();
-      toSkip.add("$H");
-      toSkip.add("__gwt_ObjectId");
-      skipKeys = Collections.unmodifiableSet(toSkip);
-    }
-
-    private String indentLevel;
-
-    private Set<JsonValue> visited;
-
-    private final String indent;
-
-    private final StringBuilder sb;
-
-    private final boolean pretty;
-
-    public StringifyJsonVisitor(String indent, StringBuilder sb,
-        boolean pretty) {
-      this.indent = indent;
-      this.sb = sb;
-      this.pretty = pretty;
-      indentLevel = "";
-      visited = new HashSet<JsonValue>();
-    }
-
-    @Override
-    public void endVisit(JsonArray array, JsonContext ctx) {
-      if (pretty) {
-        indentLevel = indentLevel
-            .substring(0, indentLevel.length() - indent.length());
-        sb.append('\n');
-        sb.append(indentLevel);
-      }
-      sb.append("]");
-      visited.remove(array);
-    }
-
-    @Override
-    public void endVisit(JsonObject object, JsonContext ctx) {
-      if (pretty) {
-        indentLevel = indentLevel
-            .substring(0, indentLevel.length() - indent.length());
-        sb.append('\n');
-        sb.append(indentLevel);
-      }
-      sb.append("}");
-      visited.remove(object);
-      assert !visited.contains(object);
-    }
-
-    @Override
-    public void visit(double number, JsonContext ctx) {
-      sb.append(Double.isInfinite(number) || Double.isNaN(number) ? "null" : format(number));
-    }
-
-    @Override
-    public void visit(String string, JsonContext ctx) {
-      sb.append(quote(string));
-    }
-
-    @Override
-    public void visit(boolean bool, JsonContext ctx) {
-      sb.append(bool);
-    }
-
-    @Override
-    public boolean visit(JsonArray array, JsonContext ctx) {
-      checkCycle(array);
-      sb.append("[");
-      if (pretty) {
-        sb.append('\n');
-        indentLevel += indent;
-        sb.append(indentLevel);
-      }
-      return true;
-    }
-
-    @Override
-    public boolean visit(JsonObject object, JsonContext ctx) {
-      checkCycle(object);
-      sb.append("{");
-      if (pretty) {
-        sb.append('\n');
-        indentLevel += indent;
-        sb.append(indentLevel);
-      }
-      return true;
-    }
-
-    @Override
-    public boolean visitIndex(int index, JsonContext ctx) {
-      commaIfNotFirst(ctx);
-      return true;
-    }
-
-    @Override
-    public boolean visitKey(String key, JsonContext ctx) {
-      if ("".equals(key)) {
-        return true;
-      }
-      // skip properties injected by GWT runtime on JSOs
-      if (skipKeys.contains(key)) {
-        return false;
-      }
-      commaIfNotFirst(ctx);
-      sb.append(quote(key) + ":");
-      if (pretty) {
-        sb.append(' ');
-      }
-      return true;
-    }
-
-    @Override
-    public void visitNull(JsonContext ctx) {
-      sb.append("null");
-    }
-
-    private void checkCycle(JsonValue value) {
-      if (visited.contains(value)) {
-        throw new JsonException("Cycled detected during stringify");
-      } else {
-        visited.add(value);
-      }
-    }
-
-    private void commaIfNotFirst(JsonContext ctx) {
-      if (!ctx.isFirst()) {
-        sb.append(",");
-        if (pretty) {
-          sb.append('\n');
-          sb.append(indentLevel);
-        }
-      }
-    }
-
-    private String format(double number) {
-      String n = String.valueOf(number);
-      if (n.endsWith(".0")) {
-        n = n.substring(0, n.length() - 2);
-      }
-      return n;
-    }
-  }
-
-  /**
-   * Convert special control characters into unicode escape format.
-   */
-  public static String escapeControlChars(String text) {
-    StringBuilder toReturn = new StringBuilder();
-    for (int i = 0; i < text.length(); i++) {
-      char c = text.charAt(i);
-      if (isControlChar(c)) {
-        toReturn.append(escapeCharAsUnicode(c));
-      } else {
-        toReturn.append(c);
-      }
-    }
-    return toReturn.toString();
-  }
-
-  public static <T extends JsonValue> T parse(String json) throws JsonException {
-    return Json.instance().parse(json);
-  }
-
-  /**
-   * Safely escape an arbitrary string as a JSON string literal.
-   */
-  public static String quote(String value) {
-    StringBuilder toReturn = new StringBuilder("\"");
-    for (int i = 0; i < value.length(); i++) {
-      char c = value.charAt(i);
-
-      String toAppend = String.valueOf(c);
-      switch (c) {
-        case '\b':
-          toAppend = "\\b";
-          break;
-        case '\t':
-          toAppend = "\\t";
-          break;
-        case '\n':
-          toAppend = "\\n";
-          break;
-        case '\f':
-          toAppend = "\\f";
-          break;
-        case '\r':
-          toAppend = "\\r";
-          break;
-        case '"':
-          toAppend = "\\\"";
-          break;
-        case '\\':
-          toAppend = "\\\\";
-          break;
-        default:
-          if (isControlChar(c)) {
-            toAppend = escapeCharAsUnicode(c);
-          }
-      }
-      toReturn.append(toAppend);
-    }
-    toReturn.append("\"");
-    return toReturn.toString();
-  }
-
-  /**
-   * Converts a Json Object to Json format.
-   *
-   * @param jsonValue  json object to stringify
-   * @return json formatted string
-   */
-  public static String stringify(JsonValue jsonValue) {
-    return stringify(jsonValue, 0);
-  }
-
-  /**
-   * Converts a JSO to Json format.
-   *
-   * @param jsonValue    json object to stringify
-   * @param spaces number of spaces to indent in pretty print mode
-   * @return json formatted string
-   */
-  public static String stringify(JsonValue jsonValue, int spaces) {
-    StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < spaces; i++) {
-      sb.append(' ');
-    }
-    return stringify(jsonValue, sb.toString());
-  }
-
-  /**
-   * Converts a Json object to Json formatted String.
-   *
-   * @param jsonValue    json object to stringify
-   * @param indent optional indention prefix for pretty printing
-   * @return json formatted string
-   */
-  public static String stringify(JsonValue jsonValue, final String indent) {
-    final StringBuilder sb = new StringBuilder();
-    final boolean isPretty = indent != null && !"".equals(indent);
-
-    new StringifyJsonVisitor(indent, sb, isPretty).accept(jsonValue);
-    return sb.toString();
-  }
-
-  /**
-   * Turn a single unicode character into a 32-bit unicode hex literal.
-   */
-  private static String escapeCharAsUnicode(char toEscape) {
-    String hexValue = Integer.toString(toEscape, 16);
-    int padding = 4 - hexValue.length();
-    return "\\u" + ("0000".substring(0, padding)) + hexValue;
-  }
-
-  private static boolean isControlChar(char c) {
-    return (c >= 0x00 && c <= 0x1f)  
-        || (c >= 0x7f && c <= 0x9f) 
-        || c == '\u00ad' || c == '\u070f' || c == '\u17b4' || c == '\u17b5'
-        || c == '\ufeff' 
-        || (c >= '\u0600' && c <= '\u0604')
-        || (c >= '\u200c' && c <= '\u200f')
-        || (c >= '\u2028' && c <= '\u202f')
-        || (c >= '\u2060' && c <= '\u206f')
-        || (c >= '\ufff0' && c <= '\uffff');
-  }
-}
diff --git a/elemental/src/elemental/json/impl/JsonVisitor.java b/elemental/src/elemental/json/impl/JsonVisitor.java
deleted file mode 100644
index 70c2df5..0000000
--- a/elemental/src/elemental/json/impl/JsonVisitor.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import elemental.json.JsonArray;
-import elemental.json.JsonObject;
-import elemental.json.JsonValue;
-import elemental.json.impl.JsonContext;
-
-/**
- * A visitor for JSON objects. For each unique JSON datatype, a callback is
- * invoked with a {@link elemental.json.impl.JsonContext}
- * that can be used to replace a value or remove it. For Object and Array
- * types, the {@link #visitKey} and {@link #visitIndex} methods are invoked
- * respectively for each contained value to determine if they should be
- * processed or not. Finally, the visit methods for Object and Array types
- * returns a boolean that determines whether or not to process its contained
- * values.
- */
-@Deprecated
-class JsonVisitor {
-
-  private class ImmutableJsonContext extends JsonContext {
-
-    public ImmutableJsonContext(JsonValue node) {
-      super(node);
-    }
-    
-    @Override
-    public void removeMe() {
-      immutableError();
-    }
-
-    @Override
-    public void replaceMe(double d) {
-      immutableError();
-    }
-
-    @Override
-    public void replaceMe(String d) {
-      immutableError();
-    }
-
-    @Override
-    public void replaceMe(boolean d) {
-      immutableError();
-    }
-
-    @Override
-    public void replaceMe(JsonValue value) {
-      immutableError();
-    }
-
-    private void immutableError() {
-      throw new UnsupportedOperationException("Immutable context");
-    }
-  }
-
-  public void accept(JsonValue node) {
-    accept(node, new ImmutableJsonContext(node));
-  }
-  
-  /**
-   * Accept array or object type and visit its members.
-   */
-  public void accept(JsonValue node, JsonContext ctx) {
-    if (node == null) {
-      return;
-    }
-    ((JreJsonValue) node).traverse(this, ctx);
-  }
-
-  /**
-   * Called after every element of array has been visited.
-   */
-  public void endVisit(JsonArray array, JsonContext ctx) {
-  }
-
-  /**
-   * Called after every field of an object has been visited.
-   * @param object
-   * @param ctx
-   */
-  public void endVisit(JsonObject object, JsonContext ctx) {
-  }
-
-  /**
-   * Called for JS numbers present in a JSON object.
-   */
-  public void visit(double number, JsonContext ctx) {
-  }
-
-  /**
-   * Called for JS strings present in a JSON object.
-   */
-  public void visit(String string, JsonContext ctx) {
-  }
-
-  /**
-   * Called for JS boolean present in a JSON object.
-   */
-  public void visit(boolean bool, elemental.json.impl.JsonContext ctx) {
-  }
-
-  /**
-   * Called for JS arrays present in a JSON object. Return true if array
-   * elements should be visited.
-   * @param array a JS array
-   * @param ctx a context to replace or delete the array
-   * @return true if the array elements should be visited
-   */
-  public boolean visit(JsonArray array, JsonContext ctx) {
-    return true;
-  }
-
-  /**
-   * Called for JS objects present in a JSON object. Return true if object
-   * fields should be visited.
-   * @param object a Json object
-   * @param ctx a context to replace or delete the object
-   * @return true if object fields should be visited
-   */
-  public boolean visit(JsonObject object, JsonContext ctx) {
-    return true;
-  }
-
-  /**
-   * Return true if the value for a given array index should be visited.
-   * @param index an index in a JSON array
-   * @param ctx a context object used to delete or replace values
-   * @return true if the value associated with the index should be visited
-   */
-  public boolean visitIndex(int index, JsonContext ctx) {
-    return true;
-  }
-
-  /**
-   * Return true if the value for a given object key should be visited.
-   * @param key a key in a JSON object
-   * @param ctx a context object used to delete or replace values
-   * @return true if the value associated with the key should be visited
-   */
-  public boolean visitKey(String key, JsonContext ctx) {
-    return true;
-  }
-
-  /**
-   * Called for nulls present in a JSON object.
-   */
-  public void visitNull(JsonContext ctx) {
-  }
-}
diff --git a/elemental/src/elemental/super/elemental/json/Json.java b/elemental/src/elemental/super/elemental/json/Json.java
deleted file mode 100644
index 8891146..0000000
--- a/elemental/src/elemental/super/elemental/json/Json.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.GwtScriptOnly;
-import elemental.js.json.JsJsonFactory;
-import elemental.json.impl.JreJsonFactory;
-
-/**
- * Vends out implementation of JsonFactory.
- */
-@GwtScriptOnly
-public class Json {
-
-  public static JsonString create(String string) {
-    return instance().create(string);
-  }
-
-  public static JsonBoolean create(boolean bool) {
-    return instance().create(bool);
-  }
-
-  public static JsonArray createArray() {
-    return instance().createArray();
-  }
-
-  public static JsonNull createNull() {
-    return instance().createNull();
-  }
-
-  public static JsonNumber create(double number) {
-    return instance().create(number);
-  }
-
-  public static JsonObject createObject() {
-    return instance().createObject();
-  }
-
-  public static JsonFactory instance() {
-      assert GWT.isScript() : "Super-sourced Json class ran in DevMode";
-      return new JsJsonFactory();
-  }
-
-  public static JsonObject parse(String jsonString) {
-    return instance().parse(jsonString);
-  }
-}
diff --git a/elemental/src/elemental/super/elemental/json/impl/JreJsonValue.java b/elemental/src/elemental/super/elemental/json/impl/JreJsonValue.java
deleted file mode 100644
index c0402a9..0000000
--- a/elemental/src/elemental/super/elemental/json/impl/JreJsonValue.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json.impl;
-
-import com.google.gwt.core.client.JsonUtils;
-
-import elemental.json.JsonValue;
-
-/**
- * Client-side Dev-Mode implementation of JreJsonValue.
- */
-public abstract class JreJsonValue implements JsonValue {
-  public abstract Object getObject();
-  public abstract void traverse(JsonVisitor visitor, JsonContext ctx);
-
-  @Override
-  public Object toNative() {
-    // use browser JS parser, returns JSO
-    return JsonUtils.safeEval(((JsonValue) this).toJson());
-  }
-}
diff --git a/elemental/src/elemental/super/elemental/util/Collections.java b/elemental/src/elemental/super/elemental/util/Collections.java
deleted file mode 100644
index 0a575b1..0000000
--- a/elemental/src/elemental/super/elemental/util/Collections.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import com.google.gwt.core.client.GwtScriptOnly;
-
-import elemental.js.util.JsArrayOf;
-import elemental.js.util.JsArrayOfBoolean;
-import elemental.js.util.JsArrayOfInt;
-import elemental.js.util.JsArrayOfNumber;
-import elemental.js.util.JsArrayOfString;
-import elemental.js.util.JsMapFromIntTo;
-import elemental.js.util.JsMapFromIntToString;
-import elemental.js.util.JsMapFromStringTo;
-import elemental.js.util.JsMapFromStringToBoolean;
-import elemental.js.util.JsMapFromStringToInt;
-import elemental.js.util.JsMapFromStringToNumber;
-import elemental.js.util.JsMapFromStringToString;
-import elemental.util.impl.JreArrayOf;
-import elemental.util.impl.JreArrayOfBoolean;
-import elemental.util.impl.JreArrayOfInt;
-import elemental.util.impl.JreArrayOfNumber;
-import elemental.util.impl.JreArrayOfString;
-import elemental.util.impl.JreMapFromIntTo;
-import elemental.util.impl.JreMapFromIntToString;
-import elemental.util.impl.JreMapFromStringTo;
-import elemental.util.impl.JreMapFromStringToBoolean;
-import elemental.util.impl.JreMapFromStringToInt;
-import elemental.util.impl.JreMapFromStringToNumber;
-import elemental.util.impl.JreMapFromStringToString;
-
-/**
- * Factory and utility methods for elemental collections.
- */
-@GwtScriptOnly
-public class Collections {
-
-  /**
-   * Create an ArrayOf collection using the most efficient implementation strategy for the given
-   * client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreArrayOf or JsArrayOf instance
-   */
-  public static <T> ArrayOf<T> arrayOf() {
-    return JsArrayOf.<T>create();
-  }
-
-  /**
-   * Create an ArrayOfBoolean collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfBoolean or JsArrayOfBoolean instance
-   */
-  public static <T> ArrayOfBoolean arrayOfBoolean() {
-    return JsArrayOfBoolean.create();
-  }
-
-  /**
-   * Create an ArrayOfInt collection using the most efficient implementation strategy for the given
-   * client.
-   *
-   * @return a JreArrayOfInt or JsArrayOfInt instance
-   */
-  public static <T> ArrayOfInt arrayOfInt() {
-    return JsArrayOfInt.create();
-  }
-
-  /**
-   * Create an ArrayOfNumber collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfNumber or JsArrayOfNumber instance
-   */
-  public static <T> ArrayOfNumber arrayOfNumber() {
-    return JsArrayOfNumber.create();
-  }
-
-  /**
-   * Create an ArrayOfString collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfString or JsArrayOfString instance
-   */
-  public static <T> ArrayOfString arrayOfString() {
-    return JsArrayOfString.create();
-  }
-
-  /**
-   * Create a MapFromIntTo collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreMapFromIntTo or JsMapFromIntTo instance
-   */
-  public static <T> MapFromIntTo<T> mapFromIntTo() {
-    return JsMapFromIntTo.<T>create();
-  }
-
-  /**
-   * Create a MapFromIntToString collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @return a JreMapFromIntToString or JsMapFromIntToString instance
-   */
-  public static MapFromIntToString mapFromIntToString() {
-    return JsMapFromIntToString.create();
-  }
-
-  /**
-   * Create a MapFromStringTo collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreMapFromStringTo or JsMapFromStringTo instance
-   */
-  public static <T> MapFromStringTo<T> mapFromStringTo() {
-    return JsMapFromStringTo.<T>create();
-  }
-
-  /**
-   * Create a MapFromStringToBoolean collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToBoolean or JsMapFromStringToBoolean instance
-   */
-  public static MapFromStringToBoolean mapFromStringToBoolean() {
-    return JsMapFromStringToBoolean.create();
-  }
-
-  /**
-   * Create a MapFromStringToInt collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @return a JreMapFromStringToInt or JsMapFromStringToInt instance
-   */
-  public static MapFromStringToInt mapFromStringToInt() {
-    return JsMapFromStringToInt.create();
-  }
-
-  /**
-   * Create a MapFromStringToNumber collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToNumber or JsMapFromStringToNumber instance
-   */
-  public static MapFromStringToNumber mapFromStringToNumber() {
-    return JsMapFromStringToNumber.create();
-  }
-
-  /**
-   * Create a MapFromStringToString collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToString or JsMapFromStringToString instance
-   */
-  public static MapFromStringToString mapFromStringToString() {
-    return JsMapFromStringToString.create();
-  }
-}
diff --git a/elemental/src/elemental/util/ArrayOf.java b/elemental/src/elemental/util/ArrayOf.java
deleted file mode 100644
index ed37f1f..0000000
--- a/elemental/src/elemental/util/ArrayOf.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight array of homogeneous Object values.
- *
- * @param <T>
- *
- * @see elemental.js.util.JsArrayOf
- */
-@Deprecated
-public interface ArrayOf<T> {
-
-  /**
-   * Returns a new array that is the concatenation of this array and <code>
-   * values</code>. This method does not mutate the current array.
-   */
-  ArrayOf<T> concat(ArrayOf<T> values);
-
-  /**
-   * Indicates whether the array contains the specified value.
-   */
-  boolean contains(T value);
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  T get(int index);
-
-  /**
-   * Returns the index of the specified value or <code>-1</code> if the value is
-   * not found.
-   */
-  int indexOf(T value);
-
-  /**
-   * Inserts a new element into the array at the specified index.
-   *
-   *  Note: If index >= the length of the array, the element will be appended to
-   * the end. Also if the index is negative, the element will be inserted
-   * starting from the end of the array.
-   */
-  void insert(int index, T value);
-
-  /**
-   * Returns true if the length of the array is zero.
-   *
-   * @return true when length is zero
-   */
-  boolean isEmpty();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join(String separator);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-
-  /**
-   * Returns the last value of the array;
-   *
-   * @return the last value
-   */
-  T peek();
-
-  /**
-   * Remove and return the element from the end of the array.
-   *
-   * @return the removed value
-   */
-  T pop();
-
-  /**
-   * Pushes the given value onto the end of the array.
-   */
-  void push(T value);
-
-  /**
-   * Searches for the specified value in the array and removes the first
-   * occurrence if found.
-   */
-  void remove(T value);
-
-  /**
-   * Removes the element at the specified index.
-   */
-  void removeByIndex(int index);
-
-  /**
-   * sets the value value at a given index.
-   *
-   *  if the index is out of bounds, the value will still be set. the array's
-   * length will be updated to encompass the bounds implied by the added value.
-   *
-   * @param index the index to be set
-   * @param value the value to be stored
-   */
-  void set(int index, T value);
-
-  /**
-   * Reset the length of the array.
-   *
-   * @param length the new length of the array
-   */
-  void setLength(int length);
-
-  /**
-   * Shifts the first value off the array.
-   *
-   * @return the shifted value
-   */
-  T shift();
-
-  /**
-   * Sorts the contents of the Array based on the {@link CanCompare}.
-   *
-   * @param comparator
-   */
-  void sort(CanCompare<T> comparator);
-
-  /**
-   * Removes the specified number of elements starting at index and returns the
-   * removed elements.
-   */
-  ArrayOf<T> splice(int index, int count);
-
-  /**
-   * Shifts a value onto the beginning of the array.
-   *
-   * @param value the value to the stored
-   */
-  void unshift(T value);
-}
diff --git a/elemental/src/elemental/util/ArrayOfBoolean.java b/elemental/src/elemental/util/ArrayOfBoolean.java
deleted file mode 100644
index 3064432..0000000
--- a/elemental/src/elemental/util/ArrayOfBoolean.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight array of booleans.
- *
- * @see elemental.js.util.JsArrayOfBoolean
- */
-@Deprecated
-public interface ArrayOfBoolean {
-  /**
-   * Returns a new array that is the concatenation of this array and <code>
-   * values</code>. This method does not mutate the current array.
-   */
-  ArrayOfBoolean concat(ArrayOfBoolean values);
-
-  /**
-   * Indicates whether the array contains the specified value.
-   */
-  boolean contains(boolean value);
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  boolean get(int index);
-
-  /**
-   * Returns the index of the specified value or <code>-1</code> if the value is
-   * not found.
-   */
-  int indexOf(boolean value);
-
-  /**
-   * Inserts a new element into the array at the specified index.
-   *
-   * Note: If index >= the length of the array, the element will be appended to
-   * the end. Also if the index is negative, the element will be inserted
-   * starting from the end of the array.
-   */  
-  void insert(int index, boolean value);
-
-  /**
-   * Returns true if the length of the array is zero.
-   *
-   * @return true when length is zero
-   */
-  boolean isEmpty();
-
-  /**
-   * Check that the specified <code>index</code> has been initialized to a valid
-   * value.
-   */
-  boolean isSet(int index);
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join(String separator);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-
-  /**
-   * Returns the last value of the array;
-   *
-   * @return the last value
-   */
-  boolean peek();
-
-  /**
-   * Remove and return the element from the end of the array.
-   *
-   * @return the removed value
-   */
-  boolean pop();
-
-  /**
-   * Pushes the given boolean onto the end of the array.
-   */
-  void push(boolean value);
-
-  /**
-   * Searches for the specified value in the array and removes the first
-   * occurrence if found.
-   */
-  void remove(boolean value);
-
-  /**
-   * Removes the element at the specified index.
-   */
-  void removeByIndex(int index);
-
-  /**
-   * Sets the value value at a given index.
-   *
-   *  If the index is out of bounds, the value will still be set. The array's
-   * length will be updated to encompass the bounds implied by the added value.
-   *
-   * @param index the index to be set
-   * @param value the value to be stored
-   */
-  void set(int index, boolean value);
-
-  /**
-   * Reset the length of the array.
-   *
-   * @param length the new length of the array
-   */
-  void setLength(int length);
-
-  /**
-   * Shifts the first value off the array.
-   *
-   * @return the shifted value
-   */
-  boolean shift();
-
-  /**
-   * Removes the specified number of elements starting at index and returns the
-   * removed elements.
-   */
-  ArrayOfBoolean splice(int index, int count);
-
-  /**
-   * Shifts a value onto the beginning of the array.
-   *
-   * @param value the value to the stored
-   */
-  void unshift(boolean value);
-}
diff --git a/elemental/src/elemental/util/ArrayOfInt.java b/elemental/src/elemental/util/ArrayOfInt.java
deleted file mode 100644
index e9cd5a8..0000000
--- a/elemental/src/elemental/util/ArrayOfInt.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight array of integers.
- *
- * @see elemental.js.util.JsArrayOfInt
- */
-@Deprecated
-public interface ArrayOfInt {
-
-  /**
-   * Returns a new array that is the concatenation of this array and <code>
-   * values</code>. This method does not mutate the current array.
-   */
-  ArrayOfInt concat(ArrayOfInt values);
-
-  /**
-   * Indicates whether the array contains the specified value.
-   */
-  boolean contains(int value);
-
-  /**
-   * Gets the value at a given index.
-   *
-   *  If no value exists at the given index, a type-conversion error will occur
-   * in hosted mode and unpredictable behavior may occur in web mode. If the
-   * numeric value returned is non-integral, it will cause a warning in hosted
-   * mode, and may affect the results of mathematical expressions.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  int get(int index);
-
-  /**
-   * Returns the index of the specified value or <code>-1</code> if the value is
-   * not found.
-   */
-  int indexOf(int value);
-
-  /**
-   * Inserts a new element into the array at the specified index.
-   *
-   *  Note: If index >= the length of the array, the element will be appended to
-   * the end. Also if the index is negative, the element will be inserted
-   * starting from the end of the array.
-   */
-  void insert(int index, int value);
-
-  /**
-   * Returns true if the length of the array is zero.
-   *
-   * @return true when length is zero
-   */
-  boolean isEmpty();
-
-  /**
-   * Check that the specified <code>index</code> has been initialized to a valid
-   * value.
-   */
-  boolean isSet(int index);
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join(String separator);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-
-  /**
-   * Returns the last value of the array;
-   *
-   * @return the last value
-   */
-  int peek();
-
-  /**
-   * Remove and return the element from the end of the array.
-   *
-   * @return the removed value
-   */
-  int pop();
-
-  /**
-   * Pushes the given integer onto the end of the array.
-   */
-  void push(int value);
-
-  /**
-   * Searches for the specified value in the array and removes the first
-   * occurrence if found.
-   */
-  void remove(int value);
-
-  /**
-   * Removes the element at the specified index.
-   */
-  void removeByIndex(int index);
-
-  /**
-   * Sets the value value at a given index.
-   *
-   *  If the index is out of bounds, the value will still be set. The array's
-   * length will be updated to encompass the bounds implied by the added value.
-   *
-   * @param index the index to be set
-   * @param value the value to be stored
-   */
-  void set(int index, int value);
-
-  /**
-   * Reset the length of the array.
-   *
-   * @param length the new length of the array
-   */
-  void setLength(int length);
-
-  /**
-   * Shifts the first value off the array.
-   *
-   * @return the shifted value
-   */
-  int shift();
-
-  /**
-   * Sorts the contents of the array in ascending order.
-   */
-  void sort();
-
-  /**
-   * Sorts the contents of the Array based on the {@link CanCompareInt}.
-   *
-   * @param comparator
-   */
-  void sort(CanCompareInt comparator);
-
-  /**
-   * Removes the specified number of elements starting at index and returns the
-   * removed elements.
-   */
-  ArrayOfInt splice(int index, int count);
-
-  /**
-   * Shifts a value onto the beginning of the array.
-   *
-   * @param value the value to the stored
-   */
-  void unshift(int value);
-}
diff --git a/elemental/src/elemental/util/ArrayOfNumber.java b/elemental/src/elemental/util/ArrayOfNumber.java
deleted file mode 100644
index 8af4b07..0000000
--- a/elemental/src/elemental/util/ArrayOfNumber.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight array of numbers.
- *
- * @see elemental.js.util.JsArrayOfNumber
- */
-@Deprecated
-public interface ArrayOfNumber {
-  /**
-   * Returns a new array that is the concatenation of this array and <code>
-   * values</code>. This method does not mutate the current array.
-   */
-  ArrayOfNumber concat(ArrayOfNumber values);
-
-  /**
-   * Gets the value at a given index.
-   *
-   *  If an undefined or non-numeric value exists at the given index, a
-   * type-conversion error will occur in hosted mode and unpredictable behavior
-   * may occur in web mode.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  double get(int index);
-
-  /**
-   * Inserts a new element into the array at the specified index.
-   *
-   * Note: If index >= the length of the array, the element will be appended to
-   * the end. Also if the index is negative, the element will be inserted
-   * starting from the end of the array.
-   */  
-  void insert(int index, double value);
-
-  /**
-   * Returns true if the length of the array is zero.
-   *
-   * @return true when length is zero
-   */
-  boolean isEmpty();
-
-  /**
-   * Check that the specified <code>index</code> has been initialized to a valid
-   * value.
-   */
-  boolean isSet(int index);
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join(String separator);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-
-  /**
-   * Returns the last value of the array;
-   *
-   * @return the last value
-   */
-  double peek();
-
-  /**
-   * Remove and return the element from the end of the array.
-   *
-   * @return the removed value
-   */
-  double pop();
-
-  /**
-   * Pushes the given number onto the end of the array.
-   */
-  void push(double value);
-
-  /**
-   * Removes the element at the specified index.
-   */
-  void removeByIndex(int index);
-
-  /**
-   * Sets the value value at a given index.
-   *
-   * If the index is out of bounds, the value will still be set. The array's
-   * length will be updated to encompass the bounds implied by the added value.
-   *
-   * @param index the index to be set
-   * @param value the value to be stored
-   */
-  void set(int index, double value);
-
-  /**
-   * Reset the length of the array.
-   *
-   * @param length the new length of the array
-   */
-  void setLength(int length);
-
-  /**
-   * Shifts the first value off the array.
-   *
-   * @return the shifted value
-   */
-  double shift();
-
-  /**
-   * Sorts the contents of the array in ascending order.
-   */
-  void sort();
-
-  /**
-   * Sorts the contents of the Array based on the {@link CanCompareNumber}.
-   *
-   * @param comparator
-   */
-  void sort(CanCompareNumber comparator);
-
-  /**
-   * Removes the specified number of elements starting at index and returns the
-   * removed elements.
-   */
-  ArrayOfNumber splice(int index, int count);
-
-  /**
-   * Shifts a value onto the beginning of the array.
-   *
-   * @param value the value to the stored
-   */
-  void unshift(double value);
-}
diff --git a/elemental/src/elemental/util/ArrayOfString.java b/elemental/src/elemental/util/ArrayOfString.java
deleted file mode 100644
index 14442ae..0000000
--- a/elemental/src/elemental/util/ArrayOfString.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight array of Strings.
- * 
- * @see elemental.js.util.JsArrayOfString
- */
-@Deprecated
-public interface ArrayOfString {
-  /**
-   * Returns a new array that is the concatenation of this array and <code>
-   * values</code>. This method does not mutate the current array.
-   */
-  ArrayOfString concat(ArrayOfString values);
-
-  /**
-   * Indicates whether the array contains the specified value.
-   */
-  boolean contains(String value);
-
-  /**
-   * Gets the value at a given index.
-   * 
-   * @param index the index to be retrieved
-   * @return the value at the given index, or <code>null</code> if none exists
-   */
-  String get(int index);
-
-  /**
-   * Returns the index of the specified value or <code>-1</code> if the value is
-   * not found.
-   */
-  int indexOf(String value);
-
-  /**
-   * Inserts a new element into the array at the specified index.
-   *
-   * Note: If index >= the length of the array, the element will be appended to
-   * the end. Also if the index is negative, the element will be inserted
-   * starting from the end of the array.
-   */  
-  void insert(int index, String value);
-
-  /**
-   * Returns true if the length of the array is zero.
-   *
-   * @return true when length is zero
-   */
-  boolean isEmpty();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join();
-
-  /**
-   * Convert each element of the array to a String and join them with a comma
-   * separator. The value returned from this method may vary between browsers
-   * based on how JavaScript values are converted into strings.
-   */
-  String join(String separator);
-
-  /**
-   * Gets the length of the array.
-   * 
-   * @return the array length
-   */
-  int length();
-
-  /**
-   * Returns the last value of the array;
-   *
-   * @return the last value
-   */
-  String peek();
-
-  /**
-   * Remove and return the element from the end of the array.
-   *
-   * @return the removed value
-   */
-  String pop();
-
-  /**
-   * Pushes the given value onto the end of the array.
-   */
-  void push(String value);
-
-  /**
-   * Searches for the specified value in the array and removes the first
-   * occurrence if found.
-   */
-  void remove(String value);
-
-  /**
-   * Removes the element at the specified index.
-   */
-  void removeByIndex(int index);
-
-  /**
-   * Sets the value value at a given index.
-   * 
-   * If the index is out of bounds, the value will still be set. The array's
-   * length will be updated to encompass the bounds implied by the added value.
-   * 
-   * @param index the index to be set
-   * @param value the value to be stored
-   */
-  void set(int index, String value);
-  
-  /**
-   * Reset the length of the array.
-   * 
-   * @param length the new length of the array
-   */
-  void setLength(int length);
-  
-  /**
-   * Shifts the first value off the array.
-   * 
-   * @return the shifted value
-   */
-  String shift();
-  
-  /**
-   * Sorts the contents of the array in ascending order.
-   */
-  void sort();
-
-  /**
-   * Sorts the contents of the Array based on the {@link CanCompareString}.
-   *
-   * @param comparator
-   */
-  void sort(CanCompareString comparator);
-
-  /**
-   * Removes the specified number of elements starting at index and returns the
-   * removed elements.
-   */
-  ArrayOfString splice(int index, int count);
-
-  /**
-   * Shifts a value onto the beginning of the array.
-   * 
-   * @param value the value to the stored
-   */
-  void unshift(String value);
-}
diff --git a/elemental/src/elemental/util/CanCompare.java b/elemental/src/elemental/util/CanCompare.java
deleted file mode 100644
index 94c0960..0000000
--- a/elemental/src/elemental/util/CanCompare.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import elemental.util.ArrayOf;
-
-/**
- * A comparison function which imposes total ordering on a set of objects.
- *
- * @see ArrayOf#sort(CanCompare)
- *
- * @param <T>
- */
-@Deprecated
-public interface CanCompare<T> {
-
-  /**
-   * Compares its two arguments for order.
-   * 
-   * @param a the first object to be compared
-   * @param b the second object to be compared
-   * @return a negative integer, zero, or a positive integer as the first
-   *         argument is less than, equal to, or greater than the second
-   */
-  int compare(T a, T b);
-}
diff --git a/elemental/src/elemental/util/CanCompareInt.java b/elemental/src/elemental/util/CanCompareInt.java
deleted file mode 100644
index 495713e..0000000
--- a/elemental/src/elemental/util/CanCompareInt.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import elemental.util.ArrayOfInt;
-
-/**
- * A comparison function which imposes total ordering on a set of integers.
- *
- * @see ArrayOfInt#sort(CanCompareInt)
- */
-@Deprecated
-public interface CanCompareInt {
-
-  /**
-   * Compares its two arguments for order.
-   * 
-   * @param a the first integer to be compared
-   * @param b the second integer to be compared
-   * @return a negative integer, zero, or a positive integer as the first
-   *         argument is less than, equal to, or greater than the second
-   */
-  int compare(int a, int b);
-}
diff --git a/elemental/src/elemental/util/CanCompareNumber.java b/elemental/src/elemental/util/CanCompareNumber.java
deleted file mode 100644
index 121e864..0000000
--- a/elemental/src/elemental/util/CanCompareNumber.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import elemental.util.ArrayOfNumber;
-
-/**
- * A comparison function which imposes total ordering on a set of numbers.
- *
- * @see ArrayOfNumber#sort(CanCompareNumber)
- */
-@Deprecated
-public interface CanCompareNumber {
-
-  /**
-   * Compares its two arguments for order.
-   * 
-   * @param a the first number to be compared
-   * @param b the second number to be compared
-   * @return a negative integer, zero, or a positive integer as the first
-   *         argument is less than, equal to, or greater than the second
-   */
-  int compare(double a, double b);
-}
diff --git a/elemental/src/elemental/util/CanCompareString.java b/elemental/src/elemental/util/CanCompareString.java
deleted file mode 100644
index 0ab4e1b..0000000
--- a/elemental/src/elemental/util/CanCompareString.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import elemental.util.ArrayOfString;
-
-/**
- * A comparison function which imposes total ordering on a set of numbers.
- *
- * @see ArrayOfString#sort(CanCompareString)
- */
-@Deprecated
-public interface CanCompareString {
-  
-  /**
-   * Compares its two arguments for order.
-   * 
-   * @param a the first string to be compared
-   * @param b the second string to be compared
-   * @return a negative integer, zero, or a positive integer as the first
-   *         argument is less than, equal to, or greater than the second
-   */
-  int compare(String a, String b);
-}
diff --git a/elemental/src/elemental/util/Collections.java b/elemental/src/elemental/util/Collections.java
deleted file mode 100644
index 23a5d3e..0000000
--- a/elemental/src/elemental/util/Collections.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import com.google.gwt.core.client.GWT;
-
-import elemental.util.impl.JreArrayOf;
-import elemental.util.impl.JreArrayOfBoolean;
-import elemental.util.impl.JreArrayOfInt;
-import elemental.util.impl.JreArrayOfNumber;
-import elemental.util.impl.JreArrayOfString;
-import elemental.util.impl.JreMapFromIntTo;
-import elemental.util.impl.JreMapFromIntToString;
-import elemental.util.impl.JreMapFromStringTo;
-import elemental.util.impl.JreMapFromStringToBoolean;
-import elemental.util.impl.JreMapFromStringToInt;
-import elemental.util.impl.JreMapFromStringToNumber;
-import elemental.util.impl.JreMapFromStringToString;
-
-/**
- * Factory and utility methods for elemental collections.
- */
-@Deprecated
-public class Collections {
-
-  /**
-   * Create an ArrayOf collection using the most efficient implementation strategy for the given
-   * client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreArrayOf or JsArrayOf instance
-   */
-  public static <T> ArrayOf<T> arrayOf() {
-    return new JreArrayOf<T>();
-  }
-
-  /**
-   * Create an ArrayOfBoolean collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfBoolean or JsArrayOfBoolean instance
-   */
-  public static <T> ArrayOfBoolean arrayOfBoolean() {
-    return new JreArrayOfBoolean();
-  }
-
-  /**
-   * Create an ArrayOfInt collection using the most efficient implementation strategy for the given
-   * client.
-   *
-   * @return a JreArrayOfInt or JsArrayOfInt instance
-   */
-  public static <T> ArrayOfInt arrayOfInt() {
-    return new JreArrayOfInt();
-  }
-
-  /**
-   * Create an ArrayOfNumber collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfNumber or JsArrayOfNumber instance
-   */
-  public static <T> ArrayOfNumber arrayOfNumber() {
-    return new JreArrayOfNumber();
-  }
-
-  /**
-   * Create an ArrayOfString collection using the most efficient implementation strategy for the
-   * given client.
-   *
-   * @return a JreArrayOfString or JsArrayOfString instance
-   */
-  public static <T> ArrayOfString arrayOfString() {
-    return new JreArrayOfString();
-  }
-
-  /**
-   * Create a MapFromIntTo collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreMapFromIntTo or JsMapFromIntTo instance
-   */
-  public static <T> MapFromIntTo<T> mapFromIntTo() {
-    return new JreMapFromIntTo<T>();
-  }
-
-  /**
-   * Create a MapFromIntToString collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @return a JreMapFromIntToString or JsMapFromIntToString instance
-   */
-  public static MapFromIntToString mapFromIntToString() {
-    return new JreMapFromIntToString();
-  }
-
-  /**
-   * Create a MapFromStringTo collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @param <T>   the element type contained in the collection
-   * @return a JreMapFromStringTo or JsMapFromStringTo instance
-   */
-  public static <T> MapFromStringTo<T> mapFromStringTo() {
-    return new JreMapFromStringTo<T>();
-  }
-
-  /**
-   * Create a MapFromStringToBoolean collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToBoolean or JsMapFromStringToBoolean instance
-   */
-  public static MapFromStringToBoolean mapFromStringToBoolean() {
-    return new JreMapFromStringToBoolean();
-  }
-
-  /**
-   * Create a MapFromStringToInt collection for a given type using the most efficient implementation
-   * strategy for the given client.
-   *
-   * @return a JreMapFromStringToInt or JsMapFromStringToInt instance
-   */
-  public static MapFromStringToInt mapFromStringToInt() {
-    return new JreMapFromStringToInt();
-  }
-
-  /**
-   * Create a MapFromStringToNumber collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToNumber or JsMapFromStringToNumber instance
-   */
-  public static MapFromStringToNumber mapFromStringToNumber() {
-    return new JreMapFromStringToNumber();
-  }
-
-  /**
-   * Create a MapFromStringToString collection for a given type using the most efficient
-   * implementation strategy for the given client.
-   *
-   * @return a JreMapFromStringToString or JsMapFromStringToString instance
-   */
-  public static MapFromStringToString mapFromStringToString() {
-    return new JreMapFromStringToString();
-  }
-}
diff --git a/elemental/src/elemental/util/Indexable.java b/elemental/src/elemental/util/Indexable.java
deleted file mode 100644
index 99ec3e7..0000000
--- a/elemental/src/elemental/util/Indexable.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * Models any object which can act like a Javascript array, having length and a getter.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public interface Indexable /* <T> */ {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  Object /* T */ at(int index);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-}
diff --git a/elemental/src/elemental/util/IndexableInt.java b/elemental/src/elemental/util/IndexableInt.java
deleted file mode 100644
index d856362..0000000
--- a/elemental/src/elemental/util/IndexableInt.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package elemental.util;
-
-/**
- * Models any object which acts like a Javascript array of primitive integers.
- */
-@Deprecated
-public interface IndexableInt extends IndexableNumber {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  int intAt(int index);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-}
diff --git a/elemental/src/elemental/util/IndexableNumber.java b/elemental/src/elemental/util/IndexableNumber.java
deleted file mode 100644
index d674b2d..0000000
--- a/elemental/src/elemental/util/IndexableNumber.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package elemental.util;
-
-/**
- * Models any object which acts like a Javascript array of primitive numbers..
- */
-@Deprecated
-public interface IndexableNumber {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @return the value at the given index
-   */
-  double numberAt(int index);
-
-  /**
-   * Gets the length of the array.
-   *
-   * @return the array length
-   */
-  int length();
-}
diff --git a/elemental/src/elemental/util/MapFromIntTo.java b/elemental/src/elemental/util/MapFromIntTo.java
deleted file mode 100644
index 7a65cf9..0000000
--- a/elemental/src/elemental/util/MapFromIntTo.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from <code>int</code> to objects.
- * 
- * @see elemental.js.util.JsMapFromIntTo
- */
-@Deprecated
-public interface MapFromIntTo<V> {
-  /**
-   * Retrieves a value for the specified key.
-   */
-  V get(int key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(int key);
-
-  /**
-   * The keys contained within this map.
-   * 
-   * This copies the keys into a new array.
-   */
-  ArrayOfInt keys();
-  
-  /**
-   * Associates a value to the specified key.
-   */  
-  void put(int key, V value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(int key);
-  
-  /**
-   * The values contained in this map.
-   * 
-   * This copies the values into a new array.
-   */
-  ArrayOf<V> values();  
-}
diff --git a/elemental/src/elemental/util/MapFromIntToString.java b/elemental/src/elemental/util/MapFromIntToString.java
deleted file mode 100644
index 136946e..0000000
--- a/elemental/src/elemental/util/MapFromIntToString.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from <code>int</code> to {@link String}.
- * 
- * @see elemental.js.util.JsMapFromIntToString
- */
-@Deprecated
-public interface MapFromIntToString {
-
-  /**
-   * Retrieves a value for the specified key.
-   */
-  String get(int key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(int key);
-
-  /**
-   * The keys contained within this map.
-   * 
-   * This copies the keys into a new array.
-   */
-  ArrayOfInt keys();
-  
-  /**
-   * Associates a value to the specified key.
-   */  
-  void put(int key, String value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(int key);
-  
-  /**
-   * The values contained in this map.
-   * 
-   * This copies the values into a new array.
-   */
-  ArrayOfString values();
-}
diff --git a/elemental/src/elemental/util/MapFromStringTo.java b/elemental/src/elemental/util/MapFromStringTo.java
deleted file mode 100644
index 3732537..0000000
--- a/elemental/src/elemental/util/MapFromStringTo.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from {@link String} to any object type.
- * 
- * @param <V>
- * 
- * @see elemental.js.util.JsMapFromStringTo
- */
-@Deprecated
-public interface MapFromStringTo<V> {
-
-  /**
-   * Retrieves a value for the specified key.
-   */  
-  V get(String key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(String key);
-
-  /**
-   * The keys contained within this map.
-   * 
-   * This copies the keys into a new array.
-   */
-  ArrayOfString keys();
-
-  /**
-   * Associates a value to the specified key.
-   */
-  void put(String key, V value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(String key);
-
-  /**
-   * The values contained in this map.
-   * 
-   * This copies the values into a new array.
-   */
-  ArrayOf<V> values();
-}
diff --git a/elemental/src/elemental/util/MapFromStringToBoolean.java b/elemental/src/elemental/util/MapFromStringToBoolean.java
deleted file mode 100644
index 8ad564d..0000000
--- a/elemental/src/elemental/util/MapFromStringToBoolean.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from {@link String} to <code>boolean</code> types.
- *
- * @see elemental.js.util.JsMapFromStringToBoolean
- */
-@Deprecated
-public interface MapFromStringToBoolean {
-
-  /**
-   * Retrieves a value for the specified key.
-   */
-  boolean get(String key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(String key);
-
-  /**
-   * The keys contained within this map.
-   *
-   * This copies the keys into a new array.
-   */
-  ArrayOfString keys();
-
-  /**
-   * Associates a value to the specified key.
-   */
-  void put(String key, boolean value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(String key);
-
-  /**
-   * The values contained in this map.
-   *
-   * This copies the values into a new array.
-   */
-  ArrayOfBoolean values();
-}
diff --git a/elemental/src/elemental/util/MapFromStringToInt.java b/elemental/src/elemental/util/MapFromStringToInt.java
deleted file mode 100644
index 2f17f6a..0000000
--- a/elemental/src/elemental/util/MapFromStringToInt.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from {@link String} to <code>int</code>.
- * 
- * @see elemental.js.util.JsMapFromStringToInt
- */
-@Deprecated
-public interface MapFromStringToInt {
-
-  /**
-   * Retrieves a value for the specified key.
-   */
-  int get(String key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(String key);
-  
-  /**
-   * The keys contained within this map.
-   * 
-   * This copies the keys into a new array.
-   */
-  ArrayOfString keys();
-  
-  /**
-   * Associates a value to the specified key.
-   */
-  void put(String key, int value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(String key);
-  
-  /**
-   * The values contained in this map.
-   * 
-   * This copies the values into a new array.
-   */  
-  ArrayOfInt values();
-}
diff --git a/elemental/src/elemental/util/MapFromStringToNumber.java b/elemental/src/elemental/util/MapFromStringToNumber.java
deleted file mode 100644
index 4e13093..0000000
--- a/elemental/src/elemental/util/MapFromStringToNumber.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from {@link String} to <code>double</code>.
- * 
- * @see elemental.js.util.JsMapFromStringToNumber
- */
-@Deprecated
-public interface MapFromStringToNumber {
-
-  /**
-   * Retrieves a value for the specified key.
-   */
-  double get(String key);
-
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(String key);
-
-  /**
-   * The keys contained within this map.
-   *
-   * This copies the keys into a new array.
-   */
-  ArrayOfString keys();
-
-  /**
-   * Associates a value to the specified key.
-   */
-  void put(String key, double value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(String key);
-
-  /**
-   * The values contained in this map.
-   *
-   * This copies the values into a new array.
-   */
-  ArrayOfNumber values();
-}
diff --git a/elemental/src/elemental/util/MapFromStringToString.java b/elemental/src/elemental/util/MapFromStringToString.java
deleted file mode 100644
index 0afaeb5..0000000
--- a/elemental/src/elemental/util/MapFromStringToString.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * A lightweight map from {@link String} to {@link String}.
- * 
- * @see elemental.js.util.JsMapFromStringToString
- */
-@Deprecated
-public interface MapFromStringToString {
-
-  /**
-   * Retrieves a value for the specified key.
-   */
-  String get(String key);
-  
-  /**
-   * Indicates whether the map contains a value for the specified key.
-   */
-  boolean hasKey(String key);
-
-  /**
-   * The keys contained within this map.
-   * 
-   * This copies the keys into a new array.
-   */
-  ArrayOfString keys();
-  
-  /**
-   * Associates a value to the specified key.
-   */
-  void put(String key, String value);
-
-  /**
-   * Removes the value associated with the specified value, if one exists.
-   */
-  void remove(String key);
-
-  /**
-   * The values contained in this map.
-   * 
-   * This copies the values into a new array.
-   */
-  ArrayOfString values();
-}
diff --git a/elemental/src/elemental/util/Mappable.java b/elemental/src/elemental/util/Mappable.java
deleted file mode 100644
index 9797ad8..0000000
--- a/elemental/src/elemental/util/Mappable.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * An object which can act like a Javascript object with String keys.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public interface Mappable /* <T> */ {
-
-  /**
-   * Gets the value at a given key.
-   *
-   * @param key the key to be retrieved
-   * @return the value at the given index
-   */
-    Object /* T */ at(String key);
-
-  /**
-   * Sets the value at a given key.
-   *
-   * @param key the key to assign to
-   * @return the value at the given index
-   */
-  void setAt(String key, Object /* T */ value);
-}
diff --git a/elemental/src/elemental/util/Settable.java b/elemental/src/elemental/util/Settable.java
deleted file mode 100644
index 94f097d..0000000
--- a/elemental/src/elemental/util/Settable.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * Models an object which can act like a Javascript array capable of indexed assignment.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public interface Settable /* <T> */ extends Indexable /* <T> */ {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @param value the value to be set
-   */
-    void setAt(int index, Object /* T */ value);
-}
diff --git a/elemental/src/elemental/util/SettableInt.java b/elemental/src/elemental/util/SettableInt.java
deleted file mode 100644
index a1cb506..0000000
--- a/elemental/src/elemental/util/SettableInt.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * Models an object which can act like a Javascript array capable of indexed assignment.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public interface SettableInt extends IndexableInt {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @param value the value to be set
-   */
-    void setAt(int index, int value);
-}
diff --git a/elemental/src/elemental/util/SettableNumber.java b/elemental/src/elemental/util/SettableNumber.java
deleted file mode 100644
index 74a52ea..0000000
--- a/elemental/src/elemental/util/SettableNumber.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-/**
- * Models an object which can act like a Javascript array capable of indexed assignment.
- */
-// TODO (cromwellian) add generic when JSO bug in gwt-dev fixed
-@Deprecated
-public interface SettableNumber extends IndexableNumber {
-
-  /**
-   * Gets the value at a given index.
-   *
-   * @param index the index to be retrieved
-   * @param value the value to be set
-   */
-    void setAt(int index, double value);
-}
diff --git a/elemental/src/elemental/util/Timer.java b/elemental/src/elemental/util/Timer.java
deleted file mode 100644
index fce710d..0000000
--- a/elemental/src/elemental/util/Timer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import static elemental.client.Browser.getWindow;
-
-import elemental.html.Window;
-import elemental.dom.TimeoutHandler;
-
-/**
- * A simplified, browser-safe timer class. This class serves the same purpose as
- * java.util.Timer, but is simplified because of the single-threaded
- * environment.
- * 
- * To schedule a timer, simply create a subclass of it (overriding {@link #run})
- * and call {@link #schedule} or {@link #scheduleRepeating}.
- */
-@Deprecated
-public abstract class Timer {
-
-  private boolean isRepeating;
-  private int timerId;
-
-  /**
-   * Cancels this timer.
-   */
-  public void cancel() {
-    if (isRepeating) {
-      getWindow().clearInterval(timerId);
-    } else {
-      getWindow().clearTimeout(timerId);
-    }
-  }
-
-  /**
-   * This method will be called when a timer fires. Override it to implement the
-   * timer's logic.
-   */
-  public abstract void run();
-
-  /**
-   * Schedules a timer to elapse in the future.
-   * 
-   * @param delayMillis how long to wait before the timer elapses, in
-   *          milliseconds
-   */
-  public void schedule(int delayMillis) {
-    if (delayMillis < 0) {
-      throw new IllegalArgumentException("must be non-negative");
-    }
-    cancel();
-    isRepeating = false;
-
-    timerId = getWindow().setTimeout(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        run();
-      }
-    }, delayMillis);
-  }
-
-  /**
-   * Schedules a timer that elapses repeatedly.
-   * 
-   * @param periodMillis how long to wait before the timer elapses, in
-   *          milliseconds, between each repetition
-   */
-  public void scheduleRepeating(int periodMillis) {
-    if (periodMillis <= 0) {
-      throw new IllegalArgumentException("must be positive");
-    }
-    cancel();
-    isRepeating = true;
-    timerId = getWindow().setInterval(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        run();
-      }
-    }, periodMillis);
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreArrayOf.java b/elemental/src/elemental/util/impl/JreArrayOf.java
deleted file mode 100644
index cd2582b..0000000
--- a/elemental/src/elemental/util/impl/JreArrayOf.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-
-import elemental.util.ArrayOf;
-import elemental.util.CanCompare;
-
-/**
- * JRE implementation of ArrayOf for server and dev mode.
- */
-@Deprecated
-public class JreArrayOf<T> implements ArrayOf<T> {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE ArrayList. A direct
-   * implementation would be more efficient. 
-   */
-  private ArrayList<T> array;
-
-  public JreArrayOf() {
-    array = new ArrayList<T>();
-  }
-
-  JreArrayOf(ArrayList<T> array) {
-    this.array = array;
-  }
-
-  @Override
-  public ArrayOf<T> concat(ArrayOf<T> values) {
-    assert values instanceof JreArrayOf;
-    ArrayList<T> toReturn = new ArrayList<T>(array);
-    toReturn.addAll(((JreArrayOf<T>) values).array);
-    return new JreArrayOf<T>(toReturn);
-  }
-
-  @Override
-  public boolean contains(T value) {
-    return array.contains(value);
-  }
-
-  @Override
-  public T get(int index) {
-    return index >= length() ? null : array.get(index);
-  }
-
-  @Override
-  public int indexOf(T value) {
-    return array.indexOf(value);
-  }
-
-  @Override
-  public void insert(int index, T value) {
-    if (index >= length()) {
-      array.add(value);
-    } else {
-      if (index < 0) {
-        index = index + length();
-        if (index < 0) {
-          index = 0;
-        }
-      }
-      array.add(index, value);
-    }
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return array.isEmpty();
-  }
-
-  @Override
-  public String join() {
-    return join(",");
-  }
-
-  @Override
-  public String join(String separator) {
-    StringBuilder toReturn = new StringBuilder();
-    boolean first = true;
-    for (T val : array) {
-      if (first) {
-        first = false;
-      } else {
-        toReturn.append(separator);
-      }
-      // JS treats null as "" for purposes of join()
-      toReturn.append(val == null ? "" : toStringWithTrim(val));
-    }
-    return toReturn.toString();
-  }
-
-  @Override
-  public int length() {
-    return array.size();
-  }
-
-  @Override
-  public T peek() {
-    return isEmpty() ? null : array.get(array.size() - 1);
-  }
-
-  @Override
-  public T pop() {
-    return isEmpty() ? null : array.remove(array.size() - 1);
-  }
-
-  @Override
-  public void push(T value) {
-    array.add(value);
-  }
-
-  @Override
-  public void remove(T value) {
-    array.remove(value);
-  }
-
-  @Override
-  public void removeByIndex(int index) {
-    if (index < length()) {
-      array.remove(index);
-    }
-  }
-
-  @Override
-  public void set(int index, T value) {
-    ensureLength(index);
-    array.set(index, value);
-  }
-
-  @Override
-  public void setLength(int length) {
-    if (length > length()) {
-      for (int i = length(); i < length; i++) {
-        array.add(null);
-      }
-    } else if (length < length()) {
-      for (int i = length(); i > length; i--) {
-        array.remove(i - 1);
-      }
-    }
-  }
-
-  @Override
-  public T shift() {
-    return isEmpty() ? null : array.remove(0);
-  }
-
-  @Override
-  public void sort(final CanCompare<T> comparator) {
-    Collections.sort(array, new Comparator<T>() {
-      @Override
-      public int compare(T o1, T o2) {
-        return comparator.compare(o1, o2);
-      }
-    });
-  }
-
-  @Override
-  public ArrayOf<T> splice(int index, int count) {
-    ArrayList<T> toReturn = new ArrayList<T>(
-        array.subList(index, index + count));
-    for (int i = 0; i < count && !isEmpty(); i++) {
-      array.remove(index);
-    }
-    return new JreArrayOf<T>(toReturn);
-  }
-
-  @Override
-  public void unshift(T value) {
-    array.add(0, value);
-  }
-
-  private void ensureLength(int index) {
-    if (index >= length()) {
-      setLength(index + 1);
-    }
-  }
-
-  static String toStringWithTrim(Object obj) {
-    if (obj instanceof Number) {
-      String numberStr = obj.toString();
-      if (numberStr.endsWith(".0")) {
-        numberStr = numberStr.substring(0, numberStr.length() - 2);
-      }
-      return numberStr;
-    }
-    return obj.toString();
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreArrayOfBoolean.java b/elemental/src/elemental/util/impl/JreArrayOfBoolean.java
deleted file mode 100644
index 8731e27..0000000
--- a/elemental/src/elemental/util/impl/JreArrayOfBoolean.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfBoolean;
-import elemental.util.Collections;
-
-/**
- * JRE implementation of ArrayOfBoolean for server and dev mode.
- */
-@Deprecated
-public class JreArrayOfBoolean implements ArrayOfBoolean {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE ArrayList. A direct
-   * implementation would be more efficient.
-   */
-
-  public ArrayOfBoolean concat(ArrayOfBoolean values) {
-    return new JreArrayOfBoolean(array.concat(((JreArrayOfBoolean) values).array));
-  }
-
-  public boolean contains(boolean value) {
-    return array.contains(value);
-  }
-
-  @Override
-  public boolean get(int index) {
-    return array.get(index);
-  }
-
-  public int indexOf(boolean value) {
-    return array.indexOf(value);
-  }
-
-  public void insert(int index, boolean value) {
-    array.insert(index, value);
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return array.isEmpty();
-  }
-
-  @Override
-  public boolean isSet(int index) {
-    return array.get(index) != null;
-  }
-
-  @Override
-  public String join() {
-    return array.join();
-  }
-
-  @Override
-  public String join(String separator) {
-    return array.join(separator);
-  }
-
-  @Override
-  public int length() {
-    return array.length();
-  }
-
-  @Override
-  public boolean peek() {
-    return array.peek();
-  }
-
-  @Override
-  public boolean pop() {
-    return array.pop();
-  }
-
-  public void push(boolean value) {
-    array.push(value);
-  }
-
-  public void remove(boolean value) {
-    array.remove(value);
-  }
-
-  @Override
-  public void removeByIndex(int index) {
-    array.removeByIndex(index);
-  }
-
-  public void set(int index, boolean value) {
-    array.set(index, value);
-  }
-
-  @Override
-  public void setLength(int length) {
-    array.setLength(length);
-  }
-
-  @Override
-  public boolean shift() {
-    return array.shift();
-  }
-
-  @Override
-  public ArrayOfBoolean splice(int index, int count) {
-    return new JreArrayOfBoolean(array.splice(index, count));
-  }
-
-  public void unshift(boolean value) {
-    array.unshift(value);
-  }
-
-  private ArrayOf<Boolean> array;
-
-  public JreArrayOfBoolean() {
-    array = Collections.arrayOf();
-  }
-
-  JreArrayOfBoolean(ArrayOf<Boolean> array) {
-     this.array = array;
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreArrayOfInt.java b/elemental/src/elemental/util/impl/JreArrayOfInt.java
deleted file mode 100644
index d85cdcc..0000000
--- a/elemental/src/elemental/util/impl/JreArrayOfInt.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfInt;
-import elemental.util.CanCompare;
-import elemental.util.CanCompareInt;
-import elemental.util.Collections;
-
-/**
- * JRE implementation of ArrayOfInt for server and dev mode.
- */
-@Deprecated
-public class JreArrayOfInt implements ArrayOfInt {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE ArrayList. A direct
-   * implementation would be more efficient.
-   */
-
-  public ArrayOfInt concat(ArrayOfInt values) {
-    return new JreArrayOfInt(array.concat(((JreArrayOfInt) values).array));
-  }
-
-  public boolean contains(int value) {
-    return array.contains(value);
-  }
-
-  @Override
-  public int get(int index) {
-    return array.get(index);
-  }
-
-  public int indexOf(int value) {
-    return array.indexOf(value);
-  }
-
-  public void insert(int index, int value) {
-    array.insert(index, value);
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return array.isEmpty();
-  }
-
-  @Override
-  public boolean isSet(int index) {
-    return array.get(index) != null;
-  }
-
-  @Override
-  public String join() {
-    return array.join();
-  }
-
-  @Override
-  public String join(String separator) {
-    return array.join(separator);
-  }
-
-  @Override
-  public int length() {
-    return array.length();
-  }
-
-  @Override
-  public int peek() {
-    return array.peek();
-  }
-
-  @Override
-  public int pop() {
-    return array.pop();
-  }
-
-  public void push(int value) {
-    array.push(value);
-  }
-
-  public void remove(int value) {
-    array.remove(value);
-  }
-
-  @Override
-  public void removeByIndex(int index) {
-    array.removeByIndex(index);
-  }
-
-  public void set(int index, int value) {
-    array.set(index, value);
-  }
-
-  @Override
-  public void setLength(int length) {
-    array.setLength(length);
-  }
-
-  @Override
-  public int shift() {
-    return array.shift();
-  }
-
-  @Override
-  public void sort() {
-    array.sort(new CanCompare<Integer>() {
-      @Override
-      public int compare(Integer a, Integer b) {
-        return a == null ? (a == b ? 0 : -1) : a.compareTo(b);
-      }
-    });
-  }
-
-  @Override
-  public void sort(final CanCompareInt comparator) {
-    array.sort(new CanCompare<Integer>() {
-      @Override
-      public int compare(Integer a, Integer b) {
-        return comparator.compare(a, b);
-      }
-    });
-  }
-
-  @Override
-  public ArrayOfInt splice(int index, int count) {
-    return new JreArrayOfInt(array.splice(index, count));
-  }
-
-  public void unshift(int value) {
-    array.unshift(value);
-  }
-
-  private ArrayOf<Integer> array;
-
-  public JreArrayOfInt() {
-    array = Collections.arrayOf();
-  }
-
-  JreArrayOfInt(ArrayOf<Integer> array) {
-     this.array = array;
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreArrayOfNumber.java b/elemental/src/elemental/util/impl/JreArrayOfNumber.java
deleted file mode 100644
index bdc5015..0000000
--- a/elemental/src/elemental/util/impl/JreArrayOfNumber.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfNumber;
-import elemental.util.CanCompare;
-import elemental.util.CanCompareNumber;
-import elemental.util.Collections;
-
-/**
- * JRE implementation of ArrayOfInt for server and dev mode.
- */
-@Deprecated
-public class JreArrayOfNumber implements ArrayOfNumber {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE ArrayList. A direct
-   * implementation would be more efficient.
-   */
-
-  public ArrayOfNumber concat(ArrayOfNumber values) {
-    return new JreArrayOfNumber(array.concat(((JreArrayOfNumber) values).array));
-  }
-
-  public boolean contains(double value) {
-    return array.contains(value);
-  }
-
-  @Override
-  public double get(int index) {
-    return array.get(index);
-  }
-
-  public int indexOf(double value) {
-    return array.indexOf(value);
-  }
-
-  public void insert(int index, double value) {
-    array.insert(index, value);
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return array.isEmpty();
-  }
-
-  @Override
-  public boolean isSet(int index) {
-    return array.get(index) != null;
-  }
-
-  @Override
-  public String join() {
-    return array.join();
-  }
-
-  @Override
-  public String join(String separator) {
-    return array.join(separator);
-  }
-
-  @Override
-  public int length() {
-    return array.length();
-  }
-
-  @Override
-  public double peek() {
-    return array.peek();
-  }
-
-  @Override
-  public double pop() {
-    return array.pop();
-  }
-
-  public void push(double value) {
-    array.push(value);
-  }
-
-  public void remove(double value) {
-    array.remove(value);
-  }
-
-  @Override
-  public void removeByIndex(int index) {
-    array.removeByIndex(index);
-  }
-
-  public void set(int index, double value) {
-    array.set(index, value);
-  }
-
-  @Override
-  public void setLength(int length) {
-    array.setLength(length);
-  }
-
-  @Override
-  public double shift() {
-    return array.shift();
-  }
-
-  @Override
-  public void sort() {
-    array.sort(new CanCompare<Double>() {
-      @Override
-      public int compare(Double a, Double b) {
-        return a == null ? (a == b ? 0 : -1) : a.compareTo(b);
-      }
-    });
-  }
-
-  @Override
-  public void sort(final CanCompareNumber comparator) {
-    array.sort(new CanCompare<Double>() {
-      @Override
-      public int compare(Double a, Double b) {
-        return comparator.compare(a, b);
-      }
-    });
-  }
-
-  @Override
-  public ArrayOfNumber splice(int index, int count) {
-    return new JreArrayOfNumber(array.splice(index, count));
-  }
-
-  public void unshift(double value) {
-    array.unshift(value);
-  }
-
-  private ArrayOf<Double> array;
-
-  public JreArrayOfNumber() {
-    array = Collections.arrayOf();
-  }
-
-  JreArrayOfNumber(ArrayOf<Double> array) {
-     this.array = array;
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreArrayOfString.java b/elemental/src/elemental/util/impl/JreArrayOfString.java
deleted file mode 100644
index 66436d9..0000000
--- a/elemental/src/elemental/util/impl/JreArrayOfString.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-
-import java.util.ArrayList;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfString;
-import elemental.util.CanCompare;
-import elemental.util.CanCompareString;
-import elemental.util.Collections;
-
-/**
- * JRE implementation of ArrayOfString for server and dev mode.
- */
-@Deprecated
-public class JreArrayOfString implements ArrayOfString {
-
-  private ArrayOf<String> array;
-
-  public JreArrayOfString(ArrayList<String> array) {
-    this((new JreArrayOf<String>(array)));
-  }
-
-  public JreArrayOfString() {
-    array = Collections.arrayOf();
-  }
-
-  JreArrayOfString(ArrayOf<String> array) {
-     this.array = array;
-  }
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE ArrayList. A direct
-   * implementation would be more efficient.
-   */
-
-  public ArrayOfString concat(ArrayOfString values) {
-    return new JreArrayOfString(array.concat(((JreArrayOfString) values).array));
-  }
-
-  public boolean contains(String value) {
-    return array.contains(value);
-  }
-
-  @Override
-  public String get(int index) {
-    return array.get(index);
-  }
-
-  public int indexOf(String value) {
-    return array.indexOf(value);
-  }
-
-  public void insert(int index, String value) {
-    array.insert(index, value);
-  }
-
-  @Override
-  public boolean isEmpty() {
-    return array.isEmpty();
-  }
-
-  @Override
-  public String join() {
-    return array.join();
-  }
-
-  @Override
-  public String join(String separator) {
-    return array.join(separator);
-  }
-
-  @Override
-  public int length() {
-    return array.length();
-  }
-
-  @Override
-  public String peek() {
-    return array.peek();
-  }
-
-  @Override
-  public String pop() {
-    return array.pop();
-  }
-
-  public void push(String value) {
-    array.push(value);
-  }
-
-  public void remove(String value) {
-    array.remove(value);
-  }
-
-  @Override
-  public void removeByIndex(int index) {
-    array.removeByIndex(index);
-  }
-
-  public void set(int index, String value) {
-    array.set(index, value);
-  }
-
-  @Override
-  public void setLength(int length) {
-    array.setLength(length);
-  }
-
-  @Override
-  public String shift() {
-    return array.shift();
-  }
-
-  @Override
-  public void sort() {
-    array.sort(new CanCompare<String>() {
-      @Override
-      public int compare(String a, String b) {
-        return a == null ? (a == b ? 0 : -1) : a.compareTo(b);
-      }
-    });
-  }
-
-  @Override
-  public void sort(final CanCompareString comparator) {
-    array.sort(new CanCompare<String>() {
-      @Override
-      public int compare(String a, String b) {
-        return comparator.compare(a, b);
-      }
-    });
-  }
-
-  @Override
-  public ArrayOfString splice(int index, int count) {
-    return new JreArrayOfString(array.splice(index, count));
-  }
-
-  public void unshift(String value) {
-    array.unshift(value);
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromIntTo.java b/elemental/src/elemental/util/impl/JreMapFromIntTo.java
deleted file mode 100644
index 0a0c13b..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromIntTo.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfInt;
-import elemental.util.MapFromIntTo;
-
-/**
- * JRE implementation of MapFromIntTo for server and dev mode.
- */
-@Deprecated
-public class JreMapFromIntTo<T> implements MapFromIntTo<T> {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE HashMap. A direct
-   * implementation would be more efficient.
-   */
-  private HashMap<Integer, T> map;
-
-  public JreMapFromIntTo() {
-    map = new HashMap<Integer,T>();
-  }
-
-  JreMapFromIntTo(HashMap<Integer, T> map) {
-    this.map = map;
-  }
-
-  @Override
-  public T get(int key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(int key) {
-    return map.containsKey(key);
-  }
-
-  @Override
-  public ArrayOfInt keys() {
-    return new JreArrayOfInt(new JreArrayOf<Integer>(new ArrayList<Integer>(map.keySet())));
-  }
-
-  @Override
-  public void put(int key, T value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(int key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOf<T> values() {
-    return new JreArrayOf<T>(new ArrayList<T>(map.values()));
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromIntToString.java b/elemental/src/elemental/util/impl/JreMapFromIntToString.java
deleted file mode 100644
index 41928ac..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromIntToString.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromIntToString;
-
-/**
- * JRE implementation of MapFromIntToString for server and dev mode.
- */
-@Deprecated
-public class JreMapFromIntToString implements MapFromIntToString {
-
- /*
-   * TODO(cromwellian): this implementation delegates, direct implementation would be more efficient.
-   */
-  private JreMapFromIntTo<String> map;
-
-  public JreMapFromIntToString() {
-    map = new JreMapFromIntTo<String>();
-  }
-
-  @Override
-  public String get(int key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(int key) {
-    return map.hasKey(key);
-  }
-
-  @Override
-  public ArrayOfInt keys() {
-    return map.keys();
-  }
-
-  @Override
-  public void put(int key, String value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(int key) {
-    map.remove(key);
-  }
-
-  public void set(int key, String value) {
-    put(key, value);
-  }
-
-  @Override
-  public ArrayOfString values() {
-    return new JreArrayOfString(map.values());
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromStringTo.java b/elemental/src/elemental/util/impl/JreMapFromStringTo.java
deleted file mode 100644
index e45472a..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromStringTo.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringTo;
-
-/**
- * JRE implementation of MapFromStringTo for server and dev mode.
- */
-@Deprecated
-public class JreMapFromStringTo<T> implements MapFromStringTo<T> {
-
-  /*
-   * TODO(cromwellian): this implemation uses JRE HashMap. A direct
-   * implementation would be more efficient.
-   */
-  private HashMap<String, T> map;
-
-  public JreMapFromStringTo() {
-    map = new HashMap<String,T>();
-  }
-
-  JreMapFromStringTo(HashMap<String, T> map) {
-    this.map = map;
-  }
-
-
-  @Override
-  public T get(String key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.containsKey(key);
-  }
-
-  @Override
-  public ArrayOfString keys() {
-    return new JreArrayOfString(new ArrayList<String>(map.keySet()));
-  }
-
-  @Override
-  public void put(String key, T value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOf<T> values() {
-    return new JreArrayOf<T>(new ArrayList<T>(map.values()));
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromStringToBoolean.java b/elemental/src/elemental/util/impl/JreMapFromStringToBoolean.java
deleted file mode 100644
index e69d6e7..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromStringToBoolean.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import elemental.util.ArrayOfBoolean;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringToBoolean;
-
-/**
- * JRE implementation of MapFromStringToBoolean for server and dev mode.
- */
-@Deprecated
-public class JreMapFromStringToBoolean implements MapFromStringToBoolean {
-
- /*
-   * TODO(cromwellian): this implementation delegates, direct implementation would be more efficient.
-   */
-  private JreMapFromStringTo<Boolean> map;
-
-  public JreMapFromStringToBoolean() {
-    map = new JreMapFromStringTo<Boolean>();
-  }
-
-  @Override
-  public boolean get(String key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.hasKey(key);
-  }
-
-  @Override
-  public ArrayOfString keys() {
-    return map.keys();
-  }
-
-  @Override
-  public void put(String key, boolean value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOfBoolean values() {
-    return new JreArrayOfBoolean(map.values());
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromStringToInt.java b/elemental/src/elemental/util/impl/JreMapFromStringToInt.java
deleted file mode 100644
index 2cde02d..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromStringToInt.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringToInt;
-
-/**
- * JRE implementation of MapFromStringToInt for server and dev mode.
- */
-@Deprecated
-public class JreMapFromStringToInt implements MapFromStringToInt {
-
-  /*
-   * TODO(cromwellian): this implementation delegates, direct implementation would be more efficient.
-   */
-  private JreMapFromStringTo<Integer> map;
-
-  public JreMapFromStringToInt() {
-    map = new JreMapFromStringTo<Integer>();
-  }
-
-  @Override
-  public int get(String key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.hasKey(key);
-  }
-
-  @Override
-  public ArrayOfString keys() {
-    return map.keys();
-  }
-
-  @Override
-  public void put(String key, int value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOfInt values() {
-    return new JreArrayOfInt(map.values());
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromStringToNumber.java b/elemental/src/elemental/util/impl/JreMapFromStringToNumber.java
deleted file mode 100644
index f91fc48..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromStringToNumber.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import elemental.util.ArrayOfNumber;
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringToNumber;
-
-/**
- * JRE implementation of MapFromStringToNumber for server and dev mode.
- */
-@Deprecated
-public class JreMapFromStringToNumber implements MapFromStringToNumber {
-
-  /*
-   * TODO(cromwellian): this implementation delegates, direct implementation would be more efficient.
-   */
-  private JreMapFromStringTo<Double> map;
-
-  public JreMapFromStringToNumber() {
-    map = new JreMapFromStringTo<Double>();
-  }
-
-  @Override
-  public double get(String key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.hasKey(key);
-  }
-
-  @Override
-  public ArrayOfString keys() {
-    return map.keys();
-  }
-
-  @Override
-  public void put(String key, double value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOfNumber values() {
-    return new JreArrayOfNumber(map.values());
-  }
-}
diff --git a/elemental/src/elemental/util/impl/JreMapFromStringToString.java b/elemental/src/elemental/util/impl/JreMapFromStringToString.java
deleted file mode 100644
index 4dae947..0000000
--- a/elemental/src/elemental/util/impl/JreMapFromStringToString.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util.impl;
-
-import elemental.util.ArrayOfString;
-import elemental.util.MapFromStringToString;
-
-/**
- * JRE implementation of MapFromStringToString for server and dev mode.
- */
-@Deprecated
-public class JreMapFromStringToString implements MapFromStringToString {
-
-  /*
-   * TODO(cromwellian): this implementation delegates, direct implementation would be more efficient.
-   */
-  private JreMapFromStringTo<String> map;
-
-  public JreMapFromStringToString() {
-    map = new JreMapFromStringTo<String>();
-  }
-
-  @Override
-  public String get(String key) {
-    return map.get(key);
-  }
-
-  @Override
-  public boolean hasKey(String key) {
-    return map.hasKey(key);
-  }
-
-  @Override
-  public ArrayOfString keys() {
-    return map.keys();
-  }
-
-  @Override
-  public void put(String key, String value) {
-    map.put(key, value);
-  }
-
-  @Override
-  public void remove(String key) {
-    map.remove(key);
-  }
-
-  @Override
-  public ArrayOfString values() {
-    return new JreArrayOfString(map.values());
-  }
-}
diff --git a/elemental/tests/elemental/AllTests.java b/elemental/tests/elemental/AllTests.java
deleted file mode 100644
index ebdfb2d..0000000
--- a/elemental/tests/elemental/AllTests.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import elemental.client.BrowserTest;
-import elemental.events.EventTargetTest;
-import elemental.html.DocumentTest;
-import elemental.html.ElementTest;
-import elemental.html.WindowTest;
-import elemental.js.util.ArrayTests;
-import elemental.js.util.JsGlobalsTests;
-import elemental.js.util.MapFromIntTests;
-import elemental.js.util.MapFromStringTests;
-import elemental.js.util.StringUtilTests;
-import elemental.json.JsonUtilTest;
-import elemental.util.TimerTest;
-
-/**
- * Here lie all my tests.
- */
-public class AllTests {
-  public static Test suite() {
-    final TestSuite suite = new TestSuite();
-
-    // client
-    suite.addTestSuite(BrowserTest.class);
-
-    // events
-    // TODO(manolo): enable this test when it passes
-    // suite.addTestSuite(EventTargetTest.class);
-
-    // html
-    suite.addTestSuite(DocumentTest.class);
-    // TODO(manolo): enable these test when they pass
-    // suite.addTestSuite(ElementTest.class);
-    // suite.addTestSuite(WindowTest.class);
-
-    //json
-    suite.addTestSuite(JsonUtilTest.class);
-
-    // util
-    suite.addTestSuite(TimerTest.class);
-
-    // js.util
-    suite.addTestSuite(ArrayTests.class);
-    suite.addTestSuite(JsGlobalsTests.class);
-    suite.addTestSuite(MapFromStringTests.class);
-    suite.addTestSuite(MapFromIntTests.class);
-    suite.addTestSuite(StringUtilTests.class);
-
-    return suite;
-  }
-}
diff --git a/elemental/tests/elemental/client/BrowserTest.java b/elemental/tests/elemental/client/BrowserTest.java
deleted file mode 100644
index d70a3a7..0000000
--- a/elemental/tests/elemental/client/BrowserTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.client;
-
-import com.google.gwt.junit.DoNotRunWith;
-import com.google.gwt.junit.Platform;
-import com.google.gwt.junit.client.GWTTestCase;
-
-/**
- * Tests for {@link Browser}.
- */
-@DoNotRunWith(Platform.HtmlUnitUnknown)
-public class BrowserTest extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests the encode/decodeURI pass through correctly to the browser. This is
-   * not intended to be an exhaustive test of the actual behavior (on the
-   * assumption it's correct in the browser).
-   */
-  public void testEncodeDecodeURI() {
-    String uri = "~!@#$%^&*(){}[]=:/,;?+'\"\\";
-    String encodedURI = Browser.encodeURI(uri);
-    assertEquals("~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C", encodedURI);
-    String decodedURI = Browser.decodeURI(encodedURI);
-    assertEquals(uri, decodedURI);
-  }
-
-  /**
-   * Tests the encode/decodeURIComponent pass through correctly to the browser.
-   * This is not intended to be an exhaustive test of the actual behavior (on
-   * the assumption it's correct in the browser).
-   */
-  public void testEncodeDecodeURIComponent() {
-    String uri = "~!@#$%^&*(){}[]=:/,;?+'\"\\";
-    String encodedURI = Browser.encodeURIComponent(uri);
-    assertEquals("~!%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%2C%3B%3F%2B'%22%5C", encodedURI);
-    String decodedURI = Browser.decodeURIComponent(encodedURI);
-    assertEquals(uri, decodedURI);
-  }
-}
diff --git a/elemental/tests/elemental/events/EventTargetTest.java b/elemental/tests/elemental/events/EventTargetTest.java
deleted file mode 100644
index 8fc6517..0000000
--- a/elemental/tests/elemental/events/EventTargetTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.events;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import elemental.client.Browser;
-import elemental.dom.Document;
-import elemental.dom.Element;
-import elemental.html.ButtonElement;
-import elemental.html.TestUtils;
-
-/**
- * Tests for {@link EventTarget}.
- */
-public class EventTargetTest extends GWTTestCase {
-
-  private static class ListenerDidFire implements EventListener {
-    private boolean didFire;
-    public boolean didFire() {
-      return didFire;
-    }
-    
-    @Override
-    public void handleEvent(Event evt) {
-      didFire = true;
-    }    
-  }
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests that addEventListener() correctly adds a listener.
-   */
-  public void testAddEventListener() {
-    final Element body = Browser.getDocument().getBody();
-
-    final ListenerDidFire a = new ListenerDidFire();
-    final ListenerDidFire b = new ListenerDidFire();
-    
-    // Ensure that addEventListener works.
-    body.addEventListener("click", a, false);
-    // Ensure that setOnClick also works.
-    body.setOnclick(b);
-    
-    assertEquals(b, body.getOnclick());
-
-    TestUtils.click(body);
-    
-    assertTrue(a.didFire());
-    assertTrue(b.didFire());
-  }
-  
-  /**
-   * Tests that removeEventListener() correctly removes the listener, so that no
-   * events are fired afterwards.
-   */
-  @SuppressWarnings("deprecation")
-  public void testRemoveEventListener() {
-    final Element body = Browser.getDocument().getBody();
-
-    final ListenerDidFire listener = new ListenerDidFire();
-    
-    // Ensure that EventRemover works.
-    body.addEventListener("click", listener, false).remove();
-    TestUtils.click(body);
-    assertFalse(listener.didFire());
-    
-    // Ensure that removeEventListener works.
-    body.addEventListener("click", listener, false);
-    body.removeEventListener("click", listener, false);
-    TestUtils.click(body);
-    assertFalse(listener.didFire());
-    
-    // Ensure that onclick = null works.
-    body.setOnclick(listener);
-    body.setOnclick(null);
-    TestUtils.click(body);    
-    assertFalse(listener.didFire());    
-  }
-  
-  /**
-   * Tests that the {@link UncaughtExceptionHandler} gets called correctly when
-   * events are fired from a subinterface of {@link EventTarget}.
-   */
-  public void testUncaughtException() {
-    // Create a button with an event handler that will throw an exception.
-    Document doc = Browser.getDocument();
-    ButtonElement btn = doc.createButtonElement();
-    doc.getBody().appendChild(btn);
-
-    btn.addEventListener(Event.CLICK, new EventListener() {
-      @Override
-      public void handleEvent(Event evt) {
-        throw new RuntimeException("w00t!");
-      }
-    }, false);
-
-    // Setup the UncaughtExceptionHandler.
-    final Throwable[] ex = new Throwable[1];
-    GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
-      @Override
-      public void onUncaughtException(Throwable e) {
-        ex[0] = e;
-      }
-    });
-
-    // Click it and make sure the exception got caught.
-    TestUtils.click(btn);
-    assertNotNull(ex[0]);
-    assertEquals("w00t!", ex[0].getMessage());
-
-    // Clean up.
-    GWT.setUncaughtExceptionHandler(null);
-    doc.getBody().removeChild(btn);
-  }
-}
diff --git a/elemental/tests/elemental/html/DocumentTest.java b/elemental/tests/elemental/html/DocumentTest.java
deleted file mode 100644
index ad5bd78..0000000
--- a/elemental/tests/elemental/html/DocumentTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package elemental.html;
-
-import com.google.gwt.junit.DoNotRunWith;
-import com.google.gwt.junit.Platform;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import static elemental.client.Browser.getWindow;
-
-import elemental.dom.Document;
-
-/**
- * Tests {@link Document}.
- */
-public class DocumentTest extends GWTTestCase {
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests {@link Document#write}.
-   */
-  // For some reason it fails in HtmlUnit production mode. It also fails
-  // in real browsers because of pop up blocker.
-  @DoNotRunWith(Platform.Prod)
-  public void testWrite() {
-    final Window window = getWindow().open("about:blank", "_blank");
-    final Document document = window.getDocument();
-    document.write("<body>drink and drink and drink AND FIGHT</body>");
-    assertTrue(document.getBody().getTextContent().indexOf("drink and drink and drink AND FIGHT") != -1);
-  }
-}
diff --git a/elemental/tests/elemental/html/ElementTest.java b/elemental/tests/elemental/html/ElementTest.java
deleted file mode 100644
index f4f21e8..0000000
--- a/elemental/tests/elemental/html/ElementTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.html;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import static elemental.client.Browser.getDocument;
-
-import elemental.client.Browser;
-import elemental.dom.Document;
-import elemental.dom.Element;
-import elemental.events.Event;
-import elemental.events.EventListener;
-
-/**
- * Tests for HTMLElement.
- */
-public class ElementTest extends GWTTestCase {
-
-  private Element btn;
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests that addEventListener() actually fires events.
-   */
-  public void testEventListener() {
-    final boolean[] clicked = new boolean[1];
-    btn.addEventListener("click", new EventListener() {
-      @Override
-      public void handleEvent(Event evt) {
-        clicked[0] = true;
-      }
-    }, false);
-
-    TestUtils.click(btn);
-    assertTrue(clicked[0]);
-  }
-
-  /**
-   * Tests {@link Element#hasClassName(String)}.
-   */
-  public void testHasClassName() {
-    final Element e = btn;
-    e.setClassName("jimmy crack corn");
-    assertTrue(e.getClassList().contains("jimmy"));
-    assertTrue(e.getClassList().contains("crack"));
-    assertTrue(e.getClassList().contains("corn"));
-    assertFalse(e.getClassList().contains("jim"));
-    assertFalse(e.getClassList().contains("popcorn"));
-
-    e.setClassName("turtles");
-    assertTrue(e.getClassList().contains("turtles"));
-  }
-
-  /**
-   * Tests that setting Element.onclick actually fires events.
-   */
-  public void testOnClick() {
-    final boolean[] clicked = new boolean[1];
-    EventListener listener = new EventListener() {
-      @Override
-      public void handleEvent(Event evt) {
-        clicked[0] = true;
-      }
-    };
-    btn.setOnclick(listener);
-
-    TestUtils.click(btn);
-    assertTrue(clicked[0]);
-    assertEquals(listener, btn.getOnclick());
-  }
-
-  /**
-   * Tests that the {@link UncaughtExceptionHandler} gets called correctly when
-   * events are fired from {@link Element#setOnClick(EventListener)}.
-   */
-  public void testUncaughtException() {
-    // Create a button with an event handler that will throw an exception.
-    Document doc = Browser.getDocument();
-    ButtonElement btn = doc.createButtonElement();
-    doc.getBody().appendChild(btn);
-
-    btn.setOnclick(new EventListener() {
-      @Override
-      public void handleEvent(Event evt) {
-        throw new RuntimeException("w00t!");
-      }
-    });
-
-    // Setup the UncaughtExceptionHandler.
-    final Throwable[] ex = new Throwable[1];
-    GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
-      @Override
-      public void onUncaughtException(Throwable e) {
-        ex[0] = e;
-      }
-    });
-
-    // Click it and make sure the exception got caught.
-    TestUtils.click(btn);
-    assertNotNull(ex[0]);
-    assertEquals("w00t!", ex[0].getMessage());
-
-    // Clean up.
-    GWT.setUncaughtExceptionHandler(null);
-    doc.getBody().removeChild(btn);
-  }
-
-  @Override
-  protected void gwtSetUp() throws Exception {
-    btn = getDocument().createElement("button");
-    getDocument().getBody().appendChild(btn);
-  }
-
-  @Override
-  protected void gwtTearDown() throws Exception {
-    getDocument().getBody().removeChild(btn);
-  }
-}
diff --git a/elemental/tests/elemental/html/TestUtils.java b/elemental/tests/elemental/html/TestUtils.java
deleted file mode 100644
index 354bae9..0000000
--- a/elemental/tests/elemental/html/TestUtils.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.html;
-
-import static elemental.client.Browser.getDocument;
-
-import elemental.dom.Document;
-import elemental.events.EventTarget;
-import elemental.events.MouseEvent;
-
-/**
- * Utilities for simplifying DOM tests.
- */
-public class TestUtils {
-
-  /**
-   * Fires a left-click event on the given target (typically a DOM node).
-   */
-  public static void click(EventTarget target) {
-    MouseEvent evt = (MouseEvent) getDocument().createEvent(
-        Document.Events.MOUSE);
-    evt.initMouseEvent("click", true, true, null, 0, 0, 0, 0, 0, false, false,
-        false, false, MouseEvent.Button.PRIMARY, null);
-    target.dispatchEvent(evt);
-  }
-}
diff --git a/elemental/tests/elemental/html/WindowTest.java b/elemental/tests/elemental/html/WindowTest.java
deleted file mode 100644
index fabeb63..0000000
--- a/elemental/tests/elemental/html/WindowTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.html;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import static elemental.client.Browser.getDocument;
-import static elemental.client.Browser.getWindow;
-
-import elemental.dom.TimeoutHandler;
-import elemental.events.Event;
-import elemental.events.EventListener;
-
-/**
- * Tests for Window.
- */
-public class WindowTest extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests Window.addEventListener() catches events from the body.
-   */
-  public void testEventListener() {
-    final boolean[] clicked = new boolean[1];
-    getWindow().addEventListener("click", new EventListener() {
-      @Override
-      public void handleEvent(Event evt) {
-        clicked[0] = true;
-      }
-    }, false);
-    TestUtils.click(getDocument().getBody());
-    assertTrue(clicked[0]);
-  }
-
-  /**
-   * Tests Window.getSelection().
-   * TODO(knorton): Expand this into a more complete test.
-   */
-  public void testGetSelection() {
-    final Window window = getWindow();
-    final Selection selection = window.getSelection();
-    assertNotNull(selection);
-  }
-
-  /**
-   * Tests that Window.open() and Window.clearOpener().
-   */
-  public void testOpener() {
-    final Window window = getWindow();
-    final Window proxy = window.open("about:blank", "_blank");
-    assertNotNull(proxy.getOpener());
-    proxy.clearOpener();
-    assertNull(proxy.getOpener());
-    proxy.close();
-  }
-
-  /**
-   * Tests that Window.setTimeout() works.
-   */
-  public void testTimeout() {
-    delayTestFinish(1000);
-    getWindow().setTimeout(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        finishTest();
-      }
-    }, 500);
-  }
-
-  /**
-   * Tests that Window.setInterval() works repeatedly.
-   */
-  public void testInterval() {
-    final int[] handle = new int[1];
-    TimeoutHandler listener = new TimeoutHandler() {
-      int count;
-      @Override
-      public void onTimeoutHandler() {
-        // Make sure we see at least two events.
-        ++count;
-        if (count >= 2) {
-          getWindow().clearInterval(handle[0]);
-          finishTest();
-        }
-      }
-    };
-
-    delayTestFinish(1000);
-    handle[0] = getWindow().setInterval(listener, 100);
-  }
-
-  /**
-   * Tests that the {@link UncaughtExceptionHandler} gets called correctly when
-   * setTimeout() and setInterval() throw exceptions.
-   */
-  public void testUncaughtException() {
-    // Setup an UncaughtExceptionHandler to catch exceptions from setTimeout()
-    // and setInterval().
-    final Throwable[] ex = new Throwable[2];
-    GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
-      int count;
-      @Override
-      public void onUncaughtException(Throwable e) {
-        ex[count++] = e;
-      }
-    });
-
-    // Set a timeout and an interval, both of which will throw a RuntimException.
-    getWindow().setTimeout(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        throw new RuntimeException("w00t!");
-      }
-    }, 1);
-
-    final int[] intervalHandle = new int[1];
-    intervalHandle[0] = getWindow().setInterval(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        // We only want this to happen once, so clear the interval timer on the
-        // first fire.
-        getWindow().clearInterval(intervalHandle[0]);
-        throw new RuntimeException("w00t!");
-      }
-    }, 1);
-
-    // Wait for the test to finish asynchronously, and setup another timer to
-    // check that the exceptions got caught (this is kind of ugly, but there's
-    // no way around it if we want to test the "real" timer implementation as
-    // opposed to a mock implementation.
-    delayTestFinish(5000);
-    getWindow().setTimeout(new TimeoutHandler() {
-      @Override
-      public void onTimeoutHandler() {
-        // Assert that exceptions got caught.
-        assertNotNull(ex[0]);
-        assertNotNull(ex[1]);
-        assertEquals("w00t!", ex[0].getMessage());
-        assertEquals("w00t!", ex[1].getMessage());
-
-        // Clean up and finish.
-        GWT.setUncaughtExceptionHandler(null);
-        finishTest();
-      }
-    }, 500);
-  } 
-}
diff --git a/elemental/tests/elemental/js/util/ArrayJreTest.java b/elemental/tests/elemental/js/util/ArrayJreTest.java
deleted file mode 100644
index 438612f..0000000
--- a/elemental/tests/elemental/js/util/ArrayJreTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-/**
- * Run {@link ArrayTests} in the JVM
- */
-public class ArrayJreTest extends ArrayTests {
-
-  @Override
-  public String getModuleName() {
-    return null;
-  }
-}
diff --git a/elemental/tests/elemental/js/util/ArrayTests.java b/elemental/tests/elemental/js/util/ArrayTests.java
deleted file mode 100644
index 49823c6..0000000
--- a/elemental/tests/elemental/js/util/ArrayTests.java
+++ /dev/null
@@ -1,689 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import static elemental.js.util.TestUtils.assertSamelitude;
-
-import com.google.gwt.junit.client.GWTTestCase;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfBoolean;
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfNumber;
-import elemental.util.ArrayOfString;
-import elemental.util.CanCompare;
-import elemental.util.CanCompareInt;
-import elemental.util.CanCompareNumber;
-import elemental.util.CanCompareString;
-import elemental.util.Collections;
-
-/**
- * Tests for {@link ArrayOf}, {@link ArrayOfBoolean}, {@link ArrayOfInt},
- * {@link ArrayOfString} and {@link ArrayOfNumber}.
- *
- */
-public class ArrayTests extends GWTTestCase {
-  private static ArrayOfBoolean arrayFrom(boolean... items) {
-    final ArrayOfBoolean array = Collections.arrayOfBoolean();
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-    return array;
-  }
-
-  private static ArrayOfNumber arrayFrom(double... items) {
-    final ArrayOfNumber array = Collections.arrayOfNumber();
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-    return array;
-  }
-
-  private static ArrayOfInt arrayFrom(int... items) {
-    final ArrayOfInt array = Collections.arrayOfInt();
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-    return array;
-  }
-
-  private static ArrayOfString arrayFrom(String... items) {
-    final ArrayOfString array = Collections.arrayOfString();
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-    return array;
-  }
-
-  @SuppressWarnings("unchecked")
-  private static <T> ArrayOf<T> arrayFrom(T... items) {
-    final ArrayOf<T> array = (ArrayOf<T>) Collections.arrayOf();
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-    return array;
-  }
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests {@link ArrayOf}.
-   */
-  public void testArrays() {
-    // This is our test subject.
-    final ArrayOf<TestItem> array = Collections.arrayOf();
-
-    // These are items to put in him.
-    final TestItem[] items = new TestItem[] {new TestItem(0), new TestItem(1), new TestItem(2)};
-
-    // Let's put the items in him.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-
-    // Are the items in the right places?
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    // These are some more items to put in him.
-    final TestItem[] newItems = new TestItem[] {new TestItem(3), new TestItem(4), new TestItem(5)};
-
-    // Put all these items in where the others were.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.set(i, newItems[i]);
-      assertEquals(newItems[i], array.get(i));
-    }
-
-    // Shift our test subject to squeeze out the first item.
-    assertEquals(newItems[0], array.shift());
-    assertEquals(newItems.length - 1, array.length());
-
-    // Then unshift.
-    array.unshift(newItems[0]);
-    assertEquals(newItems[0], array.get(0));
-    assertEquals(newItems.length, array.length());
-
-    // Now join them together in harmony.
-    assertEquals("item3$item4$item5", array.join("$"));
-
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(i, array.indexOf(newItems[i]));
-      assertTrue(array.contains(newItems[i]));
-    }
-
-    final TestItem imposter = new TestItem(100);
-    assertEquals(-1, array.indexOf(imposter));
-    assertFalse(array.contains(imposter));
-
-    final TestItem[] itemsA = new TestItem[] {new TestItem(12), new TestItem(13)};
-    final TestItem[] itemsB = new TestItem[] {new TestItem(14), new TestItem(15)};
-    final ArrayOf<TestItem> a = arrayFrom(itemsA);
-    final ArrayOf<TestItem> b = arrayFrom(itemsB);
-    assertSamelitude(new TestItem[] {itemsA[0], itemsA[1], itemsB[0], itemsB[1]}, a.concat(b));
-    assertSamelitude(itemsA, a);
-    assertSamelitude(itemsB, b);
-  }
-
-  /**
-   * Tests {@link ArrayOfBoolean}.
-   */
-  public void testArraysOfBooleans() {
-    // This is our test subject.
-    final ArrayOfBoolean array = Collections.arrayOfBoolean();
-
-    // These are items to put in him.
-    final boolean[] items = new boolean[] {true, false, true};
-
-    // Let's put the items in him.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-
-    // Are the items in the right places?
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    // These are some more items to put in him.
-    final boolean[] newItems = new boolean[] {false, true, false};
-
-    // Put all these items in where the others were.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.set(i, newItems[i]);
-      assertEquals(newItems[i], array.get(i));
-    }
-
-    // Shift our test subject to squeeze out the first item.
-    assertEquals(newItems[0], array.shift());
-    assertEquals(newItems.length - 1, array.length());
-
-    // Then Unshift.
-    array.unshift(newItems[0]);
-    assertEquals(newItems[0], array.get(0));
-    assertEquals(newItems.length, array.length());
-
-    // Now join them together in harmony.
-    assertEquals("false$true$false", array.join("$"));
-
-    assertEquals(0, array.indexOf(false));
-    assertTrue(array.contains(false));
-    assertEquals(1, array.indexOf(true));
-    assertTrue(array.contains(true));
-
-    final ArrayOfBoolean allTrue = Collections.arrayOfBoolean();
-    allTrue.push(true);
-    allTrue.push(true);
-    allTrue.push(true);
-    assertEquals(-1, allTrue.indexOf(false));
-    assertFalse(allTrue.contains(false));
-
-    final boolean[] itemsA = new boolean[] {true, false};
-    final boolean[] itemsB = new boolean[] {false, true};
-    final ArrayOfBoolean a = arrayFrom(itemsA);
-    final ArrayOfBoolean b = arrayFrom(itemsB);
-    assertSamelitude(new boolean[] {itemsA[0], itemsA[1], itemsB[0], itemsB[1]}, a.concat(b));
-    assertSamelitude(itemsA, a);
-    assertSamelitude(itemsB, b);
-  }
-
-  /**
-   * Tests {@link ArrayOfInt}.
-   */
-  public void testArraysOfInts() {
-    // This is our test subject.
-    final ArrayOfInt array = Collections.arrayOfInt();
-
-    // These are items to put in him.
-    final int[] items = new int[] {0, 1, 2};
-
-    // Let's put the items in him.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-
-    // Are the items in the right places?
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    // These are some more items to put in him.
-    final int[] newItems = new int[] {3, 4, 5};
-
-    // Put all these items in where the others were.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.set(i, newItems[i]);
-      assertEquals(newItems[i], array.get(i));
-    }
-
-    // Shift our test subject to squeeze out the first item.
-    assertEquals(newItems[0], array.shift());
-    assertEquals(newItems.length - 1, array.length());
-
-    // Then Unshift.
-    array.unshift(newItems[0]);
-    assertEquals(newItems[0], array.get(0));
-    assertEquals(newItems.length, array.length());
-
-    // Now join them together in harmony.
-    assertEquals("3$4$5", array.join("$"));
-
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(i, array.indexOf(newItems[i]));
-      assertTrue(array.contains(newItems[i]));
-    }
-
-    final int imposter = 100;
-    assertEquals(-1, array.indexOf(imposter));
-    assertFalse(array.contains(imposter));
-
-    final int[] itemsA = new int[] {11, 12};
-    final int[] itemsB = new int[] {13, 14};
-    final ArrayOfInt a = arrayFrom(itemsA);
-    final ArrayOfInt b = arrayFrom(itemsB);
-    assertSamelitude(new int[] {itemsA[0], itemsA[1], itemsB[0], itemsB[1]}, a.concat(b));
-    assertSamelitude(itemsA, a);
-    assertSamelitude(itemsB, b);
-  }
-
-  /**
-   * Tests {@link ArrayOfNumber}.
-   */
-  public void testArraysOfNumbers() {
-    // This is our test subject.
-    final ArrayOfNumber array = Collections.arrayOfNumber();
-
-    // These are items to put in him.
-    final double[] items = new double[] {0.0, 1.0, 2.0};
-
-    // Let's put the items in him.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-
-    // Are the items in the right places?
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    // These are some more items to put in him.
-    final double[] newItems = new double[] {3.0, 4.0, 5.0};
-
-    // Put all these items in where the others were.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.set(i, newItems[i]);
-      assertEquals(newItems[i], array.get(i));
-    }
-
-    // Shift our test subject to squeeze out the first item.
-    assertEquals(newItems[0], array.shift());
-    assertEquals(newItems.length - 1, array.length());
-
-    // Then Unshift.
-    array.unshift(newItems[0]);
-    assertEquals(newItems[0], array.get(0));
-    assertEquals(newItems.length, array.length());
-
-    // Now join them together in harmony.
-    assertEquals("3$4$5", array.join("$"));
-
-    final double[] itemsA = new double[] {0.01, 0.02};
-    final double[] itemsB = new double[] {0.03, 0.04};
-    final ArrayOfNumber a = arrayFrom(itemsA);
-    final ArrayOfNumber b = arrayFrom(itemsB);
-    assertSamelitude(new double[] {itemsA[0], itemsA[1], itemsB[0], itemsB[1]}, a.concat(b));
-    assertSamelitude(itemsA, a);
-    assertSamelitude(itemsB, b);
-  }
-
-  /**
-   * Tests for {@link ArrayOfString}.
-   */
-  public void testArraysOfStrings() {
-    // This is our test subject.
-    final ArrayOfString array = Collections.arrayOfString();
-
-    // These are items to put in him.
-    final String[] items = new String[] {"zero goats", "one goat", "two goats"};
-
-    // Let's put the items in him.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.push(items[i]);
-    }
-
-    // Are the items in the right places?
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    // These are some more items to put in him.
-    final String[] newItems = new String[] {"three goats", "four goats", "SQUIRREL!"};
-
-    // Put all these items in where the others were.
-    for (int i = 0, n = items.length; i < n; ++i) {
-      array.set(i, newItems[i]);
-      assertEquals(newItems[i], array.get(i));
-    }
-
-    // Shift our test subject to squeeze out the first item.
-    assertEquals(newItems[0], array.shift());
-    assertEquals(newItems.length - 1, array.length());
-
-    // Then Unshift.
-    array.unshift(newItems[0]);
-    assertEquals(newItems[0], array.get(0));
-    assertEquals(newItems.length, array.length());
-
-    // Now join them together in harmony.
-    assertEquals("three goats$four goats$SQUIRREL!", array.join("$"));
-
-    for (int i = 0, n = items.length; i < n; ++i) {
-      assertEquals(i, array.indexOf(newItems[i]));
-      assertTrue(array.contains(newItems[i]));
-    }
-
-    final String imposter = "Pajamas?";
-    assertEquals(-1, array.indexOf(imposter));
-    assertFalse(array.contains(imposter));
-
-    final String[] itemsA = new String[] {"atlanta", "eagle"};
-    final String[] itemsB = new String[] {"chaps", "profit"};
-    final ArrayOfString a = arrayFrom(itemsA);
-    final ArrayOfString b = arrayFrom(itemsB);
-    assertSamelitude(new String[] {itemsA[0], itemsA[1], itemsB[0], itemsB[1]}, a.concat(b));
-    assertSamelitude(itemsA, a);
-    assertSamelitude(itemsB, b);
-  }
-
-  /**
-   * Tests {@link ArrayOf#insert(int, Object)}.
-   */
-  public void testInsertingIntoArrays() {
-    final ArrayOf<TestItem> array = Collections.arrayOf();
-
-    final TestItem a = new TestItem(0);
-    array.insert(0, a);
-    assertSamelitude(new TestItem[] {a}, array);
-
-    final TestItem b = new TestItem(1);
-    array.insert(0, b);
-    assertSamelitude(new TestItem[] {b, a}, array);
-
-    final TestItem c = new TestItem(2);
-    array.insert(100, c);
-    assertSamelitude(new TestItem[] {b, a, c}, array);
-
-    final TestItem d = new TestItem(3);
-    array.insert(-1, d);
-    assertSamelitude(new TestItem[] {b, a, d, c}, array);
-  }
-
-  /**
-   * Tests {@link ArrayOfBoolean#insert(int, boolean)}.
-   */
-  public void testInsertingIntoArraysOfBooleans() {
-    final ArrayOfBoolean array = Collections.arrayOfBoolean();
-
-    array.insert(0, true);
-    assertSamelitude(new boolean[] {true}, array);
-
-    array.insert(0, false);
-    assertSamelitude(new boolean[] {false, true}, array);
-
-    array.insert(100, false);
-    assertSamelitude(new boolean[] {false, true, false}, array);
-
-    array.insert(-1, true);
-    assertSamelitude(new boolean[] {false, true, true, false}, array);
-  }
-
-  /**
-   * Tests {@link ArrayOfInt#insert(int, int)}.
-   */
-  public void testInsertingIntoArraysOfInts() {
-    final ArrayOfInt array = Collections.arrayOfInt();
-
-    array.insert(0, 0);
-    assertSamelitude(new int[] {0}, array);
-
-    array.insert(0, 1);
-    assertSamelitude(new int[] {1, 0}, array);
-
-    array.insert(100, 2);
-    assertSamelitude(new int[] {1, 0, 2}, array);
-
-    array.insert(-1, 3);
-    assertSamelitude(new int[] {1, 0, 3, 2}, array);
-  }
-
-  /**
-   * Tests {@link ArrayOfNumber#insert(int, double)}.
-   */
-  public void testInsertingIntoArraysOfNumbers() {
-    final ArrayOfNumber array = Collections.arrayOfNumber();
-
-    array.insert(0, 0.1);
-    assertSamelitude(new double[] {0.1}, array);
-
-    array.insert(0, 0.2);
-    assertSamelitude(new double[] {0.2, 0.1}, array);
-
-    array.insert(100, 0.3);
-    assertSamelitude(new double[] {0.2, 0.1, 0.3}, array);
-
-    array.insert(-1, 0.4);
-    assertSamelitude(new double[] {0.2, 0.1, 0.4, 0.3}, array);
-  }
-
-  /**
-   * Tests {@link ArrayOfString#insert(int, String)}.
-   */
-  public void testInsertingIntoArraysOfStrings() {
-    final ArrayOfString array = Collections.arrayOfString();
-
-    array.insert(0, "beer");
-    assertSamelitude(new String[] {"beer"}, array);
-
-    array.insert(0, "cigars");
-    assertSamelitude(new String[] {"cigars", "beer"}, array);
-
-    array.insert(100, "porn");
-    assertSamelitude(new String[] {"cigars", "beer", "porn"}, array);
-
-    array.insert(-1, "profit");
-    assertSamelitude(new String[] {"cigars", "beer", "profit", "porn"}, array);
-  }
-
-  /**
-   * Tests {@link ArrayOf#sort(CanCompare)}.
-   */
-  public void testSortingOfArrays() {
-    final TestItem[] items =
-        new TestItem[] {new TestItem(0), new TestItem(1), new TestItem(2), new TestItem(3)};
-
-    final ArrayOf<TestItem> array = Collections.arrayOf();
-    array.push(items[2]);
-    array.push(items[1]);
-    array.push(items[3]);
-    array.push(items[0]);
-
-    array.sort(new CanCompare<TestItem>() {
-      @Override
-      public int compare(TestItem a, TestItem b) {
-        return a.id() - b.id();
-      }
-    });
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-  }
-
-  /**
-   * Tests {@link ArrayOfInt#sort()} and
-   * {@link ArrayOfInt#sort(CanCompareInt)}.
-   */
-  public void testSortingOfArraysOfInts() {
-    final int[] items = new int[] {0, 1, 2, 3};
-    final ArrayOfInt array = Collections.arrayOfInt();
-    array.push(items[2]);
-    array.push(items[1]);
-    array.push(items[0]);
-    array.push(items[3]);
-
-    array.sort();
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    array.sort(new CanCompareInt() {
-      @Override
-      public int compare(int a, int b) {
-        return b - a;
-      }
-    });
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[n - 1 - i], array.get(i));
-    }
-  }
-
-  /**
-   * Tests {@link ArrayOfNumber#sort()} and
-   * {@link ArrayOfNumber#sort(CanCompareNumber)}.
-   */
-  public void testSortingOfArraysOfNumbers() {
-    final double[] items = new double[] {0.0, 0.1, 0.2, 0.3};
-    final ArrayOfNumber array = Collections.arrayOfNumber();
-    array.push(items[2]);
-    array.push(items[1]);
-    array.push(items[3]);
-    array.push(items[0]);
-
-    array.sort();
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[i], array.get(i), 0.01);
-    }
-
-    array.sort(new CanCompareNumber() {
-      @Override
-      public int compare(double a, double b) {
-        return (a > b) ? -1 : (a < b) ? 1 : 0;
-      }
-    });
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[n - 1 - i], array.get(i), 0.01);
-    }
-  }
-
-  /**
-   * Tests {@link ArrayOfString#sort()} and
-   * {@link ArrayOfString#sort(CanCompareString)}.
-   */
-  public void testSortingOfArraysOfStrings() {
-    final String[] items = new String[] {"aaa", "aab", "baa", "bab"};
-    final ArrayOfString array = Collections.arrayOfString();
-    array.push(items[2]);
-    array.push(items[1]);
-    array.push(items[3]);
-    array.push(items[0]);
-
-    array.sort();
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[i], array.get(i));
-    }
-
-    array.sort(new CanCompareString() {
-      @Override
-      public int compare(String a, String b) {
-        return b.compareTo(a);
-      }
-    });
-    assertEquals(items.length, array.length());
-    for (int i = 0, n = array.length(); i < n; ++i) {
-      assertEquals(items[n - 1 - i], array.get(i));
-    }
-  }
-
-  /**
-   * Tests {@link ArrayOf#splice(int, int)}.
-   */
-  public void testSplicingOfArrays() {
-    final TestItem[] items = new TestItem[] {
-        new TestItem(0), new TestItem(1), new TestItem(2), new TestItem(3), new TestItem(4)};
-
-    final ArrayOf<TestItem> a = arrayFrom(items);
-    assertSamelitude(items, a.splice(0, items.length));
-    assertSamelitude(new TestItem[] {}, a);
-
-    final ArrayOf<TestItem> b = arrayFrom(items);
-    assertSamelitude(new TestItem[] {}, b.splice(0, 0));
-    assertSamelitude(items, b);
-
-    final ArrayOf<TestItem> c = arrayFrom(items);
-    assertSamelitude(new TestItem[] {items[0], items[1]}, c.splice(0, 2));
-    assertSamelitude(new TestItem[] {items[2], items[3], items[4]}, c);
-  }
-
-  /**
-   * Tests {@link ArrayOfBoolean#splice(int, int)}.
-   */
-  public void testSplicingOfArraysOfBooleans() {
-    final boolean[] items = new boolean[] {true, false, true, false, true};
-
-    final ArrayOfBoolean a = arrayFrom(items);
-    assertSamelitude(items, a.splice(0, items.length));
-    assertSamelitude(new boolean[] {}, a);
-
-    final ArrayOfBoolean b = arrayFrom(items);
-    assertSamelitude(new boolean[] {}, b.splice(0, 0));
-    assertSamelitude(items, b);
-
-    final ArrayOfBoolean c = arrayFrom(items);
-    assertSamelitude(new boolean[] {items[0], items[1]}, c.splice(0, 2));
-    assertSamelitude(new boolean[] {items[2], items[3], items[4]}, c);
-  }
-
-  /**
-   * Tests {@link ArrayOfInt#splice(int, int)}.
-   */
-  public void testSplicingOfArraysOfInts() {
-    final int[] items = new int[] {0, 1, 2, 3, 4};
-
-    final ArrayOfInt a = arrayFrom(items);
-    assertSamelitude(items, a.splice(0, items.length));
-    assertSamelitude(new int[] {}, a);
-
-    final ArrayOfInt b = arrayFrom(items);
-    assertSamelitude(new int[] {}, b.splice(0, 0));
-    assertSamelitude(items, b);
-
-    final ArrayOfInt c = arrayFrom(items);
-    assertSamelitude(new int[] {items[0], items[1]}, c.splice(0, 2));
-    assertSamelitude(new int[] {items[2], items[3], items[4]}, c);
-  }
-
-  /**
-   * Tests {@link ArrayOfNumber#splice(int, int)}.
-   */
-  public void testSplicingOfArraysOfNumbers() {
-    final double[] items = new double[] {0.0, 0.01, 0.001, 0.0001, 0.00001};
-
-    final ArrayOfNumber a = arrayFrom(items);
-    assertSamelitude(items, a.splice(0, items.length));
-    assertSamelitude(new double[] {}, a);
-
-    final ArrayOfNumber b = arrayFrom(items);
-    assertSamelitude(new double[] {}, b.splice(0, 0));
-    assertSamelitude(items, b);
-
-    final ArrayOfNumber c = arrayFrom(items);
-    assertSamelitude(new double[] {items[0], items[1]}, c.splice(0, 2));
-    assertSamelitude(new double[] {items[2], items[3], items[4]}, c);
-  }
-
-  /**
-   * Tests {@link ArrayOfString#splice(int, int)}.
-   */
-  public void testSplicingOfArraysOfStrings() {
-    final String[] items =
-        new String[] {"One Gerbil", "Two Gerbil", "Three Gerbil", "Four Gerbil", "Five Gerbil"};
-
-    final ArrayOfString a = arrayFrom(items);
-    assertSamelitude(items, a.splice(0, items.length));
-    assertSamelitude(new String[] {}, a);
-
-    final ArrayOfString b = arrayFrom(items);
-    assertSamelitude(new String[] {}, b.splice(0, 0));
-    assertSamelitude(items, b);
-
-    final ArrayOfString c = arrayFrom(items);
-    assertSamelitude(new String[] {items[0], items[1]}, c.splice(0, 2));
-    assertSamelitude(new String[] {items[2], items[3], items[4]}, c);
-  }
-}
diff --git a/elemental/tests/elemental/js/util/JsGlobalsTests.java b/elemental/tests/elemental/js/util/JsGlobalsTests.java
deleted file mode 100644
index c5f88dc..0000000
--- a/elemental/tests/elemental/js/util/JsGlobalsTests.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package elemental.js.util;
-
-import com.google.gwt.junit.client.GWTTestCase;
-import static elemental.js.util.JsGlobals.*;
-
-/**
- * Tests {@link JsGlobals}.
- */
-public class JsGlobalsTests extends GWTTestCase {
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  public void testBasicInvocations() {
-    assertEquals("chicken dog", decodeURI("chicken%20dog"));
-    assertEquals("dog chicken", decodeURIComponent("dog%20chicken"));
-    assertEquals("chicken%20dog", encodeURI("chicken dog"));
-    assertEquals("dog%20chicken", encodeURIComponent("dog chicken"));
-    
-    assertEquals(2.032, parseFloat("2.032 raincoats"), 0.0001);
-    assertEquals(10, (int)parseInt("10 dogs"));
-    
-    assertTrue(isFinite(2.0));
-    assertFalse(isFinite(parseFloat("butterbean")));
-    
-    assertFalse(isNaN(2.0));
-    assertTrue(isNaN(parseFloat("greenbean")));
-  }
-}
diff --git a/elemental/tests/elemental/js/util/MapFromIntJreTest.java b/elemental/tests/elemental/js/util/MapFromIntJreTest.java
deleted file mode 100644
index 631183a..0000000
--- a/elemental/tests/elemental/js/util/MapFromIntJreTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-/**
- * Run {@link MapFromIntTests} in the JVM
- */
-public class MapFromIntJreTest extends MapFromIntTests {
-
-  @Override
-  public String getModuleName() {
-    return null;
-  }
-}
diff --git a/elemental/tests/elemental/js/util/MapFromIntTests.java b/elemental/tests/elemental/js/util/MapFromIntTests.java
deleted file mode 100644
index 4c2f8c0..0000000
--- a/elemental/tests/elemental/js/util/MapFromIntTests.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import static elemental.js.util.TestUtils.assertSamelitude;
-
-import com.google.gwt.junit.client.GWTTestCase;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfString;
-import elemental.util.CanCompare;
-import elemental.util.Collections;
-import elemental.util.MapFromIntTo;
-import elemental.util.MapFromIntToString;
-
-import java.util.Arrays;
-
-/**
- * Tests {@link MapFromIntTo} and {@link MapFromIntToString}.
- */
-public class MapFromIntTests extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests {@link MapFromIntTo}.
-   */
-  public void testMapsFromInts() {
-    // This is our test subject.
-    final MapFromIntTo<TestItem> map = Collections.mapFromIntTo();
-
-    // These are his keys.
-    final int[] keys = new int[] {1, 2, 3};
-
-    // These are the values for those keys.
-    final TestItem[] vals = new TestItem[] {new TestItem(0), new TestItem(1), new TestItem(2)};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final TestItem[] newVals = new TestItem[] {new TestItem(3), new TestItem(4), new TestItem(5)};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertNull(map.get(keys[0]));
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  /**
-   * Tests {@link MapFromIntToString}.
-   */
-  public void testMapsFromIntstoStrings() {
-    // This is our test subject.
-    final MapFromIntToString map = Collections.mapFromIntToString();
-
-    // These are his keys.
-    final int[] keys = new int[] {1, 2, 3};
-
-    // These are the values for those keys.
-    final String[] vals = new String[] {"val-0", "val-1", "val-2"};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final String[] newVals = new String[] {"val-3", "val-4", "val-5"};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertNull(map.get(keys[0]));
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  private void checkMapContents(MapFromIntTo<TestItem> map, int[] keys, TestItem[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfInt mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOf<TestItem> mapValues = map.values();
-    mapValues.sort(new CanCompare<TestItem>() {
-      @Override
-      public int compare(TestItem a, TestItem b) {
-        return a.compareTo(b);
-      }
-    });
-    assertSamelitude(values, mapValues);
-  }
-
-  private void checkMapContents(MapFromIntToString map, int[] keys, String[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfInt mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOfString mapValues = map.values();
-    mapValues.sort();
-    assertSamelitude(values, mapValues);
-  }
-}
diff --git a/elemental/tests/elemental/js/util/MapFromStringJreTest.java b/elemental/tests/elemental/js/util/MapFromStringJreTest.java
deleted file mode 100644
index 03ecdfb..0000000
--- a/elemental/tests/elemental/js/util/MapFromStringJreTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-/**
- * Run {@link MapFromStringTests} in the JVM
- */
-public class MapFromStringJreTest extends MapFromStringTests {
-
-  @Override
-  public String getModuleName() {
-    return null;
-  }
-}
diff --git a/elemental/tests/elemental/js/util/MapFromStringTests.java b/elemental/tests/elemental/js/util/MapFromStringTests.java
deleted file mode 100644
index 468eb41..0000000
--- a/elemental/tests/elemental/js/util/MapFromStringTests.java
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import static elemental.js.util.TestUtils.assertSamelitude;
-
-import com.google.gwt.junit.client.GWTTestCase;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfBoolean;
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfNumber;
-import elemental.util.ArrayOfString;
-import elemental.util.CanCompare;
-import elemental.util.Collections;
-import elemental.util.MapFromStringTo;
-import elemental.util.MapFromStringToBoolean;
-import elemental.util.MapFromStringToInt;
-import elemental.util.MapFromStringToNumber;
-import elemental.util.MapFromStringToString;
-
-import java.util.Arrays;
-
-/**
- * Tests {@link MapFromStringTo}, {@link MapFromStringToBoolean},
- * {@link MapFromStringToInt}, {@link MapFromStringToNumber} and
- * {@link MapFromStringToString}.
- */
-public class MapFromStringTests extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests {@link MapFromStringTo}.
-   */
-  public void testMapsFromString() {
-    // This is our test subject.
-    final MapFromStringTo<TestItem> map =  Collections.mapFromStringTo();
-
-    // These are his keys.
-    final String[] keys = new String[] {"key-1", "key-2", "key-3"};
-
-    // These are the values for those keys.
-    final TestItem[] vals = new TestItem[] {new TestItem(0), new TestItem(1), new TestItem(2)};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final TestItem[] newVals = new TestItem[] {new TestItem(3), new TestItem(4), new TestItem(5)};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertNull(map.get(keys[0]));
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  /**
-   * Tests {@link MapFromStringToInt}.
-   */
-  public void testMapsFromStringsToInts() {
-    // This is our test subject.
-    final MapFromStringToInt map = Collections.mapFromStringToInt();
-
-    // These are his keys.
-    final String[] keys = new String[] {"key-1", "key-2", "key-3"};
-
-    // These are the values for those keys.
-    final int[] vals = new int[] {0, 1, 2};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final int[] newVals = new int[] {3, 4, 5};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  /**
-   * Tests {@link MapFromStringToNumber}.
-   */
-  public void testMapsFromStringsToNumbers() {
-    // This is our test subject.
-    final MapFromStringToNumber map = Collections.mapFromStringToNumber();
-
-    // These are his keys.
-    final String[] keys = new String[] {"key-1", "key-2", "key-3"};
-
-    // These are the values for those keys.
-    final double[] vals = new double[] {0.0, 1.0, 2.0};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final double[] newVals = new double[] {3.0, 4.0, 5.0};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  /**
-   * Tests {@link MapFromStringToString}.
-   */
-  public void testMapsFromStringsToStrings() {
-    // This is our test subject.
-    final MapFromStringToString map = Collections.mapFromStringToString();
-
-    // These are his keys.
-    final String[] keys = new String[] {"key-1", "key-2", "key-3"};
-
-    // These are the values for those keys.
-    final String[] vals = new String[] {"val-0", "val-1", "val-2"};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final String[] newVals = new String[] {"val-3", "val-4", "val-5"};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertNull(map.get(keys[0]));
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  /**
-   * Tests {@link MapFromStringToBoolean}.
-   */
-  public void testsMapFromStringsToBooleans() {
-    // This is our test subject.
-    final MapFromStringToBoolean map = Collections.mapFromStringToBoolean();
-
-    // These are his keys.
-    final String[] keys = new String[] {"key-1", "key-2", "key-3"};
-
-    // These are the values for those keys.
-    final boolean[] vals = new boolean[] {true, false, true};
-
-    // Let's put those values in.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], vals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(vals[i], map.get(keys[i]));
-    }
-
-    // These are some new values.
-    final boolean[] newVals = new boolean[] {false, true, false};
-
-    // Let's update those keys, ok.
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      map.put(keys[i], newVals[i]);
-    }
-
-    // Are they all in the right place?
-    for (int i = 0, n = keys.length; i < n; ++i) {
-      assertTrue(map.hasKey(keys[i]));
-      assertEquals(newVals[i], map.get(keys[i]));
-    }
-
-    checkMapContents(map, keys, newVals);
-
-    // Let's remove a key, did it go away?
-    map.remove(keys[0]);
-    assertFalse(map.hasKey(keys[0]));
-  }
-
-  private void checkMapContents(MapFromStringToBoolean map, String[] keys, boolean[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfString mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    // We can't sort boolean array so we just compare true values count.
-    ArrayOfBoolean mapValues = map.values();
-    assertEquals(values.length, mapValues.length());
-    int expectedTrueCount = 0;
-    int actualTrueCount = 0;
-    for (int i = 0; i < values.length; i++) {
-      if (values[i]) {
-        expectedTrueCount++;
-      }
-      if (mapValues.get(i)) {
-        actualTrueCount++;
-      }
-    }
-    assertEquals(expectedTrueCount, actualTrueCount);
-  }
-
-  private void checkMapContents(MapFromStringToNumber map, String[] keys, double[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfString mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOfNumber mapValues = map.values();
-    mapValues.sort();
-    assertSamelitude(values, mapValues);
-  }
-
-  private void checkMapContents(MapFromStringToInt map, String[] keys, int[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfString mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOfInt mapValues = map.values();
-    mapValues.sort();
-    assertSamelitude(values, mapValues);
-  }
-
-  private void checkMapContents(MapFromStringTo<TestItem> map, String[] keys, TestItem[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfString mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOf<TestItem> mapValues = map.values();
-    mapValues.sort(new CanCompare<TestItem>() {
-      @Override
-      public int compare(TestItem a, TestItem b) {
-        return a.compareTo(b);
-      }
-    });
-    assertSamelitude(values, mapValues);
-  }
-
-  private void checkMapContents(MapFromStringToString map, String[] keys, String[] values) {
-    keys = Arrays.copyOf(keys, keys.length);
-    Arrays.sort(keys);
-    ArrayOfString mapKeys = map.keys();
-    mapKeys.sort();
-    assertSamelitude(keys, mapKeys);
-
-    values = Arrays.copyOf(values, values.length);
-    Arrays.sort(values);
-    ArrayOfString mapValues = map.values();
-    mapValues.sort();
-    assertSamelitude(values, mapValues);
-  }
-}
diff --git a/elemental/tests/elemental/js/util/StringUtilTests.java b/elemental/tests/elemental/js/util/StringUtilTests.java
deleted file mode 100644
index 846c5ec..0000000
--- a/elemental/tests/elemental/js/util/StringUtilTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-import com.google.gwt.junit.client.GWTTestCase;
-import elemental.util.ArrayOfString;
-
-/**
- * Tests {@link StringUtil}.
- *
- */
-public class StringUtilTests extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  private static void assertSame(String[] expected, ArrayOfString result) {
-    assertEquals(expected.length, result.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], result.get(i));
-    }
-  }
-
-  /**
-   * Tests {@link StringUtil#split(String, String)} and
-   * {@link StringUtil#split(String, String, int)}.
-   */
-  public void testSplit() {
-    assertSame(
-        new String[] {"abc", "", "", "de", "f", "", ""}, StringUtil.split("abcxxxdexfxx", "x"));
-    assertSame(new String[] {"a", "b", "c", "x", "x", "d", "e", "x", "f", "x"},
-        StringUtil.split("abcxxdexfx", ""));
-    final String booAndFoo = "boo:and:foo";
-    assertSame(new String[] {"boo", "and"}, StringUtil.split(booAndFoo, ":", 2));
-    assertSame(new String[] {"boo", "and", "foo"}, StringUtil.split(booAndFoo, ":", 5));
-    assertSame(new String[] {"boo", "and", "foo"}, StringUtil.split(booAndFoo, ":", -2));
-    assertSame(new String[] {"", ""}, StringUtil.split("/", "/"));
-    assertSame(new String[] {""}, StringUtil.split("", ","));
-  }
-}
diff --git a/elemental/tests/elemental/js/util/TestItem.java b/elemental/tests/elemental/js/util/TestItem.java
deleted file mode 100644
index d194889..0000000
--- a/elemental/tests/elemental/js/util/TestItem.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.js.util;
-
-/**
- * A simple object for testing collections.
- */
-public class TestItem implements Comparable<TestItem> {
-  private final int id;
-
-  public TestItem(int id) {
-    this.id = id;
-  }
-
-  @Override
-  public int compareTo(TestItem other) {
-    return (id < other.id) ? -1 : (id == other.id ? 0 : 1);
-  }
-
-  public int id() {
-    return id;
-  }
-
-  @Override
-  public String toString() {
-    return "item" + id;
-  }
-}
diff --git a/elemental/tests/elemental/js/util/TestUtils.java b/elemental/tests/elemental/js/util/TestUtils.java
deleted file mode 100644
index 0fe5308..0000000
--- a/elemental/tests/elemental/js/util/TestUtils.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package elemental.js.util;
-
-import static junit.framework.Assert.assertEquals;
-
-import elemental.util.ArrayOf;
-import elemental.util.ArrayOfBoolean;
-import elemental.util.ArrayOfInt;
-import elemental.util.ArrayOfNumber;
-import elemental.util.ArrayOfString;
-
-/**
- * Static test utilities for the tests in this package.
- */
-class TestUtils {
-  static void assertSamelitude(boolean[] expected, ArrayOfBoolean values) {
-    assertEquals(expected.length, values.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], values.get(i));
-    }
-  }
-
-  static void assertSamelitude(double[] expected, ArrayOfNumber values) {
-    assertEquals(expected.length, values.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], values.get(i));
-    }
-  }
-
-  static void assertSamelitude(int[] expected, ArrayOfInt values) {
-    assertEquals(expected.length, values.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], values.get(i));
-    }
-  }
-
-  static void assertSamelitude(String[] expected, ArrayOfString values) {
-    assertEquals(expected.length, values.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], values.get(i));
-    }
-  }
-
-  static void assertSamelitude(TestItem[] expected, ArrayOf<TestItem> values) {
-    assertEquals(expected.length, values.length());
-    for (int i = 0, n = expected.length; i < n; ++i) {
-      assertEquals(expected[i], values.get(i));
-    }
-  }
-
-  private TestUtils() {
-  }
-}
diff --git a/elemental/tests/elemental/json/JsonUtilJreTest.java b/elemental/tests/elemental/json/JsonUtilJreTest.java
deleted file mode 100644
index fa87895..0000000
--- a/elemental/tests/elemental/json/JsonUtilJreTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-/**
- * Run {@link JsonUtilTest} in the JVM
- */
-public class JsonUtilJreTest extends JsonUtilTest {
-
-  @Override
-  public String getModuleName() {
-    return null;
-  }
-
-  @Override
-  public void testNative() {
-    // No native things to test in JRE
-  }
-}
diff --git a/elemental/tests/elemental/json/JsonUtilTest.java b/elemental/tests/elemental/json/JsonUtilTest.java
deleted file mode 100755
index ac887a5..0000000
--- a/elemental/tests/elemental/json/JsonUtilTest.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.json;
-
-import com.google.gwt.junit.DoNotRunWith;
-import com.google.gwt.junit.Platform;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import elemental.json.impl.JsonUtil;
-
-/**
- * Tests for {@link JsonUtil}
- */
-@DoNotRunWith(Platform.Prod)
-public class JsonUtilTest extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  public void testCoercions() {
-    // test boolean coercions
-    JsonBoolean boolTrue = Json.create(true);
-    JsonBoolean boolFalse = Json.create(false);
-    // true -> 1, false -> 0
-    assertEquals(true, boolTrue.asBoolean());
-    assertEquals(false, boolFalse.asBoolean());
-
-    JsonString trueString = Json.create("true");
-    JsonString falseString = Json.create("");
-    // "" -> false, others true
-    assertEquals(true, trueString.asBoolean());
-    assertEquals(false, falseString.asBoolean());
-
-    // != 0 -> true, otherwise if 0.0 or -0.0 false
-    JsonNumber trueNumber = Json.create(1.0);
-    JsonNumber falseNumber = Json.create(0.0);
-    JsonNumber falseNumber2 = Json.create(-0.0);
-    assertEquals(true, trueNumber.asBoolean());
-    assertEquals(false, falseNumber.asBoolean());
-    assertEquals(false, falseNumber2.asBoolean());
-
-    // array or object is true
-    assertEquals(true, Json.createArray().asBoolean());
-    assertEquals(true, Json.createObject().asBoolean());
-
-    // null is false
-    assertEquals(false, Json.createNull().asBoolean());
-
-    // test number coercions
-    assertEquals(1.0, boolTrue.asNumber());
-    assertEquals(0.0, boolFalse.asNumber());
-
-    assertEquals(42.0, Json.create("42").asNumber());
-    // non numbers are NaN
-    assertTrue(Double.isNaN(trueString.asNumber()));
-    // null is 0
-    assertEquals(0.0, Json.createNull().asNumber());
-    // "" is 0
-    assertEquals(0.0, falseString.asNumber());
-
-    // [] -> 0
-    assertEquals(0.0, Json.createArray().asNumber());
-    // [[42]] -> 42
-    JsonArray nested = Json.createArray();
-    JsonArray outer = Json.createArray();
-    outer.set(0, nested);
-    nested.set(0, 42);
-    assertEquals(42.0, outer.asNumber());
-
-    // [[42, 45]] -> NaN
-    nested.set(1, 45);
-    assertTrue(Double.isNaN(outer.asNumber()));
-
-    // object -> NaN
-    assertTrue(Double.isNaN(Json.createObject().asNumber()));
-
-
-    // test string coercions
-    assertEquals("true", boolTrue.asString());
-    assertEquals("false", boolFalse.asString());
-    assertEquals("true", trueString.asString());
-
-    assertEquals("null", Json.createNull().asString());
-    assertEquals("42", Json.create(42).asString());
-
-    // [[42, 45], [52, 55]] -> "42, 45, 52, 55"
-    JsonArray inner2 = Json.createArray();
-    inner2.set(0, 52);
-    inner2.set(1, 55);
-    outer.set(1, inner2);
-    assertEquals("42, 45, 52, 55", outer.asString());
-
-    // object -> [object Object]
-    assertEquals("[object Object]", Json.createObject().asString());
-  }
-  
-  public void testEscapeControlChars() {
-    String unicodeString = "\u2060Test\ufeffis a test\u17b5";
-    assertEquals("\\u2060Test\\ufeffis a test\\u17b5",
-        JsonUtil.escapeControlChars(unicodeString));
-  }
-
-  public void testIllegalParse() {
-    try {
-      JsonUtil.parse("{ \"a\": new String() }");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedString() {
-    try {
-      JsonUtil.parse("\"a");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedEmptyString() {
-    try {
-      JsonUtil.parse("\"");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedArray() {
-    try {
-      JsonUtil.parse("[1");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedEmptyArray() {
-    try {
-      JsonUtil.parse("[");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedObject() {
-    try {
-      JsonUtil.parse("{'a");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-    try {
-      JsonUtil.parse("{'a'");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-    try {
-      JsonUtil.parse("{'a':");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testUnclosedEmptyObject() {
-    try {
-      JsonUtil.parse("{");
-      fail("Expected JsonException to be thrown");
-    } catch (JsonException je) {
-      // Expected
-    }
-  }
-
-  public void testLegalParse() {
-    JsonValue obj = JsonUtil.parse(
-        "{ \"a\":1, \"b\":\"hello\", \"c\": true,"
-            + "\"d\": null, \"e\": [1,2,3,4], \"f\": {} }");
-    assertNotNull(obj);
-  }
-
-  public void testNative() {
-    JsonObject obj = Json.createObject();
-    obj.put("x", 42);
-    Object nativeObj = obj.toNative();
-
-    JsonObject result = nativeMethod(nativeObj);
-    assertEquals(43.0, result.get("y").asNumber());
-  }
-
-  public void testQuote() {
-    String badString = "\bThis\"is\ufeff\ta\\bad\nstring\u2029\u2029";
-    assertEquals("\"\\bThis\\\"is\\ufeff\\ta\\\\bad\\nstring"
-        + "\\u2029\\u2029\"", JsonUtil.quote(badString));
-  }
-
-  public void testStringify() {
-    String json = "{\"a\":1,\"b\":\"hello\",\"c\":true,"
-        + "\"d\":null,\"e\":[1,2,3,4],\"f\":{\"x\":1}}";
-    assertEquals(json, JsonUtil.stringify(JsonUtil.parse(json)));
-  }
-
-  public void testStringifyCycle() {
-    String json = "{\"a\":1,\"b\":\"hello\",\"c\":true,"
-        + "\"d\":null,\"e\":[1,2,3,4],\"f\":{\"x\":1}}";
-    JsonObject obj = JsonUtil.parse(json);
-    obj.put("cycle", obj);
-    try {
-      elemental.json.impl.JsonUtil.stringify(obj);
-      fail("Expected JsonException for object cycle");
-    } catch (JsonException je) {
-    }
-  }
- 
-  public void testStringifyIndent() {
-    // test string taken from native Chrome window.JSON.stringify
-    String json = "{\n" + "  \"a\": 1,\n" + "  \"b\": \"hello\",\n"
-        + "  \"c\": true,\n" + "  \"d\": null,\n" + "  \"e\": [\n" + "    1,\n"
-        + "    2,\n" + "    3,\n" + "    4\n" + "  ],\n" + "  \"f\": {\n"
-        + "    \"x\": 1\n" + "  }\n" + "}";
-    assertEquals(json, JsonUtil.stringify(JsonUtil.parse(json), 2));
-  }
-
-  public void testStringifyNonCycle() {
-    String json = "{\"a\":1,\"b\":\"hello\",\"c\":true,"
-        + "\"d\":null,\"e\":[1,2,3,4],\"f\":{\"x\":1}}";
-    JsonObject obj = JsonUtil.parse(json);
-    JsonObject obj2 = JsonUtil.parse("{\"x\": 1, \"y\":2}");
-    obj.put("nocycle", obj2);
-    obj.put("nocycle2", obj2);
-    try {
-      JsonUtil.stringify(obj);
-    } catch (JsonException je) {
-      fail("JsonException for object cycle when none exists: " + je);
-    }
-  }
-
-  public void testStringifyOrder() {
-
-    JsonObject obj = Json.instance().createObject();
-    obj.put("x", "hello");
-    obj.put("a", "world");
-    obj.put("2", 21);
-    obj.put("1", 42);
-    // numbers come first, in ascending order, non-numbers in order of assignment
-    assertEquals("{\"1\":42,\"2\":21,\"x\":\"hello\",\"a\":\"world\"}",
-        obj.toJson());
-  }
-
-  public void testStringifySkipKeys() {
-    String expectedJson = "{\"a\":1,\"b\":\"hello\",\"c\":true," 
-        + "\"d\":null,\"e\":[1,2,3,4],\"f\":{\"x\":1}}";
-    String json = "{\"a\":1,\"b\":\"hello\",\"c\":true,"
-        + "\"$H\": 1,"
-        + "\"__gwt_ObjectId\": 1,"
-        + "\"d\":null,\"e\":[1,2,3,4],\"f\":{\"x\":1}}";
-    assertEquals(expectedJson, JsonUtil.stringify(
-        JsonUtil.parse(json)));
-  }
-
-  public void testStringifyDoubleNanInfinity() {
-    JsonNumber json = Json.create(Double.NaN);
-    assertEquals("null",JsonUtil.stringify(json));
-    json = Json.create(Double.POSITIVE_INFINITY);
-    assertEquals("null",JsonUtil.stringify(json));
-    json = Json.create(Double.NEGATIVE_INFINITY);
-    assertEquals("null",JsonUtil.stringify(json));
-  }
-
-  public void testJsonNumberToJsonDoubleNanInfinity() {
-    JsonNumber json = Json.create(Double.NaN);
-    assertEquals("null",json.toJson());
-    json = Json.create(Double.POSITIVE_INFINITY);
-    assertEquals("null",json.toJson());
-    json = Json.create(Double.NEGATIVE_INFINITY);
-    assertEquals("null",json.toJson());
-  }
-
-  private native JsonObject nativeMethod(Object o) /*-{
-    o.y = o.x + 1;
-    return o;
-  }-*/;
-
-  public void testQuoteCharacters() {
-    // See spec at https://tools.ietf.org/html/rfc7159
-    for (int i = 0; i < 0xffff; i++) {
-      String unencodedString = String.valueOf((char) i);
-      String res = JsonUtil.quote(unencodedString);
-      if (res.equals("\"" + unencodedString + "\"")) {
-        // passed through unescaped
-        if (i == 0x20 || i == 0x21 || (i >= 0x23 && i <= 0x5b)
-          || i >= 0x5d) {
-            // ok for %x20-21 / %x23-5B / %x5D-10FFFF
-        } else {
-          fail("Character " + i + " must be escaped in JSON");
-        }
-      } else {
-        // Was escaped, should be in format \\X or \\uXXXX
-        if (res.length() == 4) {
-          // "\\X"
-          char escapedChar = res.charAt(2);
-          // btnfr\"
-          if (escapedChar == 'b') {
-            assertEquals('\b',i);
-          } else if (escapedChar == 't') {
-            assertEquals('\t',i);
-          } else if (escapedChar == 'n') {
-            assertEquals('\n',i);
-          } else if (escapedChar == 'f') {
-            assertEquals('\f',i);
-          } else if (escapedChar == 'r') {
-            assertEquals('\r',i);
-          } else if (escapedChar == '"') {
-            assertEquals('"',i);
-          } else if (escapedChar == '\\') {
-            assertEquals('\\',i);
-          } else {
-            fail("Character" + i + " was unexpectedly escaped as "+escapedChar);
-          }
-        } else {
-          assertTrue("Character " + i + " was incorrectly encoded as " +
-            res,res.matches("\"\\\\u....\""));
-        }
-      }
-    }
-  }
-}
diff --git a/elemental/tests/elemental/json/impl/JsonSerializationJreTest.java b/elemental/tests/elemental/json/impl/JsonSerializationJreTest.java
deleted file mode 100644
index 8ba23da..0000000
--- a/elemental/tests/elemental/json/impl/JsonSerializationJreTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package elemental.json.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import junit.framework.TestCase;
-import elemental.json.Json;
-import elemental.json.JsonArray;
-import elemental.json.JsonNull;
-import elemental.json.JsonObject;
-import elemental.json.JsonValue;
-
-public class JsonSerializationJreTest extends TestCase {
-
-  public void testSerializeNull() throws Exception {
-    JsonNull null1 = Json.createNull();
-    JsonNull null2 = Json.createNull();
-    JsonValue out = serializeDeserialize(null1);
-    assertJsonEquals(null1, out);
-    assertSame(null1, out);
-    assertSame(null2, out);
-    assertSame(JreJsonNull.NULL_INSTANCE, out);
-  }
-
-  public void testSerializeObject() throws Exception {
-    JsonObject foo = Json.createObject();
-    foo.put("true", true);
-    foo.put("string", "string");
-    foo.put("number", 1.25);
-
-    JsonObject subObject = Json.createObject();
-    subObject.put("false", false);
-    subObject.put("string2", "string2");
-    subObject.put("number", -151);
-
-    JsonArray subArray = Json.createArray();
-    subArray.set(0, true);
-    subArray.set(1, 1);
-    subArray.set(2, "2");
-
-    foo.put("object", subObject);
-    foo.put("array", subArray);
-    foo.put("null", Json.createNull());
-
-    assertJsonEqualsAfterSerialization(foo);
-  }
-
-  public void testSerializeArray() throws Exception {
-    JsonObject subObject = Json.createObject();
-    subObject.put("false", false);
-    subObject.put("string2", "string2");
-    subObject.put("number", -151);
-
-    JsonArray subArray = Json.createArray();
-    subArray.set(0, true);
-    subArray.set(1, 1);
-    subArray.set(2, "2");
-
-    JsonArray array = Json.createArray();
-    array.set(0, true);
-    array.set(1, false);
-    array.set(2, 2);
-    array.set(3, "3");
-    array.set(4, subObject);
-    array.set(5, subArray);
-
-    assertJsonEqualsAfterSerialization(array);
-  }
-
-  public void testSerializeBoolean() throws Exception {
-    assertJsonEqualsAfterSerialization(Json.create(true));
-    assertJsonEqualsAfterSerialization(Json.create(false));
-  }
-
-  public void testSerializeString() throws Exception {
-    assertJsonEqualsAfterSerialization(Json.create("foo"));
-    assertJsonEqualsAfterSerialization(Json.create(""));
-  }
-
-  public void testSerializeNumber() throws Exception {
-    assertJsonEqualsAfterSerialization(Json.create(0));
-    assertJsonEqualsAfterSerialization(Json.create(-1.213123123));
-  }
-
-  private <T extends Serializable & JsonValue> void assertJsonEqualsAfterSerialization(
-      T in) throws Exception {
-    T out = serializeDeserialize(in);
-    assertNotSame(in, out);
-    assertJsonEquals(in, out);
-  }
-
-  private void assertJsonEquals(JsonValue a, JsonValue b) {
-    assertEquals(a.toJson(), b.toJson());
-  }
-
-  @SuppressWarnings("unchecked")
-  public <T extends Serializable & JsonValue> T serializeDeserialize(
-      T originalJsonValue) throws Exception {
-    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-    ObjectOutputStream out = new ObjectOutputStream(buffer);
-    out.writeObject(originalJsonValue);
-    out.close();
-
-    ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(
-        buffer.toByteArray()));
-    T processedJsonValue = (T) in.readObject();
-    in.close();
-    return processedJsonValue;
-  }
-
-}
diff --git a/elemental/tests/elemental/util/TimerTest.java b/elemental/tests/elemental/util/TimerTest.java
deleted file mode 100644
index dc5759a..0000000
--- a/elemental/tests/elemental/util/TimerTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package elemental.util;
-
-import com.google.gwt.junit.client.GWTTestCase;
-
-/**
- * Tests for {@link Timer}.
- */
-public class TimerTest extends GWTTestCase {
-
-  @Override
-  public String getModuleName() {
-    return "elemental.Elemental";
-  }
-
-  /**
-   * Tests that {@link Timer#schedule(int)} works.
-   */
-  public void testTimeout() {
-    new Timer() {
-      @Override
-      public void run() {
-        finishTest();
-      }
-    }.schedule(500);
-
-    delayTestFinish(2000);
-  }
-
-  /**
-   * Tests that {@link Timer#scheduleRepeating(int)} works repeatedly.
-   */
-  public void testInterval() {
-    new Timer() {
-      int count;
-
-      @Override
-      public void run() {
-        // Make sure we see at least two events.
-        ++count;
-        if (count >= 2) {
-          cancel();
-          finishTest();
-        }
-      }
-    }.scheduleRepeating(100);
-
-    delayTestFinish(2000);
-  }
-}
diff --git a/maven/lib-gwt.sh b/maven/lib-gwt.sh
index 8d504db..bd10e2d 100644
--- a/maven/lib-gwt.sh
+++ b/maven/lib-gwt.sh
@@ -76,11 +76,7 @@
     popd > /dev/null
   done
 
-  # Silently skip Elemental if it doesn't exist
   gwtLibs='dev user servlet codeserver'
-  if [ -f $GWT_EXTRACT_DIR/gwt-elemental.jar ]; then
-    gwtLibs="${gwtLibs} elemental"
-  fi
 
   echo "Removing bundled third-parties from gwt-dev"
   zip -q $GWT_EXTRACT_DIR/gwt-dev.jar --copy --out $GWT_EXTRACT_DIR/gwt-dev-trimmed.jar \
diff --git a/maven/poms/gwt/gwt-elemental/pom-template.xml b/maven/poms/gwt/gwt-elemental/pom-template.xml
deleted file mode 100644
index 3292cc2..0000000
--- a/maven/poms/gwt/gwt-elemental/pom-template.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.google.gwt</groupId>
-        <artifactId>gwt</artifactId>
-        <version>${gwtVersion}</version>
-    </parent>
-    <groupId>com.google.gwt</groupId>
-    <artifactId>gwt-elemental</artifactId>
-    <packaging>jar</packaging>
-    <version>${gwtVersion}</version>
-
-    <dependencies>
-      <dependency>
-        <groupId>com.google.gwt</groupId>
-        <artifactId>gwt-user</artifactId>
-      </dependency>
-    </dependencies>
-</project>
diff --git a/maven/poms/gwt/pom-template.xml b/maven/poms/gwt/pom-template.xml
index fd01c1c..3bd4042 100644
--- a/maven/poms/gwt/pom-template.xml
+++ b/maven/poms/gwt/pom-template.xml
@@ -47,11 +47,6 @@
                 <version>${project.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.google.gwt</groupId>
-                <artifactId>gwt-elemental</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
                 <groupId>com.google.web.bindery</groupId>
                 <artifactId>requestfactory</artifactId>
                 <version>${project.version}</version>
